USART - ADC vertragen sich nicht

Gast #322504
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) { }
}

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