Re: ExtLCD und RS232 LCD an SW-Com Kategorie: Sonstige Hardware (von André H. - 16.03.2004 9:34) | ||
Als Antwort auf Re: ExtLCD und RS232 LCD an SW-Com von Heiko - 11.03.2004 20:42 | ||
| ||
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: 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; } Hier das Proggie etwas optimiert: 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; } MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: Re: ExtLCD und RS232 LCD an SW-Com (von Heiko - 19.03.2004 9:50) Re: ExtLCD und RS232 LCD an SW-Com (von André H. - 21.03.2004 11:58) Re: ExtLCD und RS232 LCD an SW-Com (von Heiko - 21.03.2004 18:20) Re: ExtLCD und RS232 LCD an SW-Com (von André H. - 28.03.2004 13:39) |