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