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 Volker, > > > Ich möchte 3 Digitalports abfragen (Wechsel von low nach high). Allerdings weiß ich nicht wann > > und welcher Port auf high geht. Ich müsste also alle drei Port regelmäßig in einer Schleife abfragen. > > Um mehrere Ports abzubragen, kannst Du diese zusammenfassen. > Bei drei Ports fragst Du am besten einen Nibble-Port ab. > Das geht nur, wenn es 3 benachbarte Ports sind (P1L.0 bis .3, P1L.4 bis 7, P1H.0 bis 3, P1H.4 bis .7) > Nehmen wir mal die drei Pins P1H.0 bis P1H.2 an. > So kannst Du die Ports mit folgender Zeile Prüfen, ob einer oder mehrere Port > einen High-Pegel besitzen: > <code> > Zustand=ports.getn(3) and 0b0111; > </code> > Nun hast Du den Portzustand in den ersten drei Bits. > Wenn man nun den Zutsand mit der vorherigen Abfrage mit Hilfe ein paar Logischen > verknüpfungen vergleicht, kann man auf die Flankenänderung reagieren. > > Alternativ kannst Du die Counterports verwenden. > Wenn Du immer dieselbe Routine ausführen möchtest, egal welcher Port auf High > geht, kannst Du einfach folgendes machen: > <code> > if ports.getcount(0)+ports.getcount(1)+ports.getcount(1) tuedies(); > </code> > > Allerdings reagieren die Counterports standardmäßig nur auf High-Low-Flanken. > Man kann dies aber umkonfigurieren. > Dazu muß man aber einen Blick ins Manual des C164CI werfen. > zuständig ist das EXICON-Register: (Fast External Interrupts) > <code> > inline function setEXICON(int value) > { > inline vmcodes.VM_STORE_ABSOLUTE_INT; > inline 0xF1C0; > } > </code> > > Im Register werden die unteren 8 Bit benutzt. > Bit 0,1 : P1H.0 > Bit 2,3 : P1H.1 > Bit 4,5 : P1H.2 > Bit 6,7 : P1H.3 > > Kurz mal aus dem Manual kopiert: > External Interrupt x Edge Selection Field (x = 7 … 0) > 0 0: Fast external interrupts disabled: standard mode > 0 1: Interrupt on positive edge (rising) > 1 0: Interrupt on negative edge (falling) > 1 1: Interrupt on any edge (rising or falling) > > Standardmäßig ist für alle Ports 0b10 konfiguriert. > Im Register steht also 0b10101010. > Sollen nun die Ports P1H.0 bis .2 auf eine steigende Flanke reagieren, aber > P1H.3 unverändert bleiben, muß der Wert 0b10010101 geschrieben werden. > > > Eigentlich ein Fall für Hardwareinterrupts. > > Geht so etwas mit der C-Control Station? Oder gibt es noch eine andere Möglichkeit? > > Mit der CC2 (egal, ob CC2-Unit oder CC2-Station) sind prinzipiell Interruptroutinen möglich. > Allerdings nur in Assembler. > Der Weg über die Counterports sollte aber in den meisten Fällen reichen. > > Eines noch, wenn Du die CC2-Station nutzt. > Derjenige, der die Station-Platine entworfen hat, (das war keiner der an der CC2 entwickelt hat) > hat leider ein paar Designfehler "eingebaut". > Es fehlen die Pull-Up-Widerstände an den Counter-Ports. (P1H.0 bis .3) > Wenn diese Ports nun unbeschaltet und als Eingänge(=Standard) definiert sind, sind > diese sehr anfällig für Störungen. das kann dazu führen, daß soviele Interrupts > ausgeführt werden, daß das Programm langsamer wird. > In einem Fall man es mal fast zum Erliegen der Ausführung. > Darum müssen die Coutner-Ports bei der CC2 immer beschaltet werden, damit > ein definierter Pegel anliegt. > Die einfachste Möglichkeit, wäre, unbenutzt Ports bei Programmstart auf Ausgang zu schalten. > Das sinnvollste sind Pull-Widerstände. > Alternativ kann man über das EXICON-Register auch nicht benötigte Interrupts einfach abschalten. > > Davon nicht betroffen sind folgende Platinen: > CC2-Application-Board > CC2-StarterBoard > CC2-ReglerBoard > Advanced CC2-Station. > > > MfG André H.