Atmega8 - RS232 - UART mit STK500 -> Problem Zeichenzu empfangen

OP #1098800
Hallo,

ich habe das Beispielprogramm hier aus dem Tutorial (UART) kopiert, die 
F_CPU auf 3960000 angepasst und das sollte eigentlich "Test!" am 
Hyperterminal zeigen.

Ich benutze das STK500 und einen Atmega8-16PU. Das 2 adrige Kabel hab 
ich von dem RS232 Jumper an die entsprechenden PINS (PD0 u. PD1) 
gesteckt.
Als Takt möchte ich den intern erzeugten des STK500 benutzen deshalb 
brauch ich ja an den Jumpern nichts zu verändern. Mit den FUSE Bit's hab 
ich ein bisschen gespielt aber komischerweise bekomme ich nur, wenn ich 
den internen Takt wähle, wirre Zeichen am Hyperterminal angezeigt. Laut 
Dokumentation des STK500 müsste ich eigentlich einen externen Takt 
auswählen.

Kann mir jemand sagen was genau bei den Fusebits eingestellt werden muß 
oder was sonst noch falsch sein könnte? Die Postings mit ähnlichen 
Themen haben mir leider nicht weiter geholfen :-(

Danke schon mal!
Bei einem fabrikfrischen ATMEGA8 ist der int. Oszillator aktiv.
Es genügt nicht einen ext. Quarz anzuschließen, man mus die fuses 
setzten

Falls erforderlich schreibe ich Schritt für Schritt, wie man das macht.
Mir hat das Buch AVR mikrokontroller Lehrbuch sehr geholfen.

Gruß Uwe
OP
Hallo Uwe,

wie ich am Namen sehe Funkamateur ;-) (ich auch ...). Wäre nicht 
schlecht wenn Du mir mehr Einzelheiten schreiben könntest. Ich hab 
keinen externen Quarz angeschlossen, die Taktfrequenz wird durch das 
STK500 generiert. Im Handbuch vom STK500 steht dann, dass man trotzdem 
EXT Clock über die Fusebits einstellen soll. Momentan komm ich leider 
nicht an das Handbuch dran sonst hätte ich die Passage rein kopiert. Ich 
schreib dann später nochmal.
OP
so, ich versuche mal noch ein paar mehr Details zu posten. Also in der 
Doku vom STK500 steht folgendes:

------------------------------------
When the XTAL1 jumper is mounted, the STK500 internal clock system is 
used as main
clock to the target AVR. The internal clock system can either use a 
crystal in the
on-board crystal socket or a software-generated clock from the master 
microcontroller.
The frequency of the software-generated clock can be set from 0 to 3.68 
MHz. The
default value is 3.68 MHz. Section 5.3.5.3 on page 5-7 explains how to 
set the clock frequency
from AVR Studio.
When using the STK500 software-generated clock system as main clock, the 
target
AVR microcontroller fuses should be configured for “external clock” as 
clock source.
-------------------------------------

Der Code für den UART ist das (Auszug aus dem Tutorial für UART):

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

---------
bei mir hab ich statt .equ F_CPU = 4000000
                      .equ F_CPU = 3686000

geschrieben weil der interne Takt so groß ist.

wie in der Beschreibung vom STK beschrieben ist sollten die Fuses für 
“external clock” definiert werden. Leider ist das nicht eindeutig. Wie 
man im Anhang sehen kann gibt's da mehrere Möglichkeiten. Ich hab alle 
ext. Clock ausprobiert aber leider ohne Erfolg. Woran kann es liegen?

Danke für Eure Hilfe :-)
Angehängte Dateien:
Gast
Hi

Ich habe zwar die Takterzeugung des STK noch nie nachgemessen. Aber ich 
könnte mir vorstellen, das die nicht so genau ist, um für eine UART 
ausreichend zu sein. Selbst mit einem 'Nicht-Baudraten-Quarz' >= 4MHz 
dürfte eine genauere Baudrate möglich sein.

MfG Spess
Gast
Hi

Wenn du schon Kaufen must, dann nimm gleich einen 'Baudraten-Quarz': 
4,9152MHz, 6,144MHz oder 7,3728MHz. Gibt noch mehr. Damit bekommst du 
bei (fast) allen Baudraten einen Fehler von Null.

MfG Spess

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.