mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega8 und UART Probleme


Autor: Sven Scholz (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Also irgendwie bekomme ich meine serielle Verbindung über UART nicht am
Laufen. Ich benutze hier einen ATmega8, der extern von einem Oszillator
auf 4 MHz gebracht wird (werden soll).

Ich bin mir zunächst nicht sicher, ob die Fuses dafür richtig gesetzt
sind, deshalb der Dateianhang...
Stimmt das so? Der Oszillator ist über XTAL1 mit dem Mikrocontroller
verbunden.
Funktioniert UART eigentlich nur mit externer Taktung oder geht das
auch über die Internal Clock?

Zum Test der UART-Funktion habe ich folgendes Programm kompiliert und
hochgeladen:

.include "m8def.inc"

.def temp = r16
.equ CLOCK = 4000000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1

        ; Stackpointer initialisieren
        ldi temp, LOW(RAMEND)
        out SPL, temp
        ldi temp, HIGH(RAMEND)
        out SPH, temp

        ; Baudrate einstellen
        ldi temp, LOW(UBRRVAL)
        out UBRRL, temp
        ldi temp, HIGH(UBRRVAL)
        out UBRRH, temp

        ; Frame-Format: 8 Bit
        ldi temp, (1<<URSEL)|(3<<UCSZ0)
        out UCSRC, temp

        sbi UCSRB,TXEN                    ; TX aktivieren

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

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


Da ist hoffentlich kein Fehler enthalten???

Danke schon mal für die Beantwortung meiner Fragen.
Um die Funktion zu testen arbeite ich übrigens mit HyperTerminal, was
problemlos klappen sollte oder?

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Bild zeigt Clockselect auf 0, das heißt, es ist für externen Takt
eingestellt. Du musst daher einen externen Taktgeber (z.B.
Quarzoszillator, der "Blechsarg" mit den 4 Beinen) anschließen.

Die Frequenz von 4MHz ist für UART nicht gut geeignet. Mit einem
"Baudratenquarz" von z.B. 3,6864MHz geht das bedeutend besser.

Solltest du keinen ISP-Zugriff mehr haben, dann solltest du einen
externen Takt anschließen und die Fuses wieder richtig setzen. Wie das
geht, findest du im Datenblatt unter Clock sources und fuses.

...

Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, diesen Blechsarg mit 4 Beinen habe ich dran.
Zur Datenübertragung benutze ich die Pins PD.0 und PD.1. Das stimmt
doch oder?
Auch wenn die Frequenz vielleicht nicht haargenau passt, müsste ich
doch irgendetwas empfangen oder?

Autor: Pete da Heat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ja, PD0 (RXD) und PD1 (TXD) stimmt. Mit 4MHz geht's auch, nehm ich
auch her.

Viel Spaß noch
Pete

Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiterhin benutze ich den MAX232N mit 1uF Kondensatoren. Das sollte doch
auch unkritisch sein?

Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe den MAX232N folgendermaßen beschaltet.

PD.0 --> R1IN
PD.1 --> T1IN
T1OUT --> 3. Pin der D-Sub Buchse
R1OUT --> 2. Pin der D-Sub Buchse

Stimmt das denn so? Habe die Schaltung auf irgendeiner Internetseite
gefunden. Sie weicht von der hier im Tutorial vorgestellten Schaltung
ab, habe ich gerade festgestellt. Welche ist denn jetzt richtig???

Bevor ich die Sache jetzt umlöte, brauche ich eine Bestätigung für
meine Annahme. DANKE!

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RX ist falsch herum.

TX ist senden, also IN an AVR, OUT an Leitung
RX ist empfangen, also IN an Leitung, OUT an AVR

Oder?

...

Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich werde mich jetzt mal ans umlöten machen...

Ein gutes Beispiel dafür, dass man nicht jeder Internetseite Glauben
schenken sollte.

Naja, vielleicht ist das auch eine Version die ein Nullmodemkabel
verwendet. Keine Ahnung.

Bis gleich...

Autor: Sven Scholz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, bin jetzt fertig und ihr werdet es nicht glauben, es
funktioniert...

Echt bescheuert.

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast ne knappe Stunde für 4 Lötstellen gebraucht? ;)

Autor: robert schwarzelt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich würde das progie vom grundaufbau her auch nuzen wollen.

aber wenn ich es in avr studio simuliere bleibt er mir bei der
übertragung des drtitten buchstabens in der schleife in serout hängen.

..denn nachdem der 2. buchstabe gesendet wurde wird UDRE nicht wieder
auf high gesetzt. warum auch immer?

ich hätte es ja schon praktisch probiert, aber ich habe momentan keinen
atmega8 da.

mfg robert

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.