Forum: Mikrocontroller und Digitale Elektronik PHP <RS232> M8 in ASCII


von Paradox (Gast)


Lesenswert?

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

von holger (Gast)


Lesenswert?

>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?

von Paradox (Gast)


Lesenswert?

Die Baudrate ist gleich: 57600 bei PHP und im Controller

M8 => Atmel Mega 8

von Jonas (Gast)


Lesenswert?

wenn du die vebindung mit einem terminal (hyperterminal etc) aufbaust... 
kommt dann das richtige an?

von Paradox (Gast)


Lesenswert?

Nein leider auch nicht :/

von holger (Gast)


Lesenswert?

>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.

von STK500-Besitzer (Gast)


Lesenswert?

>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!

von Paradox (Gast)


Lesenswert?

berichtigung: es kommt im Terminal das richtige an

von Jonas (Gast)


Lesenswert?

mit dem internen RC-Oszillator hatte ich selber noch nie probleme, stell 
doch mal deinen code rein, der den UART Teil initialisiert.

von Jonas (Gast)


Lesenswert?

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)

von Paradox (Gast)


Lesenswert?

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

von Jonas (Gast)


Lesenswert?

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

von Paradox (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.