Forum: Mikrocontroller und Digitale Elektronik UART Test SDK500 --- Problem


von Sepp H. (vali1991)


Angehängte Dateien:

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

von Hubert G. (hubertg)


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.

von Karl H. (kbuchegg)


Lesenswert?


von Sepp H. (vali1991)


Lesenswert?

Danke für den Tipp, habe TX und RX miteinander verbunden. Resultat diese 
Kommunikation funktioniert. Weiteres habe ich das Kabel an RX/TX 
umgedreht, brachte aber auch kein Resultat. Noch Ideen?

von Karl H. (kbuchegg)


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.

von Sepp H. (vali1991)


Angehängte Dateien:

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 =)

von STK500-Besitzer (Gast)


Lesenswert?

Sepp Horst schrieb:
> Verwende den internen Oszillator des Boards. Welche Settings muss ich
> bezüglich der Taktrate machen?

Du musst die richtige Fuse-Kombination wählen:
Der S*T*K-Oszillator gilt als externer Oszillator, nicht als 
RS-Dingsbums.

von Sepp H. (vali1991)


Lesenswert?

> Du musst die richtige Fuse-Kombination wählen:

Bei Fusesettings extern verwenden, 3-8 MhZ?



> Der S*T*K-Oszillator gilt als externer Oszillator, nicht als
> RS-Dingsbums.

Fusesetting: Ext. RC Clock?


Was muss ich bei den beiden anderen Screenshots einstellen?

von STK500-Besitzer (Gast)


Lesenswert?

Sepp Horst schrieb:
> Fusesetting: Ext. RC Clock?
Eben nicht. Das Ding heisst "ext. Oszillator" oder so.

>
>
> Was muss ich bei den beiden anderen Screenshots einstellen?
Nichts weiter. Das STK500 schafft allerdings maximal 3,686MHz...

von Sepp H. (vali1991)


Angehängte Dateien:

Lesenswert?

>> Fusesetting: Ext. RC Clock?

Ext Clock?

von STK500-Besitzer (Gast)


Lesenswert?

ja.

von Sepp H. (vali1991)


Lesenswert?

Habe jetzt Ext. Clock eingestellt, es tut sich noch immer nichts.
Im Programm hab ich die 3686400 Hz eingestellt, welche auf Screenshot 3 
eingestellt sein müssten.

von STK500-Besitzer (Gast)


Lesenswert?

Für solche Sachen programmiere ich mir dann gerne einen Blinker ins 
Programm...

von Karl H. (kbuchegg)


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.

von Sepp H. (vali1991)


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 :/

von Michael H. (michael_h45)


Lesenswert?

Sepp Horst schrieb:
> .equ F_CPU = 3686400//4000000                            ; Systemtakt in
                      ^^
Das ist kein Kommentar in Assembler.

von Sepp H. (vali1991)


Lesenswert?

Ok, dem Compiler war es egal. Aber, trotzdem danke.

von Michael H. (michael_h45)


Lesenswert?

aha... woher willst du das wissen?

von Sepp H. (vali1991)


Lesenswert?

Mit dem falschen Kommentar bracht der Compiler null Warnings, sowie null 
Errors. Habe aber nun das Kommentar durch ";" geändert, es hat sich aber 
nichts darann geändert. Kann noch immer nichts empfangen.

von Michael H. (michael_h45)


Lesenswert?

was du da geschrieben hast, ist vermutlich eine division... und nicht 
nur ein fehlerhafter kommentar.

von Sepp H. (vali1991)


Lesenswert?

Ich kann Zeichen empfangen, der Fehler lag daran, dass ich das Programm 
in den EPROM und nicht in den Flash geladen habe.
Es kommt zwar nur wirres Zeugs an, aber das wird warscheinlich an den 
falschen Einstellungen des Clocks liegen.

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.