Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > 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: > <code> > if not ports.get(IntPort) //Wenn die Int-Leitung auf Low ist > edip.receiveframe(edipAddr,Display1); > </code> > > 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: > <code> > 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 > } > </code> > > 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: > <code> > 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 > } > </code> > In den einzelnen Display-Threads ist dann folgendes notwendig: > <code> capture flag; > a=edip.getRxData(Display1,t); > release; > </code> > > MfG André H.