Hallo zusammen! Ich habe gerade ein kleines Problem mit der Kommunikation PC-µC. Ich verwende einen atmega8 & max232 und möchte Daten zum PC senden (funktioniert) und welche empfangen (klappt nicht...). Ich verwende Bascom. Zum Aufbau: atmega8 mit 8.867238 MHz Quarz, Geschwindigkeit 2400 Baud (zum Testen) max232 mit 5 1µF Elkos max232....PC.....atmega ----------------------- T1out.....Pin2 R1in......Pin3 R1out............RXD T1in.............TXD Die Masse vom RS232 (Pin5) liegt auf der Masse vom atmega. -------------- \ 1 2 3 4 5 / \ 6 7 8 9 / --------- Was funktioniert: Senden vom µC an den PC - Klappte sofort Senden vom PC zum PC mittels gebrücktem TxD RxD klappt auch. 2 LED´s, jeweils an R1out und T1in. Funktionieren, irritieren mich aber etwas. Beim Senden von µC blinkt RxD, beim Empfangen vom PC TxD. Was nicht klappt: Senden vom PC zum µC. Es wird nichts ausgewertet. Ich komme aber einfach nicht dahinter was fehlt. Einstellung im Hyperterm: 2400 Baud, 1 Stop-Bit, keine Parität, keine Flußkontrolle Habe sowohl den max als auch den atmega schon mal getauscht - ohne Erfolg. Ich hoffe, ich habe nichts vergessen - bin neu in der Elektronik... Hat jemand eine Idee, was ich vergessen haben könnte? Vielen Dank Matze
Hi, probiere bitte auf den internen Oszillator mit 1 Mhz umzustellen. Ich habe die Vermutung, das die Baudrate mit dem Takt nicht möglich ist. Fusebits laut Abbildung. Wie ist das Ergebnis jetzt? Verwende eine andere Baudrate. Verwende folgenden Programmteil dim Eingabe as string*1 Eingabe=inkey() print Eingabe; Grüße Niels
Was gibst Du dem fuer Tips? UART und interner Oszi ist mal ueberhaupt keine gute Idee (zu ungenau). Matthias: Schau mal ins Datenblatt unter UART, da sind Tabellen, welche Baudraten mit welchem Quarz welchen Fehler erzeugen.
Hallo Niels, Hallo Michael, vielen Dank für eure Antworten! Die Geschwindigkeit müsste eigentlich passen. Im Datenblatt steht natürlich nicht genau die Quarzgeschwindigkeit, aber laut "AVR baud rate calculator" sollte es gehen. Calculated Baud code (UBR): 230 Real baud rate: 2399 baud Baud rate error: 0% Muss ich den UBR noch irgendwo eintragen?
OK vielleicht solltest Du erst mal Deinen Code posten (als Anhang bidde) ;) Wahrscheinlich ist es dann einfach nicht richtig initialisiert.
Das ist der erste Test, da ist nicht viel anzuhängen... $regfile = "M8def.dat" $crystal = 8867238 $baud = 2400 Dim A As Byte Do Print "Hallo Welt! Taste druecken!" A = Waitkey() Print "ASCII " ; A ; " empfangen!" Loop End
OK mit BASCOM kann ich Dir schon mal nicht helfen. Sonderlich sinnvoll sieht der Code allerdings nicht aus.
Hi, laß Dich von "linuxgeeks" nicht kirre machen, der code ist sinnvoll. Ist ja direkt aus der BASCOM Hilfe - und sollte fuktionieren. In der Hilfe ist alles sehr gut unter "Using the UART" beschrieben. Auch wie man sieht, ob der interne Oszillator eingeschaltet ist. Du kannst aber auch einfach mal versuchen mit $crystal = 8000000 zu compilieren ... @ derandi Was könnte bei Waitkey passieren? Warten auf einen Tastendruck? Steht übrigens auch in der Hilfe. Viel Glück, derpeter
Beim waitkey() wartet Bascom so lange bis ein Zeichen empfangen wurde. In diesem Fall wird der ASCII Wert des Buchstabens ausgeben. Soll der Buchstabe selbst ausgegeben werden, so wäre chr(A) zu schreiben. Probiers mal hiermit: $baud 2400 dim A as byte Print "Hallo Welt! Taste druecken!" Do A = Waitkey() Print "ASCII " ; A ; " empfangen!" Loop End Also den Waitkey() in die Schleife und den statischen Print raus. Ist übrigens Quatsch von Linuxgeek. Der interne Oszillator ist auch nicht ungenauer als 3%. Daher probiere es mit 1 000 000 Hz. Bei 8 MHz sind 2400bps mit Bascom aber auch möglich.
> Ist übrigens Quatsch von Linuxgeek. Der interne Oszillator ist auch
nicht ungenauer als 3%.
Ja. wenn man ihn kalibriert- kann man im DB nachlesen.
Der Tipp, eine UART mit internem Oszlllator zu betreiben, schreit
geradezu nach Wiedereinführung der Prügelstrafe...
@derpeter: Auf 8Mhz kommt nur Kauderwelsch am PC an. @Niels: Keine Änderung - WaitKey war aber auch schon in der Schleife. Ich habe den Quarz auch nur drauf, weil ich jedes Risiko umschiffen wollte. Und da der Weg µC->PC klappt mmüsste es ja auch eigentlich gehen... Ich verstehe das einfach nicht. Hab mir jetzt auch schon zig Anleitungen angesehen - aber die machen eigentlich nichts anders. Brauch die eingehende Leitung vielleicht noch einen Pullup, oder muss ich noch irgendwas zusätzlich am RS232 beschalten?
hast du mal den max232 getauscht ? oder versuch mal ttl-seitig rxd-txd zu verbinden (ohne gestecktem atmega). vllt das der max232 einen weg hat. ansonsten wüsst ich nur noch einen weg : mal in assembler ausprobieren ob sich da was empfangen lässt. vllt hat bascom ja ein problem. kenn mich mit bascom nicht aus. programmiere nur in c.
Schau Dir mal den Pegelwandler von Pollin an. Da ist ein Schaltplan. Mit dem geht es immer.
@rene: >hast du mal den max232 getauscht ? Hab ich getauscht. Ich habe meine LED´s auch hinter dem max gesteckt. >oder versuch mal ttl-seitig rxd-txd zu verbinden (ohne gestecktem atmega). Hab ich zu Anfang schon getestet. Das geht @Niels: >Schau Dir mal den Pegelwandler von Pollin an. Da ist ein Schaltplan. Mit dem geht es immer. Ok - das mache ich, aber mit dem max232 soll es doch auch funktionieren. Soviel Pech, dass mehrere, mittlerweile 3, max232 einen Weg haben geht doch nicht, oder?
Hi!
Von Bascom habe ich keine Ahnung, aber RX/TX lassen sich im µC
abschalten,
nicht das du Rx noch irgendwie freigeben musst(RXE=1).
>Print "Hallo Welt! Taste druecken!" könnte ja Tx einschalten.
Viel Erfolg, Uwe
Hmmm. Die Idee werde ich mal nachprüfen. Hab davon aber noch nichts gelesen...
Alle Aufregung ist umsonst, wenn der Fehler 30cm vor dem Steckbord sitzt. Hab rxd in int0 gesteckt, und das einfach nicht gesehen. Jetzt funktioniert´s natürlich... Und wieder ein 3/4 Tag verschenkt. Vielen Dank an alle, die drüber nachgedacht haben. Gruß Matze
Hi Also, soweit ich es auf die Schnelle beurteilen kann, ich glaub, da ist ein Denkfehler. erst der µC, dann der Max und dann der PC. Nun die Frage, µC mit oder ohne externen Quarz. Ohne hat er nur 1 MHz, und da ist er sehr ungenau. Hohe Baudraten kannst du dann vergessen. Es gibt hier ein Tutorial, ist zwar in Assembler geschrieben, aber mit AVR Studio ist es kein Problem, nachzuarbeiten. Ich mag auch mehr den Assembler.... So, nun noch ein paar kurze Infos zur Hardware: µC hat Tx ( Sendeleitung) und die sollte am Max auf Pin (oh Gott, auf meinem Schreibtisch sieht's mal wieder aus..) also Pin 10 und der kommt auf Pin 7 wieder raus. Ebenso sollte alternativ TX an Pin 11 und pin 14 wieder raus gehen. Der Ausgang (also 7 oder 14) geht dann auf 2 vom RS232 Stecker (weiblich). RX vom µC (Empfangen) geht auf Pin 12 (raus) und kommt auf Pin 13 rein oder alternativ auf Pin 8 (raus) und auf Pin 9 rein. Also, Pin 13 oder Pin 8 kommt am RS232 Stecker auf Pin 3. Nun die Verbindungsleitung zum PC. Diese muß 2 und 3 kreuzen, denn was am µC TX ist, ist am PC RX und RX am µC ist TX am PC. Nicht vergessen, Pin 5 auf Masse zu legen. So sollte es dann auch funktionieren. µC TX---MAX Pin 11 in --- MAX out pin 14 -- RS232 Pin 2 --RS 232 Pin 3 PC µC RX---MAX Pin 12 out --- MAX in Pin 13 -- RS232 Pin 3 --RS 232 Pin 2 PC Gnd --------------------------------------- RS232 Pin 5 --RS 232 Pin 5 PC Viel Spass oldmax
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.