Hallo Mikrocontroller Gemeinde, ich hab ein eigentlich kleines Problem, dass ich aber nicht in den Griff bekomme. Daten seriell an einen zweiten PC übertragen. Ich benutze ein STK500 mit einer Atmega32-16PU und bekomme einfach keine korrekte Übertragung hin. Vielleicht habt ihr eine Idee, woran es liegen könnte. Ich hab die beiden Rechner schon mit einem Nullmodemkabel direkt zusammengehängt und die Übertragung über ein Terminalprogramm getestet: Funktioniert einwandfrei, von meinem Versuchsaufbau bekomme ich nur Sonderzeichen, was ja auf falsche Baudrate etc hindeutet, das hab ich aber 20 mal mit allen möglichen Parametern versucht, ohne Erfolg. Derzeit sind eingestellt: 9600/8N1 Code im Anhang. Bin für jeden Vorschlag dankbar.
Gast
#4360638
Meine Glaskugel sagt: Du hast einen Knick im Rechenschieber. Stelle mal den Seriellen Port des PCs auf 1200 Baud... Das dürfte den 51 in UBRR bei 1MHz entsprechen. PS: 1MHz und 9600 Baud ist recht Aussichtslos. Das liegt um rund 7% daneben.
Gast
#4360649
#define F_CPU 1000000UL Evtl. ist deine Abweichung zu groß? Da ist ja kein Baudratenquartz verbaut. Bzw. wie füllst du UBBRH und L? Ich seh da nirgends die soll Baudrate.
@Ulrich: Kannst du mir deine Glaskugel gelegentlich mal ausleihen ? Volltreffer... Wer rechnen kann ist klar im Vorteil. Vielen Dank ! Problem gelöst.
Gast
#4361372
Thomas S. schrieb: > Kannst du mir deine Glaskugel gelegentlich mal ausleihen ? Lieber nicht... Als bekennender Arduino Jünger habe ich meine Kugel auf meine Bedürfnisse getrimmt, sie ist also recht selektiv. Und mit den Sprüchlein, welche sie liefert, macht man sich hier u.U. unbeliebt.
Jetzt muss ich den Thread doch nochmal ausgraben. Mittlerweile läuft die Atmega32 mit einem externen Quarz auf 8Mhz, aber ich kann nach wie vor keine Baudraten jenseits der 2400 nutzen. Bei 2400 Baud funktioniert es wunderbar, aber ab 4800 kommt nur noch Mist an... Ich hab jetzt auch einen anderen PC als Empfänger getestet, der direkt eine Serielle Schnittstelle onboard hat, ändert sich nichts. Hat jemand noch eine Idee woran das noch liegen kann ?
Thomas S. schrieb: > Hat jemand noch eine Idee woran das noch liegen kann ? Da gibt es jetzt 2 Möglichkeiten: 1. Du wartest auf den mit der Glaskugel. 2. Du postest dein Programm. Vollständig und als *.c-File! mfg.
Gast
#4366608
Hallo Thomas S., bitte poste doch alle Infos: a) das vollständige Programm b) den Aufbau b.1) den Schaltplan b.2) Bilder vom Aufbau c) die gesetzten und gedachten Fuse-Bits Danke. Ich verwende laut Datenblatt Table 60 /Equations for Calculating Baud Rate Register Setting/ des Atmel Atmega32 eine von zwei Formeln zur Berechnung der Daten für die Register UBRRH:UBRRL. a) U2X=0: UBBR := f_CPU /(Baudrate *16) -1 b) U2X=1: UBBR := f_CPU /(Baudrate *8) -1 Welchen Wert hat das Bit U2X in UCSRA "USART Control and Status Register A" ? Beachtest Du auch das Datenformat, bzgl. Baudrate, Parity, Start- und Stoppbits auf beiden Seiten ? Beachtest Du auch die Notwendigkeiten des Bits URSEL in UCSRC ? Siehe: "USART Baud Rate Registers - UBRRL and UBRRH" im Datenblatt.
Gast
#4366641
Thomas S. schrieb: > Mittlerweile läuft die Atmega32 mit einem externen Quarz auf 8Mhz, aber > ich kann nach wie vor keine Baudraten jenseits der 2400 nutzen. Welche Baudraten bekommst Du denn tatsaechlich mit dem Quarz, dem Vorteiler, den UART-Einstellungen? wendelsberg
Gast
#4366663
Johannes schrieb: > Evtl. ist deine Abweichung zu groß? Da ist ja kein Baudratenquartz > verbaut. Dieses "evtl." sollte sich durch einen Blick ins Datenblatt Tabellen 19-9 ... 19-12 /Examples of UBRR Settings for Commonly Used Oscillator Frequencies/ leicht klären lassen.
Gast
#4366676
Schau doch mal da hin: http://www.gjlay.de/helferlein/avr-uart-rechner.html
Wolfgang schrieb: > Johannes schrieb: >> Evtl. ist deine Abweichung zu groß? Da ist ja kein Baudratenquartz >> verbaut. > > Dieses "evtl." sollte sich durch einen Blick ins Datenblatt Tabellen > 19-9 ... 19-12 /Examples of UBRR Settings for Commonly Used Oscillator > Frequencies/ leicht klären lassen. Man könnte auch einfach die Berechnungsmakros aus baud.h benutzen. Die geben Alarm wenn die Abweichung zu gross ist und haben den Vorteil, dass man sich bei korrekt angegebene F_CPU und der gewünschten Baudrate nicht händisch verrechnen kann oder in einer Tabelle aus der falschen Spalte abliest. Use the force! Der Compiler kann das.
Gast
#4366756
Thomas E. schrieb: > 1. Du wartest auf den mit der Glaskugel. Anwesend! Thomas S. schrieb: > Mittlerweile läuft die Atmega32 mit einem externen Quarz auf 8Mhz, aber > ich kann nach wie vor keine Baudraten jenseits der 2400 nutzen. Ein 8MHZ Quarz, statt intern 1MHz, ist schön und gut... Aber wenn die CKDIV8 Fuse weiterhin gesetzt ist, ändert sich genau NICHTS in Bezug auf die Baudrate. OK, die Fehlerrate wird genauer eingehalten.... Aber mehr auch nicht.
Gast
#4366764
Hi >Aber wenn die CKDIV8 Fuse weiterhin gesetzt ist, ändert sich genau >NICHTS in Bezug auf die Baudrate. Der ATMega32 kennt keine CKDIV8-Fuse. MfG Spess
Gast
#4366768
spess53 schrieb: > Der ATMega32 kennt keine CKDIV8-Fuse. OK... Danke. Dann behaupte ich ab jetzt das Gegenteil... Es wäre dann wirklich interessant, womit das/die Baudrateregister gefüllt werden...
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.