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

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
Ich nutze:
C-Control II Unit, CC2-Application-Board, OSOPT V3.1
> 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: