Übersehe ich was? ADC am Attiny85

#4102944
Lesenswert?

Hallo miteinander,

ich glabue ich bin grad ein bisschen betriebsblind. Ich habe einen 
Tiny85. Dort initialisiere ich den ADC:
1
void ADC_Init(void) {
2
  // Interne 2,54V, Pin PB0 getrennt
3
  ADMUX = (1 << REFS2) | (1 << REFS1);
4
  
5
  // Frequenzvorteiler auf Faktor fclk / 64
6
  ADCSRA = (1 << ADPS2) | (1<<ADPS1);
7
  
8
  // ADC einschalten
9
  ADCSRA |= (1<<ADEN);
10
  
11
  // Erste Wandlung manuell auslösen (siehe Datenblatt S. 114 - ADCSRA-Register)
12
  ADCSRA |= (1<<ADSC);               
13
  while (ADCSRA & (1<<ADSC) ) {         // auf Abschluss der Konvertierung warten
14
  }
15
  /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten
16
  Wandlung nicht übernommen. */
17
  (void) ADCW;
18
}

und frage dann ab:
1
adc_val = ADC_Read(3);
2
    
3
    if (adc_val >= 0x3FF) {
4
      PB4_on();
5
    } else {
6
      PB4_off();
7
    };

Dann toogelt mit Pin4 schon bei 0,985V. Ich verstehe blos gerade nicht 
warum? Es müssten 2,54V sein?!

Das DB sagt: "Internal 2.56V voltage reference without external bypass 
capacitor, disconnected from PB0 (AREF).(1)"

Dankbar für die Hilfe :)
#4102979
Lesenswert?

Ach klar, sollte natürlich mit dazu :)
1
uint16_t ADC_Read(uint8_t Channel) {
2
  
3
  // Kanal wählen
4
  ADMUX = (ADMUX & ~(0x1F)) | (Channel & 0x1F);
5
  
6
  // Einzelne Wandlung durchführen
7
  ADCSRA |= (1<<ADSC);            
8
  
9
  // Auf Abschluss warten  
10
  while (ADCSRA & (1<<ADSC)) {
11
    // Dummy
12
  };
13
    
14
  // Wert zurückgeben
15
  return ADCW;                   
16
  
17
};
Gast #4103008
Lesenswert?

^^ Lustig habe jetzt auch das erste Mal einen Tiny85 benutzt und erstmal 
alles falsch gemacht was geht ;>

Zuerst übersehen, dass die ADC IN´s eben nicht einfach binär 
durchkodiert sind, dann noch das ADC3 der Temperaturmesser ist, und zum 
krönenden Abschluss selbstverständlich die Clock-Prescaler Bits nicht 
gesetzt...

Alter Schwede...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren