Forum: Mikrocontroller und Digitale Elektronik Drehgeber auswertung mit PIC funktioniert nicht


von Stefan (Gast)


Lesenswert?

Hallo,
Ich möchte einen inkrementalen Drehwinkelsensor mit einem PIC 
(PIC16F628A) auslesen.
Das Programm dafür habe ich bereits in Assembler geschrieben. Das 
Problem ist, dass es nicht funktioniert. Ich bin noch unerfahren in 
Assembler, deshalb ist mein code auch recht lang geworden, dafür aber 
sehr gut zu durchschauen. Die Alternativen, die ich hier schon gefunden 
habe sind deutlich undurchsichtiger, machen aber meiner Ansicht nach 
dasselbe.
Sieht jemand wo das Problem im Code liegt?

Schaltung: An Port B acht LEDs. An Port A die Kanäle a und b des 
Encoders.
Die Leds sollen stets die aktuelle Zahl der erkannten Schritte als 
Binärzahl anzeigen.

Funktion: Keine Funktion. Die LEDs bleiben dunkel. Selbst wenn ich den 
Encoder entferne und per Hand die Kanäle a und b schalte erhalte ich 
keine Zahl an den LEDs.
Gebe ich hingegen mit einem anderen Programm an zwei LEDs von Port B 
direkt den an Port A eingelesenen Zustand der Kanäle aus, so leuchten 
die LEDs.

Mir fällt nichts mehr ein, was ich noch prüfen kann. Ich finde einfach 
keinen Fehler.

Wär nett wenn mir jemand helfen könnte!
Stefan.

von Sven P. (Gast)


Lesenswert?

Code anhängen^^

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Oh, hier ist er.

von juppi (Gast)


Lesenswert?

@ Sven Pauli (haku)

nu mach mal!

MfG

von Hannes L. (hannes)


Lesenswert?

Stefan wrote:
> Oh, hier ist er.

PIC ist nicht mein Ding, es ist mir daher unmöglich, Flüchtigkeitsfehler 
zu entdecken, die Dein Programm lahmlegen. Trotzdem meine ich, dass die 
Trennung von detect_changes, count_step und status2leds nicht gerade 
optimal ist. Ein einfacher und gut funktionierender Algorithmus ist 
Folgender, er sollte im Zeitraster von 0,2 ms bis 1 ms aufgerufen 
werden:

- beide Drehgeberbits in die unteren 2 Bits eines Registers einlesen
- die vom letzten mal gemerkten Drehgeberbits in die nächsten zwei
  Bits kopieren (es entsteht eine 4-Bit Zahl, die man als Index nutzen
  kann)
- die neuen Drehgeberbits für die nächste Runde sichern
- diese Zahl als Index auf ein Konstanten-Array (LUT) mit 16 Elementen
  verwenden und aus der LUT das Increment (zum Index) holen
- Increment (kann 0, 1 oder -1 betragen) auf Zahl addieren
- Zahl ausgeben
- andere Aufgaben erledigen, nach 200..1000 µs von vorn beginnen

Beim Erstellen der LUT schaut man sich die Bitmuster (2 Bits neu, 2 Bits 
alt) genau an und trägt an den Pegelwechseln eine 1 oder -1 ein (je 
nachdem, ob diese Pegelwechsel durch Linksdrehen oder Rechtsdrehen 
entstanden sind), alle anderen Einträge sind 0. Wieviele und welche 
Pegelwechsel man berücksichtigt, ist von der Bauart des Drehgebers 
(Verhältnis Schaltstellungen zu Raststellungen) abgängig. Es ist (bei 
Verwendung des Drehgebers für manuelle Eingaben) sinnfrei, auch die 
Flanken zu zählen, an denen der Drehgeber nicht einrastet.


Juppi wrote:
> @ Sven Pauli (haku)
>
> nu mach mal!

Warum provozierst Du schon wieder???

>
> MfG

Es bleibt trotz Deines (vermutlich nichtmal ehrlich gemeinten) "MfG" 
eine Provokation. Denn Haku hat nur darauf hingewiesen, mit dem 
Hintergrund, dass Informationen fehlen und das es daher schwierig wird, 
sinnvoll zu antworten. Du hast jedoch zur Lösung überhaupt nichts 
beigetragen, sondern begnügst Dich damit, andere Leute zu provozieren. 
Macht Dir das Spaß?

... (ohne "MfG", also nicht "höflich", sondern ehrlich und von 
Herzen...)

von Stefan (Gast)


Lesenswert?

Danke Hannes,

ich habe es jetzt einfach nochmal komplett neu geschrieben (gemäß deinen 
Anweisungen). Den Fehler im ersten Programm kenne ich zwar immer noch 
nicht, aber das ist ja jetzt auch nicht mehr so wichtig. Das neue 
Programm ist auch kürzer.

Viele Grüße
Stefan.

von Hannes L. (hannes)


Lesenswert?

> (gemäß deinen Anweisungen)

Nunja, auf diesen Algorithmus kam ich auch erst nach dem Lesen des 
Beitrags Drehgeber im Wiki.

Aber es freut mich, dass Du den allgemein formulierten Algorithmus gut 
in PIC-ASM umsetzen konntest. Kannst ja nochmal Deinen (neuen) Quelltext 
anhängen, vielleicht hilft er ja anderen PIClern...

...

von tastendrücker (Gast)


Lesenswert?

Mal so geraten: Hat der Assembler vielleicht 'ne Warnung oder so 
rausgeworfen? Denn:

---------------------
status2leds
  movfw  steps1
  movwf  PORTB
return
---------------------

Das 'return' steht hier ganz links und wird somit nicht als Befehl 
sondern als Label betrachtet (wenn's denn so auch in deinem 
Originalprogramm steht). Damit wird dieses 'return' nie ausgeführt, weil 
es programmtechnisch nicht vorhanden ist.

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

also der neue Code ist angehängt. Ich vermute, dass es noch wesentlich 
kürzer geht, aber so ist es für einen Einsteiger noch sehr gut zu 
überblicken.


@ tastendrücker:
Der compiler gibt tatsächlich eine entsprechende Warnung aus:
Warning[203] ..\ENCODERTEST.ASM 249 : Found opcode in column 1. (return)

Ob es laufen würde, wenn ich den return Befehl einrücke kann ich 
momentan nicht testen, da ich die Schaltung nochmal umgebaut habe (ich 
will mir die steps auf einem Display anzeigen lassen; funktioniert aber 
noch nicht). Ich werde das bei Gelegenheit mal zurück ändern (oder mit 
dem LCD testen) und falls das den Fehler behoben haben sollte, poste ich 
es nochmal.

Danke für eure Hilfe!

Stefan.

von juppi (Gast)


Lesenswert?

Hannes Lux (hannes)
Datum: 11.06.2008 08:55

Leider erst heute gelesen.

>>Juppi wrote:
> @ Sven Pauli (haku)
>
> nu mach mal!

>>Warum provozierst Du schon wieder???

Nicht immer etwas herauslesen was nicht ist.

Es sollte nur eine humorige Aufforderung sein zu antworten, da er doch 
den Cod angefordert hat.
Frage       19:15
anforderung 19:17
cod         19:19
Dann nichts mehr
meine Aufforderung 20:44  von einem Fremd-PC

Wenn du weist was "provozieren" zu DDR Zeiten Bedeutete,
dann würdest du dies mir in einem solchen Zusammenhang nicht vorwerfen.



Nette Grüße aus Thüringen

es ist auch so gemeint,vieleicht kennst du zu viele welche sich 
verstellen.

von juppi (Gast)


Lesenswert?


von Hannes L. (hannes)


Lesenswert?

@Juppi:

Mein Eindruck, dass Du gern "provozierst" begründet sich nicht nur aus 
diesem Thread, sondern auch aus den vielen anderen Threads, in denen Du 
zwar nicht geholfen hast, aber Leute beschimpft hast bzw. Leuten auf den 
Schlips getreten bist. Es mag ja sein, dass Du das anders meinst als es 
rüberkommt, das kannst Du aber ändern, indem Du Deine Beiträge eindeutig 
formulierst. Denn oft (eigentlich fast immer) kann man nicht 
nachvollziehen, was Du mit Deinen Beiträgen ausdrücken willst. Meist ist 
es einfach nur unausgegorenes Gerülpse, auf das man gut verzichten 
kann...

Ja, Haku hat darauf hingewiesen, dass es zweckmäßig sei, den Code zu 
veröffentlichen. Das heißt aber noch lange nicht, dass er auch 
verpflichtet ist, den Fehler zu suchen und zu finden. Der Rat, den Code 
zu posten, ist selbst dann sinnvoll, wenn man selbst gar nicht helfen 
kann, denn nur dann, wenn der Code verfügbar ist, kann ein anderer 
sachkundiger Leser, der das zufällig liest, mal drüberschauen und was 
dazu äußern.

In diesem Sinne war Hakus Beitrag schon hilfreich, Deiner jedoch nicht, 
er hatte nur das Ziel Haku zu diskreditieren. Das scheint ja Dein Hobby 
zu sein, denn Ähnliches habe ich schon des Öfteren von Dir gelesen. Und 
rede Dich nicht mit "Humor" raus, Deinen Humor-Bonus hast Du bereits in 
diversen Threads verspielt, indem Du einige Leute arg belöffelt hast, 
nur weil sie anderer Meinung waren als Du.

...

von juppi (Gast)


Lesenswert?

@Hannes Lux (hannes)

 >>Leute beschimpft hast

>In diesem Sinne war Hakus Beitrag schon hilfreich, Deiner jedoch nicht,
>er hatte nur das Ziel Haku zu diskreditieren. Das scheint ja Dein Hobby

Man liesst das heraus, was man will.

Leider ist dies die Unwarheit.

Durch diese Auslegung stehen wir jetzt auf gleicher Ebene!!
Deine feststehende Meinung kann ich nicht Ändern.



Haku hat mich auch belöffelt, aber das ist doch alles pille-palle

P.S.  also SCHLUß jetzt damit!
AN ALLE :Sollte ich in den Augen der Forumsteilnehmer jemanden 
belöffeln,beleidigen PROVOZIEREN usw.
dann ist dies in keinen Fall so gemeint.

Grüße aus Thüringen

von Hannes L. (hannes)


Lesenswert?

juppi wrote:
> AN ALLE :Sollte ich in den Augen der Forumsteilnehmer jemanden
> belöffeln,beleidigen PROVOZIEREN usw.
> dann ist dies in keinen Fall so gemeint.

Du machst es Dir sehr einfach...

...

von juppi (Gast)


Lesenswert?

...schluß hier aber OT

MfG

von Hannes L. (hannes)


Lesenswert?

juppi wrote:
> ...schluß hier aber OT

Jawoll, Stuss mit dem Lötzinn...

Von mir aus gerne, mir ist nicht nach Streit. Doch wie soll ich das 
verstehen, dass Du hier in diesem Thread "schlichten" willst, aber 
woanders erneut Gift verspritzt:

http://www.mikrocontroller.net/topic/102721#895778

Irgend wie suggeriert mir das, dass Du mit gespaltener Zunge redest.

Nun komm nicht damit, Du würdest es nicht so meinen, das glaubt Dir 
keiner mehr. Nach Allem, was ich bisher von Dir in diesem Forum gelesen 
habe, halte ich Dich für einen streitsüchtigen Querulanten, der seinen 
Spaß daran hat, andere Leute gegeneinander anzusticheln und aufzuhetzen. 
Sollte diese (meine) Erkenntnis auf Missverständnissen beruhen, so 
formuliere bitte zukünftig Deine Beiträge so, dass man sie nicht 
missverstehen kann.

...

von juppi (Gast)


Lesenswert?

@Hannes Lux (hannes)

Leider hat man das Thema im OT
nach
http://www.mikrocontroller.net/topic/102721#new
verschoben.

Es ist doch auch von Interesse was die restlichen 10000
für eine Meinung haben.
Nimm's  mir nicht übel,
auch die hast in deinen 2500 Beiträgen schon tolles verzapft.

Unbequeme Beiträge ,welche nicht einmal gegen die Forumsregeln 
verstossen,
sollten nicht verschoben werden.
>>>Wenn nicht geantwortet wird ,erledigt es sich von alleine.

MfG

von Hannes L. (hannes)


Lesenswert?

juppi wrote:
> @Hannes Lux (hannes)
>
> Leider hat man das Thema im OT
> nach
> http://www.mikrocontroller.net/topic/102721#new
> verschoben.

Das ist verständlich, denn Du machst Dich damit lächerlich.

>
> Es ist doch auch von Interesse was die restlichen 10000
> für eine Meinung haben.

Die meisten wird es nicht interessieren, aber ich sehe in jedem Deiner 
Threads, dass sich Leute von Dir angegriffen fühlen.

> Nimm's  mir nicht übel,

Dann drücke Dich unmissverständlich aus.

> auch die hast in deinen 2500 Beiträgen schon tolles verzapft.

Falls "die" ein "Du" sein sollte (das ist keine Kritik, auch ich 
schreibe nicht fehlerfrei), dann:

Naja, ein paar Beiträge mehr sind es schon.
- Sehr oft habe ich helfen können,
- oft habe ich auch auf fachliche Fehler Anderer hingewiesen, die ich
  nicht unwidersprochen im Raum stehen lassen wollte,
- oft habe ich auch darauf hingewiesen, dass das Problem schon oft genug
  diskutiert wurde und dass man es über die Hilfe finden könnte,
- gelegentlich habe ich Falsches behauptet, mich dafür aber 
entschuldugt,
- ja, und ein paarmal habe ich mich auch im Ton vergriffen, die Anzahl
  relativiert sich aber aufgrund der über 4700 anderen Beiträge,
- inzwischen halte ich mich oft aber auch zurück, denn die meisten
  Fragen sind bereits mehrfach bis zur Erschöpfung beantwortet worden.

Das ist eine Bilanz, die sich mit Deiner keinesfalls vergleichen lässt. 
Ich habe noch keinen Thread mit Beiträgen von Dir gesehen, in dem Du 
nicht andere Leute von der Seite angemacht hast. Du bist mit diesem 
Verhalten zwar nicht ganz alleine, aber Du hast mich auf Dich aufmerksam 
gemacht, indem Du mich mehrmals persönlich angegriffen hast. Hättest Du 
Dir das erspart, dann wäre mir Dein Verhalten egal und ich würde nicht 
darauf reagieren. Du hast einfach den Bogen überspannt.

>
> Unbequeme Beiträge ,welche nicht einmal gegen die Forumsregeln
> verstossen,
> sollten nicht verschoben werden.

Der betreffende Moderator wird sich schon was dabei gedacht haben.

>>>>Wenn nicht geantwortet wird ,erledigt es sich von alleine.

Manchen Blödsinn kann man nicht unwidersprochen stehen lassen.

>
> MfG

Das "f" und das "G" in Deiner Grußformel glaube ich Dir nicht mehr, 
womit sich das "M" auch relativiert.

Höre auf mit Deiner Giftspritzerei, dann bist Du meine Kommentare dazu 
auch los.

...

von juppi (Gast)


Lesenswert?

du hast nicht recht
MfG

von juppi (Gast)


Lesenswert?

@Hannes Lux (hannes)


>Ich habe noch keinen Thread mit Beiträgen von Dir gesehen, in dem Du
>nicht andere Leute von der Seite angemacht hast.
___________________________
warum lügst du so ??
___________________________
ist dein EGO angegriffen

>Höre auf mit Deiner Giftspritzerei, dann bist Du meine Kommentare dazu
>auch los.
Du hörst dich an wie Staatsnahe personen in der DDR
weißt du was Pol. Haft ist??

ich hätte bald Arsch gesagt (verzieung)

ich wollte nur damit sagen das ich auch einmal die schnauze voll habe.

Als Fachmann habe ich dich bis jetzt geachtet,jetzt werden Andere über 
dich urteilen.

ich wechsle kaum die IP, der Admin kann mich finden.



Nette Grüße aus Thüringen

von Holger K. (krulli) Benutzerseite


Lesenswert?

@Hannes
laß Dich bitte nicht provozieren.

@Juppi
langsam solltest Du dich mal über Umgangsformen gegenüber anderen 
Menschen  informieren. Warum bringst Du immer wieder die DDR ins Spiel? 
Langsam frag ich mich, ob Du noch alle Tassen im Schrank hast...

Unfreundliche Grüße aus
Sachsen-Anhalt.

von juppi (Gast)


Lesenswert?

@Holger Krull (krulli)

Wenn eine Lüge oft wiederholt wird,dann wird es trotzdem nicht die
Wahrheit.

warum immer DDR, dann suche im Forum.
Unserere "Westdeutschen Mitbürger sollten immer wieder die Wahrheit
hören ,wenn es auch unangenehm ist.


das ist "Doll" wir kennen uns möglicherweise persönlich.

dein Nick (trifft das zu)
LOL

>Langsam frag ich mich, ob Du noch alle Tassen im Schrank hast...

t'scha.. sie wird dir fehlen, hätteste doch heute früh merken müssen.



MfG

von Holger K. (krulli) Benutzerseite


Lesenswert?

>das ist "Doll" wir kennen uns möglicherweise persönlich.
hoffentlich nicht. Und wenn, dann würde mich sofort davon distanzieren.

von juppi (Gast)


Lesenswert?

@Holger Krull (krulli)
Ich werde dann immer eine Tasse bei mir haben(Eine Ersatztasse für 
dich))
auch als Erkennungszeichen.
LOL

Aber im Ernst?
Alle dürfen Lügen und Beleidigen nur ich nicht, aber keiner reagiert.
Bis jetzt habe ICH keinen beleidigt,man fühlt sich nur so.

Grüße

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.