car004f/main.c

Sun, 22 Dec 2013 01:50:59 +0100

author
Malte Bayer <mbayer@neo-soft.org>
date
Sun, 22 Dec 2013 01:50:59 +0100
changeset 149
1c3425af9aa0
parent 148
08cb88614d69
child 151
0e71b51c83a5
permissions
-rw-r--r--

car firmware suspended, avr chip not responding after fuse error (note to self, never program an avr when powered via the SCK line :-)

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
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
127 #define CAR_DEBUG 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
128 #define EE_CONFIG_ADDR 64
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
129
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
130 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
131 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
132 }
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 void brake_on(void) {
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
136 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
137 BRAKE_PORT |= _BV(BRAKE); // brake on
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
138 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
139 }
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
140
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
141 void brake_off(void) {
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
142 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
143 BRAKE_PORT &= ~_BV(BRAKE); // brake off
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
144 brake_timeout = 0;
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
145 }
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
146
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
147 uint8_t scan_id(void) {
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
148 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
149 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
150 // scan for any key press and assign to that controller
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
151 while (car_speed[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
152 for (uint8_t i=0; i<6; i++) {
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 if (car_switch[i] == 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
154 // wait for second key press within timeout period to assign successfully
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
155 brake_timeout = 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
156 temp = car_switch[i];
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
157 while (brake_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
158 if (temp != car_switch[i]) {
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
159 temp = car_switch[i];
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
160 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
161 config.slot = i;
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
162 return 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
163 }
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
164 }
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
165 // toggle lights if timeout
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
166 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
167 LIGHT_PORT ^= _BV(LIGHT_FRONT);
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 timeout = 5;
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
169 }
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
170 }
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
171 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
172 }
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
173 }
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 // toggle lights if timeout
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 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
176 LIGHT_PORT ^= _BV(LIGHT_FRONT);
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 timeout = 10;
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
178 }
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
179 }
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
180 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
181 }
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
182
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
183 int main(void)
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
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 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
186
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
187 // setup data bit timer2
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
188 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
189 OCR2 = TIMER2_50US;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
190
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
191
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
192 // enable both external interrupts
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
193 // int 0 = data RX
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
194 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
195 GICR = _BV(INT0) | _BV(INT1) ; // Enable INT0 + INT1
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
196
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
197
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
198 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
199 DDR(BRAKE_PORT) |= _BV(BRAKE);
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
200
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
201 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
202 |(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
203
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
204 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
205 // 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
206
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
207
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
208 //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
209 //OCR1B = 127; // Dutycycle of OC1B = 50%
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
210 OCR1A = 0;
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
211 OCR1B = 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
212 DDRB &= ~_BV(2); // PB2 PWM Output disable
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
213
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
214 // 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
215 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
216 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
217 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
218
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
219 sei();
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
220
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
221 // 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
222 eeprom_read_block( &config, &eeconfig, sizeof(config_t) );
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
223
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
224
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
225 #ifdef CAR_DEBUG
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
226 if (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
227 LIGHT_PORT &= ~_BV(LIGHT_FRONT);
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 for (temp = 0; temp <= config.slot; 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
229 LIGHT_PORT ^= _BV(LIGHT_FRONT);
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 _delay_ms(250);
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
231 LIGHT_PORT ^= _BV(LIGHT_FRONT);
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 _delay_ms(250);
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 }
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
234 }
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 #endif
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
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.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
240 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
241 config.light = 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
242 config.program = 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
243 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
244 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
245 }
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
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
247 if ((config.program != 0xff) || (config.slot > 5 )) {
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 temp = scan_id();
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
249 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
250 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
251 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
252 // 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
253 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
254 DDRB &= ~_BV(2); // PB2 PWM Output disable
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 for (temp = 0xff; temp > 0; 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
256 DDRB ^= _BV(2); // PB2 PWM Output toggle
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 _delay_ms(5); // 50 hz
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
258 DDRB ^= _BV(2); // PB2 PWM Output toggle
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
259 _delay_ms(15); // 50 hz
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
260 }
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
261
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
262 }
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
263 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
264 }
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
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
266
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
267 while (1) {
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
268 // main loop
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
269
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
270 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
271
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
272 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
273 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
274 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
275 if (my_speed == 0) {
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
276 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
277 brake_on();
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
278 } else {
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
279 brake_off();
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
280 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
281 }
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
282 }
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
283
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
284 // 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
285 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
286 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
287 my_switch = car_switch[config.slot];
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
288 if (my_switch != 0) {
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
289 // cycle light
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
290 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
291 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
292 // zweiter Tastendruck, Program Mode im EEPROM setzen
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.program = 1; // TODO: hier muss der slot rein welcher doppelclicked wurde (natuerlich dann auch nicht in der Lichtschaltelogik abfragen!)
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
294 } 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
295 // erster Tastendruck, timeout setzen
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
296 timeout = 80;
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
297 }
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
298 config_save();
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
299 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
300 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
301 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
302
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
303 switch (config.light) {
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
304 case 0:
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
305 LIGHT_PORT &= ~_BV(LIGHT_FRONT); // switch lights off
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
306 break;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
307 case 1:
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
308 LIGHT_PORT |= _BV(LIGHT_FRONT); // switch lights on
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
309 break;
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
310 }
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
311
148
08cb88614d69 car firmware: finished pwm drive and lights switching
Malte Bayer <mbayer@neo-soft.org>
parents: 147
diff changeset
312
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
313 // timeout reset
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
314 timeout = 0;
147
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
315 } // main loop end
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
316 };
f66c5b3b3ed2 started firmware for car004f hardware
Malte Bayer <mbayer@neo-soft.org>
parents:
diff changeset
317

mercurial