Heeft er iemand hier verstand van rotary encoders? Ik zit al 2 dagen te prutsen met zo'n ding ,maar ik krijg er niets zinnigs uit.
Het gaat hier om een relatieve rotary encoder van voti.nl (
datasheet), die met een poot (kanaal A) aan een extern interrupt (int0) van een atmega88 hangt, met een poot(kanaal

aan poot PD3 van de avr, en met kanaal C aan ground.Vervolgens gebruik ik deze code:
C:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include "lcd.h"
#define DIR_LEFT 1
#define DIR_RIGHT 2
volatile unsigned char dir = 0;
ISR(INT0_vect)
{
if (bit_is_set(PORTD, PD3)) dir = DIR_LEFT;
if (bit_is_clear(PORTD, PD3)) dir = DIR_RIGHT;
_delay_ms(3);
}
int main()
{
char buffer[2];
PORTD |= 0b00001100;
EICRA |= (1 << ISC01) | (1 << ISC00);
EIMSK |= (1 << INT0);
sei();
for (;;)
{
lcd_home();
lcd_puts(itoa(dir, buffer, 10));
}
return 0;
}
|
Als ik nu aan de encoder draai, krijg ik alleen maar '1'tjes op m'n lcd, ook als ik verschillende richtingen op draai.
Ik heb ook al geprobeerd om de A en B kanalen om te wisselen, maar dan verandert er niets.
Iemand een idee? ik krijg zo het vermoeden dat die rotary encoder gewoon kaport is ofzo

You know you're an engineer if you have no life & can prove it mathematically.
Specs: Intel 80286 @ 12mhz, 480KB extended memory, 40MB HDD, Hercules Graphics, MS-DOS 4, Windows 2.1 shell