Go Down

Topic: come dare il valore a una variabile byte prendendo come bit gli ingressi? (Read 1 time) previous topic - next topic

?R

esiste una funzione su arduino che mi permette di dare il valore ad una variabile, per esempio byte, prendendo come bit gli ingressi dell'arduino?
per esempio:
INPUT 1 == bit7
INPUT 2 == bit6
INPUT 3 == bit5
INPUT 4 == bit4
INPUT 5 == bit3
INPUT 6 == bit2
INPUT 7 == bit1
INPUT 8 == bit0

INPUT 1 == 0
INPUT 2 == 1
INPUT 3 == 1
INPUT 4 == 0
INPUT 5 == 0
INPUT 6 == 0
INPUT 7 == 1
INPUT 8 == 0
--> value==98

esiste una funzione che mi fa questo calcolo? o devo farmi un programmino che me lo calcola? scusate ma sono un po' nuovo del linguaggio di arduino :smiley-red:
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

leo72

Code: [Select]
byte a=PORTB;
ed assegni tutti i bit della porta B, che comprende i pin dall'8 al 13.
Puoi fare lo stesso con PORTC e PORTD.

http://www.arduino.cc/en/Reference/PortManipulation

?R

ok ma questo ma vale anche per i mega2560? basta che mi guardo che pin che comprendono le varie porte no?
e se anzi che occupare tutti gli 8 bit ne occupo solo 5 gli altri li devo  mettere a massa o comunque lasciare inutiliazzati... questo non mi piace molto...
comunque è fattibile grazie :)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

astrobeed


e se anzi che occupare tutti gli 8 bit ne occupo solo 5 gli altri li devo  mettere a massa o comunque lasciare inutiliazzati... questo non mi piace molto...


Leggi tutta la porta e poi applichi una maschera AND o OR a seconda se vuoi tenere fissi a 1 o 0 i bit che non ti interessano e che puoi usare per altri scopi sia come IN che come OUT.

?R

non ho capito bene cosa intendi tu.. ma ho una mezza idea di come potrei fare, è che devo comunque intervenire via software, ma non è neanche un gran problema alla fine...
per il mega2560 uso lo stesso principio no?
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

alexdb

supponiamo che hai salvato nella variabile n tutti i bit di una porta dell'atmega, e a te interessa salvare i primi 4 della porta in un'altra variabile x:

se te fai

x=n & 0x11110000

adesso in x trovi nelle prime quattro posizioni i bit salvati e nelle altre 4 trovi 0..
così ti va bene?


?R

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

leo72


?R

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

MGuruDC

Quote
se te fai

x=n & 0x11110000

adesso in x trovi nelle prime quattro posizioni i bit salvati e nelle altre 4 trovi 0..


0x11110000 è un numero esadecimale e vale 286.326.784
Probabilmente intendevi 0b11110000 = 240 = 0xF0

Ciao
Linux User #503422 | Linux Machine #414597-8 | Ubuntu User #30132

?R

se io dovessi dare un valore a una porta tipo PORTD=B00001011, cioè la uso come output, ma mi  bastano solo 4 pin della porta, gli altri posso usarli come input? o devo lasiarli inutilizzati? come funziona?
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

alexdb


Quote
se te fai

x=n & 0x11110000

adesso in x trovi nelle prime quattro posizioni i bit salvati e nelle altre 4 trovi 0..


0x11110000 è un numero esadecimale e vale 286.326.784
Probabilmente intendevi 0b11110000 = 240 = 0xF0

Ciao

si si hai ragione=) piccola svista

@er_like_no_other
puoi usarli come input,
ti consiglio di leggerti questa pagina:
http://www.arduino.cc/en/Reference/PortManipulation

devi settare un altro registro per impostare la porta come input o come output

leo72


ti consiglio di leggerti questa pagina:
http://www.arduino.cc/en/Reference/PortManipulation

Era la pagina che avevo suggerito io... basterebbe leggerla...  :smiley-sweat:

?R

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

?R

non mi è chiara una cosa... ma io impostando la porta come input o output posso usare anche i pin analogici come pin digitali o no?
grazie a tutti ;)
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Go Up