This commit is contained in:
sfokin 2025-04-12 21:36:10 +03:00
parent b74b63cd3b
commit b78d822ae3

14
main.c
View File

@ -19,24 +19,27 @@ void __interrupt() ISR(void) {
INTCONbits.GIE = 0; INTCONbits.GIE = 0;
if (PIR1bits.TMR1IF) { if (PIR1bits.TMR1IF) {
PIR1bits.TMR1IF = 0; // Clear interrupt flag PIR1bits.TMR1IF = 0; // Clear interrupt flag
T1CONbits.TMR1ON = 0;
static uint16_t off_ticks; // Retains value between interrupts static uint16_t off_ticks; // Retains value between interrupts
static uint16_t timer; static uint16_t timer;
if (pulse_state == 0) { if (pulse_state == 0) {
// Calculate pulse parameters // Calculate pulse parameters
uint16_t on_ticks = 75 + ((uint16_t)servo_pos * 237) / 255; // Map to 0.5ms-2.5ms uint16_t on_ticks = 125 + ((uint16_t)servo_pos * 125) / 255; // Map to 0.5ms-2.5ms
off_ticks = 2500 - on_ticks; // 2500 ticks = 20ms off_ticks = 2500 - on_ticks; // 2500 ticks = 20ms
RC5 = 1; // Start pulse
timer = 65535 - on_ticks; timer = 65535 - on_ticks;
TMR1L = (unsigned char)(timer & 0xFF); TMR1L = (unsigned char)(timer & 0xFF);
TMR1H = (unsigned char)(timer >> 8); TMR1H = (unsigned char)(timer >> 8);
RC5 = 1; // Start pulse
pulse_state = 1; pulse_state = 1;
} else { } else {
RC5 = 0; // End pulse
timer = 65535 - off_ticks; timer = 65535 - off_ticks;
TMR1L = (unsigned char)(timer & 0xFF); TMR1L = (unsigned char)(timer & 0xFF);
TMR1H = (unsigned char)(timer >> 8); TMR1H = (unsigned char)(timer >> 8);
RC5 = 0; // End pulse
pulse_state = 0; pulse_state = 0;
} }
T1CONbits.TMR1ON = 1;
} }
INTCONbits.GIE = 1; INTCONbits.GIE = 1;
} }
@ -62,7 +65,7 @@ void setup() {
T1CONbits.TMR1ON = 1; T1CONbits.TMR1ON = 1;
// Configure ADC // Configure ADC
TRISAbits.TRISA2 = 0; TRISAbits.TRISA2 = 1;
ANSELbits.ANS2 = 1; ANSELbits.ANS2 = 1;
ADCON0 = 0b00001001; ADCON0 = 0b00001001;
ADCON1 = 0; ADCON1 = 0;
@ -116,8 +119,7 @@ void main() {
__delay_us(100); __delay_us(100);
break; break;
case 1: case 1:
//target_pos = 511; smooth_servo(128);
smooth_servo(127);
__delay_us(100); __delay_us(100);
break; break;
case 2: case 2: