Forum: Mikrocontroller und Digitale Elektronik Atmega8 - RS232 - UART mit STK500 -> Problem Zeichenzu empfangen


von Roger P. (hpa)


Lesenswert?

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!

von anfaenger (Gast)


Lesenswert?

Um den Takt vom STK500 an den AVR zu legen muss sehr wohl ein Jumper 
gesteckt werden. Ich glaub Xtal oder so heißt der.

Zu den Fuses:
http://palmavr.sourceforge.net/cgi-bin/fc.cgi

Low: 0xFF, High: 0x99 müsste z.B. funktionieren. Aber auch nur wenn das 
STK500 richtig konfiguriert ist (sprich: externer Takt liegt am 
Controller an).

von Uwe W. (dk1kq)


Lesenswert?

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

von Roger P. (hpa)


Lesenswert?

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.

von Roger P. (hpa)


Angehängte Dateien:

Lesenswert?

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 :-)

von spess53 (Gast)


Lesenswert?

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

von Roger P. (hpa)


Lesenswert?

Hallo spess53,

Danke für die schnelle Rückmeldung. Dann wär es wohl besser wenn ich mir 
so einen 4Mhz Quarz kaufe und mit dem dann weiter mache?! Ich muß 
sowieso in den Bastlerladen ;-) ...

Gruß
Roger

von Roger P. (hpa)


Lesenswert?

hab jetzt einfach mal den internen Takt bei den Fuses genommen und im 
Programm 4 Mhz eingestellt und siehe da es geht :-). Ist wahrscheinlich 
nicht so stabil aber für meine Testzwecke reicht's erstmal ....

von spess53 (Gast)


Lesenswert?

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

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.