Hallo, ich habe ein (hoffentlich) kleineres Problem. Ich versuche momentan meinen M8 über einen RS232 mit PHP anzusteuern. Ich weis, das eine Verbindung besteht (habe mir hierzu ein Testprogramm geschrieben und auf den Controller geflasht, eine LED geht an sobald Daten eingehen. Dies geschieht beim Senden mit meinem PHP Script). Ich empfange ebenso Daten von dem Controller. Das Problem besteht darin die Daten zu interpretieren. Leider versteht mein Controller derzeit nur binäre Befehle (suche hier noch ein Script für ASCII Empfang), daher kannn ich noch keine Tests machen der Verbindung PHP > Controller. Die andere Richtung (M8 > PHP) habe ich durch ein "uart_puts("muh"); in 1 Sekunden Abständen getestet. Die Daten werden von PHP erkannt und ausgegeben, jedoch nicht "muh" sondern etwas kryptisches. Meine Frage an euch also: -Kennt sich jemand mit PHP <> M8 in ASCII aus ? Vielen Dank Dominik
>Die andere Richtung (M8 > PHP) habe ich durch ein "uart_puts("muh"); in >1 Sekunden Abständen getestet. Die Daten werden von PHP erkannt und >ausgegeben, jedoch nicht "muh" sondern etwas kryptisches. Baudrate stimmt nicht. >Meine Frage an euch also: >-Kennt sich jemand mit PHP <> M8 in ASCII aus ? Was ist ein M8?
Die Baudrate ist gleich: 57600 bei PHP und im Controller M8 => Atmel Mega 8
wenn du die vebindung mit einem terminal (hyperterminal etc) aufbaust... kommt dann das richtige an?
>Die Baudrate ist gleich: 57600 bei PHP und im Controller >M8 => Atmel Mega 8 Hast du den Int.RC. Osci ausgewählt? Mit einem Baudratenquarz klappt sowas wesentlich besser.
>Baudrate stimmt nicht.
Vielleicht auch die Datenbreite, die Anzahl der Stop-Bits oder die
Parität.
Was auch noch sehr beliebt ist: man benutzt den internen RC-Oszillator.
Das ist aber bei solchen asynchronen Sachen Pfui!
mit dem internen RC-Oszillator hatte ich selber noch nie probleme, stell doch mal deinen code rein, der den UART Teil initialisiert.
Wenn im Terminal das richtige ankommt, dann kann es ja nur an falschen einstellungen auf der PHP Seite liegen. Hast du dort auch die ich denke mal 8 datenbits, 1 Stopbit und keine partity ausgewählt? (8N1)
Der Fehler lag darin das ich ausversehen den String nicht einmal pro Sekunde gesendet habe sondern mit 16MHz .. vor die Stirn hau Der String kommt nun sauber an! Danke für die schnelle Hilfe! Nun bleibt noch die Frage wie ich meinem Controller ASCII verständlich mache
Schau dir mal die Umwandlungsfkt. an - vll. helfen die ja weiter: http://www.mikrocontroller.net/articles/FAQ#Wie_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F
Kenne mich in C++ leider nicht so gut aus vorallem nicht mit mit Zeigern, welche für soetwas verwendet werden. Auf meiner PHP Seite habe ich mir ein Script geschrieben, welches ab einem Startzeichen solange Chars sammelt bis zum Stopzeichen und diesen String dann an eine Switch sendet welche die Aktion ausführt.
1 | while (false !== ($char = fgetc($fp))) { |
2 | if($char = "m") { |
3 | $buffer = array(); |
4 | while (false !== ($char = fgetc($fp)) AND ($char != "h")){ |
5 | $buffer[] = $char; |
6 | DoIt($buffer); |
7 | } |
8 | } |
9 | } |
Wäre jemand so nett mir das in C++ zu schreiben?
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.