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.
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.
#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.
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 ?
:
Bearbeitet durch User
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.
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.
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
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.
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.
:
Bearbeitet durch User
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.
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
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...
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.