car004f/main.c

Mon, 23 Dec 2013 10:59:14 +0100

author
mbayer
date
Mon, 23 Dec 2013 10:59:14 +0100
changeset 151
0e71b51c83a5
parent 149
1c3425af9aa0
child 152
e787f47c084b
permissions
-rw-r--r--

car: finished set_id function

147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
1 #include <avr/interrupt.h>
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
2 #include <avr/io.h>
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
3 #include <avr/wdt.h>
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
4 #include <avr/eeprom.h>
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
5 #include <stdlib.h>
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
6 #include <stdint.h>
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
7 #include <avr/pgmspace.h>
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
8
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
9 #include "main.h"
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
10 #include "util/delay.h"
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
11
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
12
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
13 ISR ( USART_RXC_vect ) {
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
14 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
15
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
16 #define PULSE_PORT PORTD
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
17 #define PULSE_BIT PD2
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
18
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
19 typedef struct {
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
20 uint8_t slot;
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
21 uint8_t light;
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
22 uint8_t program; // 0xff = inactive ; programming mode active on slot X
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
23 uint8_t initialized;
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
24 } config_t;
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
25 config_t EEMEM eeconfig = {0,0,0xff,0};
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
26 config_t config;
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
27
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
28 volatile uint16_t data = 0;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
29 volatile uint8_t data_len = 0;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
30 volatile uint8_t bitbuf_len = 0;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
31 volatile uint16_t bitbuf = 0;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
32 volatile uint8_t car_speed[8];
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
33 volatile uint8_t car_switch[8];
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
34
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
35 volatile uint8_t timeout = 0;
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
36 volatile uint8_t brake_timeout = 0;
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
37
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
38
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
39 uint8_t my_switch;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
40 uint8_t my_speed;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
41
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
42 ISR ( INT0_vect ) {
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
43 GICR &= ~_BV(INT0) ; // Disable INT0
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
44 // Startsignal erkannt, ab hier den Timer2 starten,
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
45 // der liest dann alle 50µs den Zustand ein und schreibt das
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
46 // empfangene Bit in den Puffer
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
47 bitbuf = 0; // init
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
48 bitbuf_len = 0b10000000; // init 1 pulse received
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
49 TCNT2 = 0;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
50 TIMSK |= _BV(OCIE2); //enable timer2 interrupt
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
51 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
52
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
53 ISR ( TIMER2_COMP_vect ) {
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
54 uint8_t clock;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
55 uint8_t state;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
56 uint8_t state2;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
57 if ((bitbuf_len & 0b10000000) == 0) clock = 0; else clock = 0xff;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
58 if ((bitbuf_len & 0b01000000) == 0) state = 0; else state = 0xff;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
59 if ((PIN(PULSE_PORT) & _BV(PULSE_BIT)) == 0) state2 = 0xff; else state2 = 0;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
60
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
61 if (clock) {
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
62 bitbuf_len &= ~_BV(7); // switch clock to low
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
63 // second pulse of bit
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
64 if ((state==state2) & state2) {
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
65 // two cycles high: packet end received
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
66 data_len = (bitbuf_len & 0b00111111);
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
67 TIMSK &= ~_BV(OCIE2); //disable timer2 interrupt
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
68 GICR |= _BV(INT0) ; // Enable INT0
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
69
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
70 //data = bitbuf; // output data
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
71 // write data of controllers to array
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
72 if (data_len == 10) { // controller data packet
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
73 clock = (bitbuf >> 6) & 0b00000111;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
74 car_speed[clock] = (bitbuf >> 1) & 0x0F;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
75 car_switch[clock] = (bitbuf >> 5) & 1;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
76 // current response for this car?
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
77 /*
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
78 if (response != 0) {
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
79 if ( ((response & 0b00001110) >> 1) == clock) {
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
80 // add our ID to response:
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
81 send_response(response | self_id << 6);
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
82 response = 0;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
83 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
84 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
85 */
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
86 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
87
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
88
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
89 } else {
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
90 bitbuf_len++; // increment bit counter
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
91 bitbuf = bitbuf << 1; // shift bits
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
92 if (state2 == 0) bitbuf |= 1; // receive logic one
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
93 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
94 } else {
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
95 bitbuf_len |= _BV(7); // switch clock to high
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
96 // first pulse of bit
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
97 if (state2) {
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
98 bitbuf_len |= _BV(6); // store new state
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
99 } else {
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
100 bitbuf_len &= ~_BV(6); // store new state
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
101 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
102 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
103 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
104
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
105 ISR (INT1_vect) {
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
106 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
107
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
108 ISR (TIMER0_OVF_vect) {
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
109 TCNT0 = 100; // TIMER0 vorladen mit 100
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
110 if (brake_timeout > 1) brake_timeout--;
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
111 if (timeout > 1) timeout--;
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
112 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
113
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
114 #define LIGHT_PORT PORTC
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
115 #define LIGHT_FRONT 2
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
116 #define LIGHT_BRAKE 4
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
117
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
118 #define IR_PORT PORTB
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
119 #define IR_LED 3
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
120
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
121 #define BRAKE_PORT PORTB
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
122 #define BRAKE 0
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
123
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
124 #define LIGHT_MODES 1 // anzahl der lichtmodi (ohne den modus "aus")
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
125 #define BRAKE_OFF_TIMEOUT 60 // value * 10ms
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
126
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
127 //#define CAR_DEBUG 1
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
128 #define EE_CONFIG_ADDR 64
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
129 #define DOUBLE_CLICK_TIMEOUT 50 // 500ms
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
130
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
131 void config_save(void) {
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
132 eeprom_write_block( &config, &eeconfig, sizeof(config_t) );
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
133 }
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
134
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
135
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
136 void brake_on(void) {
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
137 LIGHT_PORT |= _BV(LIGHT_BRAKE); // brake light on
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
138 BRAKE_PORT |= _BV(BRAKE); // brake on
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
139 DDRB &= ~_BV(1); // PB1 PWM Output enable
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
140 brake_timeout = BRAKE_OFF_TIMEOUT;
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
141 }
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
142
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
143 void brake_off(void) {
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
144 LIGHT_PORT &= ~_BV(LIGHT_BRAKE); // brake light off
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
145 BRAKE_PORT &= ~_BV(BRAKE); // brake off
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
146 DDRB &= ~_BV(1); // PB1 PWM Output disable
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
147 brake_timeout = 0;
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
148 }
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
149
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
150 uint8_t set_id(void) {
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
151 _delay_ms(100); // short wait
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
152 uint8_t temp;
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
153 timeout = 1;
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
154 brake_timeout = 0xff;
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
155 // wait for key press and assign on double click
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
156 while ((car_speed[config.slot] == 0) && (brake_timeout > 1)) {
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
157 temp = car_switch[config.program];
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
158 if (temp == 0) {
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
159 // wait for second key press within timeout period to assign successfully
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
160 brake_timeout = DOUBLE_CLICK_TIMEOUT;
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
161 timeout = 1;
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
162 while (brake_timeout > 1) {
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
163 if (temp != car_switch[config.program]) {
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
164 temp = car_switch[config.program];
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
165 if (temp == 0) {
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
166 config.slot = config.program;
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
167 return 1;
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
168 }
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
169 }
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
170 // toggle lights if timeout
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
171 if (timeout == 1) {
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
172 LIGHT_PORT ^= _BV(LIGHT_FRONT);
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
173 timeout = 5;
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
174 }
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
175 }
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
176 return 0;
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
177 }
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
178
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
179 // toggle lights if timeout
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
180 if (timeout == 1) {
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
181 LIGHT_PORT ^= _BV(LIGHT_FRONT);
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
182 timeout = 10;
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
183 }
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
184 }
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
185 return 0;
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
186 }
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
187
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
188 int main(void)
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
189 {
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
190 uint8_t temp;
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
191
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
192 // setup data bit timer2
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
193 TCCR2 = (1<<CS21) | (1<<WGM21); //divide by 8, set compare match
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
194 OCR2 = TIMER2_50US;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
195
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
196
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
197 // enable both external interrupts
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
198 // int 0 = data RX
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
199 MCUCR = _BV(ISC00) | _BV(ISC01) | _BV(ISC10) | _BV(ISC11); // INT0/1 rising edge
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
200 GICR = _BV(INT0) | _BV(INT1) ; // Enable INT0 + INT1
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
201
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
202
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
203 DDR(LIGHT_PORT) |= _BV(LIGHT_FRONT) | _BV(LIGHT_BRAKE);
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
204 DDR(BRAKE_PORT) |= _BV(BRAKE);
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
205
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
206 TCCR1A = (1<<WGM10)|(1<<COM1A1) // Set up the two Control registers of Timer1.
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
207 |(1<<COM1B1); // Wave Form Generation is Fast PWM 8 Bit,
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
208
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
209 TCCR1B = (1<<WGM12)|(1<<CS10); // OC1A and OC1B are cleared on compare match
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
210 // and set at BOTTOM. Clock Prescaler is 1.
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
211
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
212
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
213 //OCR1A = 63; // Dutycycle of OC1A = 25%
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
214 //OCR1B = 127; // Dutycycle of OC1B = 50%
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
215 OCR1A = 0xff; // brake PWM?!
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
216 OCR1B = 0; // Motor drive PWM
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
217 DDRB &= ~_BV(2); // PB2 PWM Output disable
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
218 DDRB &= ~_BV(1); // PB1 PWM Output disable
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
219
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
220 // configure TIMER0 to overflow every 10ms at 4 MHz
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
221 TIMSK = _BV(TOIE0); // Timer0 Overflow INT erlauben
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
222 TCNT0 = 100; // TIMER0 vorladen mit 100
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
223 TCCR0 = _BV(CS02) ; // Vorteiler auf 256, ab hier läuft der TIMER0
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
224
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
225 sei();
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
226
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
227 // config (from eeprom!)
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
228 eeprom_read_block( &config, &eeconfig, sizeof(config_t) );
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
229
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
230
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
231 if (config.initialized == 0xff) {
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
232 config.slot = 0;
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
233 config.light = 0;
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
234 config.program = 0xff;
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
235 config.initialized = 0;
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
236 config_save();
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
237 }
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
238
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
239 if ((config.program != 0xff) || (config.slot > 5 )) {
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
240 temp = set_id();
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
241 config.program = 0xff;
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
242 config_save();
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
243 if (temp == 1) {
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
244 // acknowledge with the engine
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
245 OCR1B = 25;
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
246 DDRB &= ~_BV(2); // PB2 PWM Output disable
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
247 for (temp = 128; temp > 0; temp--) {
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
248 DDRB ^= _BV(2); // PB2 PWM Output toggle
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
249 _delay_ms(2);
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
250 DDRB ^= _BV(2); // PB2 PWM Output toggle
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
251 _delay_ms(3);
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
252 }
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
253
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
254 }
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
255 timeout = 0;
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
256 }
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
257
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
258
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
259 my_switch = car_switch[config.slot]; // initialize
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
260 my_speed = car_speed[config.slot]; // initialize
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
261
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
262 while (1) {
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
263 // main loop
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
264
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
265 if (brake_timeout == 1) brake_off();
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
266
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
267 if (my_speed != car_speed[config.slot]) {
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
268 my_speed = car_speed[config.slot];
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
269 OCR1B = (int) ((float)0xff * (float)((float)my_speed / (float)15));
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
270 if (my_speed == 0) {
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
271 DDRB &= ~_BV(2); // PB2 PWM Output disable
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
272 brake_on();
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
273 } else {
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
274 brake_off();
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
275 DDRB |= _BV(2); // PB2 PWM Output enable
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
276 }
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
277 }
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
278
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
279 // Light cycle if switch pressed without speed
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
280 if (car_speed[config.slot] == 0) {
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
281 if (my_switch != car_switch[config.slot]) {
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
282 my_switch = car_switch[config.slot];
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
283 if (my_switch == 0) {
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
284 // cycle light
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
285 if (config.light == LIGHT_MODES) config.light = 0; else config.light++;
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
286 if (timeout > 1) {
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
287 // zweiter Tastendruck, Program Mode im EEPROM setzen
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
288 config.program = config.slot; // TODO: hier muss der slot rein welcher doppelclicked wurde (natuerlich dann auch nicht in der Lichtschaltelogik abfragen!)
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
289 } else {
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
290 // erster Tastendruck, timeout setzen
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
291 timeout = DOUBLE_CLICK_TIMEOUT;
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
292 }
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
293 config_save();
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
294 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
295 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
296 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
297
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
298 switch (config.light) {
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
299 case 0:
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
300 LIGHT_PORT &= ~_BV(LIGHT_FRONT); // switch lights off
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
301 break;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
302 case 1:
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
303 LIGHT_PORT |= _BV(LIGHT_FRONT); // switch lights on
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
304 break;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
305 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
306
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
307
149
1c3425af9aa0 car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)
Malte Bayer <mbayer@neo-soft.org>
parents: 148
diff changeset
308 // timeout reset
151
0e71b51c83a5 car: finished set_id function
mbayer
parents: 149
diff changeset
309 if (timeout == 1) timeout = 0;
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
310 } // main loop end
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
311 };
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
312

mercurial