Forum: Mikrocontroller und Digitale Elektronik UART bei Atmega8 funktioniert nicht


von Gerrit (Gast)


Lesenswert?

Hallo zusammen,

ich habe folgenden Assembler-Code auf meinen Atmega8 gebracht, der auf 
dem myAVR MK2 ist. Leider passiert in meinem Terminal gar nichts und 
auch die LEDs, die den Datenfluss auf dem mySmartUSB anzeigen sollen 
(grün), leuchten dauerhaft.

.include "m8def.inc"

.def temp    = r16                              ; Register für kleinere 
Arbeiten
.def zeichen = r17                              ; in diesem Register 
wird das Zeichen an die
                                                ; Ausgabefunktion 
übergeben

.equ F_CPU = 3686400                            ; 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, HIGH(RAMEND)
    out     SPH, temp
    ldi     temp, LOW(RAMEND)
    out     SPL, temp

    ; Baudrate einstellen

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

    ; Frame-Format: 8 Bit

    ldi     temp, (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)
    out     UCSRC, temp

    sbi     UCSRB,TXEN                  ; TX aktivieren

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

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

; kleine Pause zum Synchronisieren des Empfängers, falls 
zwischenzeitlich
; das Kabel getrennt wurde

sync:
    ldi     r16,0
sync_1:
    ldi     r17,0
sync_loop:
    dec     r17
    brne    sync_loop
    dec     r16
    brne    sync_1
    ret

von spess53 (Gast)


Lesenswert?

Hi

>.equ F_CPU = 3686400

Wo kommt diese Frequenz her?

MfG Spess

von S. Landolt (Gast)


Lesenswert?

Im Programm sehe ich keine Auffälligkeit; ich würde den Fehler in der 
Hardware suchen.

von H.Joachim S. (crazyhorse)


Lesenswert?

Gerrit schrieb:
> auch die LEDs, die den Datenfluss auf dem mySmartUSB anzeigen sollen
> (grün), leuchten dauerhaft.

Sieht richtig aus. Und wenn die LED Tx anzeigt, ist es auch richtig, 
dass die dauerhaft leuchten (dein Programm sendet dauerhaft)

Problem also eher Termionalprogrammeinstellungen/Verkabelung.

von Fiete (Gast)


Lesenswert?

Gerrit schrieb:
> ich habe folgenden Assembler-Code auf meinen Atmega8 gebracht, der auf
> dem myAVR MK2 ist. Leider passiert in meinem Terminal gar nichts und

Das ist ja 1:1 vom Tutorial? Bis auf die CPU Frequenz. Da kann doch 
eigentlich nichts faul dran sein. Fuses am Mega8 eingstellt?

Mehr Infos über die HW und den Aufbau. TX/RX vertauscht?

von Gerrit (Gast)


Lesenswert?

Das Board ist ja fertig. Nur USB dran und los gehts.

von Gerrit (Gast)


Lesenswert?

Sorry, nun gehts im Arduino Terminal.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Gerrit schrieb:
> UART bei Atmega8 funktioniert nicht

Wenn ich solche Thread-Titel lesen muss, dreht sich mir immer der Magen 
um. Richtig müsste es heißen:

"Anwender von ATMega8 hat momentan keinen Plan..."

Großartig wäre dann auch noch eine detaillierte Vermutung, wo das liebe 
Forum denn bitte den Fehler suchen und finden soll.

Gerrit schrieb:
> Sorry, nun gehts im Arduino Terminal.

Und woran lag es?

: Bearbeitet durch User
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.