Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Heiko, > > Ich habe das Proggie getestet. Nach ein paar Anpassungen für > mein EA-KIT 240-6 und meine momentane beta von touchlcd.c2 läuft das Programm. > Allerdings habe ich ein paar Anmerkungen: > <code> > system.TIME zeit; > int ret; > int i; > string t1; // Temperaturwert des Sensors 1 > string DCF_stat; > > string zeit_str; // Systemzeit > string date_str; // Systemdatum > > thread get_time > { > /* Warum dieser Thread ?? > Es wird später sicher zu Problemen kommen, wenn Du Strings so in > mehreren Threads nutzt, wenn Sie ungecaptured sind ! */ > int datum[4]; > ret=pcf8583.getTime(zeit); > > /* Warum Speicherst Du den Rückgabewert der pcf8583-Funktionen > in ret, obwohl Du ret nicht auswertest ? */ > > zeit_str=""; > str.putintf(zeit_str,zeit.hour,2); > str.putstring(zeit_str,":"); > str.putintf(zeit_str,zeit.minute,2); > str.putstring(zeit_str,":"); > str.putintf(zeit_str,zeit.second,2); > > ret= pcf8583.getDate(datum); > date_str=""; > str.putintf(date_str,datum[0],2); > str.putstring(date_str,"."); > str.putintf(date_str,datum[1],2); > str.putstring(date_str,"."); > str.putint(date_str,datum[2]); > DCF_stat=""; > > str.putint(DCF_stat,system.dcferr()); > sleep 500; > > } > > thread GetTemp > { > int temp; > float tx; > run 200; > temp=0; > /* Warum setzt Du die Var auf 0, wenn Sie in der nächsten Zeile sowieso > wieder neu gesetzt wird ? */ > temp = ds1631.readi1(0); > tx=temp; > tx=tx/10; > t1=""; > //Integer in String umwandeln > str.putfloatf(t1, tx,1); > str.putchar(t1,1); //hängt das definierte Gradzeichen an > str.putchar(t1,67); //hängt C an > run 32; > sleep 100; > /* Warum wandelst Du hier das FEstkommeinteger in einen Float um, > bevor Du einen String daraus machst ?*/ > > > } > > thread lcd //Darstellung auf extLCD > { > lcdext.home(); > // Besser wäre hier lcdext.line(1); > lcdext.time(1); > lcdext.line(2); > lcdext.date(1); > lcdext.line(3); > lcdext.print(t1); > // Hier sollte eine kleine Pause rein. z.B. sleep 100; > // Es wäre Rechenzeitverschwendung so nonstop auf das LCD zu schreiben. > } > > > thread LCD_1 // Darstellung auf Grafik LCD1 > { > touchlcd.text(0,5,23,t1); > touchlcd.text(0,5,4,zeit_str); > touchlcd.text(0,5,14,date_str); > touchlcd.text(0,80,23,DCF_stat); > sleep 300; > } > > thread main > {byte char[6]; > > lcdext.init(); //Habe ich aus Testzwecken hierhin verschoben > run 200; // Das ist unnötigt, er läuft nur ein Thread > > // Grad Zeichen definieren > char[0]=0; > char[1]=0; > char[2]=7; > char[3]=5; > char[4]=7; > char[5]=0; > > touchlcd.init(15); > sleep 500; > touchlcd.font(3,1,1); > sleep 100; > touchlcd.textmodus(4,1); > sleep 100; > touchlcd.clear(); > sleep 500; > > touchlcd.definechar(3,1,char); > > ret = pcf8583.init(1,1,1,30,1); // Initialisierung Ext Uhr > sleep 500; > > ds1631.init(8); // Initialisierung aller Tempsensoren > sleep 500; > > > run 32; // Das ist unnötigt > /* Wenn die Prio mit Run einmal geänder wurde und dann wieder > auf die vorherige gesetzt werden soll, sollte man immer resume benutzen.*/ > > > run get_time; > run GetTemp; > run LCD_1; > run lcd; > halt; > } > </code> > > > Hier das Proggie etwas optimiert: > > <code> > system.TIME zeit; > string t1; // Temperaturwert des Sensors 1 > int temp1; > > thread GetTemp > { > temp1 = ds1631.readi1(0); > yield; // Threadwechsel erwinegn= Pseudocapture für 32VMs > if temp1<0 and temp1>-10 t1="-"; else t1=""; > str.putint(t1,temp1/10); > t1=t1+','; > str.putint(t1,math.abs(temp1%10)); > t1=t1+1+'C'; > sleep 200; > } > > thread lcd //Darstellung auf extLCD > { > lcdext.line(1); > lcdext.time(1); > lcdext.line(2); > lcdext.date(1); > lcdext.line(3); > lcdext.zahl4n1(temp1); > lcdext.put(0xDF); > lcdext.put('C'); > sleep 150; > } > > thread LCD_1 // Darstellung auf Grafik LCD1 > {string s; > int datum[4]; > touchlcd.text(0,5,23,t1); > > pcf8583.getTime(zeit); > > s=""; > str.putintf(s,zeit.hour,2); > s=s+':'; > str.putintf(s,zeit.minute,2); > s=s+':'; > str.putintf(s,zeit.second,2); > touchlcd.text(0,5,4,s); > > pcf8583.getDate(datum); > s=""; > str.putintf(s,datum[0],2); > s=s+'.'; > str.putintf(s,datum[1],2); > s=s+'.'; > str.putint(s,datum[2]+2000); > touchlcd.text(0,5,14,s); > > s=""; > str.putint(s,system.dcferr()); > touchlcd.text(0,80,23,s); > sleep 300; > } > > thread main > {byte char[6]; > > lcdext.init(); > > // Grad Zeichen definieren > char[0]=0; > char[1]=0; > char[2]=7; > char[3]=5; > char[4]=7; > char[5]=0; > > touchlcd.init(15); > sleep 500; > touchlcd.font(2,1,1); > sleep 100; > touchlcd.textmodus(4,1); > sleep 100; > touchlcd.clear(); > sleep 500; > > touchlcd.definechar(2,1,char); > > pcf8583.init(1,1,1,30,1); // Initialisierung Ext Uhr > sleep 500; > > ds1631.init(8); // Initialisierung aller Tempsensoren > sleep 500; > > run GetTemp; > run LCD_1; > run lcd; > halt; > }</code> > > MfG André H. >