www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Baudrate Mega128L 4Mhz intern geht 8Mhz intern nicht


Autor: herrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Habe ein Problem mit einlesen vom GPS UART0


mit 4Mhz intern Quarz gehts mit 8 Mhz intern Quarz nicht.

#define cpuclock   4000000  //geht
#define cpuclock   8000000  //geht nicht
//MIT umstellung der Fuse von 4 auf 8 Mhz

init_rs232(4800,4800);

void init_rs232(unsigned int baud0,unsigned int baud1)
{
baud0=cpuclock/((baud0*16L)-1);
baud1=cpuclock/((baud1*16L)-1);

//UART 0 INIT

UBRR0H= (unsigned char)(baud0>>8);
UBRR0L = (unsigned char) baud0;
UCSR0A = 0x00;      /* USART operates at normal speed */
UCSR0B = (  (1<<RXCIE) | (1<<RXEN));    /* Enable receiver */
UCSR0C = (  (0<<UMSEL) |  /* Configure for asynchronous operation */
        (0<<UPM1)  |  /* No parity */
        (0<<UPM0)  |
        (0<<USBS)  |  /* 1 stopbit */
        (1<<UCSZ1) |  /* 8 data bits */
        (1<<UCSZ0));


//UART 1 INIT
UBRR1H= (unsigned char)(baud1>>8);
UBRR1L = (unsigned char) baud1;
UCSR1B= ((1<<RXCIE)|(1<<RXEN) | (1<<TXEN));
UCSR0C = (  (0<<UMSEL) |  /* Configure for asynchronous operation */
        (0<<UPM1)  |  /* No parity */
        (0<<UPM0)  |
        (0<<USBS)  |  /* 1 stopbit */
        (1<<UCSZ1) |  /* 8 data bits */
        (1<<UCSZ0));

  }




Es geht aber nur UART0 nicht wo das GPS direkt dran hängt.

UART 1 un MAX 3232 geht bei 4 Mhz und 8 Mhz.

UART0 nur bei 4Mhz

Warum???

NMEA bei 4Mhz kommen sauber rein.

NMEA bei 8 Mhz sieht es so aus als ob die Baudrate nicht stimmt.


Danke

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
UART mit dem Internen Taktgeber ist immer Glückssache.
Kann gehen, muss aber nicht.

UBRR0 sollte 104 sein, wenn ich mich nicht verrechnet hab.
Versuch mal 103 und 105 (ohne die Baudratenberechnung), vielleicht 
klappts ja.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der interne Taktgeber (R/C, kein Quarz!)ist per Fabrik auf 10% genau. 
Für ein UART darf die Fehlerrate nur maximal 2% betragen. Man kann den 
internen Taktgeber auf 1% genau kalibrieren, diese Genauigkeit ist dann 
aber auf einen kleinen Temperatur- und Betriebsspannungsbereich 
beschränkt. Mit externem Quarz geht´s mit Sicherheit.

Autor: herrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

bringt nichts UART1 geht UART0 nicht bei 8Mhz

UBRR0H= (unsigned char)(105>>8);
UBRR0L = (unsigned char) 105;

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht bringt ja die Verwendung eines Baudratenquarzes Abhilfe.

...

Autor: herrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ich werde mir angewöhnen immer einen externen Quarz einzusetzen.

Danke

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
herrmann wrote:
> Ja ich werde mir angewöhnen immer einen externen Quarz einzusetzen.

Aber nicht irgendeinen, sondern einen, dessen Frequenz für die zu 
lösennde Aufgabe geeignet ist. Für sicheren UART-Betrieb nimmt man 
üblicherweise Baudratenquarze.

>
> Danke

Autor: herrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo


Habe noch ein Problem gehabt das mir bei 4Mhz einige Zeichen vom GPS 
gefehlt haben.

Der tip mit dem Manuellen berechnen der Baudrate mit dem Taschenrechner 
hat
gezeigt das die bei z.b 4800 und 4Mhz 51,08 nicht genügen ich habe jetzt 
50 drinn und mein GPS bringt mir alles was mein AVR zum verarbeiten 
braucht aus das durchschleifen des Signals von UDR0 nach UDR1 geht jetzt 
und wird vom Testprogramm am PC auber erkannt.


Nun werde ich immer vorher den Wert variable testen.

Das hätte ich nun nicht gedacht hätte mir ca 1 Tag suche erspraren 
können.


Besten Dank nochmal es reichen jetzt auch dei 4 Mhz zum Arbeiten lag jja 
nur an der koreckten Zahl.

Nochmals besten Dank

Autor: Christian Erker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warte mal bis es 10 K wärmer ist .. :D oder kälter...

Gruß,
Christian

Autor: herrmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ich weiß es ist ziemlich temp abhängig ist das mit einen externen 
quarz genaus so????

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ja ich weiß es ist ziemlich temp abhängig ist das mit einen externen
>quarz genaus so????

Nein, überhaupt nicht!

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

auch wenn ich immer Quarz bei UART benutzen würde, gibt es ein Projekt 
eines Bekannten, bei dem 2 AVR per UART und beide mit internem RC-Oszi 
laufen.
Stabil im täglichen Einsatz sein Monaten, allerdings in relativ 
temperaturstabiler Umgebung (Innenraum).

Bei beiden haben wir die Teilerwerte per Versuch ermittelt, mit dem 
berechneten Wert lief (immer mit dem PC als Gegenstelle) nicht viel.

Die Baudrate darf nicht zu hoch sein, es muß sich ein UBRR-Wert ergeben, 
der möglichst groß ist. Einfach, damit die Schrittweite beim Ändern 
recht klein ist.

Dann eben variert, das kann merklich mehr als 1 nach oben oder unten 
sein...
Die Mitte zwischen den ersten fehlerhafte Zeichen genommen und gut.
Beim gegenstück genauso. Das ergab sich schon beim Entwickeln, der UART 
machte Debug-Ausgaben da merkte man ja die Fehler.

Der Grund war einfach der, daß das Drumherum des Projektes ziemlich 
komplett war und die Pins für den Quarz nicht mehr freizuschaufeln war, 
als ich mich damit beschäftigt habe.

Ich bleibe bei Quarz für UART, wenn man aber entweder experimentiert 
oder keine andere Möglichkeit findet, kann man es mal machen.

Wenn jetzt die Frage kommt, warum wir nicht per Calibrierungs-Byte den 
Takt korrigiert haben: es macht einfach mehr Aufwand, als UBRR ein 
paarmal zu ändern. Beide Fälle passen am Ende ohnehin nur für dieses 
konkrete Exemplar und es sollte von dem Kram nur einen geben.

Gruß aus Berlin
Michael

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei Angelika kostet ein 16MHz Quarz im HC49/U-Gehäuse 24 Cent. Dazu 
braucht man noch zwei keram. Kondensatoren, sodaß die Unkosten für einen 
stabilen Prozessortakt rund 0,30 Euro betragen. Ein alternativer 
keramischer Resonator wäre kaum billiger.

Es ist somit doch völlig unsinnig, mit dem internen RC-Oszillator seine 
Zeit zu verplempern, sobald man den UART verwenden möchte. Auch 
irgendwelche sogenannten Baudratenquarze einzusetzen, ist doch Schnee 
von gestern. Ein Blick in die Baudratentabelle z.B. beim Mega128 zeigt, 
daß man mit 16MHz hinreichende Genauigkeit bei gängigen Baudraten 
bekommt.
Wichtiger finde ich, die Leistung der Controller optimal zu nutzen. Dazu 
zählen bei mir höchstmögliche Taktfrequenz und genaues internes 
Zeitsignal: 1ms oder 10ms. Das erreicht man am besten mit 16 oder 20MHz 
Quarzen.

Gut, es gibt Anwendungen, bei der alle IO-Pins gebraucht werden, bei der 
die Leistungsaufnahme möglichst gering sein soll, bei der die 
Versorgungsspannung nur aus ein bis zwei Batteriezellen besteht. Dann 
muß man anders planen.

Aber wer kauft sich heute einen nagelneuen PC mit GHz-Potenz, um ihn 
dann auf 300MHz herunterzutakten?

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>UART mit dem Internen Taktgeber ist immer Glückssache.
>Kann gehen, muss aber nicht.

Quatsch! Die zulässige Toleranz der Baudrate bei einer seriellen 
Verbindung ist bekannt, ebenso die Toleranz über alles des internen 
RC-Oszillators. Somit kann man sich eine wählen, die noch in dieses 
Raster passt.

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.