Re: eDIP240, Interrupt kommt mehrmals Kategorie: Programmierung (von Sirius - 5.12.2012 20:58) | ||
Als Antwort auf eDIP240, Interrupt kommt mehrmals von Wolfgang - 1.12.2012 12:05 | ||
| ||
> Hallo ! > > Ich habe das Problem das zwischendurch die Touchtasten nicht sauber erkannt werden. > Meine Heizungsregelung funktioniert stundenlang, zack auf einmal gehen die toucheingaben > fail, ich drücke eine taste und es kommt ein anderer Touchcode. > Dannach sofort ein Dauerleuchten der Interrupt Led. 2-3mal geht das so und dann auf einmal alles > wieder normal. > > Ich kanns mir nicht erklären wo ich den Fehler suchen soll. > > i2c bus = stabil, keine fehler bei den sensoren > 2 eDIPS angeschlossen Kabellänge 50cm und 2m > 4 ds1631 > 8 ds18b20 > 2 max relaisplatinen > > alles geht sauber nur die eDIPS verschlucken zwischendurch daten. > > vl wei� jemand einen rat wo ich weitersuchen kann !!!! > > achja und ich habe das forum durchsucht und versucht nachzulesen, vl gibt es die antwort > aber ich hab sie nicht gefunden. Das Problem hab ich auch es werden touchcodes von vorher gedrückten tasten geschickt. hab den code mehrmals neu geschrieben aber immer das gleiche problem // MENU ************************************************************************ edip.RxBuffer Display[var.maxEDIP]; byte Flag, t[64]; function DispData(byte xdisp) { byte a,n,x,lcd; int frame; string msg,s; wait cap.Capture(2); lcd=var.DispAddr[xdisp]; // empfangen des Displaybuffers frame=edip.receiveframe(var.DispAddr[xdisp],Display[xdisp]); a=edip.getRxData(Display[xdisp],t); if a<255 and a { // Touchtaste-Schalter ************************************************* //msg="t0:"; str.putchar(msg,t[0]); // Test für Touchcodes //msg=msg+" t2:"; str.putint(msg,t[2]); //smsg(0,msg); //hwcom.print(msg);hwcom.ret(); //if hwcom.CTSholding() { hwcom.send(t,64);hwcom.ret(); } if t[0]=='A' { if t[2]==100 { run regler.Learn; regler.initLearn=-1; } // Lern Modus vom Regler if t[2]==102 { halt regler.Learn; regler.setLearnPID(); } // Set Modus vom Regler if heizung.modus==1 // Manueller Modus { if t[2]==BTN[3]+UP // Pumpe { if io.RS8[heizung.PumpenPort]==1 { heizung.ioPumpe(io.OFF); } else { heizung.ioPumpe(io.ON); } } if t[2]==BTN[4]+UP // heizung { if io.RS8[heizung.HeizungsPort]==1 { heizung.ioHeiz(io.OFF); } else { heizung.ioHeiz(io.ON); } } checkModus(); } // Modus einstellen if t[2]==BTN[0]+UP { if heizung.modus==2 heizung.modus=0; else if heizung.modus==1 heizung.modus=2; else if heizung.modus==0 heizung.modus=1; checkModus(); } // Sollwert +- if t[2]==BTN[1]+UP var.it[5]=var.it[5]-0.2; if t[2]==BTN[2]+UP var.it[5]=var.it[5]+0.1; // Sollwert Auswahl if t[2]==BTN[5]+UP { AKTSOLL=AKTSOLL-1; if AKTSOLL<0 AKTSOLL=maxSOLLW; var.it[5]=SOLLDEF[AKTSOLL]; checkModus(); } if t[2]==BTN[6]+UP { AKTSOLL=AKTSOLL+1; if AKTSOLL>maxSOLLW AKTSOLL=0; var.it[5]=SOLLDEF[AKTSOLL]; checkModus(); } if t[2]==BTN[7]+UP io.CheckTOUT(lcd); if t[2]==BTN[8]+UP heizung.ShowRuns(lcd); } // PopUpMenueeintrage ************************************************** if t[0]=='N' { initStartMenu(xdisp,0); Clear(lcd); // Name des Menüs wird angezeigt var.HMenu[xdisp]=t[2]; msg=var.HName[var.HMenu[xdisp]-var.HCode]+" "; tools.text(lcd,var.Fett_Font,var.L,0,0,msg); if var.HMenu[xdisp]!=var.HCode+4 run io.Temps18B20;; // löschen des keyboards if var.HMenu[xdisp]!=var.HCode+0 grafik.Stop(); if var.HMenu[xdisp]!=var.HCode+1 tools.keyboard(lcd,0); // Begin der Menus if t[2]==var.HCode+0 grafik.init(xdisp); // Grafik if t[2]==var.HCode+1 tools.keyboard(lcd,1); // Setup if t[2]==var.HCode+2 heizung.start(lcd);// Heizung if t[2]==var.HCode+3 regler.start(lcd);// Regler if t[2]==var.HCode+4 { halt io.Temps18B20; io.show(lcd); }// IO if t[2]==var.HCode+5 { initStartMenu(xdisp,1); checkModus();}//HauptMenu(lcd);// Start oder Hauptmenue } // Bargraph ************************************************************ if t[0]=='B' { if t[2]==regler.BarW { regler.readNewSollwert(t[3]); } } // Anforderung Touchmenü öffnen **************************************** if t[0]=='T' smsg(0,"Open"); // freier Touchbereich ************************************************* if t[0]=='H' //msg="t3:x, t4:y"; str.putint(msg,t[2]); // Touchschalter State ************************************************* if t[0]=='X' msg="Touchschalter State"; // Version 1.7 rev B *************************************************** if t[0]=='V' msg="Version"; // Radiogroup State **************************************************** if t[0]=='G' smsg(0,"Radio ?"); } cap.Release(2); } // MAIN ************************************************************************ thread DISP1 { wait not ports.get(var.DispIntr[0]); tools.beepT(50,10); DispData(0); sleep 250; } thread DISP2 { wait not ports.get(var.DispIntr[1]); tools.beepT(50,35); DispData(1); sleep 250; } hier ein auschnitt aus meinen code, hab mal versucht das komplett zu trennen aber es hilft nix. nach einer unbestimmten zeit gehen die touchcodes fail. | ||
Antwort schreiben Antworten: |