Pulsanti e PIC16F84A

12 Anni 3 Settimane fa - 12 Anni 3 Settimane fa #1 da mikysmcv
Pulsanti e PIC16F84A è stato creato da mikysmcv
Buonasera a tutti, sto provando i vari esempi proposti dal libro che sto studiando sul PIC16F84A e la sua programmazione in assembler, e sono arrivato al'esempio di input da tastiera, in particolare il programma prevede una tastiera di 4 pulsanti collegati alle linee RB4-RB5-RB6-RB7 come linee di input, e prevede che un led si accende alla pressione di un tasto.

Il mio problema è il seguente sto utilizzando il simulatore PIC Simulator IDE ma questo non prevede dei pulsanti ma solo una tastiera a matrice di cui riporto una foto:




E' possibile adattare questa tastiera al mio scopo settando in qualche modo le varie linee?

Grazie per l'eventuale aiuto.
Allegati:
Ultima Modifica 12 Anni 3 Settimane fa da mikysmcv.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • mikysmcv
  • Avatar di mikysmcv
  • Premium Member
  • Premium Member
Di più
12 Anni 3 Settimane fa #2 da Matteo Garia
Risposta da Matteo Garia al topic Re: Pulsanti e PIC16F84A
Ciao,
vado a memoria di quando usavo quel simulatore: dovrebbe esserci "microcontroller view" tra gli strumenti, ti apre l'immagine schematica del pic con tute le porte.
Cliccando su una porta puoi metterla a 0,1 o ad un valore analogico a seconda di com'è impostata.
Matteo
Ringraziano per il messaggio: mikysmcv

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Matteo Garia
  • Avatar di Matteo Garia
  • Moderator
  • Moderator
Di più
12 Anni 3 Settimane fa - 12 Anni 3 Settimane fa #3 da mikysmcv
Risposta da mikysmcv al topic Re: Pulsanti e PIC16F84A
Prima di tutto grazie per la tua sempre tempestiva disponibilità :), detto ciò a dire il vero già avevo provato questa soluzione e se ad esempio dalla schermata "microcontroller view" settavo ad ON una delle 4 linee RB4-RB7 vedevo che uno dei led corrispondenti a quel pulsante non si accendevano più e si accendeva il led corrispondente a tale linea.
Però questo conportamento è un pò anomalo in base al codice, che adesso riporto per chiarezza:

PROCESSOR 16F84
RADIX DEC
INCLUDE "P16F84.INC"

;Setup of PIC configuration flags
;XT oscillator
;Disable watch dog timer
;Enable power up timer
;Disable code protect

__CONFIG 3FF1H

LED1 EQU 0
LED2 EQU 1
LED3 EQU 2
LED4 EQU 3
SW1 EQU 4
SW2 EQU 5
SW3 EQU 6
SW4 EQU 7

ORG 0CH
;Reset Vector
;Punto di inizio del programma al reset della CPU
ORG 00H

;Commuta sul secondo banco dei registri per accedere ai registri TRISA e TRISB
bsf STATUS,RP0

;Definizione delle linee di I/O (0=Uscita, 1=Ingresso)
;Definizione della porta A
movlw 00011111B
movwf TRISA & 7FH

;Definizione della porta B
;Le linee da RB0 a RB3 vengono programmate in uscita per essere collegate ai quattro led
;Le linee da RB4 a RB7 vengono programmate in ingresso per essere collegate ai quattro pulsanti
movlw 11110000B
movwf TRISB & 7FH

;Commuta sul primo banco dei registri
bcf STATUS,RP0

MainLoop
;Spegne tutti i led
clrf PORTB
;Se e' premuto il pulsante SW1 accende il LED1
btfss PORTB,SW1
bsf PORTB,LED1
;Se e' premuto il pulsante SW2 accende il LED2
btfss PORTB,SW2
bsf PORTB,LED2
;Se e' premuto il pulsante SW3 accende il LED3
btfss PORTB,SW3
bsf PORTB,LED3
;Se e' premuto il pulsante SW4 accende il LED4
btfss PORTB,SW4
bsf PORTB,LED4
goto MainLoop
END



Ad esempio se come nell'immagine seguente:



metto ad ON RB7 il led collegato alla linea 3 non mi si accende più (sullo strumento che riporta gli 8 led) però mi si accende il led collegato alla linea 7.

Non riesco a capire il perchè accade ciò :(
Allegati:
Ultima Modifica 12 Anni 3 Settimane fa da mikysmcv.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • mikysmcv
  • Avatar di mikysmcv
  • Premium Member
  • Premium Member
Di più
12 Anni 3 Settimane fa - 12 Anni 3 Settimane fa #4 da mikysmcv
Risposta da mikysmcv al topic Re: Pulsanti e PIC16F84A
Allora ho rivisto un pò il tutto, il fatto che il quarto LED non si accenda è normale in quanto visto che adesso RB7 è ad ON e quindi vale 1, l'istruzione:

btfss PORTB,SW4

quando va a controllare il bit 7 trova questo sempre ad 1 per ogni ciclo e quindi salta sempre l'istruzione successiva, ovvero:

bsf PORTB,LED4

la quale dovrebbe far accendere il quarto led.
Fino a questo punto ragiono in modo corretto o sbaglio qualcosa?

Se ciò che ho detto è giusto, non riesco però a capire il perchè si accenda quel led collegato alla linea RB7 in quanto questa è stata settata come ingresso all'inizio del programma, grazie all'istruzione:

movlw 11110000B
movwf TRISB & 7FH

quindi se è un ingresso non si dovrebbe accendere quel led, o mi sbaglio?
Ultima Modifica 12 Anni 3 Settimane fa da mikysmcv.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • mikysmcv
  • Avatar di mikysmcv
  • Premium Member
  • Premium Member
Di più
12 Anni 3 Settimane fa #5 da Matteo Garia
Risposta da Matteo Garia al topic Re: Pulsanti e PIC16F84A
Ciao,
mi spiace, in assembler non ti so aiutare, non l'ho mai imparato (pic simulator lo usavo a scuola in basic)

Matteo

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Matteo Garia
  • Avatar di Matteo Garia
  • Moderator
  • Moderator
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login