|
Autore |
Messaggio |
opzioni |
fabio1977
postato il: 10.09.2019, alle ore 20:49 |
Quindi uso il timer 0 per leggere l ingressi A e B dell encoder? |
|
caccamo2
postato il: 10.09.2019, alle ore 21:03 |
no quindi usi l'interrupt per leggere l'encoder. Se vuoi decodificare via hardware o usi un micro con decoder quadratura o te ne fai uno con flip flop e porte logiche..
... |
|
pippodue
postato il: 10.09.2019, alle ore 21:14 |
Vuoi dire usi l'interrupt del timer o gli interrupt del tipo "change notification" ?
(l'OP non conosce il C come io non conosco il pic)
anche i grandi uomini, come gli uomini comuni, possono talvolta cadere in errore (Voltaire) |
|
fabio1977
postato il: 10.09.2019, alle ore 21:16 |
http://www.grix.it/viewer.php?page=10667
Questo dovrebbe andare bene |
|
rcc.roberto
[pagine pubblicate]
postato il: 10.09.2019, alle ore 21:25 |
Il codice bisogna che lo scrivi tu! Poi se non funziona lo pubblichi che qualcuno lo correggerà .
Come ti ha detto caccamo, bisogna che usi gli interrupt, altrimenti salti delle letture e ti ritrovi con situazioni sbagliate.
Per quanto riguarda i rimbalzi, li puoi eliminare via software, dopo che hai fatto la lettura, la ripeti immediatamente altre due o tre volte, se è sempre uguale OK, altrimenti sono rimbalzi.
Tieni conto anche della velocità del programma, se hai bisogno di velocità devi scrivere in Assembler, altrimenti, coi compilatori rallenti molto.
Prima di scrivere il codice, bisogna che ti costruisci una tabellina delle situazioni.
Esempio:
Parti dalla situazione:
A=0 B=0
Alla successiva lettura potrai avere o
A=1 B=0 oppure A=0 B=1
prendiamo il primo, assegnandogli rotazione CW
Alla lettura successiva potrai avere
A=1 B=1 oppure A=0 B=0
nel primo caso sarà ancora rotazione CW, nel secondo CCW
continuiamo col primo, successivamente potrà essere:
A=0 B=1 oppure A=1 B=0
e ancora nel primo caso sarà ancora rotazione CW, nel secondo CCW
E via così...
|
|
caccamo2
postato il: 11.09.2019, alle ore 09:29 |
pippodue: Vuoi dire usi l'interrupt del timer o gli interrupt del tipo change notification?
(l'OP non conosce il C come io non conosco il pic)
La seconda che hai detto
... |
|
pippodue
postato il: 11.09.2019, alle ore 10:15 |
A questo punto direi che le risposte non mancano, l'OP ha modo (anzi, modi) di procedere.
anche i grandi uomini, come gli uomini comuni, possono talvolta cadere in errore (Voltaire) |
|
MB54
postato il: 11.09.2019, alle ore 11:58 |
pippodue: ...l'OP ha modo ...di procedere.
Scusa, ma chi è l' OP?
|
|
pippodue
postato il: 11.09.2019, alle ore 16:28 |
OP = original poster. Bah, per una volta che volevo essere alla moda...
anche i grandi uomini, come gli uomini comuni, possono talvolta cadere in errore (Voltaire) |
|
picmicro675
postato il: 12.09.2019, alle ore 02:26 |
fabio1977: Rcc.Roberto Il problema é farlo capire al pic in quale direzione gira l encoder.
Ci possono essere diversi metodi. Quello più semplice dice che se sul fronte di salita di un ingresso l' altro è alto allora gira in un senso, se invece è basso sarà l' opposto.
Altro metodo di misurare gli impulsi con il timer1, con eventuale verifica che la rotazione sia corretta.
Come questo
http://www.grix.it/UserFiles/picmicro675/File/TransitFiles/t… ci sono differenze perché è scritto in Proton basic e per un 12F675, ma il concetto non cambia.
Oppure vedi le pagine pubblicate
http://www.grix.it/viewer.php?page=13018
http://www.grix.it/viewer.php?page=11577
http://www.grix.it/viewer.php?page=7842
Non devi mettere tanto di filtro, altrimenti non legge bene gli impulsi. Fai ben attenzione che usi i piedini con interfaccia a trigger di Schmitt. Come quella del Timer1 o l'inerrupt da esterno. Se hai assegnato a piedini senza il trigger allora ti conviene mettere degli squadratori come CD 40106.
Infine non è strettamente necessario utilizzare gli interrupts se sono conteggi di pochi Hertz. Altrimenti se devi leggere la posizione di un motore che gira a 3000 o 6000 giri, allora diventa imperativo mettere sotto interrupt, per non perdere il conteggio.
Anno nuovo, forum nuovo.
Mi sa che lascio. |
|
|