Circuito di switch alimentazione arduino

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

Ok.