Rotary Encoder 2000st met Z fase. Help!

Als U een gezamenlijk project wil starten of aan projecten van anderen mee wilt werken.
Gebruikers-avatar
Berichten: 2
Geregistreerd: 21 Apr 2016, 22:08

Rotary Encoder 2000st met Z fase. Help!

Berichtdoor Bartje » 21 Apr 2016, 22:45

Hallo allemaal,

Allereerst ben ik hier nieuw en ben (nog) totaal onkundig in het programmeren met Arduino. Ik kan het een beetje lezen en begrijpen, maar schrijven is nog helemaal niets.

Ik heb een project(je) bedacht waarbij ik dmv een Uno uit een rotary encoder (Omron E6B2-CWZ6C) met 2000 stappen gegevens wil hebben op een gestructureerde manier. Deze encoder heeft een A, B en een Z fase. Deze Z fase geeft 1 puls per omwenteling. Ik zou graag een programmaatje willen maken waarbij ik de waardes in een lijst krijg en waarbij ik, ongeacht of ik een aantal x links of rechts draai, telkens dezelfde waarde op een cirkelhoek krijg. Ik heb het internet afgestruind, maar ben dit nog niet tegengekomen. Ik heb wel sketches gezien die optellen en aftrekken continue, maar na een omwenteling kloppen deze waardes niet meer.
Ik heb de volgende sketch gevonden wat denk ik een goede basis is, en die uitgebreid zal moeten worden. Wie kan mij helpen?
Deze geeft op elke puls aan of de draai naar links is of naar rechts. Dit moet een waarde worden en met de Z waarde wil ik het aantal omwentelingen registreren.

Code: Alles selecteren
#include <rotary.h>

Rotary r = Rotary(2, 3);

void setup() {
  Serial.begin(250000);
  PCICR |= (1 << PCIE2);
  PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
  sei();
}

void loop() {

}

ISR(PCINT2_vect) {
  unsigned char result = r.process();
  if (result) {
    Serial.println(result == DIR_CW ? "Rechts" : "Links");
  }
}

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Rotary Encoder 2000st met Z fase. Help!

Berichtdoor nicoverduin » 22 Apr 2016, 10:03

Wat is nu eigenlijk de vraag?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Rotary Encoder 2000st met Z fase. Help!

Berichtdoor shooter » 22 Apr 2016, 13:25

welke library denk je dat goed is?
en ik mis een pin (de Z)
en dat stuk met pcmsk heb je ook ergens vandaan.
het is helaas niet zo dat je als je een programma vind ook gelijk weet hoe het werkt, dus je zult iets meer moeten doen.
de A en B gaan prima in een interupt en dan tellen hoeveel, de Z is alleen een positie en is dus niet richtinggevoelig.(wordt vaak gebruikt als nulpositie samen met een externe schakelaar of zo.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 2
Geregistreerd: 21 Apr 2016, 22:08

Re: Rotary Encoder 2000st met Z fase. Help!

Berichtdoor Bartje » 22 Apr 2016, 15:11

Sorry dat ik de probleemstelling niet duidelijk heb neergelegd, maar alleen mijn wens.
De code die ik heb neergelegd heb ik inderdaad online gevonden en op mijn encoder getest. Ik heb er meerdere gevonden en bekeken, maar deze is mooi klein en werkt goed. Daarom denk ik dat ik hierop wel verder kan bouwen. Alleen, door mijn gebrek aan programmeerkennis, zoek ik jullie hulp. Dus wat hulp hierbij wordt gewaardeerd!
De puls van de Z zal er in moeten, in de setup zal ik er een pin aan moeten toewijzen. Maar hoe kan ik die juist aanspreken in de loop zodat de arduino weet dat er een omwenteling geweest is?

Alvast bedankt voor jullie hulp!

Groet, Bartje

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Rotary Encoder 2000st met Z fase. Help!

Berichtdoor shooter » 22 Apr 2016, 19:55

er zijn op een UNO 2 pinnen die je voor een interupt kunt gebruiken, dus nu moet je keuzes gaan maken.
manier 1 op A en B een interupt zetten dan kun je 4 quadranten afvangen
de Z vraag je dan in die interupt ook gewoon door digitalRead(Zin).

dat is de methode waarbij je hoge resolutie kunt hebben.
buiten de interupt kun je dan nog iets doen met de teller. en bijv met de Z teller.
denk er wel aan dat je een long pakt als type dan kun je veel omwentelingen tellen.

en ja de code is klein maar het resultaat is alleen maar welke kant er draait. en geen positie.
(alhowel dat ook aan de library ligt daar zijn ook vele versies van.

een interupt is trouwens iets heel anders dan de loop.
even in verdiepen in de reference en je hebt weer iets belangrijks geleerd.
paul deelen
shooter@home.nl

Terug naar Gezamenlijke projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten