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