Pages: [1]   Go Down
Author Topic: Gestione input/output Attraverso registri.  (Read 1817 times)
0 Members and 1 Guest are viewing this topic.
Pavia
Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21270
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pavia
Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21270
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pavia
Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

buono studio: http://www.arduino.cc/playground/Code/BitMath
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pavia
Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Logged

Milano
Offline Offline
Sr. Member
****
Karma: 1
Posts: 401
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?  smiley-grin
(pura curiosità)
Logged

.

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?  smiley-grin
(pura curiosità)

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

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Milano
Offline Offline
Sr. Member
****
Karma: 1
Posts: 401
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

.

0
Offline Offline
Faraday Member
**
Karma: 45
Posts: 5790
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Milano
Offline Offline
Sr. Member
****
Karma: 1
Posts: 401
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!!!!!!!!!!  smiley-lol
Thx ora cerco.. domani studio!
Logged

.

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

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:
DDRD = DDRD | B11111100;
smiley-grin
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.
Logged


Pages: [1]   Go Up
Jump to: