ATTiny24 ADC weiß nicht weiter

Gast #890443
Lesenswert?

Servus zusammen,

ich versuche hier seit Stunden das der ADC meines ATTiny24 das macht was 
ich will ... jetzt wärs mal interessant wenn sich jemand meinen 
relevanten Code anschaut ob da ein grober Fehler drin ist:
1
void compareValues(void){
2
  int adcCh1 = 0x00; //Value Channel 1
3
  int adcCh2 = 0x00; //Value Channel 2
4
  int waste = 0x00; //discarded HighBytes
5

6
  ADCSRA |= (1<<ADSC); //start conversion
7
  while(ADCSRA & (1<<ADSC)){ //wait till conversion finished
8
    asm volatile("NOP");  
9
  }
10

11
  adcCh1 = ADCL; //LowByte einlesen
12
  waste = ADCH; //HighByte einlesen (wird nicht berücksichtigt)
13

14
  ADMUX = 0x01; //Kanal 2 einstellen
15
  ADCSRA |= (1<<ADSC); //start conversion
16
  while(ADCSRA & (1<<ADSC)){ //wait till conversion finished
17
    asm volatile("NOP");
18
  }
19
  
20
  adcCh2 = ADCL; //LowByte einlesen
21
  waste = ADCH; //HighByte einlesen (wird nicht berücksichtigt)
22

23
  if(adcCh1 > adcCh2){
24
    doLED1();
25
  }
26
  if(adcCh1 < adcCh2){
27
    doLED2();
28
  }
29
  if(adcCh1 == adcCh2){
30
    PORTA = PORTA | 0x0C;
31
  }
32
}

Das ist die Routine in der ich die Werte von Kanal 1 (PA0) und Kanal 2 
(PA1) einlese, vergleiche und dann je nachdem welcher größer ist meine 
LED 1 oder LED2 einschalte. Allerdings leuchten immer beide LEDs was 
bedeuten würde, dass meine Werte gleich sind. Habs aber nachgemessen, es 
liegen Werte von 0,9V (PA0) und 1,5V (PA1) an. VREF ist die 
Versorguingsspannung (5V), die ADC-Register sollten auch alle richtig 
eingestellt sein. Wens aber interessiert (vielleicht liegt der Fahler 
aber auch hier) mal meine main()-Routine:
1
int main(void) {
2
  DDRA = 0x0C;
3
  
4
  ADMUX = 0x00;
5
//  DIDR0 = 0xFC;
6
  ADCSRA = 0x83;
7

8
  while(1){
9
    compareValues();
10
  }

Bin für jede Hilfe dankbar.

Gruß

Gepi
Gast #890755
Lesenswert?

Du verwirfst das High-Byte und damit die "wichtigsten" obersten 2 Bits. 
Versuch mal das Ergebnis links zu justieren und dann das Low-Byte zu 
verwerfen und nur das High-Byte zu verwenden.

Nach einer Umstellung des AD-Kanals ist die erste Wandlung unbrauchbar 
und muss verworfen werden.

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