Go Down

Topic: SELETTORE BCD (Read 2 times) previous topic - next topic

lightman750

Grazie Nico. Ci proverò.

Michele Menniti

Dovresti evitare di sovrapporre due questioni nello stesso Thread, stiamo parlando del selettore, lascia perdere il timer 2 per ora.
Se hai guardato la tabella che ti ho linkato capirai come funziona il tuo selettore. Ad Arduino lo devi collegare come ti ha ben spiegato Uwe.
P.es.
Se metti la freccia su 0 sui quattro pin non rilevi alcun 0 (cerchietto bianco nella tabella) = 0
Se metti la freccia su 1 uno dei pin rileverà lo 0 logico, quello è il pin "A"
Se metti la freccia su 2 uno dei pin rileverà lo 0 logico, quello è il pin "B"
Se metti la freccia su 4 uno dei pin rileverà lo 0 logico, quello è il pin "C"
Se metti la freccia su 8 uno dei pin rileverà lo 0 logico, quello è il pin "D"
tutti gli altri valori sono combinazioni di questi 4 fondamentali, p.es.:
Se metti la freccia su 3 due pin rileveranno lo 0 logico, sono i pin "A" e "B"
Ora devi divertirti col software; i 4 pin di Arduino li devi impostare come INPUP e poi devi eseguire il comando digitalWrite(pin, HIGH) su tutti è quattro in modo da attivare le R di pull-up interne, sempre come ti ha spiegato Uwe. ;)
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

leo72

Sì, nell'eccesso di fornire troppe info ho mescolato la gestione degli encoder con quella dei selettori.
Il selettore lo leggi in formato binario. Per gli amanti dell'italiano:
http://it.wikipedia.org/wiki/Codice_Gray

brunol949


Dopo nel tuo programma con una serie di funzioni If filtri i valori letti ed ottieni la posizione

Forse si fa prima a dire che
Stabilito che saranno 4 ingressi con PulUp verso il positivo e quindi sempre HIGH
Farei
byte totale = 0
if ingresso1 LOW .... totale = totale +1
if ingresso2 .... totale = totale +2
if ingresso3 .... totale = totale +4
if ingresso4 .... totale = totale +8

A questo punto su totale ci sara' un numero da 0 a 9 da usare come meglio crede
Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.web

Michele Menniti

Ottimo Bruno, poi ovviamente dovrà resettare tutto ad ogni nuovo ciclo di lettura; potrebbe forse usare anche uno switch case senza break; non so cosa succede esattamente all'interno di quegli aggeggi, immagino che ci siano un bel po' di rimbalzi; forse potrebbe essere necessario, se lui pensa di ruotarlo al volo durante il funzionamento, effettuare più cicli di lettura orima di dare responso.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

lightman750

Tutte ottime idee. Credo inserirò la funzione debounce sugli ingressi per evitare la lettura dei rimbalzi. potrebbe essere non necessario visto che la selezione viene inpostata 1 volta e poi non più toccata.
Per la funzione switch come posso scriverla?

brunol949


poi ovviamente dovrà resettare tutto ad ogni nuovo ciclo di lettura;

Se definisce totale prima di setup sicuramente
Io ragionavo pensando a tutto nel loop , tutto unito

Quote

potrebbe forse usare anche uno switch case senza break;

Sicuramente perche' non ci sara' possibilita' che ci siano piu' valori veri ; da 0 a 9

Quote
non so cosa succede esattamente all'interno di quegli aggeggi, immagino che ci siano un bel po' di rimbalzi; forse potrebbe essere necessario, se lui pensa di ruotarlo al volo durante il funzionamento, effettuare più cicli di lettura orima di dare responso.

Potrebbe accettare il valore dopo che questo permane per un paio di decimi
Ma questo va a complicargli la vita perche' dovrebbe aggiungere un temporizzatore ed un valore old
Quegli affari li nascono per selezionare un indirizzo e basta
Risulta piu' semplice mettere un affare del genere piuttosto che 4 dipswitch che poi ,se l'utilizzatore non e' un po' sviluppato, fatichera' come 'na bestia a combinarli in binario
Piu' semplice dire metti 5 piuttosto che .... se vuoi 5 tira su il primo ed il terzo
Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.web

brunol949


Per la funzione switch come posso scriverla?

http://arduino.cc/en/Reference/SwitchCase
Le mie opere : Flusso correnti nell'impianto fotovoltaico http://arduino.webveneto.net/energy_control/     PING ed E.Mail http://arduino.web

Michele Menniti



Per la funzione switch come posso scriverla?

http://arduino.cc/en/Reference/SwitchCase

aggiungo che visto che devi settarlo una volta per tutte il debounce NON ti serve assolutamente a nulla, e nemmeno se ogni tanto decidi di cambiare combinazione, purché tu lo faccia prima di dare alimentazione.
@ brunol949: concordo pienamente, ed infatti lightman750 ha confermato che deve lasciarlo su un valore fisso.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

uwefed

Il problema dei rimbalzi non susiste perché quei selettori non sono fatti per essere mossi di coninuo.
Ciao Uwe

lightman750

Dunque: lo strumento è un pò più complesso. Si tratta di un regolatore di livelli per pellet. Il selettore mi serve per sezionare il fondo scala di un timer che dodrebbe partire quando parte il sistema di carico. Il fondo scala dovrò tararlo più alto del tempo effettivo per caricare la caldaia. Se il timer arriva in fondo spegne tutto perchè vuol dire che qualcosa non va.
Secondo voi MS timer2 può andare bene?

lightman750

Ora devi divertirti col software; i 4 pin di Arduino li devi impostare come INPUP e poi devi eseguire il comando digitalWrite(pin, HIGH) su tutti è quattro in modo da attivare le R di pull-up interne, sempre come ti ha spiegato Uwe.


Perchè il compilatore mi da errore????

Michele Menniti


Ora devi divertirti col software; i 4 pin di Arduino li devi impostare come INPUP e poi devi eseguire il comando digitalWrite(pin, HIGH) su tutti è quattro in modo da attivare le R di pull-up interne, sempre come ti ha spiegato Uwe.


Perchè il compilatore mi da errore????

Vediamo se hanno riparato la palla di vetro di Uwe, dopo l'ultima rottura, così lui vede lo sketch che hai scritto, lo copia, lo compila, legge l'errore e poi ti risponde ]:D
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

lightman750

Se io metto pinMode(pin,INPUT)
e poi digitalWrite(pin,HIGH)

il compilatore mi dice che non può farlo perchè il pin è impostato come ingresso (e direi che ha PIENAMENTE ragione........)

Michele Menniti


Se io metto pinMode(pin,INPUT)
e poi digitalWrite(pin,HIGH)

il compilatore mi dice che non può farlo perchè il pin è impostato come ingresso (e direi che ha PIENAMENTE ragione........)

sì eh? chissà perché CENTINAIA DI ALTRI UTENTI, di cui forse QUALCUNO più ESPERTO di te, usano giornalmente quella tecnica per attivare le pull-up interne ]:) ma almeno hai prima detto al software che numero è quel pin?
E' segreto qwuesto sketch o potremmo vederlo pubblicato tra due tag "CODE"? :smiley-sweat:
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Go Up