Projektbil Car-0-line

Startsida - Bilen - Kontrollen - Rapport (PDF)
Källkod och kretsschema för bilen.
#include void uart_init(); uint8_t uart_recieve(); void timer_init(); uint8_t data; uint8_t lampswitch = 0; uint8_t lamp = 0; int main(void){ uart_init(); timer_init(); DDRB = 0xff; //sätter B och D till utportar DDRD = 0xff; while (1){ data = uart_recieve(); //får in datan från RX //TCCR3A = (0b00100010); //PB7 på, Avstängd PB6 (Höger fram) //TCCR3A = (0b10000010); //PB6 på, Avstängd PB7 (Höger bak) //TCCR1A = (0b00100010); //PB4 på, Avstängd PB5 (vänster Fram) //TCCR1A = (0b10000010); //PB5 på, Avstängd PD4 (vänster Bak) //maskar för att få ut värden från protocol uint8_t framMask = data & (0b00100000); uint8_t bakMask = data & (0b00010000); uint8_t hogerMask = data & (0b00001000); uint8_t vansterMask = data & (0b00000100); uint8_t tutaMask = data & (0b00000010); uint8_t lamporMask = data & (0b00000001); if(framMask == (0b00100000)){ //Fram //PB6 = 0 //PB7 = PWM //PD5 = 0 //PD4 = PWM OCR3A = 25; //ändrar hastighet på hjulen OCR3B = 25; OCR1A = 25; OCR1B = 25; //svänger höger medans man kör, höger Avstängd, Vänster fram if (hogerMask == (0b00001000)){ TCCR3A = (0b00100010); //PB7 på, Avstängd PB6 (Höger fram) TCCR1A = (0b00000010); //PB5 på, Avstängd PD4 (vänster Bak) // svänger vänster medans man kör, Höger fram, vänster Avstängd }else if (vansterMask == (0b00000100)){ TCCR1A = (0b00100010); //PB4 på, Avstängd PB5 (vänster Fram) TCCR3A = (0b00000010); //PB6 på, Avstängd PB7 (Höger bak) //om den bara ska åka fram }else{ TCCR3A = (0b00100010); //PB7 på, Avstängd PB6 (Höger fram) TCCR1A = (0b00100010); //PB4 på, Avstängd PB5 (vänster Fram) } }else if (bakMask == (0b00010000)){ //Bak //PB6 = PWM //PB7 = 0 //PD5 = PWM //PD4 = 0 OCR3A = 12; //ändrar hastighet på hjulen OCR3B = 12; OCR1A = 12; OCR1B = 12; TCCR3A = (0b10000010); //PB6 på, Avstängd PB7 (Höger bak) TCCR1A = (0b10000010); //PB5 på, Avstängd PD4 (vänster Bak) }else if (hogerMask == (0b00001000)){ //höger Bak, Vänster fram //PB6 = PWM //stäng av period eller puls? //PB7 = 0 //PD5 = PWM //PD4 = 0 OCR3A = 12; //ändrar hastighet på hjulen OCR3B = 12; OCR1A = 12; OCR1B = 12; TCCR3A = (0b00100010); //PB7 på, Avstängd PB6 (Höger fram) TCCR1A = (0b10000010); //PB5 på, Avstängd PD4 (vänster Bak) }else if (vansterMask == (0b00000100)){ // Höger fram, vänster bak //PB6 = 0 //PB7 = PWM //PD5 = 0 //PD4 = PWM OCR3A = 12; //ändrar hastighet på hjulen OCR3B = 12; OCR1A = 12; OCR1B = 12; TCCR1A = (0b00100010); //PB4 på, Avstängd PB5 (vänster Fram) TCCR3A = (0b10000010); //PB6 på, Avstängd PB7 (Höger bak) }else{ //standby, allt Avstängt TCCR3A = (0b00000010); TCCR1A = (0b00000010); } // sätter igång PB1 om insignalen är på och lampan är av if(tutaMask == (0b00000010)){ // PB1 = 1 PORTB |= 0b00000010; //stänger av PB1 om insignalen är på och lampan är på }else{ // PB1 = 0 PORTB &= 0b11111101; } // sätter igång PB0 om insignalen är på annars stänger av if(lamporMask == (0b00000001) && lampswitch == 0 && lamp == 0){ // PB0 = 1 PORTB |= 0b00000001; lampswitch = 1; lamp = 1; }else if(lamporMask == (0b00000001) && lampswitch == 0 && lamp == 1){ PORTB &= 0b11111110; lampswitch = 1; lamp = 0; } //väntar tills knappen är av if(lamporMask == (0b00000000)){ lampswitch = 0; } } } void timer_init(){ TCCR3A = (0b00000010); //PB6 och PB7 avstängd TCCR3B = (0b00011101); TCCR1A = (0b00000010); //PB4 och PB5 avstängd TCCR1B = (0b00011101); OCR3A = 12; //Puls between 1ms and 2ms OCR3B = 12; //Puls OCR1A = 12; //Puls OCR1B = 12; //Puls ICR3 = 40; //Period 20ms ICR1 = 35; //Period //8Mhz / 1024 prescaler // 7812.5mhz , *0.02s = 156.25 värde på ICR? // OCRxx to 156.25 / 15 = 10 värde på OCR? } void uart_init(){ UCSR0B |= (0b00010000); UBRR0 = 207; } uint8_t uart_recieve(){ while (!(UCSR0A & (1 << (RXC0)))){} return UDR0; }
Wesley Carter, Simon Antonsson, Gabriel Niedziolka. 2022.