mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART bei Atmega8 geht nicht


Autor: Stefan A. (aige)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

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

Autor: hallo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Stefan A. (aige)
Datum:

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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stichwort: Interrupt-Tabelle

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Stichwort: Interrupt-Tabelle

Er benutzt aber keine Interrupts!

MfG Spess

Autor: magnetus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan A. (aige)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Christopher G. (cbg)
Datum:

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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast 10 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan A. (aige)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: magnetus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan A. (aige)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Gast 10 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Wow das wars.

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

MfG Spess

Autor: Stefan A. (aige)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.