Encoder nach Peter und Auswertung

Gast #4825647
Hallo Gemeinde
ich verwende das Programm von Peter zur Auswertung Encoder. Soweit ist 
mit die Sache klar. Zusätzlich habe ich ein Display angeschlossen und 
lasse mir die Werte anzeigen.
1
for(;;)
2
  {
3
    val += encode_read4();          // lesen 1,2 oder 4 Schritt Encoder
4
    LEDS = val;
5
    Anzeige(val);  
6
  }
Auswertung erfolgt damit:
1
int8_t encode_read4( void )        // lesen vier Schritt Encoder = langsam
2
  {
3
  int8_t val;
4
  cli();
5
  val = enc_delta;
6
  enc_delta = val & 3;
7
  sei();
8
  return val >> 2;
9
  }


Dabei kann val einen positiven oder negativen Wert unterschiedlicher 
Grösse annehmen.
So einen grossen Wert brauche ich nicht. Möchte einfach wissen ob 
positiv oder negativ bzw. eine Begrenzung auf ca. 8 Werte und dann 
wieder auf null. Habe leider kein Plan dazu.
LG Kl
#4825668
@ Klars (Gast)

>So einen grossen Wert brauche ich nicht. Möchte einfach wissen ob
>positiv oder negativ bzw. eine Begrenzung auf ca. 8 Werte und dann
>wieder auf null. Habe leider kein Plan dazu.

Tja, was hast du denn außer Copy & Paste sonst gemacht?
Auch ein Programmieranfänger kann eine Variable auf +/-8 begrenzen.
Kleiner Tip:

if (val >8) . . .

Außerdem bist du im falschen Unterforum, siehe Überschrift!
Gast #4825691
Sorry für falsche Forum. Steht doch Projekte und Code drüber?
Warum bin ich nicht selbst drauf gekommen, ich Esel (Selbstkretik). Ist 
zu einfach.
Danke
Gast #4826431
Gebe ich das so ein, kommen die Zahlen 0 - 7, danach springt es zurück
auf 0. Damit bekomme ich negativen Zahlen mehr und der Encoder geht 
wunderbar.

W.A. schrieb:
> val &= 0x07;
-> 0..7

Versteh leider denn Sinn der Zeile nicht so ganz. Besonders wenn ich 
z.B.
val &= 0x04 eingebe. Möchte je nach Programm Teil unterschiedliche 
Zahlen ausgeben, von 2 bis 5.
LG KI
Moderator (Firma: Titel) Persönliche Seite #4826597
Klars schrieb:
> Versteh leider denn Sinn der Zeile nicht so ganz.
Hier geht es um Bitmanipulation in C.Dazu muss man wissen, was der 
Operator & macht, für Fortgeschrittene dann auch &= sowie dass 0x07 
binär 00000111 ist. Und deshalb die oberen 5 Bits auf 0 gesetzt und die 
unteren 3 unverändert gelassen werden.

> Besonders wenn ich z.B. val &= 0x04 eingebe.
Ja, das ist auch recht sinnlos wenn man ein wenig darüber nachdenkt...

Klars schrieb:
> Möchte je nach Programm Teil unterschiedliche Zahlen ausgeben, von 2 bis 5
Dann musst du einfach eine obere und eine untere Grenze überwachen. Das 
sind 2 Zeilen Code...
Gast #4826652
Lothar M. schrieb:
> W.A. schrieb:
>> Anderer Tip:   val &= 0x07;  -> 0..7
> Das stimmt aber nur, wenn val unsigned ist. Bei einer signed Variablen
> wird hier eigentlich auf -4..+3 begrenzt und dann wird -1 zu 7, -2 zu 6
> usw...

Das wage ich mal zu bezweifeln. -4 kannst du nicht mit den unteren drei 
Bit darstellen.
Auch bei einer signed Variablen wird auf 0..7 begrenzt. Der Wert -4 kann 
bei reinem inc/dec nie auftreten. Und ja, -1 wird zu 7, von 7 gehts bei 
einem "++" wieder auf 0.

Klars schrieb:
> Versteh leider denn Sinn der Zeile nicht so ganz. Besonders wenn ich
> z.B.
> val &= 0x04 eingebe.

Das scheint mir auch. 0x04 ist als Maskierung zur zyklischen 
Einschränkung des Wertebereichs nicht zu gebrauchen.

> Möchte je nach Programm Teil unterschiedliche Zahlen ausgeben,
> von 2 bis 5.

Das funktioniert mit einer Maskierung auch nicht. Beschreibe einfach mal 
genau, was du wirklich möchtest und nicht kleckerweise irgendwelche 
neuen Randbedingungen.
Moderator (Firma: Titel) Persönliche Seite #4826700
W.A. schrieb:
> Das wage ich mal zu bezweifeln. -4 kannst du nicht mit den unteren drei
> Bit darstellen.
Richtig, das stimmt natürlich für eine Wortbreite von 8 Bit. Ich war da 
ein wenig auf FPGAs mit beliebigen Wortbreiten ausgerutscht. Da würde 
ein 3 Bit breites "Wort" tatsächlich auf -4..+3 begrenzen. Allerdings 
bräuchte man dafür auch keine Maske... ;-)

PittyJ schrieb:
> Es gibt immer noch Lehrbücher zu gängigen Programmiersprachen. Die sind
> noch nicht ausgestorben.
Daran hatte ich auch schon gedacht. Aber ich hatte auch gedacht, da 
kommt Klars selber drauf...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.