mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Nichteinmal Baudrate von 9600 möglich!


Autor: GoZu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich arbeite mit einer rs232-Bibliothek, mit der ich Daten über 
die Funktion printf am PC ausgeben kann.
Ich benutze einen atmega32 mit einem 4 MHz Quarz.
Wenn ich jetzt die Baudrate auf 9600 einstelle und Daten (uhrzeit von 
einem RTC) mittels printf auf dem PC ausgeben, dann kommt immer etwas 
total wirres dabei raus!
Wenn ich das ganze aber über eine Schleife ausgebe, wo immer nur jede 
Sekunde Daten gesendet werden, dann funktioniert es.
Mein Problem ist aber, dass ich später einmal größere Datenmengen 
schnell übertragen muss! Normalerweise müsste ich doch nach Datenblatt 
mind. eine Baudrate von 19 200 schaffen? Und bei dieser müsste ich doch 
die ganze Zeit Daten übertragen können oder? Und nicht nur alle paar 
Sekunden....

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wartest du auch bis der puffer leer ist? Eventuell mal den Code 
mitschicken!

Autor: GoZu (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Wo soll ich warten, bis der Puffer leer ist?
Ich hab von der Bibliothek her nur die Funktion printf und da gibts 
keine Abwarte-Funktion oder sonst was...
Und bei der I2C verbindung warte ich eigentlich ab....
Hier ist mal der Code! Wäre wirklich über jede Hilfe sehr dankbar!

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier wartest du
  while (!(UCSRA & (1<<UDRE)));

Dann kann ich mir noch als Fehler vorstellen das ein 4Mhz Quarz 
verwendet wird, in der Doku zum Atmel steht drin bei welchen Quarz es 
keine Rundungsprobleme gibt.
(Warum immer alle Versuchen ein schöne Frequenz 4, 8, 16Mhz zu nehmen 
versteht ich nicht, macht doch bloss ärger)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du solltest dir eventuell noch mal die grundlagen zu C durchlesen.

#include <rs232.c>

C Dateien werden nicht includet, dafür gibt es einen linker. (Das hilft 
bei dem Problem aber nicht weiter)

Autor: GoZu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm ich glaub das Problem liegt eher in der Datenübertragung, also bei 
rs232....
Ich bin noch am Anfang beim Programmieren und um erlich zu sein, bin ich 
mir auch nicht 100%tig sicher, ob ich einen 4 MHz Quarz benutze?!
Bei den Fuse-Register habe ich auf "internen rc osci. 4 Mhz" 
eingestellt.... und dann bei CRYSTAL auf dem stk500 den Quarz 
hineingesteckt. Kann das so stimmen? Kann dort der Fehler liegen?
Fuses sind XTAL1 verbunden und OCSEL die 2 linken....

Danke schonmal...

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn der Quarz komplett anders ist dann geht es gar nicht. Also könnte 
es mit dem 4Mhz schon hinkommen. (Der Interne Ozilator kann abweichen, 
von vielen wird empfohlen für RS232 auf einen Externen Quarz zu gehen)

Hast du auch die Richtigen Parameter bei deinem PC angestellt.

Also 8Bit keine Parität und 1Stop bit, keine Flusskontrolle.

Autor: Matthias D. (marvin42)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> .."internen rc osci. 4 Mhz"
in dem Fall verwendest du - wie's der Name sagt - auch den internen 
Oszillator, wenn du einen externen 4 MHz Quarz verwendest, musst du bei 
den Fuses auch einen "Ext. Crystal/Resonator High Freq" einstellen

Die RC-Oszillatoren sind meistens nicht genau genug für Baudraten, daher 
wird i.d.R empfohlen auf externe Quarze zu gehen. Vielleicht 
kontrollierst du auch mal nach ob ins UBRR Register auch wirklich eine 
25 geladen wird (wegen 4.000.000 / 16 = 250.000, und (250.000 / 9600)-1 
= 25,041).

Autor: GoZu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm... nur mal ganz kurz als Verständnisfrage: internet Ozilator macht 
der atmega32 (oder das stk500?) selbst? Und externer ist der, den ich 
hineinstecke beim CRYSTAL?
Ich habe nämlich dann einen extern hineingesteckt, aber auf intern 
eingestellt??? Wie müsste ich den das richtig Konfigurieren?

Ich benutze am PC das Programm HTerm... dort hatte ich auf no mask 
eingestellt, habs dann mit 8 bit ausprobiert, aber da ging es immer noch 
nicht. Die sonstigen Einstellungen gibt es dort anscheinend nicht oO

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bei jedem Programm was die Serielle schnittstelle nutzt kann man das 
Einstellen. Teste mal mit Hyperterminal von MS.

Autor: GoZu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok es funktioniert ! Rießen Danke!!!
(fehler war falsche Konfiguration von Quarz...)

Danke euch allen, ich werde jetzt auch versuchen, mal mit Hyperterminal 
weiter zu arbeiten

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias D. wrote:

> Die RC-Oszillatoren sind meistens nicht genau genug für Baudraten,

Naja, unter Kalibrierbedingungen (Tamb = 25 °C, meist Vcc = 5 V)
sind sie in aller Regel genau genug, aber wenn es ein AVR ist, bei
dem man einen internen RC-Oszillator mit 4 MHz separat auswählen
muss, dann ist automatisch beim power-on nur der interne 8-MHz-
Oszillator kalibriert.  Die factory calibration values für die
anderen Frequenzen muss man sich mit dem Programmer aus ein paar
Fuses extern auslesen und dann den für den 4-MHz-Oszillator im
Programm auf das Register OSCCAL schreiben.  Falls man nicht unter
den Kalibrierbedingungen arbeitet (bspw. mit abweichender Spannung
oder stark schwankender Temperatur), dann muss man in jedem Falle
separat kalibrieren oder aber (wie schon geschrieben) einen Quarz
oder Keramikresonator benutzen.

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.