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) |