Pages: 1 [2]   Go Down
Author Topic: Circuito di switch alimentazione arduino  (Read 1679 times)
0 Members and 1 Guest are viewing this topic.
Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Tieni presente che la tensione minima ufficiale di funzionamento del micro è 4,5V,

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

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
God Member
*****
Karma: 2
Posts: 536
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bene, però il mio è un 644 stand alone  smiley-twist
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.  smiley-mr-green
Logged

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 411
Posts: 11986
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

Offline Offline
God Member
*****
Karma: 2
Posts: 536
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
God Member
*****
Karma: 2
Posts: 536
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: February 14, 2013, 03:41:27 am by superzaffo » Logged

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

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
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 82
Posts: 4204
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?  smiley-lol smiley-mr-green smiley-lol smiley-mr-green

Guglielmo
Logged

Search is Your friend ... or I am Your enemy !

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6589
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Code:
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
}
« Last Edit: March 11, 2014, 06:03:32 am by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Switzerland
Offline Offline
Faraday Member
**
Karma: 82
Posts: 4204
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ...
« Last Edit: March 11, 2014, 07:26:54 am by gpb01 » Logged

Search is Your friend ... or I am Your enemy !

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6589
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Pages: 1 [2]   Go Up
Jump to: