
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
> > > > also ich hab ein neues programm geschrieben jedoch bleib die unit wenn ich etwas schneller drehe hängen woran liegt des kann mir des jmd sagen... > > > > als link hab ich mal das datenblatt eingefühgt Hallo, aus dem Datenblatt geht hervor,dass Kontaktprellen < 2ms möglich ist. Das wird evt. noch Probleme machen. Von dem Funktionsplan im Datenblatt weichst Du erheblich ab. Außerdem wird dort jede 1ms abgefragt. Weitere Anmerkungen habe ich unten eingefügt. MfG ManfredW > > > > define taste1 port[5] > > define a port[4] > > define b port[3] > > define set byte[3] Vorsicht! set ist auch Sprungmarke #set aset und bset sind im Prinzip Flankenmerker zur Erfassung der Signalwechsel a bzw.b Die Ports können sich während des Programmablaufs ändern. Dagegen hilft das Prozessabbild, d.h. am Anfang (nach #loop) Ports auf Bits legen und im Programm nur mit diesen Bits arbeiten. > > define aset bit[4] > > define bset bit[5] > > define nu word[1] > > > > nu=0 > > aset=a > > bset=b > > lcd.init > > #loop > > lcd.pos 1,4 > > lcd.print nu > > > > if (a xor aset) xor (b xor bset) then 'vergleich den eingängen a/b und den gesetzten zuständen Diese komplizierte Bedingung würde ich in einzelne auflösen mit mehreren goto und bereits hier entscheiden, ob 11 oder 00 vorliegt und entsprechend gezielt springen. > > goto wahl 'wenn ungleich dann gehe zu wahl > > else > > goto loop > > end if > > goto loop > > > > #wahl ' von welchen zustand gewechselt ( 11 oder 00) > > if (aset=on) and (bset=on) then 'wenn gesetzte zustand 11 war gehe zu eins > > 'goto set > > goto eins > > end if > > > > if (aset=off) and (bset=off) then 'wenn gesetzte zustand 00 war gehe zu null > > 'goto set > > goto null > > end if > > goto loop > > Im folgenden Teil kommt nu = nu -1 sowie nu = nu +1 mehrmals vor. Mit guter Programmstruktur ist das nicht notwendig > > #null > > if (a=off)and(b=on) then 'erkennen in welche richtung in dem fall ccw (links) > > nu=nu-1 ' nu wert um ein verinngern > > goto set > > end if > > > > if (a=on)and(b=off) then 'erkennen in welche richtung in dem fall cw (rechts) > > nu=nu+1 ' nu wert um eins erhöhen > > goto set > > end if > > goto null > > > > #eins > > if (a=off)and(b=on) then 'erkennen in welche richtung in dem fall cw (rechts) > > nu=nu+1 ' nu wert um eins erhöhen > > goto set > > end if > > > > if (a=on)and(b=off) then 'erkennen in welche richtung in dem fall ccw (links) > > nu=nu-1 ' nu wert um ein verinngern > > goto set > > end if > > goto eins > > > > #set > > > > if (a xor b) then 'wenn eingang a und b nicht gleichsind gehe zu set > > goto set > > else 'wenn gleich sind die zustände speichern ( 00 oder 11) Nach der Auswertung müssen die Flankenmerker immer den Ports gleich gesetzt werden. Besser sogar direkt bei der Auswertung oben im Programm. Das erspart hier die erneute Abfrage. Details zu Flankenmerker, usw. siehe meine homepage. > > aset=a > > bset=b > > goto loop > > end if > > > > goto set Meine Homepage: http://manfred.wilzeck.de |
| Antwort schreiben |