ATmega32 ADC von Quarz abhängig?

Gast #2545519
Lesenswert?

Hallo zusammen,

Ich beobachte folgende komische Sache.
Hab nen AT32 hier wo ich den Kanal 1 des ADC auslese. Bei einer Frequenz 
von 8Mhz klappt das auch alles ohne Problem, sobald ich aber auf 16Mhz 
gehe bekomme ich als ADC-Wert immer nur 1023. Weiß jemand woran das 
liegen könnte?
1
int main(void)
2
{
3
  Init_ADC();
4
  
5
  while(1)
6
    {  
7
    
8
    put_number(ADCW, 40, 32, 3, 0, font_6x8);
9
    _delay_ms(5);
10
    ADCSRA |= (1<<ADSC);
11
    }
12
}
13

14
ISR(ADC_vect)
15
{  
16
  
17
  if(ADCW/4  > (OCR2 + 10))
18
    OCR2 += 1;
19
  else if(OCR2 > 30)
20
    OCR2 -= 1;
21
  
22
}
23

24

25
void Init_ADC(void)
26
{
27
  ADMUX = 0x01;
28
  ADCSRA = 0x88;  
29
}
Gast #2545537
Lesenswert?

>     put_number(ADCW, 40, 32, 3, 0, font_6x8);

dito auch nicht das Auslesen des ADC-Wertes. An dieser Stelle wisst du 
noch nicht ob eine ADC Messung abgeschlossen ist.

Du kannst aber mit dem Konzept eines Signalvariable (Flag) arbeiten, so 
wie es im Artikel Interrupt beschrieben ist.
Gast #2545555
Lesenswert?

Das ist Teufel mit Beelzebub ausgetrieben.

Nicht umsonst steht im Artikel Interrupt sinngemäß ISR so knapp wie 
möglich halten. Du machst das Gegenteil, wenn du die längliche 
Ausgabefunktion dort rein packst.

Den Datenblattabschnitt zur ADC Taktfrequenz hast du noch nicht gelesen?
Gast #2545576
Lesenswert?

Ja gut aber wenn ich z.B. folgendes machen:
1
ISR(ADC_vect)
2
{  
3
  
4
  if(ADCW/4  > (OCR2 + 10))
5
    OCR2 += 1;
6
  else if(OCR2 > 30)
7
    OCR2 -= 1;
8

9
  put_number(ADCW, 40, 32, 3, 0, font_6x8);
10
  ADCSRA |= (1<<ADSC);  
11
}
sollte es doch eig. funktionieren, tut es aber nicht. Hier hab ich ja 
auch keine Probleme dass die IST währenddesse nochmal aufgerufen wird
Gast #2545596
Lesenswert?

Die Ausgabe ist auch nur ein Teilaspekt deines Codes. Deine neue Lösung 
bringt erst massive Probleme, wenn du weitere IRQs mit ihren ISRs hast.

Der wichtigere Teil ist die korrekte Benutzung des ADC laut Datenblatt.

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