Forum: Mikrocontroller und Digitale Elektronik UART bei Atmega8 geht nicht


von Stefan A. (aige)


Angehängte Dateien:

Lesenswert?

Hallo,

ich versuche nun seit Tagen über die RS232 Schnittstelle mit dem Atmega8 
was zum Computer zu schicken, aber es gelingt mir einfach nicht. Es 
kommt einfach gar nix an.
Ich verwende HTerm als TerminalProgramm, aber es ist das erste mal das 
ich mit Terminalprogrammen arbeite.
Die Leuchte "CTS" in Hterm blinkt dabei dauernd, aber ich empfange 
einfach nix.
Ich verwende das StarterBoard aus dem Shop, und ein stinknormales Kabel, 
also KEIN Nullmodemkabel.
Der ATMega8 läuft mit 8MHz externer Quarz.


Bitte helft mir weiter



Das ist mein Programm, es sollte dem aus dem Tutorial entsprechen:


.include "m8def.inc"      ; Definitionsdatei für den Prozessortyp 
einbinden

.def temp1     = r16
.def temp2     = r17
.def temp3     = r18
.def zeichen  = r19


.equ RxD  = 0    ;UART Reveive
.equ TxD  = 1    ;UART Transmit

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

.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

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


.org 0x0000
         rjmp    main

main:
        ldi     temp1, LOW(RAMEND)
        out     SPL, temp1
        ldi     temp1, HIGH(RAMEND)
        out     SPH, temp1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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

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

      sbi     UCSRB,TXEN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    ldi    temp1,0
    ldi    temp2,0
    ldi    temp3,0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

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
        rjmp    serout
        out     UDR, zeichen
        ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

sync:
            push  temp1
            push  temp2

            ldi     temp1,0
sync_1:     ldi     temp2,0
sync_loop:  dec     temp2
            brne    sync_loop
            dec     temp1
            brne    sync_1

            pop  temp2
            pop  temp1
            ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

von hallo (Gast)


Lesenswert?


von Stefan A. (aige)


Lesenswert?

:-)
Ich hab das Tutorial nun schon mehrmal durchgelesen und es ist mir 
nichts aufgefallen, was falsch sein könnte

von Michael (Gast)


Lesenswert?

Stichwort: Interrupt-Tabelle

von spess53 (Gast)


Lesenswert?

Hi

Ich hab das Tutorial nun schon mehrmal durchgelesen und es ist mir
>nichts aufgefallen, was falsch sein könnte

Mir auch nicht.

>Der ATMega8 läuft mit 8MHz externer Quarz.

Wirklich? Also Fuses-Bits richtig gesetzt?

MfG Spess

von spess53 (Gast)


Lesenswert?

Hi

>Stichwort: Interrupt-Tabelle

Er benutzt aber keine Interrupts!

MfG Spess

von magnetus (Gast)


Lesenswert?

Was befindet sich denn Hardwaremäßig zwischen den RXD/TXD Pins und dem 
RS232 Kabel?

Hast du die Masse auch mit der Strippe verbunden?

Gruß,
Magnetus

von Stefan A. (aige)


Angehängte Dateien:

Lesenswert?

Ich hab zB ein Programm wo ne Uhr läuft getestet und das funktioniert 
einwandfrei. Ne Langzeitmessung, ob es sich um 8.00000..usw. Mhz handelt 
hab ich allerdings nocht nicht gemacht, aber es steht im Handbuch das es 
genau 8MHz sein sollen.

Im Anhang sieht man wie ich es im AVRStudio eingestellt hab

von Christopher G. (cbg)


Lesenswert?

Stell mal das UBRR Register händisch mit dem Wert aus dem Datenblatt 
ein. Die Tabellen fangen bei mir auf Seite 159 an.

von Michael U. (amiga)


Lesenswert?

Hallo,

Michael schrieb:
> Stichwort: Interrupt-Tabelle

er benutzt keine Interrupts, er gibt auch keine frei.
Wie soll ihm Dein Hinweis also helfen?

Grrr, spess53 war schneller...

Sieht sonst erstmal glaubwürdig aus.

Das Board kenne ich nicht weiter, ob die Belegung mit Deinem Kabel 
stimmt, solltest also eher Du anhand der Schaltung kontrollieren können.

HTerm ist ein nettes Analyseprogramm, für solche Sachen ist mir aber ein 
übliches Terminalprogramm trotzdem lieber.
Ich benutze meist das alte TeraTerm V2.3

9600Baud, kein Hardware-Handshake sollte ja zu Deinem Source passen.

Gruß aus Berlin
Michael

von Gast 10 (Gast)


Lesenswert?

Alte Vorgehensweise:
-Baudrate am Sender und Empfänger identisch?

-Kabel vom Atmega trennen, Pin 2 und Pin 3 brücken,
 kommt das gesendete Zeichen zurück? JA: PC-Seitig OK

-Kommt am ATMEGA8-TxD-Pin ein Signal raus?
  JA: Atmega sendet wahrschinlich

-Auf der "anderen Seite" des RS-Bausteins? Pegel OK
  JA: Pegelwandler sollte OK sein

Schöne Ostern

von Stefan A. (aige)


Angehängte Dateien:

Lesenswert?

Das ist der Schaltplan aus dem Handbuch.

Allerdings steht auf dem Pegelwandler nicht MAX232 sonder ST232 drauf, 
aber laut dessen Datenblatt sind die beiden identisch...hoff ich...

Ich hab einfach mit einem kurzen Draht ne Verbindung zwischen dem TXD 
Pin am ATmega8 und dem Pin11 (T1In) hergestellt. Der Rest ist schon 
verbunden

von spess53 (Gast)


Lesenswert?

Hi

Ich gehe mal davon aus, das du das Olimex-Board hast.

Hast du die richtigen Controller-Pins mit TX und RX vom Treiber 
verbunden, oder überhaupt verbunden. Wenn ja, dann entferne mal den 
Controller und verbinde in der Fassung Pin 2 und 3. Wenn du jetzt mit 
HTerm etwas sendest, sollte das als Echo zurückkommen.

Wenn du das gemacht hast, meldest du dich wieder.

MfG Spess

von magnetus (Gast)


Lesenswert?

Stefan A. schrieb:
> Ich hab einfach mit einem kurzen Draht ne Verbindung zwischen dem TXD
> Pin am ATmega8 und dem Pin11 (T1In) hergestellt.

Das ist Quatsch...

von spess53 (Gast)


Lesenswert?

Hi

>Pin am ATmega8 und dem Pin11 (T1In) hergestellt

Das ist CTS. Das muss nach RX. Deshalb blinkt auch die CTS-Led.

MfG Spess

von Stefan A. (aige)


Lesenswert?

Wow das wars.

Ich werd verrückt


Ich hab einfach nicht verstanden warum die Pins am ST232 der T1In mit 
CTS, der T2In mit Rx, der R1out mit Tx usw beschriftet sind. Ich dachte 
mir das passt doch überhaupt nicht zusammen weil ich fest davon ausging 
der TDX vom Kontroller muss zum T1IN am ST232

Hab ich da was flasch verstanden?

Aber DANKE, DANKE für die Hilfe!

von Gast 10 (Gast)


Lesenswert?

TxD und RxD auf der "5V-Seite" des RS-Bausteins sind ebenfalls falsch.

Das Ganze ist aber einfach zu merken:

TxD vom Atmega (da kommt das Serielle Signal raus, Transmit) geht über 
den
Pegelwandler TxD-In->TxD-Out an den RxD-In des PC. (Receive, der PC 
empfängt)

Umgekehrt geht das Transmit-Signal des PC über den Receive-Pegelwandler
an den RxD-Pin des Atmega.

von spess53 (Gast)


Lesenswert?

Hi

>Wow das wars.

Mit den richtigen Informationen von dir wärst du schon vor fast einer 
Stunde so weit.

MfG Spess

von Stefan A. (aige)


Lesenswert?

>Mit den richtigen Informationen von dir wärst du schon vor fast einer
>Stunde so weit

Ich hab versucht so viel Infos zu geben wie möglich, aber dass es an der 
Verkabelung liegt....

Wenn ich was vom PC empfangen möchte, muss ich demnach den RxD vom 
ATmega mit dem R1Out vom ST232 verbinden nehm ich mal an, oder?

von spess53 (Gast)


Lesenswert?

Hi

>Ich hab versucht so viel Infos zu geben wie möglich, aber dass es an der
>Verkabelung liegt....

Der Fehler liegt erfahrungsgemäss in dem Teil, der nicht gezeigt wird. 
Murphy lässt grüssen.

>Wenn ich was vom PC empfangen möchte, muss ich demnach den RxD vom
>ATmega mit dem R1Out vom ST232 verbinden nehm ich mal an, oder?

Ja.

MfG Spess

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.