Witam,
Muszę zaimplementować obsługę obrotowego potencjometru impulsowego, dokładnie takiego w oparcu o uC ATmega169P (Datasheet).
Generalnie zasada jest prosta. Przy obrocie zwiera jeden z dwóch pinów (w zależności od kierunku)do masy. Wejście uC jest w stanie wysokim (+5V). Za pomocą przerwania mam obsłużyć to przerwanie. Na razie chcę zaimplementować samą akcję na wykrycie tego przerwania (albo jeżeli ma ktoś pomysł na rozwiązanie wykrycia kierunku obrotu to miło by było podzielić się)
Napisałem kod jednak bez rezultatów i nie mam pojęcia co jeszcze należy ustawić.
Spotkał się ktoś z podobnym problemem lub posiada wiedzę jak go rozwiązać?
*pod portem D są diody, a pod E potencjometr (2 piny). Testowo piny portu D są jako wyjście a E na wejście - nie ma to znaczenia tutaj.
Muszę zaimplementować obsługę obrotowego potencjometru impulsowego, dokładnie takiego w oparcu o uC ATmega169P (Datasheet).
Generalnie zasada jest prosta. Przy obrocie zwiera jeden z dwóch pinów (w zależności od kierunku)do masy. Wejście uC jest w stanie wysokim (+5V). Za pomocą przerwania mam obsłużyć to przerwanie. Na razie chcę zaimplementować samą akcję na wykrycie tego przerwania (albo jeżeli ma ktoś pomysł na rozwiązanie wykrycia kierunku obrotu to miło by było podzielić się)
Napisałem kod jednak bez rezultatów i nie mam pojęcia co jeszcze należy ustawić.
Spotkał się ktoś z podobnym problemem lub posiada wiedzę jak go rozwiązać?
#include <avr/io.h>
#include <util/delay.h>
#include <stdlib.h>
#include <stdio.h>
#include <avr/interrupt.h>
#define F_OSC 16000000
void led3(int l){
if(l){
PORTD=PORTD & 0x7F;//zapala LED3
}else{
PORTD=PORTD | 0x80;//gasi LED3
}
_delay_ms(500);
}
ISR(PCINT0_vect){
led3(1);
}
int main(){
DDRD=0xFF;
DDRE=0x00;
cli();
EIMSK |= (1<<PCIE0);
PCMSK0 |= (1<<PCINT7);
PCMSK0 |= (1<<PCINT6);
sei();
while(1){
led3(0);
_delay_ms(500);
}
}
*pod portem D są diody, a pod E potencjometr (2 piny). Testowo piny portu D są jako wyjście a E na wejście - nie ma to znaczenia tutaj.