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