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
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.
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.
Hallo bringt nichts UART1 geht UART0 nicht bei 8Mhz UBRR0H= (unsigned char)(105>>8); UBRR0L = (unsigned char) 105;
Vielleicht bringt ja die Verwendung eines Baudratenquarzes Abhilfe. ...
Ja ich werde mir angewöhnen immer einen externen Quarz einzusetzen. Danke
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
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
Warte mal bis es 10 K wärmer ist .. :D oder kälter... Gruß, Christian
Ja ich weiß es ist ziemlich temp abhängig ist das mit einen externen quarz genaus so????
>Ja ich weiß es ist ziemlich temp abhängig ist das mit einen externen >quarz genaus so???? Nein, überhaupt nicht!
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
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?
>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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.