www.mikrocontroller.net

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


Autor: Peter Bauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Bauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Weigand (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.