// Oscillator #define Fcy ((7370000*16)/4) // = 29.52MHz // UART // PLL* | 115200 | 56700 | 38400 | 19200 | 9600 | 4800 | 2400 | 1200 // -----+-----------+----------+----------+----------+---------+---------+---------+-------- // 1 | 0 | 1.03 | 2 | 5 | 11 | 22.99 | 46.98 | 94.96 // 4 | 3 | 7.12 | 11 | 22.99 | 46.98 | 94.96 | 190.93 | 382.85 // 8 | 7 | 15.25 | 22.99 | 46.98 | 94.96 | 190.93 | 382.85 | 766.71 // 16 | 14.99 | 31.5 | 46.98 | 94.96 | 190.93 | 382.85 | 766.71 | 1534.42 // -----+-----------+----------+----------+----------+---------+---------+---------+-------- // Baud | 115156.25 | 57578.13 | 38385.42 | 19192.71 | 9596.35 | 4798.18 | 2399.09 | 1199.54 // -----+-----------+----------+----------+----------+---------+---------+---------+-------- #ifdef PLL1 #define BAUDRATE_115200 0 // (Clock / (16 * 115200)) - 1 #define BAUDRATE_56700 1 #define BAUDRATE_38400 2 #define BAUDRATE_19200 5 #define BAUDRATE_9600 11 #define BAUDRATE_4800 23 #define BAUDRATE_2400 47 #define BAUDRATE_1200 95 #endif #ifdef PLL4 #define BAUDRATE_115200 3 // (Clock / (16 * 115200)) - 1 #define BAUDRATE_56700 7 #define BAUDRATE_38400 11 #define BAUDRATE_19200 23 #define BAUDRATE_9600 47 #define BAUDRATE_4800 95 #define BAUDRATE_2400 191 #define BAUDRATE_1200 383 #endif #ifdef PLL8 #define BAUDRATE_115200 7 // (Clock / (16 * 115200)) - 1 #define BAUDRATE_56700 15 #define BAUDRATE_38400 23 #define BAUDRATE_19200 47 #define BAUDRATE_9600 95 #define BAUDRATE_4800 191 #define BAUDRATE_2400 383 #define BAUDRATE_1200 767 #endif #ifdef PLL16 #define BAUDRATE_115200 15 // (Clock / (16 * 115200)) - 1 #define BAUDRATE_56700 32 #define BAUDRATE_38400 47 #define BAUDRATE_19200 95 #define BAUDRATE_9600 191 #define BAUDRATE_4800 383 #define BAUDRATE_2400 767 #define BAUDRATE_1200 1534 #endif // ADC #define LINE_RR ADCBUF0 #define LINE_R ADCBUF1 #define LINE_M ADCBUF2 #define LINE_L ADCBUF3 #define LINE_LL ADCBUF4 // Servos // Pulses per time cycle with 29.52MHz clock... use these numbers to set // the SERVO_MIN, SERVO_MID, and SERVO_MAX // // Master Clock = 7.37MHz, PLL*1 // div | tick(us)| 1ms | 1.5ms | 2ms | 16ms | 20ms // ----+---------+--------+---------+--------+--------+--------- // 256 | 138.942 | 7.2 | 10.8 | 14.39 | 115.16 | 143.95 // 64 | 34.735 | 28.79 | 43.18 | 57.58 | 460.63 | 575.78 // 8 | 4.342 | 230.31 | 345.47 | 460.63 | 3685 | 4606.25 ** // 1 | 0.543 | 1842.5 | 2763.75 | 3685 | 29480 | 36850 // // Master Clock = 7.37MHz, PLL*4 // div | tick(us)| 1ms | 1.5ms | 2ms | 16ms | 20ms // ----+---------+--------+---------+--------+--------+--------- // 256 | 34.735 | 28.79 | 43.18 | 57.58 | 460.63 | 575.78 // 64 | 8.684 | 115.16 | 172.73 | 230.31 | 1842.5 | 2303.13 // 8 | 1.085 | 921.25 | 1381.88 | 1842.5 | 14740 | 18425 ** // 1 | 0.136 | 7370 | 11055 | 14740 | 117920 | 147400 // // Master Clock = 7.37MHz, PLL*8 // div | tick(us)| 1ms | 1.5ms | 2ms | 16ms | 20ms // ----+---------+--------+---------+--------+--------+--------- // 256 | 17.368 | 57.58 | 86.37 | 115.16 | 921.25 | 1151.56 // 64 | 4.342 | 230.31 | 345.47 | 460.63 | 3685 | 4606.25 // 8 | 0.543 | 1842.5 | 2763.75 | 3685 | 29480 | 36850 ** // 1 | 0.068 | 14740 | 22110 | 29480 | 235840 | 294800 // // Master Clock = 7.37MHz, PLL*16 // div | tick(us)| 1ms | 1.5ms | 2ms | 16ms | 20ms // ----+---------+--------+---------+--------+--------+--------- // 256 | 8.684 | 115.16 | 172.73 | 230.31 | 1842.5 | 2303.13 // 64 | 2.171 | 460.63 | 690.94 | 921.25 | 7370 | 9212.5 // 8 | 0.271 | 3685 | 5527.5 | 7370 | 58960 | 73700 ** // 1 | 0.034 | 29480 | 44220 | 58960 | 471680 | 589600 #ifdef PLL1 #define SERVO_RATE 3685 // timer 3 div 8 - pulses to reach 16ms #define SERVO_MIN (SERVO_RATE-230) // 1.0 ms pulse #define SERVO_MID (SERVO_RATE-345) // 1.5 ms pulse #define SERVO_MAX (SERVO_RATE-461) // 2.0 ms pulse #endif #ifdef PLL4 #define SERVO_RATE 59040 // timer 3 div 8 - pulses to reach 16ms #define SERVO_MIN (SERVO_RATE-921) // 1.0 ms pulse - 58119 #define SERVO_MID (SERVO_RATE-1382) // 1.5 ms pulse - 57658 #define SERVO_MAX (SERVO_RATE-1843) // 2.0 ms pulse - 57197 #endif #ifdef PLL8 #define SERVO_RATE 59040 // timer 3 div 8 - pulses to reach 16ms #define SERVO_MIN (SERVO_RATE-1843) // 1.0 ms pulse #define SERVO_MID (SERVO_RATE-2764) // 1.5 ms pulse #define SERVO_MAX (SERVO_RATE-3685) // 2.0 ms pulse #endif #ifdef PLL16 #define SERVO_RATE 59040 // timer 3 div 8 - pulses to reach 16ms #define SERVO_MIN (SERVO_RATE-3685) // 1.0 ms pulse #define SERVO_MID (SERVO_RATE-5528) // 1.5 ms pulse #define SERVO_MAX (SERVO_RATE-7370) // 2.0 ms pulse #endif // PLL1 // div | 1 us | 1kHz | 2kHz | 5kHz | 10kHz | 20kHz // ----+--------+--------+--------+--------+--------+------- // 256 | 138.94 | 7.2 | 3.6 | 1.44 | 0.72 | 0.36 // 64 | 34.74 | 28.79 | 14.39 | 5.76 | 2.88 | 1.44 // 8 | 4.34 | 230.31 | 115.16 | 46.06 | 23.03 | 11.52 ** // 1 | 0.54 | 1842.5 | 921.25 | 368.5 | 184.25 | 92.13 // // PLL4 // div | 1 us | 1kHz | 2kHz | 5kHz | 10kHz | 20kHz // ----+--------+--------+--------+--------+--------+------- // 256 | 34.74 | 28.79 | 14.39 | 5.76 | 2.88 | 1.44 // 64 | 8.68 | 115.16 | 57.58 | 23.03 | 11.52 | 5.76 // 8 | 1.09 | 921.25 | 460.63 | 184.25 | 92.13 | 46.06 ** // 1 | 0.14 | 7370 | 3685 | 1474 | 737 | 368.5 // // PLL8 // div | 1 us | 1kHz | 2kHz | 5kHz | 10kHz | 20kHz // ----+--------+--------+--------+--------+--------+------- // 256 | 17.37 | 57.58 | 28.79 | 11.52 | 5.76 | 2.88 // 64 | 4.34 | 230.31 | 115.16 | 46.06 | 23.03 | 11.52 // 8 | 0.54 | 1842.5 | 921.25 | 368.5 | 184.25 | 92.13 ** // 1 | 0.07 | 14740 | 7370 | 2948 | 1474 | 737 // // PLL16 // div | 1 us | 1kHz | 2kHz | 5kHz | 10kHz | 20kHz // ----+--------+--------+--------+--------+--------+------- // 256 | 8.68 | 115.16 | 57.58 | 23.03 | 11.52 | 5.76 // 64 | 2.17 | 460.63 | 230.31 | 92.13 | 46.06 | 23.03 // 8 | 0.27 | 3685 | 1842.5 | 737 | 368.5 | 184.25 ** // 1 | 0.03 | 29480 | 14740 | 5896 | 2948 | 1474 #ifdef PLL1 #define PWM_RATE 230 // timer 3 div 8 - pulses to reach 1ms #endif #ifdef PLL4 #define PWM_RATE 921 // timer 3 div 8 - pulses to reach 1ms #endif #ifdef PLL8 #define PWM_RATE 1842 // timer 3 div 8 - pulses to reach 1ms #endif #ifdef PLL16 #define PWM_RATE 3685 // timer 3 div 8 - pulses to reach 1ms #endif #define PWM_STOP PWM_RATE/2 #define PWM_FAST PWM_RATE-1 #define PWM_MEDIUM ((PWM_RATE/3)*2) #define PWM_SLOW ((PWM_RATE/3)*1) // motor controls enum {LEFT, RIGHT, FORWARD, REVERSE, STOP}; enum {SERVO, HBRIDGE};