Changeset 16
- Timestamp:
- 06/11/09 16:58:28 (3 years ago)
- Files:
-
- trunk/HighVoltageController.aps (modified) (1 diff)
- trunk/HighVoltageController.c (modified) (11 diffs)
- trunk/RingBuffAdv (added)
- trunk/RingBuffAdv/BuffTest.c (added)
- trunk/RingBuffAdv/RingBuff.c (added)
- trunk/RingBuffAdv/RingBuff.h (added)
- trunk/RingBuffAdv/makefile (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/HighVoltageController.aps
r15 r16 1 <AVRStudio><MANAGEMENT><Created>26-May-2009 16:20:44</Created><LastEdit>09-Jun-2009 1 3:01:38</LastEdit><ProjectType>0</ProjectType><Created>26-May-2009 16:20:44</Created><Version>4</Version><Build>4, 16, 0, 626</Build><ProjectTypeName>AVR GCC</ProjectTypeName><ICON>241</ICON><ProjectName>HighVoltageController</ProjectName><Created>09-Jun-2009 12:59:46</Created><LastEdit>09-Jun-2009 12:59:46</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>09-Jun-2009 12:59:46</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\HighVoltageController.elf</ObjectFile><EntryFile></EntryFile><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>D:\unrelated-work\openrevolt\trunk\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_PART>ATmega8.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><CURRENT_TARGET></CURRENT_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND></IO_EXPAND><REGISTERNAMES></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>HighVoltageController.c</SOURCEFILE><OTHERFILE>default\HighVoltageController.lss</OTHERFILE><OTHERFILE>default\HighVoltageController.map</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega8</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>HighVoltageController.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>D:\unrelated-work\avrgcc\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>D:\unrelated-work\avrgcc\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>D:\unrelated-work\openrevolt\trunk\HighVoltageController.c</Name></Files></ProjectFiles><IOView><usergroups/></IOView><Files></Files><Workspace></Workspace><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>1 <AVRStudio><MANAGEMENT><Created>26-May-2009 16:20:44</Created><LastEdit>09-Jun-2009 14:52:47</LastEdit><ProjectType>0</ProjectType><Created>26-May-2009 16:20:44</Created><Version>4</Version><Build>4, 16, 0, 626</Build><ProjectTypeName>AVR GCC</ProjectTypeName><ICON>241</ICON><ProjectName>HighVoltageController</ProjectName><Created>09-Jun-2009 12:59:46</Created><LastEdit>09-Jun-2009 12:59:46</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>09-Jun-2009 12:59:46</Created><Version>4</Version><Build>4, 13, 0, 528</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\HighVoltageController.elf</ObjectFile><EntryFile></EntryFile><ObjectFile></ObjectFile><EntryFile></EntryFile><SaveFolder>D:\unrelated-work\openrevolt\trunk\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_PART>ATmega8</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_TARGET></CURRENT_TARGET><CURRENT_PART></CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND></IO_EXPAND><REGISTERNAMES></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0><Variables>throttlePos</Variables><Variables>txBuffer</Variables><Variables>txBuffer</Variables></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><modules><module></module></modules><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>HighVoltageController.c</SOURCEFILE><SOURCEFILE>RingBuffAdv\RingBuff.c</SOURCEFILE><HEADERFILE>RingBuffAdv\RingBuff.h</HEADERFILE><OTHERFILE>default\HighVoltageController.lss</OTHERFILE><OTHERFILE>default\HighVoltageController.map</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega8</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>HighVoltageController.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>0</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>D:\unrelated-work\avrgcc\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>D:\unrelated-work\avrgcc\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>D:\unrelated-work\openrevolt\trunk\RingBuffAdv\RingBuff.h</Name><Name>D:\unrelated-work\openrevolt\trunk\HighVoltageController.c</Name><Name>D:\unrelated-work\openrevolt\trunk\RingBuffAdv\RingBuff.c</Name></Files></ProjectFiles><IOView><usergroups/></IOView><Files><File00000><FileId>00000</FileId><FileName>HighVoltageController.c</FileName><Status>257</Status></File00000><File00001><FileId>00001</FileId><FileName>RingBuffAdv\RingBuff.h</FileName><Status>257</Status></File00001><File00002><FileId>00002</FileId><FileName>D:\unrelated-work\avrgcc\avr\include\avr\iom8.h</FileName><Status>1</Status></File00002></Files><Workspace><File00000><Position>260 71 1106 748</Position><LineCol>18 19</LineCol><State>Maximized</State></File00000><File00001><Position>286 116 926 568</Position><LineCol>78 31</LineCol></File00001><File00002><Position>374 204 1014 656</Position><LineCol>212 23</LineCol></File00002></Workspace><Events><Bookmarks><File00000><B0><Line>30</Line></B0><B1><Line>86</Line></B1><B2><Line>228</Line></B2><B3><Line>234</Line></B3><B4><Line>240</Line></B4><B5><Line>400</Line></B5><B6><Line>508</Line></B6><B7><Line>512</Line></B7><B8><Line>513</Line></B8><B9><Line>519</Line></B9><B10><Line>547</Line></B10><B11><Line>548</Line></B11><B12><Line>550</Line></B12><B13><Line>551</Line></B13><B14><Line>553</Line></B14><B15><Line>554</Line></B15><B16><Line>556</Line></B16><B17><Line>557</Line></B17><B18><Line>559</Line></B18><B19><Line>560</Line></B19><B20><Line>562</Line></B20><B21><Line>563</Line></B21><B22><Line>565</Line></B22><B23><Line>566</Line></B23></File00000></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio> trunk/HighVoltageController.c
r15 r16 9 9 #include <avr/sleep.h> 10 10 #include <avr/wdt.h> 11 #include "RingBuffAdv/RingBuff.h" 12 11 13 //#include <avr/signal.h> 12 14 //#include <avr/iom16.h> … … 15 17 //#define MIN_THROTTLE 0 16 18 #define F_OSC 16000000 /* oscillator-frequency in Hz */ 19 //#define F_OSC 3686400 17 20 #define UART_BAUD_RATE 19200 18 #define UART_BAUD_CALC (UART_BAUD_RATE,F_OSC) ((F_OSC)/((UART_BAUD_RATE)*16l)-1)21 #define UART_BAUD_CALC (((float)(F_OSC))/(((float)(UART_BAUD_RATE))*16.0)-1.0+0.5) 19 22 20 23 … … 107 110 108 111 int16_t volatile currBuffer[CURRENT_ARRAY_SIZE+1]; 109 110 111 void InitUSART( void) {112 RingBuff_t txBuffer; 113 114 void InitUSART(uint16_t ubrr) { 112 115 // set baud rate 113 UBRRH = (uint8_t) (UART_BAUD_CALC(UART_BAUD_RATE,F_OSC)>>8);114 UBRRL = (uint8_t) UART_BAUD_CALC(UART_BAUD_RATE,F_OSC);115 116 // Enable receiver and transmitter; enable RX interrupt116 UBRRH = (uint8_t) (ubrr>>8); 117 UBRRL = (uint8_t) ubrr; 118 119 // Enable transmitter UART; 117 120 // UCSRB = (1 << RXEN) | (1 << TXEN) | (1 << RXCIE); 118 UCSRB = (1 << TXEN); // | (1 << RXCIE);121 UCSRB = (1 << TXEN); 119 122 120 123 //asynchronous 8N1 121 124 UCSRC = (1 << URSEL) | (3 << UCSZ0); 122 125 } 123 124 // INTERRUPT can be interrupted125 // SIGNAL can't be interrupted126 //SIGNAL (SIG_UART_RECV) { // USART RX interrupt127 // unsigned char c;128 // c = UDR;129 // PutCharUSART(c);130 //}131 132 void PutCharUSART(unsigned char c) {133 // wait until UDR ready134 while(!(UCSRA & (1 << UDRE))); // wait until the USART data register is empty.135 UDR = c; // send character136 }137 138 126 139 127 … … 188 176 } 189 177 190 /* 191 void DoChrisStuff(void) { 192 char onesPlace; 193 char tensPlace; 194 char hundredsPlace; 195 int temp; 196 197 // toggle relay every second. 198 if (relayLow) { 199 PORTD &= ~(1 << MAIN_CONTACTOR); // Bring pin MAIN_CONTACTOR low 200 PORTD &= ~(1 << IDLE_LED); // Bring pin IDLE_LED low 201 relayLow = 0; // now switch it for next time. 202 } 203 else { 204 PORTD |= (1 << MAIN_CONTACTOR); // Bring pin MAIN_CONTACTOR low 205 PORTD |= (1 << IDLE_LED); // Bring pin IDLE_LED low 206 relayLow = 1; 207 } 208 // _current is the average current. Output that to the usart: 209 // _current is in the range of 0 to 512, which is 0 to 500 amps. Pretend it's 512 amps. 210 // ex: _current = 218 = 211 // I need to output '2', '1', '8', 0x0D, 0x0A 212 213 onesPlace = (_current % 10) + 48; // add 48 to make it a character instead of a number. See ascii table. 214 temp = _current / 10; // now we're onto the 10's place. 215 tensPlace = (temp % 10) + 48; // add 48 to make it a character instead of a number. See ascii table. 216 temp = _current / 10; // now we're onto the 100's place. 217 hundredsPlace = (temp % 10) + 48; // add 48 to make it a character instead of a number. See ascii table. 218 219 PutCharUSART(hundredsPlace); 220 PutCharUSART(tensPlace); 221 PutCharUSART(onesPlace); 222 PutCharUSART(0x0D); // carriage return, line feed 223 PutCharUSART(0x0A); 224 } 225 */ 178 226 179 // This checks the Analog to Digital Converter Throttle input. 227 180 // 1. Choose which ADC channel (which pin on the chip) you want to convert the voltage of. Pg. 206. … … 312 265 313 266 // *TESTED PREVIOUSLY* 267 314 268 void HighPedalLockout(void) { 315 269 // pwmDuty = 0; … … 418 372 // } 419 373 420 if ((ISRCounter & 15) == 15) // 15 = 0b1111.374 if ((ISRCounter & 15) == 15) // 15 = 0b1111. 421 375 ADCMode = THROTTLE; 422 376 … … 426 380 } 427 381 } 382 383 384 ISR (TIMER2_OVF_vect) { 385 //place 8 bit values in the tx FIFO 386 Buffer_StoreElement(&txBuffer, (uint8_t) (tmpThrottle >>8)); // Store value for throttleH into ringbuff 387 Buffer_StoreElement(&txBuffer, (uint8_t) tmpThrottle); // Store value for throttleL into ringbuff 388 Buffer_StoreElement(&txBuffer, (uint8_t) (tmpCurrent >>8)); // Store value for currentH into ringbuff 389 Buffer_StoreElement(&txBuffer, (uint8_t) tmpCurrent); // Store value for currentL into ringbuff 390 Buffer_StoreElement(&txBuffer, (uint8_t) (pwmDuty >>8)); // Store value for currentH into ringbuff 391 Buffer_StoreElement(&txBuffer, (uint8_t) pwmDuty); // Store value for currentL into ringbuff 392 Buffer_StoreElement(&txBuffer, (uint8_t) 0xFF); // Sync Byte 393 Buffer_StoreElement(&txBuffer, (uint8_t) 0xFF); // Sync Byte 394 395 396 //enable buffer empty interrupt 397 UCSRB |= _BV(UDRIE); 398 } 399 428 400 429 401 // *TESTED IN SIMULATOR* … … 465 437 } 466 438 439 440 441 ISR (USART_UDRE_vect) { 442 if (txBuffer.Elements > 0) { 443 UDR = Buffer_GetElement(&txBuffer); //place data for transmission 444 //UDR = txBuffer.Elements; 445 } 446 else 447 UCSRB &= ~_BV(UDRIE); //disable interrupt 448 } 449 450 467 451 int main (void) { 468 452 InitADC(); // initialize the analog to digital converter 469 453 InitializeIOPins(); // pin b0 acts as an input, pin b2 acts as an output. 470 InitUSART(); 454 InitUSART(UART_BAUD_CALC); 455 Buffer_Initialize(&txBuffer); // Init buffer (also clears/flushes/resets) 471 456 472 457 wdt_enable(WDTO_2S); … … 476 461 currentPtr = 0; 477 462 478 HighPedalLockout();463 //HighPedalLockout(); 479 464 InitPWM(); 480 465 … … 483 468 ADCSRA |= _BV(ADIE); // Enable an interrupt to happen each time an A/D conversion is finished. 484 469 // Enable Timer1 Overflow Interrupt 485 TIMSK = _BV(TOIE1); // make an interrupt happen each time the timer reaches the bottom. 470 TIMSK = _BV(TOIE1) | _BV(TOIE2); // make an interrupt happen each time the timer reaches the bottom. 471 TCCR2 = _BV(CS22) | _BV(CS21) | _BV(CS20); 472 486 473 sei(); // Enable interrupts 487 474 … … 494 481 tmpThrottle = throttlePos; 495 482 SREG = cSREG; 483 484 496 485 497 486 _throttlePos = tmpThrottle;
