Go Down

Topic: come dare il valore a una variabile byte prendendo come bit gli ingressi? (Read 2054 times) 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy