Mon, 14 Nov 2011 21:38:00 +0100
fixed track change keys
blackbox/lowlevel.c | file | annotate | diff | comparison | revisions | |
blackbox/lowlevel.h | file | annotate | diff | comparison | revisions | |
blackbox/main.c | file | annotate | diff | comparison | revisions |
--- a/blackbox/lowlevel.c Mon Nov 14 21:15:11 2011 +0100 +++ b/blackbox/lowlevel.c Mon Nov 14 21:38:00 2011 +0100 @@ -3,7 +3,9 @@ #include <util/delay.h> #include "stdint.h" #include "main.h" +#include "driver/adc.h" #include "driver/rs232.h" +#include "lowlevel.h" void LED(uint8_t num, uint8_t state) { switch (num) { @@ -39,6 +41,64 @@ } } +void init_hardware(void) { + RS232_init(); // initialize RS485 interface + RS232_puts_p(PSTR("CARRERA beta loading\n")); + + initADC(); + + // set LED output + DDR(LED1_PORT) |= _BV(LED1); + DDR(LED2_PORT) |= _BV(LED2); + DDR(LED3_PORT) |= _BV(LED3); + DDR(LED4_PORT) |= _BV(LED4); + DDR(LED5_PORT) |= _BV(LED5); + + // set Controller Input Pull-UPs + CONTROLLER_PORT |= (_BV(CONTROLLER1_SW) | _BV(CONTROLLER2_SW) | _BV(CONTROLLER3_SW) | _BV(CONTROLLER4_SW)); + + // switch pull-ups + SW_FUEL_PORT |= _BV(SW_FUEL); + + //RAIL_DETECT_PORT |= _BV(RAIL_DETECT); // enable internal pull-up + DDR(RAIL_POWER_PORT) |= _BV(RAIL_POWER); + + + LED(1, 1); _delay_ms(50); + LED(2, 1); _delay_ms(50); + LED(3, 1); _delay_ms(50); + LED(4, 1); _delay_ms(50); + LED(5, 1); _delay_ms(50); + LED(1, 0); _delay_ms(50); + LED(2, 0); _delay_ms(50); + LED(3, 0); _delay_ms(50); + LED(4, 0); _delay_ms(50); + LED(5, 0); _delay_ms(50); + + //TCCR0 = (1<<CS01); //divide by 8 + + + // setup data bit timer + TCCR2 = (1<<CS21); //divide by 8 + TCCR2 |= (1<<WGM21); // set compare match + OCR2 = TIMER2_50US; + TIMSK |= 1<<OCIE2; //enable timer2 interrupt + + // setup data packet timer + //TCCR1A = (1<<COM1A1); + TCCR1B = (1<<CS11); //divide by 8 + TCCR1B |= (1<<WGM12); // set compare match + //TCCR1B = (1<<CS11) | (1<<CS10); //divide by 64 + //TCNT1 = TIMER_7500NS; + OCR1A = TIMER1_7500NS; + TIMSK |= 1<<OCIE1A; //enable timer1 interrupt + + RS232_puts_p(PSTR("INIT OK\n")); + +} + + + void check_rails_shortcut(void) { // check for short circuit on the rails if ((PIN(RAIL_DETECT_PORT) & _BV(RAIL_DETECT)) == 0) {
--- a/blackbox/lowlevel.h Mon Nov 14 21:15:11 2011 +0100 +++ b/blackbox/lowlevel.h Mon Nov 14 21:38:00 2011 +0100 @@ -3,6 +3,7 @@ #include "main.h" void LED(uint8_t num, uint8_t state); +void init_hardware(void); void check_rails_shortcut(void); #endif
--- a/blackbox/main.c Mon Nov 14 21:15:11 2011 +0100 +++ b/blackbox/main.c Mon Nov 14 21:38:00 2011 +0100 @@ -13,64 +13,6 @@ #include "main.h" #include "lowlevel.h" -void init_hardware(void) { - RS232_init(); // initialize RS485 interface - RS232_puts_p(PSTR("CARRERA beta loading\n")); - - initADC(); - - // set LED output - DDR(LED1_PORT) |= _BV(LED1); - DDR(LED2_PORT) |= _BV(LED2); - DDR(LED3_PORT) |= _BV(LED3); - DDR(LED4_PORT) |= _BV(LED4); - DDR(LED5_PORT) |= _BV(LED5); - - // set Controller Input Pull-UPs - CONTROLLER_PORT |= (_BV(CONTROLLER1_SW) | _BV(CONTROLLER2_SW) | _BV(CONTROLLER3_SW) | _BV(CONTROLLER4_SW)); - - // switch pull-ups - SW_FUEL_PORT |= _BV(SW_FUEL); - - //RAIL_DETECT_PORT |= _BV(RAIL_DETECT); // enable internal pull-up - DDR(RAIL_POWER_PORT) |= _BV(RAIL_POWER); - - - LED(1, 1); _delay_ms(50); - LED(2, 1); _delay_ms(50); - LED(3, 1); _delay_ms(50); - LED(4, 1); _delay_ms(50); - LED(5, 1); _delay_ms(50); - LED(1, 0); _delay_ms(50); - LED(2, 0); _delay_ms(50); - LED(3, 0); _delay_ms(50); - LED(4, 0); _delay_ms(50); - LED(5, 0); _delay_ms(50); - - //TCCR0 = (1<<CS01); //divide by 8 - - - // setup data bit timer - TCCR2 = (1<<CS21); //divide by 8 - TCCR2 |= (1<<WGM21); // set compare match - OCR2 = TIMER2_50US; - TIMSK |= 1<<OCIE2; //enable timer2 interrupt - - // setup data packet timer - //TCCR1A = (1<<COM1A1); - TCCR1B = (1<<CS11); //divide by 8 - TCCR1B |= (1<<WGM12); // set compare match - //TCCR1B = (1<<CS11) | (1<<CS10); //divide by 64 - //TCNT1 = TIMER_7500NS; - OCR1A = TIMER1_7500NS; - TIMSK |= 1<<OCIE1A; //enable timer1 interrupt - - RS232_puts_p(PSTR("INIT OK\n")); - -} - - - volatile uint8_t datalen = 0; char data[10]; // 8 bytes data buffer + string termination @@ -159,19 +101,27 @@ // read controller X speed & encode controller data packet uint16_t tmp; switch (controller) { - case 0: tmp = getADC(CONTROLLER1_SPEED) / CONTROLLER_DIVISOR; break; - case 1: tmp = getADC(CONTROLLER2_SPEED) / CONTROLLER_DIVISOR; break; - case 2: tmp = getADC(CONTROLLER3_SPEED) / CONTROLLER_DIVISOR; break; - case 3: tmp = getADC(CONTROLLER4_SPEED) / CONTROLLER_DIVISOR; break; - case 4: tmp = 0; break; // todo regler 5 - case 5: tmp = 0; break; // todo regler 6 + case 0: + tmp = ((getADC(CONTROLLER1_SPEED) / CONTROLLER_DIVISOR) & 0xF) << 1; + if ( (PIN(CONTROLLER_PORT) & _BV(CONTROLLER1_SW)) != 0) tmp |= (1<<5); + break; + case 1: + tmp = ((getADC(CONTROLLER2_SPEED) / CONTROLLER_DIVISOR) & 0xF) << 1; + if ( (PIN(CONTROLLER_PORT) & _BV(CONTROLLER2_SW)) != 0) tmp |= (1<<5); + break; + case 2: + tmp = ((getADC(CONTROLLER3_SPEED) / CONTROLLER_DIVISOR) & 0xF) << 1; + if ( (PIN(CONTROLLER_PORT) & _BV(CONTROLLER3_SW)) != 0) tmp |= (1<<5); + break; + case 3: + tmp = ((getADC(CONTROLLER4_SPEED) / CONTROLLER_DIVISOR) & 0xF) << 1; + if ( (PIN(CONTROLLER_PORT) & _BV(CONTROLLER4_SW)) != 0) tmp |= (1<<5); + break; + case 4: tmp = (1<<5); break; // todo regler 5 + case 5: tmp = (1<<5); break; // todo regler 6 } - tmp = 0b1000000000 | (controller << 6) | ((tmp & 0xF) << 1); + tmp |= 0b1000000000 | (controller << 6); if ( (PIN(SW_FUEL_PORT) & _BV(SW_FUEL)) != 0) tmp |= 1; // benzinstand aktiv - tankmodusschalter - if ( (PIN(CONTROLLER_PORT) & _BV(CONTROLLER1_SW)) != 0) { - tmp |= (1<<5); - LED(controller+1, 0); - } else LED(controller+1, 1); return insert_queue(tmp, 9); }