Go Down

Topic: Gestione input/output Attraverso registri. (Read 2412 times) previous topic - next topic

Buonasera,
Avrei una domanda da porvi,
Sul sito di arduino http://www.arduino.cc/en/Reference/PortManipulation che scritto che e consigliato non modificare i pin 0 e 1 Tx Rx.
Mi potete spiegare il perché?
Il sito consiglia di usare  " DDRD= DDRD |B11111110; " che cosa cambia rispetto a " DDRD= B11111110; " ?(Perché non vengono modificati i pin relativi a TX RX?)
C'è un modo sicuro di settare la tutta la portD ?

Vi ringrazio per la risposta.

uwefed

Se modifichi i Pin 0 e 1 non funziona piú la comunicazione attraverso la USB.
La differenza tra
" DDRD= DDRD |B11111110; "
e " DDRD= B11111110; "
é
che la prima versione lascia l' ultimo bit invariato 
mentre l' ultimo bit a zero.
Ciao Uwe

La ringrazio per la sua risposta, velocissima :smiley-eek:  :smiley-eek: . pensavo di leggere le risposte domani tornato da lavoro. :)

Quindi  DDRD= DDRD |B11111111; se scrivo in questo modo l'ultimo Bit rimane invariato lo stesso?
Come sono di default i pin TX Rx? Posso settarli tutte le volte con valori uguali al default?

uwefed

Che formalitá, prego mi dia del TU.
Il | fa un or di ciascun bit col correspondente.

DDRD= DDRD |B11111111; mette tutti i bit a 1.

Non so come sono messi i bit dei pin 0 e 1 visto che la seriale é implementato in hardware.
Ciao Uwe

Quindi come è consigliabile scrivere (senza interferire con la seriale)  se io voglio per esempio mettere in Input i Pin 2-3-4 e in Out 5-6-7 del digitale?
DDRD = .....
Grazie.

lesto

buono studio: http://www.arduino.cc/playground/Code/BitMath
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Ciao,
Grazie per le risposte, ho capito.
L'operatore OR lascia invariato il valore del  Bit dove é presente 0.
MI spiego,

       OR
DDRD |  Valore da inserire Risulato
0                 0                    0           <----- Condizioni che ci interessano
0                 1                    1
1                 0                    1           <----- Condizioni che ci interessano
1                 1                    1

La dove il "valore da inserire" è = 0 il risultato è uguale a DDRD.
Quindi
ES:  out i Pin 2-3-4 e in in 5-6-7 del digitale lasciando invariato i pin 0 e 1
DDRD= DDRD | B0001 1100;
Il settaggio di IN vengono settati correttamente perché Arduino di default e in input = 0;
E giusto quello che ho detto?
Vi ringrazio ancora per le risposte



KrashNet


Ciao,
Grazie per le risposte, ho capito.
L'operatore OR lascia invariato il valore del  Bit dove é presente 0.
MI spiego,

       OR
DDRD |  Valore da inserire Risulato
0                 0                    0           <----- Condizioni che ci interessano
0                 1                    1
1                 0                    1           <----- Condizioni che ci interessano
1                 1                    1

La dove il "valore da inserire" è = 0 il risultato è uguale a DDRD.
Quindi
ES:  out i Pin 2-3-4 e in in 5-6-7 del digitale lasciando invariato i pin 0 e 1
DDRD= DDRD | B0001 1100;
Il settaggio di IN vengono settati correttamente perché Arduino di default e in input = 0;
E giusto quello che ho detto?
Vi ringrazio ancora per le risposte


Per chi come me non ha capito neanche una virgola di questo post....  :smiley-red:
a parte che dovremmo studiare ecc... ma... mi chiedevo... in soldoni...
Applicato ad un semepio pratico, cosa vi siete detti?  :D
(pura curiosità)
.

lesto


Ciao,
Grazie per le risposte, ho capito.
L'operatore OR lascia invariato il valore del  Bit dove é presente 0.
MI spiego,

      OR
DDRD |  Valore da inserire Risulato
0                 0                    0         <----- Condizioni che ci interessano
0                 1                    1
1                 0                    1           <----- Condizioni che ci interessano
1                 1                    1

La dove il "valore da inserire" è = 0 il risultato è uguale a DDRD.
Quindi
ES:  out i Pin 2-3-4 e in in 5-6-7 del digitale lasciando invariato i pin 0 e 1
DDRD= DDRD | B0001 1100;
Il settaggio di IN vengono settati correttamente perché Arduino di default e in input = 0;
E giusto quello che ho detto?
Vi ringrazio ancora per le risposte


esattamente, al contrario se vuoi mettere dei bit a 0, allora devi usare la ^


Per chi come me non ha capito neanche una virgola di questo post....  :smiley-red:
a parte che dovremmo studiare ecc... ma... mi chiedevo... in soldoni...
Applicato ad un semepio pratico, cosa vi siete detti?  :D
(pura curiosità)


in parole povere, come cambiare il valore di uno o più bit lasciando gli altri invariati (i registri sono ad 8 bit)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

KrashNet


in parole povere, come cambiare il valore di uno o più bit lasciando gli altri invariati (i registri sono ad 8 bit)

eh vabbeh... prima o poi (speroprima) inizierò a capirci qualcosa!
grazie comunque!  :D
.

Testato

X crash
Su arduino siamo abituato a ragionare sul singolo pin', dimenticandoci che cmq di base chi sono le porte composte da 8 pin. Anche i pin della seriale fanno parte di una porta.
Cerca info su un contatore binario e probabilmente troverai l' uso delle porte e capitato meglio
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

KrashNet


X crash
Su arduino siamo abituato a ragionare sul singolo pin', dimenticandoci che cmq di base chi sono le porte composte da 8 pin. Anche i pin della seriale fanno parte di una porta.
Cerca info su un contatore binario e probabilmente troverai l' uso delle porte e capitato meglio

La storia delle porte 8 pin già mi ha placato il neurone... C'E' ANCORA SPERANZA!!!!!!!!!!  XD
Thx ora cerco.. domani studio!
.

leo72


Buonasera,
Avrei una domanda da porvi,
Sul sito di arduino http://www.arduino.cc/en/Reference/PortManipulation che scritto che e consigliato non modificare i pin 0 e 1 Tx Rx.
Mi potete spiegare il perché?

Alt... c'è scritto di non modificare i pin 0 e 1 se tu stai usando la seriale per comunicare con altri dispositivi, perché interferiresti con tale processo. Altrimenti quelli sono pin come gli altri, usabili per l'I/O.

Quote

Il sito consiglia di usare  " DDRD= DDRD |B11111110; " che cosa cambia rispetto a " DDRD= B11111110; " ?(Perché non vengono modificati i pin relativi a TX RX?)
C'è un modo sicuro di settare la tutta la portD ?

Alt di nuovo  :smiley-yell:
Se si vogliono impostare tutti i bit come output senza toccare i pin 0 e 1, devi dare:
Code: [Select]
DDRD = DDRD | B11111100; :D
Il tuo esempio è sempre riportato in quella pagina ma "sets Arduino pins 1 to 7 as outputs, pin 0 as input", ossia imposta i pin 1-7 come output ed il pin 0 come input. Attento perché un 1 al posto di uno 0 fa la differenza.

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