PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Uart beim Mega8



Brands_Freund
28.02.2006, 22:20
Hallo, habe Probleme mit dem Uart.
Es kommt nur Schrott raus! Siehe Screenshot aus dem Bray-Terminal. Ok, Ich habe einen Mega8 mit nem 8MHz Oszillator. Verwende einen Max232N von Texas Instruments. Die Schaltung entspricht fast dem AVR-Tutorial von www.mikrocontroller.net. Lediglich der Kondensator an Pin 2 muss laut TI Datenblatt von V+ auf GND gelegt werden. Als Testprogramm habe ich den Assamblercode von besagtem Tutorial genommen. Es soll das Wort TEST! in Endlosschleife ausgeben (am PC). Wie gesagt rauskommen tut nur Schrott. Und das Windows Hyper Terminal streikt komplett. Die Baudraten habe ich auch schonmal durchprobiert. (9600-1200) Ich habe jetzt schon alles zum zweiten mal geprüft. Hier der Code:


.include "m8def.inc"

.def temp = r16
.equ CLOCK = 8000000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1

; Stackpointer initialisieren
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp

; Baudrate einstellen
ldi temp, LOW(UBRRVAL)
out UBRRL, temp
ldi temp, HIGH(UBRRVAL)
out UBRRH, temp

; Frame-Format: 8 Bit
ldi temp, (1<<URSEL)|(3<<UCSZ0)
out UCSRC, temp

sbi UCSRB,TXEN ; TX aktivieren

loop: ldi temp, 'T'
rcall serout ; Unterprogramm aufrufen
ldi temp, 'e'
rcall serout ; Unterprogramm aufrufen
ldi temp, 's'
rcall serout ; ...
ldi temp, 't'
rcall serout
ldi temp, '!'
rcall serout
ldi temp, 10
rcall serout
ldi temp, 13
rcall serout
rjmp loop

serout:
sbis UCSRA,UDRE ; Warten bis UDR für das nächste
; Byte bereit ist
rjmp serout
out UDR, temp
ret ; zurück zum Hauptprogramm

Danke schonmal für mögliche Anregungen!

linux_80
01.03.2006, 00:25
Hallo,
wenn Das Programm vom Tut ist, sollte es ja soweit passen,
läuft denn der AVR auch mit 8MHz, also sind die Fuses darauf eingestellt ?

Brands_Freund
01.03.2006, 08:06
Läuft mit 8 MHz hab die selben Fuses schon in Timer Progs verwendet. Irgendwo habe ich mal gelesen das es sinnvoll sei eine ungerade Taktfrequenz für den Uart zu benutzen. Stimmt das und warum?

SprinterSB
01.03.2006, 09:07
Man bekommt damit kleinere Fehler, wenn man Standard-Baudraten wie 38400 nimmt. Siehe auch http://people.freenet.de/gjl/helferlein/avr-uart-rechner.html

ogni42
01.03.2006, 10:32
Welcher Fehler bei einer vorgegebenen Taktrate und Baudrate entsteht, findet sich im jeweiligen Datenblatt des AVR.