Forum: Mikrocontroller und Digitale Elektronik USART - ADC vertragen sich nicht


von Chefkoch Philipp (Gast)


Lesenswert?

Hi
Kennt jemand folgendes Problem:

1) Wenn ich USART und ADC initialisiere (single conversion) startet die
ADC-ISR nicht.
2) Wenn ich USART und ADC initialisiere (Dauerwandlung) geht es
3) Wenn ich USART deaktiviere geht ADC in Single- und Dauer- Wandlung

Ich starte meine Wandlung mit Hilfe des Timer0 jede msec.

Ich verwende:
ATmega128 @8MHz
M103C Fuse deaktiviert (also nicht im Atmega103 kompatibilitätsmodus)
SUT0 FUse programmiert, crystal oscillator fast rising power.
Ich programmiere in C
Interrupts sind enabled

--Register-- wie folgt gesetzt:

ADC:
ADMUX=0x20;              //AREF, Left Adjust, Channel 0
ADCSRA=0x8A;             //ADC Enable, interrupt enable, Prescaler 16
SFIOR=SFIOR&0x8F;

USART:
UCSR0A=0x00;              //Flag Register
UCSR0B=0xF8;              //Receive/Transmit Complete Interrupt
aktiviert, Data Register Empty interrupt aktiviert, Receiver Enable,
Transmitter enable,
UCSR0C=0x06;              //asynchron, no parity, 1 Stopbit,8Datenbits
UBRR0H=0x00;              //Baudrate 9600
UBRR0L=0x33;              //Baudrate 9600

Timer0:
ASSR=0x00;              //Asynchron Status register
TCCR0=0x02;              //Prescaler=8, daher Timer-Takt 1Mhz
TCNT0=0x05;              //Vorladewert, zählt nur 255-5=250 Werte
OCR0=0x00;              //Überlauf-Modus, nicht Compare
TIMSK=0x01;              //Überlauf-Interrup enable
ETIMSK=0x00;




--ISR--:

interrupt [ADC_INT] void adc_isr(void)
{  adc_data=ADCH;  }

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
ADCSRA=0xCA;   //Wandlung des ADC starten
TCNT0=0x05;    //Register des Timers wieder vorladen
}



--MAIN--

void main (void) {
while(1) { }
}

von Thomas (Gast)


Lesenswert?

Kann es sein das der ADC mit der Wandlung nicht schnell genug fertig
wird und der USART Interrupt eine höhere Priorität hat und daher die
ADC ISR "abblockt"

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.