Ich würde sagen dass das so richtig ist. Hast du das ';' hinter der Schleife gesehen? (Der Code ist falsch eingerückt) Die Schleife wird solang ausgeführt bis RXC gesetzt ist. Steht auch so in der Doku...
Ich würde sagen dass das so richtig ist. Hast du das ';' hinter der Schleife gesehen? (Der Code ist falsch eingerückt) Die Schleife wird solang ausgeführt bis RXC gesetzt ist. Steht auch so in der Doku...
Mea culpa, du hast recht. Das kleine Semikolon habe ich doch glatt übersehen. Später gehe ich den Code nochmal durch, jetzt ist erstmal Klausur schreiben angesagt.
mfG
Markus
Ich kann in dem Code keinen Fehler erkennen, ABER: SerRead schreibt den Wert von UCSRB neu (und macht dabei den Transmitter aus). Evtl. gibt es in anderen Codeteilen ähnliche Seiteneffekte.
mfG
Markus
Hallo,
in main() ist beim serread-aufruf das timeout auf 0 gesetzt ?!
mein Compiler würde auch in dem Ausdruck while (i < length && time++ < timeout) ein paar Klammern anfordern,
aber das ist wohl von Compiler zu Compiler unterschiedlich.
mfg
Achim
@markusj: Ich habs mal rausgenommen, und siehe da, mein Atmega kann auf einmal warten.Aber warum wird dabei der Transmitter(du meinst Empfänger oder?) ausgeschaltet? RXEN wird doch nur nochmal auf 1 gesetzt.
@seite5: Ich hab jetzt mal die Klammern gesetzt, aber auch ohne bekomm ich keine Warnung/Fehler.
Immerhin wartet der Atmega jetzt, allerdings liest er nicht, sondern bleibt immer an der stelle stehn egal was ich ins HyperTerminal eintippe. Mein mySmartUsb zeigt an das Daten gesendet werden, die ignoriert mein Atmega aber anscheinend. Beim anschließen hab ich am Anfang nicht gewusst dass man RxD und Txd kreuzen muss, kann es sein das es mir dabei einen Pinn verheizt hat?
Nein, RXEN wird nicht einfach gesetzt, das Register wird neu beschrieben und NUR RXEN dabei gesetzt. (da steht = und nicht |= ...)
Die ASURO-Routinen sind nicht auf Duplex-Betrieb ausgelegt, entweder sie senden oder sie Empfangen und nehmen daher keine Rücksicht aufeinander. gleichzeitiges Senden und Empfangen ist nicht vorgesehen!
Wenn das Empfangen nicht klappt, stimmt entweder die Verdrahtung nicht, die eingestellte Baudrate, der Takt des AVRs ist zu ungenau oder du hast tatsächlich den Pin gegrillt.
Äh moment, WAIT: Du setzt RXEN jetzt gar nicht? Dann funktioniert das natürlich auch nicht ... du musst UCSRB |= (1 << RXEN); machen!
mfG
Markus
1. Heißt das jetzt dass TXEN oder RXEN nicht gleichzeitig gesetzt sein dürfen? Komm grad nicht ganz mit was du meinst... (Entweder sende ich oder ich empfange)
2. Verdrahtung: Ich hab mal meinen 2. Atmega rausgekramt und den angeschlossen, genau das selbe. Bin mir ziemilch sicher das ich alles richtig angeschlossen habe, da ich schließlich am PC empfangen kann. Und empfange tu ich genau das was der Atmega sendet, also müsste die Baudrate ja auch übereinstimmten (sonst Kauderwelsch oder nicht) und dann denke ich müsste der Takt auch ungefähr stimmten. Pin kann ja jetzt auch fast nicht mehr hinüber sein da ja neuer Atmega.
Vielleicht sollte ich mal den ganzen Code posten??
Ich bekomm hier gleich die Krise![]()
Lesezeichen