www.mikrocontroller.net

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


Autor: Paradox (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Paradox (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Baudrate ist gleich: 57600 bei PHP und im Controller

M8 => Atmel Mega 8

Autor: Jonas (Gast)
Datum:

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

Autor: Paradox (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein leider auch nicht :/

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Paradox (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
berichtigung: es kommt im Terminal das richtige an

Autor: Jonas (Gast)
Datum:

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

Autor: Jonas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Paradox (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jonas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal die Umwandlungsfkt. an - vll. helfen die ja weiter: 
http://www.mikrocontroller.net/articles/FAQ#Wie_ka...

Autor: Paradox (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
while (false !== ($char = fgetc($fp))) {
      if($char = "m") {
      $buffer = array();
        while (false !== ($char = fgetc($fp)) AND ($char != "h")){
          $buffer[] = $char;
          DoIt($buffer);
        }
      }
    }






Wäre jemand so nett mir das in C++ zu schreiben?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.