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

Re: edip240-7 Problem mit Touchbuttons Kategorie: Sonstige Hardware (von André H. - 6.06.2006 9:35)
Als Antwort auf edip240-7 Problem mit Touchbuttons von Dennis - 18.05.2006 8:40
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0, OSOPT V3.1
Hallo Dennis, Lizard & Heribert,

Es gab ein sporasisch, leider von mir nicht reproduzierbares Problem
beim Schreibzugriff auf das Display.
Es scheint seit dem ASM-Treiber aufgetreten zu sein.
Das Problem ist, daÃ? die CC2 einfach zu schnell beim Senden ist,
bzw. das eDIP die Daten bei 100kHz Bustakt nicht schnell genug verarbeiten konnte
Im ASM-Treiber waren bereits I²C-Leseroutinen mit Clockstreching implementiert.
Jetzt sind seit V0.50b auch die Schreibroutinen des ASM-Treibers mit Clockstreching ausgerüstet.
Die Probleme scheinen damit behoben zu sein.
Der neue ASM-Treiber mit den Ã?nderungen sind seit gut anderthalb Wochen bei einem Kunden
mit zahllosen eDIPs an einem Bus im Einsatz. Bisher gab es noch keine Probleme.

Also ladet bitte die neueste Version von edip.c2 herunter, die ich gestern hochgeladen habe,
und ladet die neueste Version von edip240.hex in Segment3.

Ach ja, noch ein Tip für den Betrieb des eDIPs in grö�eren Projekten:
Benutzt bitte die Interrupt-Leitung des eDIPs und schlieÃ?t diese an einen
freien I/O-Port an. Bei mehreren eDIPs reicht eine gemeinsame Interruptleitung.
So spart man sich das ständige Pollen via edip.receiveframe() lastet die CC2
und auch den I²C-Bus unnötig aus.
Daher kann man folgendes Konstrukt in die Routinen einbauen:

 if not ports.get(IntPort) //Wenn die Int-Leitung auf Low ist
     edip.receiveframe(edipAddr,Display1);


Bei Multi-Display-Betrieb gibt es zwei Möglichkeiten, je nachdem,
ob alle Displays aus einem Thread oder aus mehreren angespochen werden.
Bei mehreren Threads reicht es, die Routine oben für jeden Thread zu benutzen.
Bei einem Thread für alle Displays ist folgendes ratsam:

 const eDIPAddr[]=0,5,6; // Adressen von Drei eDIPs
 edip.RxBuffer Display[3];
...
 byte i;
 i=0;
 while not ports.get(IntPort)  //Wenn die Int-Leitung auf Low ist
         and i<3 // und i innerhalb des gültigen Bereichs ist
 {
  edip.receiveframe(eDIPAddr[i],Display[i]);
  i=i+1
 }


Man kann auch einen seperaten Thread nur für das Empfangen des Empfangspuffers
bzw. für die Interruptbehandlung am I²C-Bus  verwenden.
Hier muÃ? dann aber auf jeden Fall gecaptured werden:

 const eDIPAddr[]=0,5,6; // Adressen von Drei eDIPs
 edip.RxBuffer Display[3];
...
 byte i, flag;
 i=0;
 while not ports.get(IntPort)  //Wenn die Int-Leitung auf Low ist
         and i<3 // und i innerhalb des gültigen Bereichs ist
 {
  capture flag;
   edip.receiveframe(eDIPAddr[i],Display[i]);
  release;
  i=i+1
 }

In den einzelnen Display-Threads ist dann folgendes notwendig:
 capture flag;
  a=edip.getRxData(Display1,t);
 release;


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: edip240-7 Problem mit Touchbuttons (von Dennis - 29.06.2006 21:13)