#include //basic configuration of PIC16F1847 #pragma config FOSC=INTOSC,WDTE=OFF,PWRTE=OFF,MCLRE=OFF,CP=OFF,CPD=OFF,BOREN=ON,CLKOUTEN=OFF,IESO=OFF,FCMEN=OFF #pragma config WRT=OFF,PLLEN=OFF,STVREN=ON,BORV=LO,LVP=OFF #define IN1 LATBbits.LATB1 #define IN2 LATBbits.LATB2 #define _XTAL_FREQ 16000000 long Potent=0,power=0; void Wait(long ms); void PIC_Init(); void POTENTIOMETER(); void MOTOR_L(int powerL); void MOTOR_R(int powerR); void PIC_Init() { TRISA=0b00111111; TRISB=0b00000001;// setting inputs=1/outputs=0 ANSELA=0b00010000; ANSELB=0b00000000;// setting analog=1/digital=0 inputs LATA=0; LATB=0; // zeroing outputs OSCCON=0b01111010; // 16 MHz internal oscillator APFCON0bits.CCP2SEL=1; // PWM CCP2 at RA7 //setting PWM at RB3 and RA7, PWM frequency = 244 Hz TRISAbits.TRISA7=1; PR4=255; CCP2CON=0b00001100; CCPR2L=0; PIR3bits.TMR4IF=0; T2CON=0b00000111; // prescaler 64 TRISAbits.TRISA7=0; // setting A/D converter ADCON1=0b10100000; // right adjusted, conversion freq. FOSC/32, VDD reference ADCON0=0b00010001; // ADC at channel RA4=AN4, ADC module on } void main() { PIC_Init(); while(1) { POTENTIOMETER(); if(Potent<=512) {power=255-(Potent/2); MOTOR_L(power);} else { power=(Potent-512)/2; MOTOR_R(power);} } } void MOTOR_L(int powerL) { IN1=1;IN2=0; CCPR2L=powerL; } void MOTOR_R(int powerR) { IN1=0;IN2=1; CCPR2L=powerR; } void Wait(long ms) { for(long bb=0;bb