/Spektrum-Expander/DX8-Modulator/Hex-Files/sexpander.hex |
---|
0,0 → 1,20 |
:1000000012C02AC029C028C027C026C025C024C0CD |
:1000100023C022C021C020C01FC01EC01DC01CC0E4 |
:100020001BC01AC019C011241FBECFEDCDBF10E0F8 |
:10003000A0E6B0E0E8E2F1E002C005900D92A03643 |
:10004000B107D9F710E0A0E6B0E001C01D92A036DC |
:10005000B107E1F718D066C0D3CF882311F4D99A3D |
:1000600001C0D998662311F4D89A01C0D89825E622 |
:1000700034E08599FECF859BFECFC9010197F1F74A |
:10008000859BF7CF08950F931F9383E08ABB17BA20 |
:1000900011BA87E08BBB80E488BB8FE582BBB69941 |
:1000A0000BC0809B02C0D99A01C0D998819B02C025 |
:1000B000D89AF5CFD898F3CF81E060E0CEDF10E09A |
:1000C00000E001C016E080B390E0012E02C09595DB |
:1000D00087950A94E2F780FF05C080E060E0BDDF0D |
:1000E000009503C080E061E0B8DF1F5F153051F379 |
:1000F000173048F3B09904C080E061E0AEDF04C07F |
:1001000080E060E0AADF0095B19B05C080E060E080 |
:10011000A4DF009503C080E061E09FDF80E0602FF6 |
:080120009CDFBDCFF894FFCF76 |
:00000001FF |
/Spektrum-Expander/DX8-Modulator/sexpander.aps |
---|
0,0 → 1,0 |
<AVRStudio><MANAGEMENT><ProjectName>sexpander</ProjectName><Created>22-Jul-2009 15:19:41</Created><LastEdit>13-Apr-2011 17:43:53</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>22-Jul-2009 15:19:41</Created><Version>4</Version><Build>4, 16, 0, 626</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\sexpander.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>d:\Pendsa\DX8-Modulator\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATtiny13A.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><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><modules><module></module></modules><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>sexpander.c</SOURCEFILE><OTHERFILE>default\sexpander.lss</OTHERFILE><OTHERFILE>default\sexpander.map</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>attiny2313</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>sexpander.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>0</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99 -DF_CPU=1000000UL -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>C:\Programme\WinAVR-20081205\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Programme\WinAVR-20081205\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><ProjectFiles><Files><Name>d:\Pendsa\DX8-Modulator\sexpander.c</Name></Files></ProjectFiles><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="1" ordergroup="1"/></IOView><Files><File00000><FileId>00000</FileId><FileName>sexpander.c</FileName><Status>257</Status></File00000></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio> |
/Spektrum-Expander/DX8-Modulator/sexpander.aws |
---|
0,0 → 1,0 |
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATTINY13A"/><Files><File00000 Name="d:\Pendsa\DX8-Modulator\sexpander.c" Position="268 96 1464 580" LineCol="84 58"/></Files></AVRWorkspace> |
/Spektrum-Expander/DX8-Modulator/sexpander.c |
---|
0,0 → 1,98 |
// ******************************************************** |
// ** Spektrum DX8 Expander for 12 Channels at large ** |
// ******************************************************** |
// ** Target: Atmel ATtiny2313 with delivered standard ** |
// ** Fuses (internal RC-Oscillator @ 1 MHz) ** |
// ******************************************************** |
// ** It sends data from 4 additionally switches over ** |
// ** the tripole "FLAP" channel which the FlightControl ** |
// ** can decode "on the fly" :) ** |
// ******************************************************** |
// ** (c) 2009-0xFFFF Stefan Pendsa ** |
// ** License: don't know - use it and have fun ** |
// ******************************************************** |
#include <avr/io.h> |
#include <util/delay.h> |
#define TX_High PORTA |= 1 << PORTA0 // Set TX-Pin High |
#define TX_Low PORTA &= ~(1 << PORTA0) // Set TX-Pin Low |
#define SYNC_High PORTA |= 1 << PORTA1 // Set Sync-Pin High |
#define SYNC_Low PORTA &= ~(1 << PORTA1) // Set Sync-Pin Low |
void Send(char sync, char data) |
{ |
unsigned char synced; |
if (sync == 0) SYNC_High; else SYNC_Low; // Send Sync |
if (data == 0) TX_High; else TX_Low; // Send Data |
synced = 0; |
while (synced == 0) |
{ |
while ( PIND & (1<<PD5) ); // Wait for DX8-Sync goes low |
while ( !(PIND & (1<<PD5)) ); // Wait for DX8-Sync goes high |
_delay_us(4500); |
if ((PIND & (1<<PD5))) synced = 1; // When its high (again) after 4,5ms, we are synced |
} |
} |
int main(void) |
{ |
char i,Parity; // Bit-Counter and Parity Bit |
DDRA = 0b011; // PORT A INPUT: RESET; OUTPUT: Sync+Data |
DDRB = 0b00000000; // PORT B INPUT: Jumper for Bypass |
DDRD = 0b0000000; // PORT D INPUT: Switches + DX7-Sync |
PORTA = 0b111; // Pull-Up for /RESET, High for Sync+Data |
PORTB = 0b01000000; // Pull-Up for Jumper |
PORTD = 0b1011111; // Pull-Up for Switches |
while(1) // Main-Loop (Sending data all the time) |
{ |
if (!(PINB & (1<<PINB6))) // By-Pass Mode |
{ |
if (PIND & (1<<PIND0)) PORTA |= 1 << PORTA1; // A1=D0 |
else PORTA &= ~(1 << PORTA1); |
if (PIND & (1<<PIND1)) PORTA |= 1 << PORTA0; // A0=D1 |
else PORTA &= ~(1 << PORTA0); |
} |
else // Normal Mode |
{ |
Parity = 0; // Reset Parity Bit |
Send(1,0); // Send SYNC Pulse |
i=0; |
while (i<7) // Encode PD0-PD4 + PD6 (F-MODE(2), ELEV(1), MIX, GEAR, ELEV(2)) |
{ |
if (PIND & (1<<i)) // Check Pin #i |
{ |
Send(0,0); // When High, Send Low (Switched to "0") |
Parity = ~Parity; // and invert Parity Bit |
} |
else Send(0,1); // When Low, Send High (Switched to "1") |
i++; |
if (i == 5) i = 6; // Skip PD5 |
} |
for (i=0;i<2;i++) // Encode PB0+PB1 (AIL D/R (2)) |
{ |
if ((PINB & (1<<i))) // Check Pin #i |
{ |
Send(0,0); // When High, Send Low (Switched to "0") |
Parity = ~Parity; // and invert Parity Bit |
} |
else Send(0,1); // When Low, Send High (Switched to "1") |
} |
Send(0,Parity); // Send Parity Bit |
} |
} |
} |