PDA

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



Desert-Storm
15.06.2008, 14:32
Hallo Leute,

ich habe mich seit kurzem mal an das Uart meines Atmega8 gewagt. Allerdings habe ich das Problem das ich in meinem Terminalprogramm ( Hterm) nur manchmal das vom Chip gesendete 'Test!\n\r' empfange. Wenn ich die Verbindung bei Hterm allerdings öfters neu verbinde kommt das Test irgendwann. Kann mir jemand sagen wo mein Fehler liegt?
Ich möchte damit wenns läuft Messwerte übertragen und es hat ja keinen Sinn wenn die nur manchmal richtig übertragen werden.

Hier ist der von mir verwendete Code:



.include "m8def.inc"

.def temp = r16
.def zeichen = r17


.equ F_CPU = 4000000 ; Systemtakt in Hz
.equ BAUD = 9600 ; Baudrate

; Berechnungen
.equ UBRR_VAL = ((F_CPU+BAUD*8)/(BAUD*16)-1) ; clever runden
.equ BAUD_REAL = (F_CPU/(16*(UBRR_VAL+1))) ; Reale Baudrate
.equ BAUD_ERROR = ((BAUD_REAL*1000)/BAUD-1000) ; Fehler in Promille

.if ((BAUD_ERROR>10) || (BAUD_ERROR<-10)) ; max. +/-10 Promille Fehler
.error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
.endif

; Stackpointer initialisieren

ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp

; Baudrate einstellen

ldi temp, HIGH(UBRR_VAL)
out UBRRH, temp
ldi temp, LOW(UBRR_VAL)
out UBRRL, temp


ldi temp, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)|(0<<UCSZ2)|(0<<UMSEL)|(0<<UPM0)|(0<<UPM1)|(0<<USBS)
out UCSRC, temp

sbi UCSRB,TXEN

loop:
ldi zeichen, 'T'
rcall senden
ldi zeichen, 'e'
rcall senden
ldi zeichen, 's'
rcall senden
ldi zeichen, 't'
rcall senden
ldi zeichen, '!'
rcall senden
ldi zeichen, 10
rcall senden
ldi zeichen, 13
rcall senden
rjmp loop

senden:
sbis UCSRA,UDRE

rjmp senden
out UDR, zeichen
ret


Danke

Michael

wolli_bolli
15.06.2008, 16:50
Hallo Desert-Storm
Es kann sein, dass du bei Com-Terminal eine falsche Einstellung gemacht hast (Stichwort: Flusssteuerung). Ich hatte damit früher auch des öfteren Ärger.
Deswegen verwende ich seither für solche Sachen Com Terminal (http://home.wtal.de/Mischka/VB/COM/), das ist viel benutzerfreundlicher. Würde es an deiner Stelle mal damit probieren.
Beim schnellen Durchlesen kann ich in deinem Code übrigens keinen Fehler finden, das heißt aber nicht, das da keiner ist!
Gruß wolli_bolli