Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT_V2, OSOPT V3.0
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)