Forum: Mikrocontroller und Digitale Elektronik Uart-Interrupt stört Timer-Interrupt


von Peter Bauer (Gast)


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

von Peter Bauer (Gast)


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

von Christian Weigand (Gast)


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?

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.