Circuito di switch alimentazione arduino

superzaffo:
Grazie uwefed, quindi se ho capito bene, dovrei prima fare il circuito per i 3.3v e poi con un amplificatore operazionale e un p-Mosfet dovrei fare il tutto...
Se quello che ho appena detto.. mi sai dare il nome di un amplificatore op. di tipo DIP da poter iniziare a fare delle prove ? Perchè magari alla fine usero gli smd e quindi potrei usare lo stesso che è nello schema, ma non saprei il nome di analogo in foro passante.

Per i 3,3V puoi usare anche un Diodo Zener e una resistenza. Arduino usa i 3,3V perché per altri motivi ci sono sulla scheda.
Ciao Uwe

Grazie uwefed.. ma io pensavo alla fine di "ricostruire" un po' il circuito dell' arduino... che ho visto usa un lp2935-33 come regolatore per i 3.3v.
Per fare le prove su breadboard, ne userò uno in formato DIP.
Ma sulla prima riposta, mi dici questo:

tensione Vin/2 é maggiore di 3,3V l' uscita di U5A va a H e il P-MOSFET T1, un FDN340P non conduce piú e interrompe i 5V del USB.

Cosa intendi per "H" ? subito mi era sfuggita la cosa.. io ho interpretato che l' uscita avrà una tensione che disabilita il mosfet..

H = High, poiché il mosfet è a canale P ha bisogno di LOW per lavorare, con H si interrompe

superzaffo:
Ecco volevo chiedervi se mi potete spiegare con quali componenti viene fatto questo switching e se si può riprodurre su un pcb. (o a foro passante o anche in smd)

Il modo più semplice è mettere in serie alla Vusb un diodo schottky in grado di reggere 1A, la tensione proveniente dal regolatore 5V la connetti a valle del diodo.
Il funzionamento è semplicissimo, se è collegata la USB Arduino si alimenta attraverso il diodo, unica nota negativa è che la tensione di funzionamento è ~4.6-4.7V invece di 5V, nessun reale problema ne per il micro ne per eventuali shield collegate, quando sono presenti i 5V del regolatore il diodo viene depolarizzato e di conseguenza non conduce più, Arduino viene alimentato esclusivamente dalla sorgente di alimentazione esterna anche se è collegato alla USB.
Questa soluzione, praticamente a costo 0, è molto pratica per una standalone che normalmente lavora alimentata autonomamente alle quale connetti la USB solo per aggiornare il programma e/o far dialogare il pc con Arduino, ti consente di alimentare Arduino anche dalla USB se manca l'alimentazione principale in modo semplice senza scomodare opamp e mos :slight_smile:

Cavoli astro... mi inchino a te :grin:
Solo un paio di chiarimenti... Il tipo di diodo schottky, basta solo che supporti fino ad 1A ? o devo guardare altre caratteristiche ?

la tensione proveniente dal regolatore 5V la connetti a valle del diodo

Con questo intendi una cosa simile ? Vusb->diodo S.->|alimetazione 5V|->circuito 644

superzaffo:
Solo un paio di chiarimenti... Il tipo di diodo schottky, basta solo che supporti fino ad 1A ? o devo guardare altre caratteristiche ?

Si va bene un qualunque diodo raddrizzatore che regge 1A continuo, volendo pure 800 mA.

Con questo intendi una cosa simile ? Vusb->diodo S.->|alimetazione 5V|->circuito 644

Si, colleghi la Vusb sul Anodo del diodo e sul suo Catodo il 5V proveniente dal regolatore, questa diventa la linea di alimentazione di Arduino.

@Michele: Grazie della conferma, allora era quello che avevo capito.
@Astro: Grazie ancora, mi attivo subito con questo schema.

Ok perfetto, funziona alla meraviglia il diodo S. Diciamo che perde qualche cosa nella tensione (4.8-4.7) ma non mi crea problemi.
Grazie a tutti

ciò che ti perde, come ti aveva già detto Astro, è l'ovvia caduta di tensione sul diodo, da 0,2 a 0,4V. Tieni presente che la tensione minima ufficiale di funzionamento del micro è 4,5V, valore che potresti raggiungere sotto carico aggiuntivo e senza alimentazione esterna. Ma Astro è stato chiaro nel sugggerirti questa soluzione solo per permetterti di riprogrammare lo stand-alone via seriale, prevedendo normalmente un'alimentazione via plug.

Si infatti, tutto come previsto. Io volevo questo circuito solo per programmare via usb il micro senza che ci fossero problemi mentre era sotto alimentazione esterna.
Grazie per la precisazione Michele..

4.5V è la tensione minima alla quale è garantito il funzionamento a 20 MHz, l'ATmega328 può lavorare con una tensione minima di 1.8V con il clock a 4MHz, con il clock a 16 MHz la tensione minima è ~4.3V.

Ovviamente mi riferivo al 328 "quarzato", visto che parliamo di uno stand-alone tipo Arduino. Comunque a pag. 308 del datasheet c'è il grafico delle alimentazioni da cui si evince che effettivamente 4,5V è la tensione minima a 20MHz, mentre a 16Mhz effettivamente è inferiore. Prima parlavo di tensione "ufficiale", io stesso ho appurato che alcuni 328P a 16MHz arrivano anche a meno di 4V senza problemi, diciamo che certamente non incontrerà alcuna difficoltà. :slight_smile:

Bene, però il mio è un 644 stand alone ]:smiley:
Ho visto dal datas. che per il 644P a 20MHz le tensioni Min e Max sono "20 MHz @ 4.5V - 5.5V"
Per cui ci sono abbastanza stretto.. ma ripeto.. sarà sempre comunque collegato alla Vin... per cui non penso d' avere problemi...
Comunque non vi nascondo che il circuito con l' op. e mosfet mi incuriosisce lo stesso. :grin:

Non devi guardare quella voce, ma il grafico che ti ho detto, trovalo anche sul 644 (pag. 335) e vedrai che sono molto simili, per cui anche nel tuo caso puoi lavorare tranquillamente a 4V circa, quindi no problem....

Certamente, il grafico è molto più chiaro..
Dopo che avrò collegato tutto farò una prova e vediamo sotto carico (per curiosità) quanto arriva.
Ma sicuramente non sarà un problema. :wink:

Ciao.. riprendo un attimo questo topic, perchè sto facendo delle prove con il tlc2262I e un p-mosfet irf9540.
Con una Vin di 12v ho in uscita dal tlc2262 (quindi nel gate del mosfet) circa 3,4v e quando collego Vin il mosfet continua a condurre la tensione usb.
Nel tlc sono comparate le tensioni 3.3v e 5.7v che quest' ultima arriva dal partitore.
Sembra che la tensione nel gate sia troppo poca per per portare in H il mosfet. Forse è sbagliato il modello del mosfet ? il 9540 è troppo grande ?

La soluzione diodo va benissimo, ma volevo provare anche questa soluzione. Solo per didattica.

Buongiorno a tutti,
approfitto del post già aperto per chiarirmi un piccolo dettaglio.
Sull'entrata U5B arriva il segnale SCK dell'Atmega328P...perchè???
Che sono i numeretti scritti ai capi delle resistenze??

Grazie a tutti

Davide

davidino:
Sull'entrata U5B arriva il segnale SCK dell'Atmega328P...perchè???

Perché ... non devi vederlo come SCK ma come pin 13 di Arduino ... quello dove c'è il LED ... sennò ... con Blink, che facevano lampeggiare ? XD :grin: XD :grin:

Guglielmo

Poiché l'alimentazione esterna non sarà pari a 5.0V, se si usa l'ADC interno conviene misurare la tensione di alimentazione mediante una misura del riferimento di tensione e memorizzare il valore in una variabile da usare nelle misure successive.
In questo modo si ha un valore più corretto dell'analogRead.
--> http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/

Questo il codice. Rimane il dubbio tra 1023.0 e 1024.0, ma credo si 1024.0.

long readVcc() {
  // Read 1.1V reference against AVcc
  // set the reference to Vcc and the measurement to the internal 1.1V reference
  #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
    ADMUX = _BV(MUX5) | _BV(MUX0);
  #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
    ADMUX = _BV(MUX3) | _BV(MUX2);
  #else
    ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #endif  
 
  delay(2); // Wait for Vref to settle
  ADCSRA |= _BV(ADSC); // Start conversion
  while (bit_is_set(ADCSRA,ADSC)); // measuring
 
  uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH  
  uint8_t high = ADCH; // unlocks both
 
  long result = (high<<8) | low;
 
  result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000 <-- oppure 1024.0??
  return result; // Vcc in millivolts
}

PaoloP:
Questo il codice. Rimane il dubbio tra 1023.0 e 1024.0, ma credo si 1024.0 ...

No, secondo me 1023 ... hai 1024 possibilità che si estendono da 0 a 1023.

Immaginiamo i 5V ideali ...

... lo ZERO lo rappresenti come 0 (0x0000), il valore 5V lo rappresenti come 1023 (0x03FF) quindi, la singola frazione, moltiplicata 1023 (0x03FF) deve ridarti 5V ... quindi, se ci fossero i 5V ideali, ogni step sarebbe 0.0048876 che moltiplicato il valore massimo che il ADC ti da (1023 o 0x03FF) ti da appunto il valore massimo di 5V.

Guglielmo

EDIT: Sembrerebbe che il valore è 1024 e che bisogna tenere conto che il valore 0x03FF non è in realtà il massimo ma il massimo meno uno step. QUI per maggiori dettagli ...