Forum: Mikrocontroller und Digitale Elektronik Zählerprogramm am Inkrementalgeber


von Tim D. (Gast)


Lesenswert?

Hallo Zusammen,
ich habe hier einen Inkrementalgeber des Typs HEDS 9100. Dieser hat eine 
Scheibe eingebaut mit 500 streifen. Jetzt dachte ich mir könnte ich die 
Drehzahl des Motors anhand dieses Inkrementalgebers anzeigen lassen.
Um zu testen ob der microcontroller die vielen tausend Impulse des 
Inkrementalgebers verarbeitet hate ich diesen kurzerhand an den 
Microcontroller angeschlossen. VCC liegt auf +5V, Ground auf Ground und 
die beiden Kanäle an 2 Ports welche als Eingänge definiert wurden. Jetzt 
sollte mein Programm zählen (bis 5000 ca) und eine LED zum leuchten 
bringen wenn diese Zahl erreicht wird. Mein Programm sieht so aus:
1
#include <avr/io.h>      
2
3
4
5
int main(void){    
6
  
7
  uint8_t counter = 0;  //Zaehlvariable
8
9
  DDRD = 0x00;    //Alle PINs als Eingang definieren
10
  DDRA = 0xff;    //Alle Pins als Ausgang definieren
11
  
12
    while(1)      //Endlosschleife
13
    {
14
    if( PIND & (1<<PD2))  //Falls ein Signal an PortD 1 
15
    {
16
    counter++;    //counter um 1 inkrementieren
17
                }
18
    if(counter >= 5000)
19
    {
20
      PORTA |= 1<<PA2;
21
    }
22
        }
Ich probiere schon mit beiden Kanälen herum , komme aber leider zu 
keiner funtkionstüchtigen Lösung. Vielleicht sieht ja einer von euch was 
für Fehler hier vorhanden sind.

Gruß

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Vllt braucht der Komaparator noch nen Pullup?
Wird im Datenblatt nicht explizit erwähnt, aber in einer Tabelle steht 
was von einem 3,3k Pullup.

Außerdem geht das schief:
  if( PIND & (1<<PD2))  //Falls ein Signal an PortD 1
    {
    counter++;    //counter um 1 inkrementieren

Der Pin wird sicherlich länger als ein Mainschleifendurchlauf high sein.
-> Nutz den INT Eingang (Low zu High Fanke).
Oder Merke dir den vorherigen Zustand mit nur die Flanke zählt.

von Falk B. (falk)


Lesenswert?

Siehe Drehgeber, dann wird das vielleicht was.

von Syliosha (Gast)


Lesenswert?

Das erste Problem ist wohl ehr, dass der Softwarecounter nur die Zahlen 
0-255 fasst.

von Uwe (de0508)


Lesenswert?

Wichtig ist auch, counter wird nur max. die Zahl 255 erreichen können!

von Tim D. (Gast)


Lesenswert?

@ Martin
Danke für den Hinweis, ich werde mir den Teil noch einmal anschauen

@ Falk
Danke für den Link, hier ist eine wesentlich bessere Funktionsweise 
beschrieben

@  Syliosha und Uwe
Das liegt nur an uint8_t oder? wenn ich den Datenbereich erhöhe sollte 
des uC das doch erfassen oder?

Vielen Dank für eure schnellen Antworten :)

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.