Pages: [1] 2   Go Down
Author Topic: come dare il valore a una variabile byte prendendo come bit gli ingressi?  (Read 1489 times)
0 Members and 1 Guest are viewing this topic.
Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22811
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
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
Logged


Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley
Logged

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

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9493
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

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

Offline Offline
Sr. Member
****
Karma: 2
Posts: 328
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?

Logged

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si grazie smiley
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22811
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Appunto... stavo scrivendo la stessa cosa  smiley-grin
Logged


Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ok ok ho capito smiley-wink
grazie a tutti! smiley
Logged

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

Roma / Benevento
Offline Offline
Full Member
***
Karma: 0
Posts: 183
Guardava al futuro con l'inguaribile ottimismo di un dodo...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

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

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

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

Offline Offline
Sr. Member
****
Karma: 2
Posts: 328
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22811
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ti consiglio di leggerti questa pagina:
http://www.arduino.cc/en/Reference/PortManipulation
Era la pagina che avevo suggerito io... basterebbe leggerla...  smiley-sweat
Logged


Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

eheh scusate... adesso la leggo tutta smiley-wink
Logged

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

Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 5
Posts: 956
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
Logged

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

Pages: [1] 2   Go Up
Jump to: