www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega16


Autor: Steffen W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab einen ATMega16.
Wollt nun einmal das Tutorial durcharbeiten. Bin beim UART-angelangt.
Im Datenblatt zum AtMega16 steht, dass sich bei UART-Funktionen im
Sinne von der Registerbelegung usw. nichts geändert hat.
Defacto müsste bei folgendem Code ja auch auf einem PC über ein
Terminal-Programm etwas zu lesen sein. Bei mir kommen aber nur
kryptische Zeichen an.

.include "m16def.inc"

.def temp = r16
.equ CLOCK = 1000000
.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

Für ein paar Tipps wäre ich sehr dankbar!

Autor: Thomas Pototschnig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Läuft dein ATMEGA wirklich auf 1MHz?

Autor: Steffen W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hatte gelesen, dass der ATMEGA auf 1 MHZ vorkonfiguriert ist. Wenn
dies doch nicht der Fall sein sollte, wie kann ich das hinbasteln, dass
der auf 1 Mhz läuft??

Autor: Thomas Pototschnig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein das ist schon richtig. Aber dann kann man wenigstens ausschließen,
dass dein Takt dran schuld ist.

Es gibt meines Wissens ein Calibration-Wert, den man in irgendein
Register laden sollte, damit der RC-Oszillator genauer wird.

Das solltest du vielleicht mal ausprobieren, weil der RC-Oszillator
nicht so genau ist. Dummerweise hab ich immer mit Quarz gearbeitet und
kann die auch nicht genau sagen, wie es genau funktioniert.

Mfg
Thomas Pototschnig

Autor: Thomas Pototschnig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was es noch sein kann ...
Bei URB=6 hat der ATMEGA 7% Abweichung von den 9600Baud bei 1MHz (Siehe
Datenblatt). Die Formel von dir berechnet sogar nur UBR=5, weil es nicht
rundet sondern nur abschneidet - also noch schlechter.

Mit UBR=12 und gesetzten x2-Bit sinkt der Fehler auf 0,2% - das
könntest du mal ausprobieren. Das bit heißt U2X und ist im
UCSRA-Register.

Hoffe das hilft etwas.

Mfg
Thomas Pototschnig

Autor: Thomas Pototschnig (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah da ist das Problem:
3<<UCSZ0 setzt UCSZ0 und UCSZ1 - aber das ist undefiniert ... sollte
wohl eher
1<<UCSZ0 heißen :-)

Autor: Pete da Heat (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der interne Oszillator ist zu ungenau (+- 3% Abweichung), UART mag aber
keine Abweichungen >1%. Nimm einen externen Quarz (evtl. sogar
Baudratenquarz), damit sparst Du dir viel Ärger.

Pete

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.