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

Re: Blinkende Anzeigebeleuchtung Kategorie: CC2-Unit & Appl.Board / CC2-Station (von André H. - 7.08.2003 15:32)
Als Antwort auf Re: Blinkende Anzeigebeleuchtung von Burkhard Fischer - 7.08.2003 14:13

Hallo Burkhard,

Jetzt habe ich noch einen kleinen Bug in stports.c2 übersehen, von dem ich dachte,
da� ich ihn bereits in V1.01 gelöst hätte.
Und zwar hat setRel einen falschen portoffset. Und da ich gestern alles nur
mit den toggle-Funktionen getestet hatte, lief alles einwandfrei.
In setRel mu� es nämlich beim Aufruf für die Systemroutine Rel+8 und nicht Rel+7
hei�en. Das erklärt, warum LED8 statt Rel1 und Rel1 statt Rel2 geschalten wurde.

Was ich allerdings nicht nachvollziehen kann ist, daÃ? alles durcheinanderschaltet.
Ich habe Deinen Thread zusammen mit anderen Thread, die auch auf die Ports zugreifen,
getestet. Es gab keinerlei Probleme. Ich habe nur lcdext.dcf durch lcdext.time(0) ersetzt,
da ich nicht wei�, was die von Dir eingefügte Funktion lcdext.dcf() genau macht, und
wie diese aussieht.
Ich vermute, daÃ? diese Funktion damit etwas zu tun hat. Kannst Du diese kurz posten ?
Das Problem ist nämlich folgendes:
Damit es bei Multithreading keine Problem gibt, muÃ? jede Funktion die auf P1L
zugreift quasi "atomar" verlaufen (von der VM aus gesehen). Sonst müssen wieder
Captures gesetzt werden.

Ich habe das Programm jetzt so Problemlos laufen lassen:
thread dcf
{
 lcdext.init();
 lcdext.clear();
 loop
 {
  if ports.getfreq(0) ==1
  {
   stports.setLED(1,-1);
   sleep 5;
   stports.setLED(2,-1);
   stports.setLED(1,0);
   stports.setLED(3,-1);
   sleep 50;
   stports.setLED(2,0);
   stports.setLED(4,-1);
   sleep 50;
   stports.setLED(3,0);
   stports.setLED(5,-1);
   sleep 50;
   stports.setLED(4,0);
   sleep 50;
   stports.setLED(5,0);
  }
  lcdext.line(1);
  lcdext.time(0);
 }
}

thread main
{
 stports.setRel(2,1);
 run dcf;
 loop
 {
  stports.setRel(1,0);
  stports.LCDlight(1);
  sleep 500;
  stports.setRel(1,1);
  stports.LCDlight(0);
  sleep 500;
 }
}


MfG André H.

> Hallo André,
>
> > Ich habe das Problem gefunden und gelöst. Ich werde das Update von
> > sys0001.hex (die Einsprungadressen bleiben gleich) heute noch hochladen.
> > (Achtet einfach auf die News ...)
>
> habe sys0001.hex, stport2.c2 und lcdext.c2 geladen geht leider immer noch nicht.
> K1 schalten über Tastatur geht LED8 an aber nicht mehr aus, und K2 da geht K1 an und nicht mehr aus
>
> So funktionieren die Relaise
>  if keycode ==10 pcf.on(1,in-1);
>   if keycode ==11 pcf.off(1,in-1);
>   if keycode ==10 and in == 9 station_io.RELon(1);
>   if keycode ==10 and in == 10 station_io.RELon(2);
>   if keycode ==11 and in == 9 station_io.RELoff(1);
>   if keycode ==11 and in == 10 station_io.RELoff(2);
> /* stports.setRel(1,1);  //
>  stports.setRel(1,0);  //
>  stports.setRel(2,1);  //
>  stports.setRel(2,0);  */

>   if keycode ==13
>    {station_io.RELoff(1);station_io.RELoff(2);
>      for n =0 ...7
>     pcf.off(1,n);}

> ersetze ich station_io.RELxxx(x) mit stports.setRel(x,x) habe ich die oben genannte Probleme.
>
> Habe jetzt aber auch Probleme die vorher nicht hatte (stportsLED1-5)
>
> thread dcf
> {
>  lcdext.init();
>  lcdext.clear();
> loop
> {
>   if ports.getfreq(0) ==1
> {
>   stports.setLED(1,-1);
>  sleep 5;
>   stports.setLED(2,-1);
>   stports.setLED(1,0);
>   stports.setLED(3,-1);
>  sleep 50;
>   stports.setLED(2,0);
>   stports.setLED(4,-1);
>  sleep 50;
>   stports.setLED(3,0);
>   stports.setLED(5,-1);
>  sleep 50;
>   stports.setLED(4,0);
>  sleep 50;
>   stports.setLED(5,0);
> }
>   lcdext.line(1);
>   lcdext.dcf();
>  }
> }

>
> wenn ich oben den thread dcf aufrufe rastet die Station voll aus K1,K2, LED1-8 gehen nacheinander
> an und wieder aus.
>
> MfG Burkhard


Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: Blinkende Anzeigebeleuchtung (von Burkhard Fischer - 7.08.2003 16:33)