Re: Einlesen serieller Daten mit Clock-Leitung Kategorie: Programmierung (von Detlef K. - 3.09.2010 15:44) | |
Als Antwort auf Re: Einlesen serieller Daten mit Clock-Leitung von André H. - 29.08.2010 19:50
| |
Hallo, funktioniert prima. Erst beim Testen fiel auf, dass das eher um die 10 Baud sind (2,5 Sekunden für 32bit, dann 5 Sekunden Pause). Habe den Code etwas umgestellt (für meine Lesbarkeit) und angepasst (Timeoutzeiten / keine Ausgabe der Null beim Timeout) Im zweiten "if ..." fehlte im Code noch ein "i=0;", falls es keine Pause grö�er als das Timeout gibt. Vielen, vielen Dank, wieder was gelernt. Detlef K. thread main {long timer, timer2, wert; byte i; byte CLK; byte Data; ports.deactb(1); CLK=8; //P1H.0 Data=9; //P1H.1 hwcom.setspeed(5);//9600 hwcom.print("Test SerIO"); hwcom.ret(); timer=system.timer(); // Version LSB zuerst loop { wait ports.get(CLK); wert=wert or cast.intLong(ports.get(Data) and 1) shl i; wait not ports.get(CLK); i=i+1; if system.timer()-timer>3000 //32bit dauern ca. 2,5 Sekunden, dann Pause 5 Sekunden { // Timeout i=0; wert=0; timer=system.timer(); //muss rein, wenn i==0 im nächsten IF entfällt } if i>31 //or i==0 { hwcom.num(wert); hwcom.print(" "); hwcom.num(system.timer()-timer2); //Zeitmessung hwcom.ret(); timer=system.timer(); timer2=system.timer(); wert=0; i=0; //fehlte } } } > Hallo Detlef, > > > Ahhh. > > Auf die Clock High warten, Wert übernehmen und einsortieren, Clock Low warten, > > wiederholen bis 32. Und dazu noch mit Timeout. Muss man erst mal drauf kommen. > > Bei mir ist das MSB zuerst, wie dreh ich das ganze dann um? (shr 2^32-i)? > > oder geht das auch eleganter? > > Nein, das ist zu umständlich. > So geht's einfacher: > > CLK=15; //P1H.7 > Data=14; //P1H.6 > thread main > {long timer, wert; > byte i; > hwcom.setspeed(8);//57.600Baud für Testausgabe über ein Terminalprogram (Hyperterminal) > timer=system.timer(); > loop > { > wait ports.get(CLK); > if system.timer()-timer>100 > { // Timeout bei >100ms > i=31; > wert=0; > } > wert=wert or cast.intLong(ports.get(Data) and 1) shl i; > wait not ports.get(CLK); > if i>=32 or i==0 > { > hwcom.num(wert); > hwcom.ret(); > timer=system.timer(); > wert=0; > } > i=i-1; > } > } > > > MfG André H. | |
Antwort schreiben Antworten: |