Problem mit UART und Timer Interrupt

Gast #2798294
Hallo

Ich habe gerade auf meinem Mega8 ein Programm laufen, das mir auf 
Anfrage über die UART Schnittstelle Daten zurück liefert (Temperatur, 
ADC Wert etc.). Die Baudrate beträgt 38400. Der Controller läuft mit dem 
internen Takt (8MHz).
Jetzt möchte ich zusätzlich zu der UART Kommunikation noch ein Servo 
ansteuern. Allerdings streikt, sobald ich die Interrupt Routine für den 
Timer freischalte, die UART Kommunikation. Für mich sieht es so aus, als 
ob der Controller vor lauter Servo-Timer ISR nicht mehr dazu kommt, die 
Zeichen (Anfragen) aus der UART Receive ISR abzuholen.
1
uint8_t servo_init(void)
2
{
3
  TIMSK|=(1<<OCIE2);
4
  TCCR2 |= (1<<WGM21) | (1<<CS20);  //Prescale=1, CTC mode
5
  OCR2 = F_CPU/100000;      //alle 10µS ein IRQ
6
  DDRSERVO|=(1<<SERVOPIN);
7
  return SUCCESS;  
8
}
9

10
ISR(USART_RXC_vect)
11
{
12
  g_UART_DATA_IN_BUFF[g_UART_BUFF_COUNT++] = UDR;
13
  if(g_UART_BUFF_COUNT == UART_IN_BUFF)
14
  {
15
    g_UART_BUFF_COUNT = 0;
16
  }
17
  sei();
18
}
19

20
ISR(TIMER2_COMP_vect)
21
{
22
  static int count;
23
  if(count>servopos)SERVOPORT&=~(1<<SERVOPIN);
24
    else SERVOPORT|=(1<<SERVOPIN);
25
  if(count<1500)count++;
26
    else count=0;
27
  sei();
28
}

Wie kann ich das Problem lösen?

Gruß

Bean

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.