Projektbil Car-0-line

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;
}