0 Üye ve 1 Ziyaretçi konuyu incelemekte.
timer_1_set_one_shot_value(CALC_US(240)); state = STATE_IS_1;timer_1_set_one_shot_value(CALC_US(45)); state = STATE_IS_2;timer_1_set_one_shot_value(CALC_US(90)); state = STATE_IS_3;uint8_t val =240,val1=45,val2=90; değişkenlere değerleri verdik.timer_1_set_one_shot_value(CALC_US(val)); state = STATE_IS_1;timer_1_set_one_shot_value(CALC_US(val1)); state = STATE_IS_2;timer_1_set_one_shot_value(CALC_US(val2)); state = STATE_IS_3; ISR (INT0_vect) {if (((PIND&0x04)==0x00)&&(val<240)&&(val1<45)&&(val2<90)) val = val +1 ; val1 = val1 +1 ; val2 = val2 +1; //incif (((PIND&0x02)==0x01)&&(val >200)&&(val<25)&&(val2<70)) val = val -1; val1 = val1 -1 ; val2 = val2 -1; //dec} int main(void){ DDRD &= ~(1 << PD2); //encoder A input a DDRD &= ~(1 << PD3); //encoder B input b PORTD |= (1 << PD2); //Pull-UP R PORTD |= (1 << PD3); //Pull-UP R}
b0 = pin_get_status(p0); b1 = pin_get_status(p1); if (r_flag==0){ if (b0==0 && b1==1){ azaltildi = 1; r_flag=1; }else if (b0==1 && b1==0){ arttirildi = 1; r_flag=1; }if (b0==0 && b1==0){ r_flag=1; } }else{ if (b0==1 && b1==1){ r_flag=0; } }
DDRD |= 0b00001100PORTD |= 0b00001100
EICRA = 0b00001010;
EIFR = 0b0000011;
EIMSK = = 0b0000011;
volatile int v =240 , v1 = 60 ,v2 =90;void initInterrupts(void);ISR(INT1_vect){ if (PIND & (1<<PIND3)){ v++; v1++; v2++; } else{ v--; v1--; v2--; } }void initInterrupts(void){ EICRA = 0b00001000;// ISC11 enable EIFR = 0b0000010;// INTF1 enable EIMSK = 0b0000010;//INT1 enable sei();}
#include <avr/io.h>#include <avr/interrupt.h>static uint8_t state = 0;static uint16_t OCR_advance[] = {240,240,60,60,60,60,60,60,60,540};#define STATE_COUNT (sizeof(OCR_advance)/sizeof(uint16_t ))static uint8_t state_1 = 0;static uint16_t OCR_advance_1[] = {16,104,16,104,16,104,16,1068};#define STATE_COUNT_1 (sizeof(OCR_advance_1)/sizeof(uint16_t ))ISR(TIMER1_COMPA_vect){ OCR1A += OCR_advance[state]; if (++state >= STATE_COUNT) state = 0;}ISR(TIMER1_COMPB_vect){ OCR1B += OCR_advance_1[state_1]; if (++state_1 >= STATE_COUNT_1) state_1 = 0;}int main(void){ // OC1A output DDRB = (1<<1)|(1<<2); // Toggle OC1A on compare match TCCR1A = (1<<COM1A0)|(1<<COM1B0); OCR1A = 540; OCR1B =1068; TIMSK1 = (1<<OCIE1A)|(1<<OCIE1B); // Presc. 1:8 for 1MHz timer tick TCCR1B = 1<<CS11; sei(); while (1) { }}
OC1A,OC1B çıkış DDRB = (1<<1)|(1<<2);