Changeset 16

Show
Ignore:
Timestamp:
06/11/09 16:58:28 (3 years ago)
Author:
charlie
Message:

Added serial communications (transmit only).

Files:

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 13: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  
    99#include <avr/sleep.h> 
    1010#include <avr/wdt.h> 
     11#include "RingBuffAdv/RingBuff.h" 
     12 
    1113//#include <avr/signal.h> 
    1214//#include <avr/iom16.h> 
     
    1517//#define MIN_THROTTLE 0 
    1618#define F_OSC 16000000                     /* oscillator-frequency in Hz */ 
     19//#define F_OSC 3686400 
    1720#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
    1922 
    2023 
     
    107110 
    108111int16_t volatile currBuffer[CURRENT_ARRAY_SIZE+1]; 
    109  
    110  
    111 void InitUSART(void) { 
     112RingBuff_t txBuffer; 
     113 
     114void InitUSART(uint16_t ubrr) { 
    112115        // 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 interrupt 
     116        UBRRH = (uint8_t) (ubrr>>8); 
     117        UBRRL = (uint8_t) ubrr
     118 
     119        // Enable transmitter UART;  
    117120//      UCSRB = (1 << RXEN) | (1 << TXEN) | (1 << RXCIE); 
    118         UCSRB = (1 << TXEN);// | (1 << RXCIE); 
     121        UCSRB = (1 << TXEN); 
    119122 
    120123        //asynchronous 8N1 
    121124        UCSRC = (1 << URSEL) | (3 << UCSZ0); 
    122125} 
    123  
    124 // INTERRUPT can be interrupted 
    125 // SIGNAL can't be interrupted 
    126 //SIGNAL (SIG_UART_RECV) { // USART RX interrupt 
    127 //      unsigned char c; 
    128 //      c = UDR; 
    129 //      PutCharUSART(c); 
    130 //} 
    131  
    132 void PutCharUSART(unsigned char c) { 
    133    // wait until UDR ready 
    134         while(!(UCSRA & (1 << UDRE)));  // wait until the USART data register is empty. 
    135         UDR = c;    // send character 
    136 } 
    137  
    138126 
    139127 
     
    188176} 
    189177 
    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 
    226179// This checks the Analog to Digital Converter Throttle input. 
    227180// 1.  Choose which ADC channel (which pin on the chip) you want to convert the voltage of. Pg. 206. 
     
    312265 
    313266// *TESTED PREVIOUSLY* 
     267 
    314268void HighPedalLockout(void) { 
    315269//      pwmDuty = 0; 
     
    418372//              } 
    419373 
    420                 if ((ISRCounter & 15) == 15) // 15 = 0b1111. 
     374                if ((ISRCounter & 15) == 15) // 15 = 0b1111. 
    421375                        ADCMode = THROTTLE; 
    422376 
     
    426380        } 
    427381} 
     382 
     383 
     384ISR (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 
    428400 
    429401// *TESTED IN SIMULATOR* 
     
    465437} 
    466438 
     439 
     440 
     441ISR (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 
    467451int main (void) { 
    468452        InitADC();      // initialize the analog to digital converter 
    469453        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) 
    471456 
    472457        wdt_enable(WDTO_2S); 
     
    476461        currentPtr = 0; 
    477462 
    478         HighPedalLockout(); 
     463        //HighPedalLockout(); 
    479464    InitPWM(); 
    480465 
     
    483468        ADCSRA |= _BV(ADIE);  // Enable an interrupt to happen each time an A/D conversion is finished. 
    484469        // 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     
    486473        sei();  // Enable interrupts 
    487474 
     
    494481                tmpThrottle = throttlePos; 
    495482                SREG = cSREG; 
     483 
     484                 
    496485 
    497486                _throttlePos = tmpThrottle;