/* PortB -> Výstupní piny na ovládání jednotlivých částí auta RB0 - Řízení pohonu // RB0:RB1 -> 1:0 Dopředu, 0:1 Dozadu, 1:1 / 0:0 Disable RB1 - Řízení pohonu // ^ ^ RB2 - Mlhovky RB3 - Zadní světla RB4 - Klakson RB5 - Přední světla RB6 - Řízení zatáčení // RB0:RB1 -> 1:0 Doleva, 0:1 Doprava, 1:1 / 0:0 Rovně RB7 - Řízení zatáčení // ^ ^ RA0 - Výstup z PMW signal, ktery ovlada enable na H-mostu u pohonu Enable na pohon motorů (H-bridge -> Vstup pwm) */ #include "p18f252.h" #include "usart.h" #include "pwm.h" #define SpeedMhz 20000000 // f kristalu v Hz #include // nejake oneskorenie tam mozno pouzijes... #pragma config OSC = HS /* HSPLLSets the oscillator mode to XT for cristal up to 4MHz or HS=>4MHz */ #pragma config WDT = OFF /* Turns the watchdog timer off */ #pragma config LVP = OFF /* Turns low voltage programming off */ #pragma config DEBUG = OFF /* Compiles without extra debug code */ //#pragma config OSC = HS unsigned char pB = 0x0; unsigned char getRx(); void setPin(unsigned char get); void setPwm(unsigned char get); void init(); void init() { //inicializace uartu OpenUSART( USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 25 ); /* baudUSART (BAUD_IDLE_CLK_HIGH & BAUD_8_BIT_RATE & BAUD_WAKEUP_ON & BAUD_AUTO_ON); */ //inicializace portu TRISB = 0; //Všechny piny RB sou výstupní //inicializace pwm OpenPWM1(0x64); //Perioda // SetOutputPWM1 (SINGLE_OUT, PWM_MODE_1); // SetDCPWM1(0); //Duty cycle } void main() { unsigned char read; init(); while(1) { read = getRx(); if (read & 0x40) setPwm(read); else setPin(read); } } unsigned char getRx() { unsigned char result; result = ReadUSART(); return result; } void setPin(unsigned char get) { unsigned char pin; unsigned char h; unsigned char mask; h = get & 0x80; //hodnota h = h >> 7; pin = get & 0x7; mask = 1 << pin; if (h) pB |= mask; else pB &= ~mask; PORTB = pB; } void setPwm(unsigned char get) { unsigned char frek; frek = get & 0x3F; //00xxxxxx - Vyčteme frekvenci //zmena frekvence: //?? }