Uart-Interrupt stört Timer-Interrupt

Gast #90100
Lesenswert?

hallo,

habe ein Prog-geschrieben, welches ein Schrittmotor steuern
soll(Geschwindigkeit)

bei Programmstart, dreht sich der Schrittmotor mit einer bestimmten
Geschwindigkeit.
Wenn ich dem Avr nun per Uart die neue Geschwindigkeit mitteilen
möchte, stoppt der motor!!!!
und der Timer auch.

hier mein Code:
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/sfr_defs.h>
#include <avr/interrupt.h>


#define true 1

unsigned char tick=0;
unsigned char counter=0;
unsigned char temp;
unsigned char geschwindigkeit=10;


INTERRUPT (SIG_OVERFLOW0)
{
  if (tick==geschwindigkeit)
    {
      switch(counter)
  {
  case 0:
    tick=0;
    PORTB=0x00;
    counter++;
    break;
  case 1:
     tick=0;
    PORTB=0x01;
    counter++;
    break;
  case 2:
     tick=0;
    PORTB=0x03;
    counter++;
    break;
  case 3:
     tick=0;
    PORTB=0x02;
    counter=0;
    break;
  }

    }
  tick++;
}
INTERRUPT (SIG_UART_RECV)
{
   temp=UDR;
   geschwindigkeit=temp;
   tick=0;
}
/************************************************/
void uartreceive_ini (void)
{
  UBRR=25;
  sbi(UCSRB,RXEN);
  sbi(UCSRB,RXCIE);
}
/************************************************/
int main (void)
{
  uartreceive_ini();
  TCCR0=0x02;
  TCNT0=0x00;

  TIMSK=0x02;

  DDRB=0xFF;
  PORTB=0x00;
  sei();
  while(1)
    {

    }

  return 0;
}


gruß
Peter Bauer
Gast #90101
Lesenswert?

so habe es jetzt gelöst.

habe aus dem
INTERRUPT (SIG_UART_RECV)
{
   temp=UDR;
   geschwindigkeit=temp;
   tick=0;
}
ein
SIGNAL (SIG_UART_RECV)
{
   temp=UDR;
   geschwindigkeit=temp;
   tick=0;
}
gemacht


und es funktioniert!!

einen schönen Formel1 Sonntag

Peter Bauer
Gast #90102
Lesenswert?

Hallo,

Ich habe ein ähnliches Problem:

Ich benötige am ATMega128 4 Interrupts:
1. UART0
2. UART1
3. Ext. Interrupt 6 (Port E.6)
4. Ext. Interrupt 7 (Port E.7)

Solange ich den Chip nur für die UART Interrupts konfiguriere
funktioniert der Interrupt von UART0. Sobald ich die Ext. Int.
zusätzlich konfiguriere tut der UART Interrupt nicht mehr!

Kann mir jemand helfen?

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