UART Test SDK500 --- Problem

#2424219
Lesenswert?

Hallo,

habe soeben das Beispielprogramm aus dem Tutorial --> 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART erstes 
Programm testen wollen, doch ich bring es nicht zum Laufen. Hab im HTerm 
(Terminal), alles richtig eingestellt --> 8 Data, 1 Stop, none Parity. 
Es wird nichts an den HTerm übertragen. Worann kann das liegen? Ich 
bitte um Hilfe, danke.

MfG Vali
Angehängte Dateien:
#2424401
Lesenswert?

Mach mal eine Brücke zwischen RXD und TXD und gib im Hterm was ein, es 
sollte als Echo zurück kommen.
Dann weisst du schon mal das die Verbindung zum PC passt.
Dann kannst du noch die RX TX Verbindung zum Port verdreht haben. Wenn 
das auch nicht hilft, dann ist in deinem Programm ein Wurm.
#2425440
Lesenswert?

Sepp Horst schrieb:
> Danke für den Tipp, habe TX und RX miteinander verbunden.

Wo hast du das gemacht?

So richtig aussagekräftig ist dieser Test erst dann, wenn du den µC aus 
dem Sockel nimmst und die beiden Pins im µC-Sockel brückst. Damit hast 
du dann die komplette Kette getestet.

> Kommunikation funktioniert. Weiteres habe ich das Kabel an RX/TX
> umgedreht, brachte aber auch kein Resultat. Noch Ideen?

In 95% aller Fälle stimmt die Taktrate des µC nicht. Allerdings sieht 
man dann meistens trotzdem am Terminal was. Sind dann halt die falschen 
Zeichen. Aber es rührt sich zumindest was.
#2425484
Lesenswert?

Habe am SDK500 die beiden Pins RS232 Spare (TX/RX) kurzgeschlossen und 
dannach konnte Zeichen Zeichen Übertragen, welche anschließend Empfangen 
wurden.

Verwende den internen Oszillator des Boards. Welche Settings muss ich 
bezüglich der Taktrate machen?

Danke für die Antworten =)
Angehängte Dateien:
#2425529
Lesenswert?

Ich wiederhole mich gerne

>> Danke für den Tipp, habe TX und RX miteinander verbunden.
>
> Wo hast du das gemacht?
>
> So richtig aussagekräftig ist dieser Test erst dann, wenn du den µC aus
> dem Sockel nimmst und die beiden Pins im µC-Sockel brückst. Damit hast
> du dann die komplette Kette getestet.


Das hier

> Habe am SDK500 die beiden Pins RS232 Spare (TX/RX) kurzgeschlossen
> und dannach konnte Zeichen Zeichen Übertragen, welche anschließend
> Empfangen wurden.

würde mir nicht reichen.
Erst dann wenn ich zweifelsfrei sagen kann, dass die Signale auch 
wirklich bis zum µC durchkommen bzw umgekehrt vom µC bis zum PC 
durchkommen, erst dann würde ich diesen Test als erfolgreich werten.

RS232 Spare ist nicht der µC. Vom Spare Connector bis zum µC ist es noch 
ein Stück, auf dem ebenfalls was schiefgehen kann.
#2425531
Lesenswert?

Hier das Programm mit den eingestellten 3,6864 MhZ. Habe ich einen 
Fehler im Programm (ist vom Tutorial)?

.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//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, 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



Es tut sich einfach noch immer nichts :/

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren