Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Dubbi su I/O (AVR)

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Dubbi su I/O (AVR)

Messaggioda Foto Utentedaniele1996 » 29 ago 2014, 18:04

Salve a tutti, fino a poco tempo fa, sapevo che per dichiarare un PIN come output bisognava mettere nel registro DDRx il bit interessato a 1, al contrario per avere l'input...
spiego meglio:
Codice: Seleziona tutto
int main(){
DDRB |= (1<< 4);
//Output
for(;;){
//fa qualcosa con il pin
}
return 0;
}

e come input:
Codice: Seleziona tutto
int main(){
DDRB &= ~(1<< 4);

for(;;){
//fa qualcosa con il pin
}

return 0;
}


ora leggendo qui mi è sorto un dubbio:
mettere a 1 o a 0 nel DDRx è la stessa cosa? (Nel senso che posso usare sia come Input che come output lo stesso pin)
Lì dice che serve per una resistenza pull-up, cosa cambia se la abilito o no?
Avatar utente
Foto Utentedaniele1996
610 3 8 11
Sostenitore
Sostenitore
 
Messaggi: 1554
Iscritto il: 29 ago 2011, 11:29

0
voti

[2] Re: Dubbi su I/O (AVR)

Messaggioda Foto Utenteemacar » 29 ago 2014, 18:19

Ciao,
dal tuo link io capisco che mettendo in DDRx il bit interessato a 1 esso viene configurato come output, come appunto pensavi tu.
Per quanto riguarda il pull-up, ti dice che per fare arrivare uno stato logico 0 il pulsante deve permettere un collegamento a massa (o comunque sottosoglia) per far arrivare uno stato logico 1 il pulsante deve permettere un collegamento a Vdd (o comunque soprasoglia).
Il modo classico per ottenere ciò è utilizzare una resistenza di pull-up. Aggiunge inoltre che negli ultimi microcontrollori alcune porte sono provviste di pull-up interno per cui non hai bisogno di aggiungere componentistica esterna per il pull-up, ma basta attivare quello interno configurando gli appositi registri.
Spero di esserti stato d'aiuto.
Emanuele
Avatar utente
Foto Utenteemacar
156 6
Frequentatore
Frequentatore
 
Messaggi: 145
Iscritto il: 3 dic 2013, 11:02

0
voti

[3] Re: Dubbi su I/O (AVR)

Messaggioda Foto Utentedaniele1996 » 29 ago 2014, 18:39

Mi stranizzano i commenti nel codice:

Codice: Seleziona tutto
// this code sets PB5 to an input with a pull-up enable


#include <avr/io.h>


int main(void)
{
    DDRB &= ~(1 << DDB5); // Clear the PB5 pin
    // PB5 is now an input

    PORTB |= (1 << PORTB5); // turn On the Pull-up                      <----
    // PB5 is now an input with pull-up enabled                              <----


    while (1)
    {
        if( (PINB & (1<<PINB5)) == 0)
        {
            // do something when PD0 is on
        }
    }
}

Questi Pull-up a cosa servono? perché lo scrive nel registro di output?
Avatar utente
Foto Utentedaniele1996
610 3 8 11
Sostenitore
Sostenitore
 
Messaggi: 1554
Iscritto il: 29 ago 2011, 11:29

2
voti

[4] Re: Dubbi su I/O (AVR)

Messaggioda Foto UtenteTardoFreak » 29 ago 2014, 18:54

Perché funziona in questo modo, ed è scritto nel datasheet. -:-
Se tu hai impostato il pin con ingresso e ci scrivi un 1 sul registro della porta ti si attiva il pullup.
Serve per evitare di metterlo esterno.
Ad esempio, se devi utilizzare un pulsante lo puoi collegare fra l' ingresso e la massa, attivare il pullup (che a riposo ti tiene l' ingresso a 1) senza usare una resistenza di pullup esterna.
Si risparmia una resistenza e lo spazio sul circuito stampato.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[5] Re: Dubbi su I/O (AVR)

Messaggioda Foto Utentedaniele1996 » 29 ago 2014, 18:59

Ottimo!!! con questo mi risparmio parecchie resistenze :) una not logica in piu ed il gioco è fatto!!! Grazie :)
Avatar utente
Foto Utentedaniele1996
610 3 8 11
Sostenitore
Sostenitore
 
Messaggi: 1554
Iscritto il: 29 ago 2011, 11:29

2
voti

[6] Re: Dubbi su I/O (AVR)

Messaggioda Foto Utenteemacar » 29 ago 2014, 19:16

daniele1996 ha scritto:Questi Pull-up a cosa servono?

Ecco forse il problema principale della discussione è questo. Facciamo riferimento allo schema "Figure 2: Pull-up Resistor".
Quando l'interruttore è chiuso il comportamento dovrebbe essere chiaro, viene creato un collegamento verso massa: all'ingresso del MCU il valore logico è 0. Quanto l'interruttore è aperto, se non ci fosse la parte di schema composta da resistenza e alimentazione, il pin rimarrebbe "aperto" e quindi in uno stato indefinito.
Grazie alla parte di schema composta da resistenza e alimentazione (non a caso la resistenza viene in questo caso chiamata di pull-up), quando l'interruttore si apre, viene creato un collegamento verso l'alimentazione: all'ingresso del MCU il valore logico è 1.
Questo MCU ha la possibilità di utilizzare un pull-up interno: grazie a ciò non hai bisogno di inserire la resistenza, ma puoi collegare direttamente l'interruttore perché la resistenza che collega il pin all'alimentazione è interna al MCU. Ovviamente, come ti ho già detto, va attivata configurando gli appositi registri.
Avatar utente
Foto Utenteemacar
156 6
Frequentatore
Frequentatore
 
Messaggi: 145
Iscritto il: 3 dic 2013, 11:02

0
voti

[7] Re: Dubbi su I/O (AVR)

Messaggioda Foto Utentedaniele1996 » 5 set 2014, 2:04

(riscrivo qui per non riapreire un thread su un argomento simile)

i pin contrassegnati come " AIN0 e AIN1" a cosa servono? non sono ingressi analogici perché quelli sono contrassegnati come "ADCx", mi chiedo a cosa servono e per cosa vengono impiegati... nel DS non ho capito bene...
Avatar utente
Foto Utentedaniele1996
610 3 8 11
Sostenitore
Sostenitore
 
Messaggi: 1554
Iscritto il: 29 ago 2011, 11:29

1
voti

[8] Re: Dubbi su I/O (AVR)

Messaggioda Foto Utenteemacar » 5 set 2014, 8:39

Ciao, ti consiglio quando hai un dubbio del genere di provare a cercare in rete perché scrivendo an0 avr compaiono una marea di risultati. Sono gli ingressi del comparatore analogico.
Emanuele
Avatar utente
Foto Utenteemacar
156 6
Frequentatore
Frequentatore
 
Messaggi: 145
Iscritto il: 3 dic 2013, 11:02


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 15 ospiti