Forum: Mikrocontroller und Digitale Elektronik AVR Board von Pollin


von xeus (Gast)


Lesenswert?

Hallo,
ich hab mir das evolution board von pollin geholt, soweit bin ich damit
auch ganz zufrieden. nur ich bekomme es einfach nicht hin eine uart mit
einem terminal prog zu realisieren.

hat es von euch schon mal jemand versucht

gruß

xeus

von Hannes L. (hannes)


Lesenswert?

Baudratenquarz benutzt?

...

von xeus (Gast)


Lesenswert?

wie darf ich das verstehen 'Baudratenquarz benutzen'?

gruß xeus

von Niko (Gast)


Lesenswert?

Du sollst nicht unbedingt eine gerade Anzahl an MegaHerz haben.
z.b: 16 Mhz, 8Mhz ...

Schau mal in das Datenblatt zu deinem AVR, da sollten die Frequenzen
aufgelistet sein.

von xeus (Gast)


Lesenswert?

bei dem board ist ein ext. quarz von 8 mhz dabei, mit dem müsste es doch
eigentlich funzen. hat keiner ne idee von euch

von Werner A. (Gast)


Lesenswert?

Du liest die Antworten aber schon durch, bevor Du erneut fragst...

von xeus (Gast)


Lesenswert?

ja, aber wie ist das gemint mit dem quarz, wenn da 8 mhz drauf sind
müsste es doch eigentlich auch mit 8 mhz  funktionieren. habs auc schon
mit dem int. 1mhz versucht, klappt leider auch nicht

von Gerd Laschinski (Gast)


Lesenswert?

Hallo xeus,

ok, Du hast einen 8 MHz-Quarz auf dem Board. Welche Baudrate
hast Du denn eingestellt. Und mit welcher Programmiersprache
programmierst Du?

Gruß
Gerd

von TravelRec. (Gast)


Lesenswert?

Die Quarzfrequenz sollte nach dem Teilen möglichst genau die Frequenz
egeben, die Du am PC eingestellt hat, also ohne Fehlerrate, also müßte
Deine Quarz schon ein wenig krummhertzig sein, z.B. 7,3728 MHz.

von xeus (Gast)


Lesenswert?

ich programmiere mit avr bascom, hab schon mit 4800, 9600 versucht, aber
mit keier klappt es. das komische ist, dass er nicht mal bitfolgen
sendet. normalerweise, müsste er doch auch bei falscher baudrate
bitfolgen senden, oder?

gruß

xeus

von Gerd Laschinski (Gast)


Lesenswert?

Hallo xeus,

schau' mal im Bascom unter Options->Compiler->Communication nach. Da
muß neben der gewünschten Baudrate auch die Taktfrequenz (8MHz)
eingetragen werden. Basom rechnet Dir dann den Fehler aus. Bei 8 Mhz
kannst Du Übertragungsraten bis 38400 Baud nehmen, der Fehler liegt bei
0,16 %.

Wichtig ist auch, daß Du in den Fuse-Bits die richtige Taktquelle
wählst. Nur weil Du außen 8 MHz stecken hast, muß der Controller nicht
auf 8 Mhz laufen. Vielleicht läuft er auf internen 1 MHz.

Gruß
Gerd

von xeus (Gast)


Lesenswert?

das ist mir schon klar, komisch ist nur, das mein m8 der mit 1mhz läuft
auch mit 4800 läuft. warum klappt das selbe nicht mit einem m16?

von Gerd Laschinski (Gast)


Lesenswert?

Der interne RC-Oszillator ist halt nicht so genau. Ich glaube mich
dunkel an bis zu 10 Prozent Fehler zu erinnern. Kann mich aber auch
täuschen.

Gruß
Gerd

von xeus (Gast)


Lesenswert?

ja, aber müsste ich nicht selbst mit einer fehlerhaften einstellung
einen bitschrott bekommen. wenn ich z.b mit dem m8 eine falsche
baudrate einstell erhalte ich bitmüll.

gruß xeus

von leif (Gast)


Lesenswert?

tja, leider hat sich im Schaltplan ein kleiner Fehler eingeschlichen. Tx
und Rx Leitung am UART wurden vertausch, so das der RS232 Pegelwandler
blockiert. Das bedeutet Pin 10 und 12 müssen am Pegelwandler vertauscht
werden. Dann läufts.

Achtung: Ohne gesetzte CLOCK Bits läuft der ATmega nur mit 1MHz. Wer
kennt die richtige Einstellung für 8Mhz?

von Rahul (Gast)


Lesenswert?

das Datenblatt!

von alex (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, ich benutze yaap und habe folgende Konfiguration mit einem
externen Quarz.

von Hannes L. (hannes)


Lesenswert?

Wer will denn 8MHz für USART nutzen?
Nehmt einen Baudratenquarz! Dann funktioniert RS232 auch ohne Fehler.

...

von leif (Gast)


Lesenswert?

also hannes,
laut atmel datenblätter kann der Atmega16 einen externen Quarz bis zu
16 Mhz vertragen und daraus die Standard UART Datenraten erzeugen. Der
Punkt ist aber, dass der UART TX Ausgang auf den RX Ausgang des
Pegelwandlers gelegt ist.
Das hier ist aber die richtige Konfiguration:
Atmel     =>    Pegelwandler          =>   RS232
TX(out)   =>    Tx(in)        Tx(out) =>     Tx
RX(in)    <=    Rx(out)       Rx(in)  <=     Rx

Leider wurde dies zumindest auf meiner Platine vertauscht und sah so
aus:
Atmel     =>    Pegelwandler           =>   RS232
Tx(out)   =>    Rx(out)        Tx(out) =>     Tx
Rx(in)    <=    Tx(in)       Rx(in)    <=     Rx

Und da leider nichts funktioniert, wenn Ausgang mit Ausgang und Eingang
mit Eingang verbunden ist, dann hilft auch kein Baudratenquarz.

P.S. Nach dem Vertauschen der Tx und Rx Leitung zwischen Pegelwandler
und Atmega16 lief alles perfekt.

von Hannes L. (hannes)


Lesenswert?

Ich habe das Board nicht, kenne daher die Schaltung auch nicht.

Ich wollte nur darauf hinweisen, dass man keine "glatten" Quarze
(glatte Zahlen wie 4MHz, 8MHz...) für den AVR nimmt, wenn man die
serielle Schnittstelle nutzen möchte. Dazu gibt es sogenannte
"Baudratenquarze" mit (scheinbar) krummen Frequenzen.

Schau dir mal die Baudratentabellen im Datenblatt genauer an, dann
weißt du was ich meine. Nur mit diesen Baudratenquarzen werden auch
längere Telegramme sicher übertragen.

Mit 3,6864MHz, 7,3728MHz oder 14,7456 hast du bedeutend weniger Fehler
als mit 4,0MHz, 8.0MHz oder 16,0MHz.

Gruß...
...HanneS...

von tf1973 (Gast)


Lesenswert?

@leif: Was verwendest du für ein Kabel zum Verbinden, ein 1:1 oder
Nullmodemkabel?

von leif (Gast)


Lesenswert?

bin mir jetzt selber nicht so sicher. Muß aber erst zu Hause
nachschauen.
Der Fehler liegt aber darin, dass das Tx signal am Pegelwandler
invertiert werden muss. Leider liegt dieses Signal auf einen Inverter
Ausgang und da der Atmega16 auf dieser Leitung sendet, kann nichts
durch den Pegelwandler durchgehen.
Hier hat man den Fehler schon erkannt:

http://www.roboternetz.de/phpBB2/viewtopic.php?t=12567&postdays=0&postorder=asc&start=88

leider tauscht man die Leitungen direkt am Controller und hat dadurch
etwas mehr Aufwand.

von leif (Gast)


Lesenswert?

@hannes,

guter tipp. Ich habe das Board erst 2 Tage und wollte die RS232
Schnittstelle nur zum Debuggen benutzen, da ich bisher noch kein JTag
besitze. Werd dann demnächst mal nen krummen Quarz auflöten.

von Hartmut Gröger (Gast)


Lesenswert?

Hi

Am 8MHz Qurz liegt es bestimmt nicht. Wie Gerd ausgerechnet hat liegt
der Baudratenfehler bei 8MHz und 38400 Baud bei 0,16%. Atmel lässt für
die Verbindung von 2 AVRs Toleranzen von 2,5 bis 1% (in Abhängigkeit
von der Bitzahl) zu. Bisher hatte ich bei der Verbindung
AVR(4MHz Quarz, 4/8 MHz interner RC-Oszillator nie Probleme. Einziger
'Störfall' war bisher ein PIC.
Die 'Baudratenquarze' sind nur notwendig, wenn zwischen Baudrate und
Quarzfrequenz ein bestimmtes Verhältnis unterschritten wird.

MfG HG

von xeus (Gast)


Lesenswert?

hallo,

ich be auch den fehler mit rx und tx ausgebessert, zudem hab ich auch
gleich die kondensator-quarz kombination gegen einen rc-oszilator
getauscht. und zack schon läuft mein m16 mit gigantischen 20mhz und
eine baudrate von 19200 ist auch kein problem mehr

gruß

xeus

ps: ich finde es eine unverfrohrenheit von pollin, auf ihrer homepage
nichteinmal auf den fehler hinzuweisen

von Netbandit (Gast)


Lesenswert?

Oi ein RC Oszilator auf 20MHz, das hört sich aber nicht alzu
Frequenzstabiel an :)
Naja solange es läuft....

von xeus (Gast)


Lesenswert?

dann halt 19,998mhz

von Simon K. (simon) Benutzerseite


Lesenswert?

Ich glaub das mit den Baudratenquarzen ist nicht so ganz verstanden
worden:

Die Baudfrequenz wird von der SystemClock gespeist.
Bsp.

UART-Clock 115200 Baud
System Clock 8000000 Hz (8Mhz)

Der Teiler, der nun gebraucht wird um die Systemclock (8Mhz) auf die
Baudfrequenz herunter zu teilen berechnet sich wie folgt:

UBRRVAL = CLOCK/(BAUD*16)-1

So.:
UBRRVAL = 8000000/(115200*16)-1
UBRRVAL = 3,34 ...

würde man jetzt einfach abrunden (Wie es zB ein Compiler machen würde,
wenn er das UBRRVAL ausrechnet) dann hätte man 3.

Lädt man aber UBRR mit dem Wert 3, so Stellt sich eine Baudrate von
125000 Baud ein.. Und das stimmt nicht mehr mit der Gegenseite überein.
Folglich stimmen die Timings nich mehr -> Mist.

Blöd nur, dass das UBRRVAL Register diesen Wert nicht annimmt, da es
nur Werte von 0-255 (bei Megas und Tinys usw.. bis 65535 (UBRRH,
UBRRL)) ohne Kommastellen annehmen kann.

Und nu? Ganz einfach: BaudratenQuarz:

UART-Clock 115200 Baud
System Clock 14745600 Hz (14,7456Mhz)

UBRRVAL = 14745600/(115200*16)-1
UBRRVAL = 7,00 !

Diese Zahl kann geladen werden und die BaudClock läuft mit genau 115200
Baud


PS: Eine Baudrate mit (zu) hohem Fehler heißt nicht, dass wenigstens
noch irgendein Datenmüll ankommen MUSS! Es kann sein, dass das
Stopframe bedingt durch die Hohe Fehlerrate nicht mehr erkannt wird.
Dann wird das komplette UART-Datenpaket einfach weggeworfen -> Ergo:
Nix kommt an.

von Hannes L. (hannes)


Lesenswert?

@Simon:

Danke für deine Erklärung. Hoffentlich nutzt es etwas.

Denn seit Jahren ist es Cool, den Prozessor des PC zu übertakten, das
Letzte aus den Rechnern rauszuholen, egal ob dadurch Fehler auftreten
oder nicht.

Und da steckt man so in dieser Tuning-Manie, dass man sich nicht
vorstellen kann, dass es Vorteile haben kann, den Controller mit etwas
weniger als der maximalen Taktrate laufen zu lassen.

Dafür wird dann aber gerne ein Programmierstil angewendet, bei dem der
Controller von einer Delay-Schleife in die andere stolpert und nicht in
der Lage ist, mehrere Arbeiten (pseudo-) gleichzeitig zu erledigen...

...

von knut (Gast)


Lesenswert?

Hi,

kann man mit dem Board auch 8051er Verwenden/Programmieren?

Grüße

von Johannes S. (johanness)


Lesenswert?

Zitat aus der Beschreibung bei Pollin:

"Diese Platine zum Anschluss an den PC ermöglicht die direkte 
Programmierung der ATmega8535, ATmega16, ATmega32, ATmega8, ATtiny2313, 
ATtiny12 und ATtiny15."

Kenne mich mit den 8051 nicht aus, gehe aber davon aus, dass deren 
Programmierung anders funktioniert, auch wenn Atmel sowohl die AVR als 
auch 8051-kompatible herstellt...

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.