Nim mal dein Delay raus aus dem Main.
Dann halte mal eine LED (gegen VCC) oder wenn du hast ein Oszi an den TX
pin, sollte leuchten / flackern. Wenn nicht: Problem mit µC.
Wenn das funktioniert: Nim den RX Eingang des PCs (gleiches Kabel!) und
halte einen Pullup gegen VCC, z.B. 10k, dann nimmst du ein Massekabel
und wackelst dann etwas. Dann müsste etwas erscheinen auf dem
Bildschirm, und wenns nur Vierecke sind.
Sollte das nicht Klappen: Bist du sicher auf dem richtigen COM Port?
Wenn beides funktioniert, hast du die Pins korrekt verbunden?
Grundsätzlich TX des Controllers auf RX des PCs, USB Module sind
teilweise aus Mikrocontrolersicht beschrieben, dann wäre TX auf TX...
Einfach mal probieren...
mfg Andreas
Ingo schrieb:> Musst du den TXD Pin nicht noch als Ausgang setzen?
Die Lib von Peter Fleury setzt den nicht als Ausgang, und hat zumindest
bei letzter Verwendung funktioniert;-)
mfg Andreas
>Nim mal dein Delay raus aus dem Main.>Dann halte mal eine LED (gegen VCC) oder wenn du hast ein Oszi an den TX>pin, sollte leuchten / flackern. Wenn nicht: Problem mit µC.>Wenn das funktioniert: Nim den RX Eingang des PCs (gleiches Kabel!) und>halte einen Pullup gegen VCC, z.B. 10k, dann nimmst du ein Massekabel>und wackelst dann etwas. Dann müsste etwas erscheinen auf dem>Bildschirm, und wenns nur Vierecke sind.>Sollte das nicht Klappen: Bist du sicher auf dem richtigen COM Port?>Wenn beides funktioniert, hast du die Pins korrekt verbunden?>Grundsätzlich TX des Controllers auf RX des PCs, USB Module sind>teilweise aus Mikrocontrolersicht beschrieben, dann wäre TX auf TX...>Einfach mal probieren...>mfg Andreas
Habe ich schon alles versucht. Auf dem Oszi habe ich ein Signal. Ich
bekomme Auch wenn ich das mit dem Wacheln mache und da ich das SDK 500
von Atmel verwende, sollte es auch keine Verbindungsprobleme geben, da
alles schön beschriftet ist.
Florian Schuller schrieb:> Habe ich schon alles versucht.
mit welchen Ergebnissen? (bitte jedes der einzeln vorgeschlagenen
Vorgehensweisen kommentieren mit dem zugehörigen Ergebnis, ggf.
Screenshot etc
Wenn das Timing nicht stimmt (z.B. Fuse Falsch) wird gerne mal ein
Zeichen Verschluckt.
Wenn du nun deinen _delay_ms(1000); raus nimst, und ggf. nicht nur ein A
sondern auch noch ein 0xaa sendest müsste etwas ankommen.
Und wenn nicht das ankommt was du sendest hast du ein Timing Problem.
Hast du ein Speicheroszi? Ich mach das immer so: Ich sende vom PC einen
Bekannten String, z.b: "ABC", dieses Muster speichere ich ab. Dann sende
ich den gleichen String vom AVR, dann lege ich die übereinander und sehe
1) Ist es das richtige Signal
2) Wie falsch ist mein Timing;-) Dann mit Cursor beide Werte berechnen,
Faktor ausrechnen, und diesen Faktor bei der Baudrate
mitberücksichtigen.
3) Wundern warum die Berechnung vorher nicht gestummen hat;-)
mfg Andreas
Ich habe leider nur ein Analogoszi, also kann ich leider keine
Screenshots machen, aber ich habe am Oszi ein Signal, das nicht so
schlecht aussieht.
Wenn ich das Verbindungskabel von der UART-Schnittstelle zum COM-Port
kurz herausziehe und wieder anstecke und das Delay aus dem code
herausnehme, bekomme ich irgendwelche kryptischen Zeichen(Foto)
Florian Schuller schrieb:> Wenn ich das Verbindungskabel von der UART-Schnittstelle zum COM-Port> kurz herausziehe und wieder anstecke und das Delay aus dem code> herausnehme, bekomme ich irgendwelche kryptischen Zeichen(Foto)
NUR beim herausnehmen?
Ich vermute deine Timings sind falsch.
Kontrolliere mal deine Fuse / Quarz. Und wen du 0xAA ausgibst solltest
du auch mit dem Oszi die Timings kontrollieren können.
mfg Andreas
>Ich vermute deine Timings sind falsch.
Das habe ich auch schon vermutet, doch ich habe die Fuse schon min. 10
mal kontrolliert. Ich habe es auf 4 MHZ intern gesetzt. Ich habe auch
schon einen anderen µC verwendet, doch nichts geht. Ich habe das ganze
schon mit dem AVR-Studio 4 verwendet und allse hatte bestens
funktioniert, doch jetzt wollte ich es wieder versuchen und habe
AVR-Studio 6 installiert. Kann es daran liegen?
Florian Schuller schrieb:> Ich habe leider nur ein Analogoszi, also kann ich leider keine> Screenshots machen, aber ich habe am Oszi ein Signal, das nicht so> schlecht aussieht.
Dann erzähl doch mal, wie das Signal aussieht, welche Bitdauer das hat
und ob es ein 'a' ist.
1
_-_----__--_______
Hast du einen RS232-Pegelwandler zwischen µC und PC?
Ein kleines 'a' (0x61 / 0b01100001)
Bits drehen wir von links nach rechts (0b10000110), da LSB first.
Startbit low, LSB...MSB, Stopbit high
Dein Oszi sollte also so etwas zeigen
1
~~~~~~~_~____~~_~~~~~~~
2
3
.......S10000110S......
Das Startbit sollte bei 9600 baud 104µs breit sein.
Hoffentlich habe ich mich nicht verrechnet ;-)
>Hast du einen RS232-Pegelwandler zwischen µC und PC?
Ja der ist schon im SDK 500 integriert.
Der Signalverlauf sieht so aus, jedoch die länge des Startbits liegt ca.
bei 45ms. Wie kann das sein?
Diese Zeilen sehen sehr eigenartig aus
>#define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden>#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
Hast Du die richtig abgeschrieben?
Florian Schuller schrieb:> Der Signalverlauf sieht so aus, jedoch die länge des Startbits liegt ca.> bei 45ms. Wie kann das sein?
Nehmen wir an das die Quarzfrequenz korrekt ist, so ergibt sich eine
UART Schrittgeschwindigkeit von 22,22 baud ????
Nehmen wir an das der UART korrekt gesetzt ist, so ergibt sich eine CPU
Frequenz von 9244,44 Hz ????
Ergibt beides keinen Sinn, also schauen wir auf den Controller.
Was ist es denn für einer und gibt's beim kompilieren irgendwelche
Warnungen?
Vermutlich einer der Controller, bei denen sich UBRRH und UCSRC eine
Adresse teilen. Dann geht nämlich dieses Schreiben
1
UCSRC=(1<<UCSZ1)|(1<<UCSZ0);
in Wirklichkeit nach UBRRH und die resultierende Baudrate ist damit sehr
niedrig.
PS: Es ist immer eine gute Idee, von vornherein mit anzugeben, welchen
Controller man benutzt.
Ich verwende den ATMEGA8 und habe es auch schon mit dem ATMEGA32
versucht.
>kannst du erstmal verschen eine LED mit sekunden tankt (_delay_ms(1000)>) blinken zu lassen?
Dies habe ich auch schon versucht und was eigenartiges bemerkt. Wenn die
Takkfrequenz default 1 MHZ gesetzt ist, schaltet es jede Sekunde um.
Jedoch bei 4 MHZ geht es viel schneller.
spontan schrieb:> Diese Zeilen sehen sehr eigenartig aus
Im Tutorial findest du die gleichen Makros:
UBRR_VAL = ((F_CPU+BAUD*8)/(BAUD*16)-1)
BAUD_REAL = (F_CPU/(16*(UBRR_VAL+1)))
Dort steht auch, wieso.
An den TO die Frage: Wie genau ist die Messung der Bitdauer von 45 ms?
45 ms wären etwa 22,22 bit/s. (Hast du vermutlich auch schon
ausgerechnet.)
Welches Zeichen sendest du für die Messung wiederholt? 0xAA oder 0x55?
Bei 0x55 hast du eine saubere Folge von 0 und 1:
1
S01234567S
2
0101010101
Bei 0xAA hast du am Anfang ein doppeltes "0"-Bit (Startbit und LSB) und
am Ende eine doppelte "1" (MSB und Stopbit):
1
S01234567S
2
0010101011
0x55 wäre also der bessere Wert für den Timingtest. Versuch doch mal, so
eine ununterbrochene 0-1-Folge hin zu bekommen und miss mal über 10 Bit.
Grüße
Stefan
Hi
>Ich verwende den ATMEGA8 und habe es auch schon mit dem ATMEGA32>versucht.
Dann hast du, wie Stefan Ernst (sternst) schon bemerkt hat, das
Umschaltbit vergessen
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
Ohne 1<<URSEL landet das ganze in UBRRH.
MfG Spess
spess53 schrieb:> Hi>>>Ich verwende den ATMEGA8 und habe es auch schon mit dem ATMEGA32>>versucht.>> Dann hast du, wie Stefan Ernst (sternst) schon bemerkt hat, das> Umschaltbit vergessen>> UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);>> Ohne 1<<URSEL landet das ganze in UBRRH.>> MfG Spess
Danke das wars. Ich habe das noch von einem alten Projekt vom ATMEGA128
herrausen gehabt.
Vielen Dank!