Hab mir eine Platine geätzt und auch alle Leiterbahnen auf kurzschluss getestet. Habe den MAX 232 in SMD Form verlötet. Laut Datenblatt gibt es zu dem DIP IC keine Unterschiede. http://www.mikrocontroller.net/wikifiles/e/ee/AVR-RS232.png Ich kann mit dem aufgelöteten Atmega 8 auch zum PC senden und erhalten ohne Störsignale 100 %tig das was ich mit dem Atmega versende, aber wenn ich vom PC etwas an den Atmega schicke, gibt es keine Reaktion darauf. Code: $regfile = "m8def.dat" $baud = 19200 $crystal = 4000000 Ein Alias 1 Aus Alias 0 Dim I As Byte Config Pinb.0 = Output Portb.0=Aus Print "Start" Do i = Ischarwaiting() If i = 1 Then i = Waitkey() Select Case i Case "H" Print "Hallo" Case "h" Print "hallo" Case "t" Portb.0 = EIN Case Else Print "Unbekannter Befehl" End Select End If Loop End Und ja ich habe schon eine halbe stunde gegoogelt nach gemessen und die SuFu genutzt. Der gepostete ode ist nur ein Testprogramm und nicht das Hauptprogramm
Hast Du am 9pol. Sub-D Stecker Deines Layouts die Pins 7 (RTS) mit 8 (CTS) und 1 (DCD), 4 (DTR) und 6 (DSR) miteinander verbunden? Ich musste das bei allen RS-232 Schaltungen machen, die ich an einen seriellen Port des PC angeschlossen habe. Es funktionierte sonst nicht, wegen Handshake/Flusskontrolle. RTS: Ready To Send CTS: Clear To Send DCD: Data Carrier Detected DTR: Data Terminal Ready DSR: Data Set Ready Lies' Dir mal die Spezifikation der RS-232 Schnittstelle durch :-).
Da i als Byte deklariert ist, können die Cases "H", "h" und "t" niemals true ergeben. I kann dann nur gleich 72, 104 bzw 116 sein. Es sollte aber immer der Else Case durchlaufen werden. Gruß Rolf
hallo nette mann, kann sein dass dein code irgendwie auch gehen kann. anbei aber mal meine version , die immer sehr zufriedenstellen läuft gruss klaus
Konnte das Problem gelöst werden? Ich habe nämlich dasselbe. Verwende folgenden Testcode:
1 | $regfile = "m32def.dat" |
2 | $crystal = 16000000 |
3 | $baud = 9600 |
4 | |
5 | $framesize = 32 |
6 | $swstack = 32 |
7 | $hwstack = 32 |
8 | |
9 | Dim Relaisinp As Byte |
10 | |
11 | Print "Hallo Welt" |
12 | |
13 | Do |
14 | |
15 | If Ischarwaiting() <> 0 Then |
16 | |
17 | Relaisinp = Waitkey() |
18 | Print Relaisinp |
19 | |
20 | End If |
21 | |
22 | Loop |
"Hallo Welt" kommt korrekt am Terminal an, jedoch reagiert der Controller (Atmega32) auf kein gesendetes Zeichen. Es sind am RS232 nur die Pins RxD, TxD und die Signalmasse beschaltet, was doch eigentlich zum einfachen Senden und Empfangen reichen sollte. Wäre schön, wenn mir jemand helfen kann. Den Code von Klaus habe ich ebenfalls ausprobiert - keine Reaktion. Viele Grüße, Chris
Probiere mal den Code aus der Bascom-Hilfe. Hier ist Ischarwaiting() nicht in die IF-THEN-Anweisung eingebaut. http://avrhelp.mcselec.com/index.html?ischarwaiting.htm Ich persönlich bevorzuge die Interrupt-Variante zum Empfangen: http://www.rowalt.de/mc/avr/avrboard/04/avrb04.htm
Leider funktionieren beide Vorgehensweisen nicht. Kann es ein Hardwarefehler sein? Müssen die anderen Leitungen verschaltet werden? Das Terminal meldet "UART Receiver Framing Error". Kann dies den Fehler verursachen? Danke für die Hilfe, Chris
Probiere mal 4800 Baud. Ansonsten ist evtl. wirklich ein Fehler in der Hardware vorhanden. Wie genau verbindest Du den µC mit dem Computer?
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.