#define LCD_RS PIN_D0
#define LCD_E PIN_D2
#define LCD_DB4 PIN_D4
#define LCD_DB5 PIN_D5
#define LCD_DB6 PIN_D6
#define LCD_DB7 PIN_D7
#include <18F4550.h>
#fuses NOMCLR
#fuses XT,nowdt
#use delay(clock=4000000)
#include <lcd1.c>
unsigned int8 Encoder, oldEncoder;
int sayac, tmp;
void main()
{
setup_comparator(NC_NC_NC_NC ); // disable comparators
setup_vref(FALSE);
setup_adc_ports(NO_ANALOGS ); // disable analog inputs
setup_adc(ADC_OFF ); // disable A2D
lcd_init();
output_b(0x00);
set_tris_b(0x03);
Encoder = 0x03;
sayac = 0;
lcd_gotoxy(1, 1);
lcd_putc("Sayac:");
while(TRUE)
{
oldEncoder = Encoder;
tmp = sayac;
lcd_gotoxy(1, 2);
printf(lcd_putc,"%d",tmp);
if (Encoder == oldEncoder) Encoder = input_b() & 0x03;
if (input_state(PIN_B1) != input_state(PIN_B0))
{
if (input_state(PIN_B0) == input_state(PIN_B1)) if (sayac < 9999) sayac++;
}
if (input_state(PIN_B0) != input_state(PIN_B1))
{
if (input_state(PIN_B1) == input_state(PIN_B0)) if (sayac > 0) sayac--;
}
}
}
Arkadaşlar stabil çalışmıyor. Yardım edermisiniz lütfen...
Merhaba; benzer problemi kesme kullanarak çözmüştüm.Kodları duty cycle değerini ayarlamak için yazmıştım. İlgili kodları paylaştım. Kolay gelsin.
#int_ext
void encoder()
{
disable_interrupts(INT_EXT);
prev_duty=duty;
data_pos=input(data);
clock_pos=input(clock);
//-------Atlamaları önlemek için
//if(prev_data!=data_pos && prev_clock!=clock_pos)
// {
if(data_pos!=clock_pos && duty!=0)
{duty=duty-1;
if(duty>=prev_duty) {duty=prev_duty;}
}
// }
//if(prev_data==data_pos && prev_clock==clock_pos)
//{
if(data_pos==clock_pos && duty!=200)
{duty=duty+1;
if(duty<=prev_duty) {duty=prev_duty;}
}
//}
//-----------------------------------------------
delay_ms(1);
prev_data=data_pos;
prev_clock=clock_pos;
enable_interrupts(INT_EXT);
}
Merhaba,
Bu yazılım dilini bilmiyorum ama bu "#fuses NOMCLR" galiba MCLR pinini kullanılmıyor anlamına geliyorsa bana sorarsanız MCLR pinini TRIS ayarlarında giriş ayarlayıp 10k direnç ile +5 volta bağlayın.Ayrıca 18F4550 nin dataşitine bakarsanız bu MCLR pinin nasıl resetleneceğine dair de değişik bir bağlantı şekli vardır.Kolay gelsin.
Dış kesme kullanırsanız daha stabil çalışacaktır.
Arkadaşlar teşekkürler...