# HG changeset patch # User Malte Bayer # Date 1322907066 -3600 # Node ID b83d239fe71948480c4305d0353ac791405afbe7 # Parent a8f082503782cb05cda13c98c0dcc9e4846dbd00# Parent 3e617fcf999a61283db0449a9bc39a958d936c3d merge diff -r 3e617fcf999a -r b83d239fe719 carrerashark/Makefile --- a/carrerashark/Makefile Sat Dec 03 09:26:20 2011 +0100 +++ b/carrerashark/Makefile Sat Dec 03 11:11:06 2011 +0100 @@ -9,7 +9,7 @@ F_CPU = 8000000 -BAUD=38400 +BAUD=115200 ISP_BAUD = 115200 #SRC = main.c seriald.c driver/ADC.c driver/clock.c driver/timer.c diff -r 3e617fcf999a -r b83d239fe719 carrerashark/README --- a/carrerashark/README Sat Dec 03 09:26:20 2011 +0100 +++ b/carrerashark/README Sat Dec 03 11:11:06 2011 +0100 @@ -5,7 +5,7 @@ PD2 = Controller Input |>o = Inv Schmitt Trigger for signal buffering (74hc14) - [RAIL+] ------[33kohm]------+-----|>o--|>0----[PD2] + [RAIL+] ------[33kohm]------+-----|>o--|>o----[PD2] | --[10kohm]--- | diff -r 3e617fcf999a -r b83d239fe719 carrerashark/TRACE --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/carrerashark/TRACE Sat Dec 03 11:11:06 2011 +0100 @@ -0,0 +1,48 @@ +Normal CU output idle: (LED3 an) +-------------------------------- +0x1821 0x3c8 0x80 0x220 0x320 0x260 0x360 0x2a0 0x80 0x2e0 * +0x1825 0x3d8 0x80 0x220 0x320 0x260 0x360 0x2a0 0x80 0x2e0 * +0x1820 0x3c8 0x80 0x220 0x320 0x260 0x360 0x2a0 0x80 0x2e0 * +0x1824 0x3d8 0x80 0x220 0x320 0x260 0x360 0x2a0 0x80 0x2e0 * +0x1822 0x3c8 0x80 0x220 0x320 0x260 0x360 0x2a0 0x80 0x2e0 * +0x1826 0x3d8 0x80 0x220 0x320 0x260 0x360 0x2a0 0x80 0x2e0 * + + +Pacecar Taste gedrückt (pacecar packet ändert sich): + LED2 an: 0x3ce fuer 10 sec + LED4 an: 0x3ca fuer 5 sec + +Start Taste gedrückt: + 1x Prog: 0x1a03, danach wieder der normale "idle progwortbetrieb" + -> ab jetzt wird auf allen autos geschwindigkeit = 0 übertragen + -> Spurwechseltasten werden auch ignoriert + -> pacecar packet = permanent 0x3e0 + Alle 5 LEDs leuchten + Tanken + Pacecartaste wird in dem Status ignoriert + +Start Taste zweites mal gedrückt: + LEDs zählen im Sekundentakt hoch (1-5) bis alle leuchten + Dann alle LEDS aus bis auf mittlere und rennstart: + dann folgende Progsequenz: + 0x1403 + <2 zyklen wait> + 0x1c03 + <2 wait> + 0x1203 + <2 wait> + 0x1a03 + <2 zyklen wait> --> RENNSTART HIER: + 0x1023 + 0x1003 + + + +FEHLSTARTVERHALTEN: + LED des controllers blinkt schnell welcher den Fehlstart verursacht hat + Geschwindigkeitswerte werden nicht an die Autos verschickt + Das Auto mit dem fehlstart wird markiert per programmwort: + zb 0x1926 anstatt 0x1826 + + +TANKSTAND: + Die alte CU gibt den Komponenten keinerlei Möglichkeit einer Antwort (die antwort-Peaks fehlen!!!) diff -r 3e617fcf999a -r b83d239fe719 carrerashark/main.c --- a/carrerashark/main.c Sat Dec 03 09:26:20 2011 +0100 +++ b/carrerashark/main.c Sat Dec 03 11:11:06 2011 +0100 @@ -57,23 +57,32 @@ volatile uint8_t bitbuf_len = 0; volatile uint16_t bitbuf = 0; +volatile uint16_t sysclock = 0; +ISR ( TIMER0_OVF_vect ) { + PORTD ^= _BV(PD6); + if (sysclock != 0xffff) sysclock++; +} + ISR ( INT0_vect ) { - writeBit(PORTD, 5, 1); + PORTD ^= _BV(PD3); + if (sysclock<10) { + // this is the answer slot start bit?? + PORTD ^= _BV(PD7); + } else { GICR &= ~_BV(INT0) ; // Disable INT0 - // Startsignal erkannt, ab hier den Timer2 starten, - // der liest dann alle 50µs den Zustand ein und schreibt das - // empfangene Bit in den Puffer - bitbuf = 0; // init - bitbuf_len = 0b10000000; // init 1 pulse received - TCNT2 = 0; - TIMSK |= _BV(OCIE2); //enable timer2 interrupt - writeBit(PORTD, 5, 0); + // Startsignal erkannt, ab hier den Timer2 starten, + // der liest dann alle 50µs den Zustand ein und schreibt das + // empfangene Bit in den Puffer + bitbuf = 0; // init + bitbuf_len = 0b10000000; // init 1 pulse received + TCNT2 = 0; + TIMSK |= _BV(OCIE2); //enable timer2 interrupt + } } ISR ( TIMER2_COMP_vect ) { - writeBit(PORTD, 4, 0); - + PORTD ^= _BV(PD4); uint8_t clock; uint8_t state; uint8_t state2; @@ -89,8 +98,10 @@ data_len = (bitbuf_len & 0b00111111); if (data_len == 13) PORTD ^= _BV(6); // debug sync output on program packets TIMSK &= ~_BV(OCIE2); //disable timer2 interrupt - GICR |= _BV(INT0) ; // Enable INT0 + GICR |= _BV(INT0); // Enable INT0 + GIFR &= ~_BV(INTF0); // clear int0 irq flag data = bitbuf; // output data + sysclock = 0; // reset system clock counter } else { bitbuf_len++; // increment bit counter bitbuf = bitbuf << 1; // shift bits @@ -105,9 +116,6 @@ bitbuf_len &= ~_BV(6); // store new state } } - - - writeBit(PORTD, 4, 1); } @@ -115,24 +123,29 @@ int main(void) { uint8_t i; - unsigned char s[30]; + unsigned char s[10]; + uint16_t tmp; + uint16_t cycle[11]; // setup data bit timer TCCR2 = (1< 5) { + tmp = data; + data = 0; if (data_len == 13) { // sync to first packet - i = 1; - RS232_puts("\n"); - } else if (i!=0) i++; - if (i>0) { - itoa( data, s, 16); - data = 0; - RS232_puts("0x"); - RS232_puts( s ); - RS232_putc(' '); + PORTD ^= _BV(PD5); + for (i=0; i<10;i++ ) { + // output previous cycle data + itoa( cycle[i], s, 16); + RS232_putc('0'); + RS232_putc('x'); + RS232_puts( s ); + RS232_putc(' '); + } + RS232_putc('*'); + i = 0; + PORTD ^= _BV(PD5); } + cycle[i] = tmp; + i++; } //if (i==10) for (;;); }