PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : atmega8 rx interrupt



sg10241024
20.11.2005, 02:11
Hallo,

ich habe große Probleme mit dem Atmega8 und dem RX Interrupt.
Leider funktioniert es nicht. Ich programmiere mit codevision.

Ich benutze einen Quarz mit 8 MHz. Die fuses sind auf mittlere Frequenz eingestellt.
Als Baudrate benutze ich 38400.

Vielleicht kann mir jemand sagen, wo der Fehler liegt. Compilieren funktioniert fehlerfrei.

Danke
Sarah

kater
20.11.2005, 08:31
Du hast was vergessen;


#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

Ob die Register gesetzt sind hab ich nicht ueberprueft da mit Hex in Binaer umwandeln zu muehsam ist. (Ja ich hab auch einen Taschenrechner der das kann ;))

Das mag wohl auch an Codevision liegen, aber beit mir schaut eine INTRoutine so aus:


SIGNAL(SIG_UART_RECV)
{
}

Vllt. ist das bei Codevision ja auch anders

SprinterSB
20.11.2005, 12:31
So weit sehen die Bits ok aus.


// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 38400
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x0C;

Wenn du den Überblick behalten willst, dann vermeide diese ganzen magischen Zahlen, das blickst du ruck-zuck nicht mehr.

Falls es automatisch generiert wurde ist es Schrott, weil die Kommentare nicht dazu passen.

Wenn du Interrupts haben willst, musst du diese ermöglichen (I-Flag in SREG).

linux_80
20.11.2005, 12:32
Hallo,
abgesehen von dem was kater schon geschrieben hat,
es müssen global alle Interrupts aktiviert/erlaubt werden,
das sehe ich jetzt auf die schnelle nirgends,
ob diese ISR-bezeichnug auch den richtigen Interrupt abarbeitet, kann ich nicht sagen.

skillii
20.11.2005, 16:24
versuch mal das vor deine "while Endloßschleife" im Hauptprogramm zu schreiben:

#asm("sei")

ansonsten müsste es denke ich funktionieren ...

@kater
Die Include-files(avr/io.h,...) brauchst man im Codevision nicht ...(Das ganze AVR-Spezifische steht in mega8.h drin ...)

sg10241024
20.11.2005, 17:02
hatte vergessen die interrupts global anzuschalten

vielen Dank