www.mikrocontroller.net

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


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Code anhängen^^

Autor: Stefan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Oh, hier ist er.

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Sven Pauli (haku)

nu mach mal!

MfG

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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...)

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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...

...

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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...

...

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...schluß hier aber OT

MfG

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du hast nicht recht
MfG

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Holger Krull (krulli) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Holger Krull (krulli) Benutzerseite
Datum:

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

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.