Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 1460 → Rev 1461

/branches/V0.76g-acid/servoboard/readme.txt
1,36 → 1,39
 
atmega8 8mhz
 
beschaltung
wiring
 
GND
VCC
RESET
SCL
SDA
GND
VCC
RESET
SCL
SDA
 
LED an PD7
Status LED = PD7 (high = on)
 
Servo 1 an PB0
Servo 2 an PB1
Servo 3 an PB2
Servo 4 an PB3
Servo 5 an PB4
Servo 6 an PB5
servo PWM 1 = PB0
servo 2 = PB1
servo 3 = PB2
servo 4 = PB3
servo 5 = PB4
servo 6 = PB5
 
LED status
 
LED an = betriebsbereit
LED blinkt = I2C daten werden emfpangen
LED an = ready, no signal
LED blinking fast = I2C data received
LED bliking slowly (1 second) = servos not configured
 
 
UART programmiermodus
UART programming mode (9600 baud)
 
DISPLAY Display servo settings
EXPORT Export srvo settings
SET s=n[,l,u] Set servo settings
s = servo number (1-6)
n = neutral position (0-255)
l = lower limit (0-255)
u = upper limit (0-255)
LOAD Load settings from eeprom
SAVE Write settings to eeprom
DISPLAY Display servo settings
EXPORT Export srvo settings
SET s=n[,l,u] Set servo settings
s = servo number (1-6)
n = neutral position (0-255)
l = lower limit (0-255)
u = upper limit (0-255)
CUR n Set current servo. increase neutral value with + and decrease it with -
LOAD Load settings from eeprom
SAVE Write settings to eeprom
/branches/V0.76g-acid/servoboard/servoboard.c
9,17 → 9,16
#include "uart.h"
 
 
uint8_t eeprom_neutral_pos[6] EEMEM = { 127, 127, 127, 127, 127, 127 };
uint16_t eeprom_pwm_limit[6] EEMEM = { 0, 0, 0, 0, 0, 0 };
uint8_t eeprom_neutral_pos[6] EEMEM;
uint16_t eeprom_pwm_limit[6] EEMEM;
 
uint8_t pwm_signal[6];
uint8_t pwm_counter = 0;
uint8_t pwm_neutral_position[6];
uint8_t pwm_position[6];
uint16_t pwm_limit[6];
volatile uint8_t pwm_signal[6];
volatile uint8_t pwm_neutral_position[6];
volatile uint8_t pwm_position[6];
volatile uint16_t pwm_limit[6];
volatile uint8_t pwm_active;
 
 
 
void pwm_init() {
 
SERVODDR = 0xff;
59,11 → 58,25
 
}
 
void pwm_check_active() {
 
// check if pwm is configured
pwm_active = (pwm_limit[0] != 0xffff) ? (1 << SERVO1) : 0;
pwm_active |= (pwm_limit[1] != 0xffff) ? (2 << SERVO1) : 0;
pwm_active |= (pwm_limit[2] != 0xffff) ? (3 << SERVO1) : 0;
pwm_active |= (pwm_limit[3] != 0xffff) ? (4 << SERVO1) : 0;
pwm_active |= (pwm_limit[4] != 0xffff) ? (5 << SERVO1) : 0;
pwm_active |= (pwm_limit[5] != 0xffff) ? (6 << SERVO1) : 0;
 
}
 
 
void eeprom_init() {
 
eeprom_busy_wait();
eeprom_read_block(&pwm_neutral_position[0], &eeprom_neutral_pos, sizeof(pwm_neutral_position));
eeprom_read_block(&pwm_limit[0], &eeprom_pwm_limit, sizeof(pwm_limit));
pwm_check_active();
 
}
 
87,6 → 100,10
 
int main(void) {
 
uint8_t blink_counter = 0;
uint8_t blink = 0;
 
// intialize
DDRD = 0x80;
PORTD = 0x80;
 
101,13 → 118,46
set_pwm_neutral();
sei();
 
// start pwm
TCNT1 = 0;
while(1) {
 
cli();
SERVOPORT = 0xff;
SERVOPORT = pwm_active;
 
// show status
blink_counter++;
 
if (pwm_active == 0) { // not configured
 
blink = 50;
 
} else {
 
if (I2C_timeout == 0) { // no i2c signal
blink = 0;
} else {
I2C_timeout--;
blink = 5;
}
 
}
 
if (blink == 0) {
LED_ON;
} else if (blink_counter % blink == 0) {
blink_counter = 1;
if (LED_IS_ON) {
LED_OFF;
} else {
LED_ON;
}
}
 
// wait with high pwm signal
while(TCNT1 < 300) ;
 
// check servos setting pwm to low
for(uint8_t i = 0; i < 255; i++) {
 
TCNT0 = 0;
136,10 → 186,13
}
sei();
 
// set all servos to low
SERVOPORT = 0;
 
// update signals
set_pwm();
 
// wait till 20ms are reached
while(TCNT1 < 20000) ;
TCNT1 = 0;
 
/branches/V0.76g-acid/servoboard/servoboard.h
3,14 → 3,17
#define VERSION "0.2"
 
 
extern uint8_t pwm_position[6];
extern uint8_t pwm_neutral_position[6];
extern uint16_t pwm_limit[6];
extern volatile uint8_t pwm_position[6];
extern volatile uint8_t pwm_neutral_position[6];
extern volatile uint16_t pwm_limit[6];
extern volatile uint8_t pwm_active;
 
 
void set_pwm();
void set_pwm_neutral();
void pwm_check_active();
 
 
void eeprom_init();
void eeprom_write();
 
26,3 → 29,6
#define SERVO5 PB4
#define SERVO6 PB5
 
#define LED_OFF PORTD |= 0x80;
#define LED_ON PORTD &= ~0x80
#define LED_IS_ON !(PORTD & 0x80)
/branches/V0.76g-acid/servoboard/servoboard.hex
0,0 → 1,360
:1000000012C02BC02AC029C028C027C026C025C0C6
:1000100024C023C022C020C220C01FC01EC01DC0DB
:100020001CC084C11AC011241FBECFE5D4E0DEBFBE
:10003000CDBF13E0A0E6B0E0EEE7F3E102C005902B
:100040000D92AC34B107D9F713E0ACE4B3E001C0D2
:100050001D92AA3DB107E1F7EFC0D2CFEF92FF9218
:100060000F931F93CF93DF9307E613E021E6E22E71
:1000700023E0F22EEBE5F3E075E0AFE4B3E0E70157
:100080008881E8019881890F8F5780838D919C9199
:100090001197892B89F04D915C9111972D913C918D
:1000A0001197232F3327622F9081941708F44083F0
:1000B0008081681708F42083715012963196089455
:1000C000E11CF11C0F5F1F4F77FFD9CFDF91CF915C
:1000D0001F910F91FF90EF9008958FEF87BBBEDFC8
:1000E00082E08EBD81E083BF08959FE7E1E6F3E003
:1000F00085E09193815087FFFCCFB0DF089520E029
:1001000080914F03909150038F5F9F4F09F021E042
:1001100020936D0380916D03282F33278091510325
:10012000909152038F5F9F4F19F0C901826001C007
:10013000C90180936D0380916D03282F332780912F
:100140005303909154038F5F9F4F19F0C90183604F
:1001500001C0C90180936D0380916D03282F33275F
:1001600080915503909156038F5F9F4F19F0C901FD
:10017000846001C0C90180936D0380916D03282FB5
:10018000332780915703909158038F5F9F4F19F049
:10019000C901856001C0C90180936D0380916D0321
:1001A000282F33278091590390915A038F5F9F4FD7
:1001B00019F0C901866001C0C90180936D030895DB
:1001C000E199FECFE7E6F3E0A0E0B0E086E0182E8C
:1001D0005FD8EFE4F3E0A6E0B0E08CE0182E58D84A
:1001E0008EDF0895F894E7E6F3E0A0E0B0E086E063
:1001F000182E53D8EFE4F3E0A6E0B0E08CE0182E20
:100200004CD878940895CF93DF939C0121503040CF
:100210008FEF2F3F380769F0A0EDB7E0C0E0D0E0E6
:10022000CD010197F1F7215030408FEF2F3F380774
:10023000B9F7DF91CF910895CFE5D4E0DEBFCDBF10
:10024000C0E080E881BB82BB84B3807F84BB85B380
:100250008F6085BBF894D6D0B3DF82E856D03DDFFF
:1002600044DF78941DBC1CBCF89480916D0388BB5E
:10027000CF5F80916D03882311F462E308C0809101
:100280004C03882369F0815080934C0365E08C2FE8
:10029000F3D7992331F4C1E0979902C0979A01C02E
:1002A00097988CB59DB58C529140D8F390E012BED2
:1002B00080915B03981709F4C09880915C039817AC
:1002C00009F4C19880915D03981709F4C298809150
:1002D0005E03981709F4C39880915F03981709F497
:1002E000C49880916003981709F4C59882B78C333D
:1002F000E8F39F5F9F3FD9F6789418BAAFDE8CB5CC
:100300009DB580529E44D8F3ADCF82B985EC86BFAF
:1003100008953FEF20E0261730F4FC018191382743
:100320002F5F2617D8F3832F992708951F920F92D6
:100330000FB60F9211242F933F934F935F936F93B8
:100340007F938F939F93AF93BF93EF93FF9381B16D
:100350009927887F90708036910569F081369105E4
:100360001CF4892BC9F13BC08038910551F0883FBE
:10037000910579F134C086B7806886BF10924D032D
:1003800030C085E080934C0390914D03903248F447
:10039000E92FFF27E259FC4F83B180839F5F909341
:1003A0004D0380914D03873089F466E08EE693E03B
:1003B000B0DF90917403891749F486E0AEE6B3E0AC
:1003C000E1E6F3E00D9001928A95E1F786B7806847
:1003D00007C086B7806986BF86B7806986BF85EC0F
:1003E00086BFFF91EF91BF91AF919F918F917F91C8
:1003F0006F915F914F913F912F910F900FBE0F9092
:100400001F90189510928E0310928F0388E18AB97D
:10041000599A579A87E689B960E070E08FE192E0D7
:10042000B9D280E690E09F938F9384E690E09F930B
:100430008F93F6D20F900F900F900F900895CF9357
:10044000C82F8A3011F48DE0FADF5D9BFECFCCB966
:1004500080E090E0CF9108951F920F920FB60F9217
:100460001124AF92BF92CF92DF92EF92FF920F933F
:100470001F932F933F934F935F936F937F938F932C
:100480009F93AF93BF93EF93FF93CF93DF93CDB73A
:10049000DEB72497DEBFCDBF80918E03803408F095
:1004A000C9C1FCB08BE2F81619F580914E03E82F14
:1004B000FF27EA59FC4F80818F3F19F080818F5FC1
:1004C0008083808199279F938F9380914E039927F2
:1004D0009F938F9385E790E09F938F93A1D2EDB781
:1004E000FEB736960FB6F894FEBF0FBEEDBFA5C19E
:1004F000FDE2FF1619F580914E03E82FFF27EA5918
:10050000FC4F8081882319F0808181508083808115
:1005100099279F938F9380914E0399279F938F9351
:1005200085E790E09F938F937BD28DB79EB7069619
:100530000FB6F8949EBF0FBE8DBF7FC18F2D7FDF9A
:100540009DE0F91609F06BC18AE079DF80918E0396
:10055000E82FFF27E057FC4F108210928E0368E8C7
:1005600070E080E993E0B4D1892B19F48DE890E034
:1005700050C167E972E080E993E0AAD10097B9F52C
:1005800007E6A02E03E0B02E9C0115E0F12E0F2E01
:10059000FFE4CF2EF3E0DF2EF02DF6018081918174
:1005A000892F99279F938F93819191916F019070DB
:1005B0009F938F93F50181915F0199279F938F936B
:1005C00089010F5F1F4F1F930F938FE992E09F9355
:1005D0008F9326D28DB79EB70A960FB6F8949EBF1A
:1005E0000FBE8DBFFA949801F7FED7CF13C162EC0E
:1005F00072E080E993E06CD10097A9F5E7E6AE2EB2
:10060000E3E0BE2E9C0175E0F72E6FE4C62E63E09A
:10061000D62EF60180819181892F99279F938F9300
:10062000819191916F0190709F938F93F5018191CA
:100630005F0199279F938F9389010F5F1F4F1F932E
:100640000F9389EC92E09F938F93EAD18DB79EB779
:100650000A960FB6F8949EBF0FBE8DBFFA9498010C
:10066000F7FED7CFD7C06AED72E080E993E030D1D2
:10067000892B11F4A5DDCEC06FED72E080E993E027
:1006800027D1892B11F4AEDDC5C044E050E064EE03
:1006900072E080E993E02ED17C01892B59F5AE01FF
:1006A0004F5F5F4F69EE72E080E993E039D1892BAB
:1006B00009F4B0C0AE014F5F5F4F6BEE72E0C7014F
:1006C0002FD1009709F4A6C0D7D0F82EF394863026
:1006D00008F09AC0F0924E038F2D99279F938F9325
:1006E0008CEE92E09F938F939BD10F900F900F9081
:1006F0000F9090C044E050E06EEF72E080E993E02C
:10070000F9D06C01892B09F082C0AE014D5F5F4FBB
:1007100069EE72E080E993E003D1892B09F47AC095
:10072000AE014D5F5F4F63E073E0C601F9D0009703
:1007300009F470C0A1D0082F0150063008F064C041
:10074000AE014D5F5F4F65E073E0C601E9D00097F1
:1007500009F460C0AA24BA2CE02EFF2487010959AD
:100760001C4F8AD0F8018083AE014D5F5F4F65E07A
:1007700073E0C601D5D0009781F07ED0A82EAE01DF
:100780004D5F5F4F6BEE72E0C601CAD0009719F063
:1007900073D0B82E02C04FEFB42E87010E0D1F1D6F
:1007A000015B1C4F8B2D9927982F88272A2D3327E3
:1007B000822B932BF80191838083A1DCF801808147
:1007C0009181892F99279F938F9380819181907038
:1007D0009F938F93F701E959FC4F808199279F934D
:1007E0008F930894E11CF11CFF92EF928FE992E045
:1007F0009F938F9315D18DB79EB70A960FB6F89435
:100800009EBF0FBE8DBF06C087E093E002C085E1AA
:1008100093E01AD18EE313DE80E211DE0EC08091E8
:100820008E03E82FFF27E057FC4FF0828F5F809305
:100830008E0303C080E393E007D12496F894DEBFD3
:10084000CDBFDF91CF91FF91EF91BF91AF919F917C
:100850008F917F916F915F914F913F912F911F9158
:100860000F91FF90EF90DF90CF90BF90AF900F90DF
:100870000FBE0F901F901895FC0188279927E894C8
:1008800021912223E9F02032D9F32930C9F32A300B
:10089000B9F32C30A9F32D3099F3263789F32B3295
:1008A00019F02D3221F468942191222349F020334C
:1008B0003CF02A332CF4205365D0820F911DF4CFE5
:1008C0008115910521F01EF480959095019608956B
:1008D000FB01DC018D916191562F5062513624F05D
:1008E0005B3714F460628062861B11F4662391F713
:1008F000990B0895FB01DC014150504070F08D913F
:100900003191232F2062213624F02B3714F43062EA
:100910008062831B19F4332379F7881B990B0895A0
:10092000009731F4DA018D919C91009709F40EC083
:10093000DC01FB013D912191222319F03217C9F30B
:10094000FACF332331F4DA011D921C9288279927BC
:1009500008951197AF93BF93FB013D9121913217F9
:1009600071F4332321F488279927119702C01E922E
:100970001196FA01A193B0839F918F91089522233C
:1009800069F7EACF7AE0979F902D879F802D910D90
:10099000112408950F931F93CF93DF938C01EB01E4
:1009A000009711F4672BB9F16EE070E081E090E000
:1009B00000D3FC01892B71F180E88383209771F0CB
:1009C000D387C28781E883838091D0039091D1033C
:1009D000892B21F4F093D103E093D0030115110585
:1009E000C9F0118700878381826083838091D2035D
:1009F0009091D303892B71F4F093D303E093D20346
:100A00008091D4039091D503892B21F4F093D503E1
:100A1000E093D403CF01DF91CF911F910F910895FF
:100A2000A0E0B0E0E5E1F5E083C4E5E0F0E0EC0F44
:100A3000FD1F81919191AF01BC018091D2039091F2
:100A4000D30338D0E2E090C40F931F93CF93DF938A
:100A5000EC0100E010E0E091D203F091D303838138
:100A600081FD03C08FEF9FEF20C08991882371F033
:100A7000E091D203F091D30320853185BF01F901C4
:100A80000995892B91F30FEF1FEFEFCFE091D20380
:100A9000F091D30320853185BF018AE0F9010995E2
:100AA000892B11F00FEF1FEFC801DF91CF911F913C
:100AB0000F910895A2E1B0E0EFE5F5E029C4EE243E
:100AC000FF2487011C017E876D872A01CC24DD2449
:100AD000FC01D782C682838181FD55C28FEF9FEFD3
:100AE00065C28D859E8501969E878D87C0FE39C221
:100AF0008F8580538A30D0F49F85903339F46620F7
:100B000029F4C3FC03C0E0E0F1E08DC08AE0689EF8
:100B1000602C1124FF856F0E20ED620E67FE02C06F
:100B20005FE7652EC3FC2FC2762C2DC2C3FE04C026
:100B3000662011F441E0642EEF858E2F992787FD02
:100B40009095883691058CF5853691050CF06EC030
:100B50008335910509F492C084359105CCF48B322C
:100B6000910509F449C08C3291054CF4803291050D
:100B700009F446C08332910509F44AC0EDC18D32B3
:100B8000910509F440C08E32910509F444C0E4C1D6
:100B90008336910509F450C0843691050CF087C066
:100BA0008835910509F4B9C0D7C18037910509F49A
:100BB000AEC08137910584F48C36910591F18D3664
:100BC00091052CF48936910509F471C0C5C18F36A1
:100BD000910509F499C0C0C18537910509F49FC0FA
:100BE0008637910524F48337910571F1B5C18837B3
:100BF000910509F492C0B0C180E190E0C82AD92AD9
:100C0000E0E2F0E010C080E890E0C82AD92ABBC139
:100C1000E0E4F0E008C088E090E0C82AD92A662421
:100C2000B2C1E4E0F0E0CE2ADF2AADC13FE3E32E1B
:100C30007A94F3E6FF8731C1F20182E090E0480E3A
:100C4000591EE0807A9429C1F20182E090E0480EBA
:100C5000591EA081B1817D01C3FE08C0862D992750
:100C600087FD9095BC01CD01CFD21DC0FD01019043
:100C70000020E9F73197EA1BE88B16C0F20182E009
:100C800090E0480E591E0190F081E02D7F01C3FED7
:100C900008C0862D992787FD9095BC01CF01A2D26F
:100CA00002C0CF0196D2888B9889791AF6C0C2FE0D
:100CB0000AC0F20184E090E0480E591E2081318183
:100CC000428153810CC0F20182E090E0480E591E2F
:100CD000808191819C01442737FD4095542F7901F3
:100CE0008A0157FF0CC0E2E0F0E0CE2ADF2A10951F
:100CF0000095F094E094E11CF11C011D111D8FEB97
:100D00009FEFC822D92227C098E0988B08C0E0E462
:100D1000F0E0CE2ADF2AF8E7FF8720E1288BC2FE29
:100D20000AC0F20184E090E0480E591E2081318112
:100D3000428153810AC0F20182E090E0480E591EC0
:100D4000808191819C014427552779018A01EFEC2C
:100D5000FFEFCE22DF22CE0101969A8B898B9889F4
:100D6000892E9924AA24BB24C801B701A5019401A6
:100D7000ADD2DC01CB01E989FA8980838A3024F085
:100D8000FF858F0F815201C0805DE989FA898193C7
:100D9000FA8BE98BC801B701A501940197D27901BB
:100DA0008A012115310541055105F1F6E98881E0F7
:100DB00090E08C0F9D1FE81AC60182739070892BFA
:100DC00009F07A94C6FE0DC0872D992787FD90956E
:100DD000E889E03121F42EEF722E780E02C0782ED1
:100DE0007A94C3FE0FC0262D332727FD30958E2D14
:100DF0009927821793072CF087EF9FEFC822D922FB
:100E000001C06E18C3FE02C0761801C07E18C6016C
:100E100080789170892B49F4872D7A9418162CF4D8
:100E2000B10180E290E0FBD1F7CFC1FE04C0B10177
:100E30008DE290E00BC0C4FE04C0B1018BE290E0F3
:100E400005C0C5FE04C0B10180E290E0E8D1C6FE55
:100E50000EC0B10180E390E0E2D19889903139F47D
:100E6000B101EF858E2F992787FD9095D8D1D0FEBF
:100E700009C0872D7A9418162CF4B10180E390E014
:100E8000CED1F7CFC3FE09C0862D6A9418162CF474
:100E9000B10180E390E0C3D1F7CF90E8B92EBC2038
:100EA00049F4872D7A9418162CF4B10180E290E071
:100EB000B6D1F7CFFF85F33639F48E2DB1019927DE
:100EC00087FD9095ACD13DC02F852337A9F4888943
:100ED0008150888B8F3FA9F1F70180810894E11C34
:100EE000F11CB101992787FD909599D1988991506E
:100EF000988B9F3F89F725C0EF85E33571F4F8891A
:100F0000F150F88BFF3FE9F0F7018491B101992787
:100F100086D10894E11CF11CF2CF6E010894C11C2B
:100F2000D11C89899A898C159D0559F0E989FA891E
:100F30008291FA8BE98BB101992787FD90956FD14A
:100F4000F0CFBB2059F0872D7A9418163CF4B101EC
:100F500080E290E064D1F7CFB10161D1CC24DD24EF
:100F600012C09F85953241F481E0C82ED12C6624B1
:100F7000762CEAE0E88B07C0B101FF858F2F992717
:100F800087FD90954CD1F101838183FF04C0ED85ED
:100F9000FE85F49103C0ED85FE85F081FF872F85E6
:100FA000222309F09ECDF10186819781E2E16296CC
:100FB000CBC10F931F93CF93DF93869F8001879FB1
:100FC000100D969F100D1124C8010DD0EC01009753
:100FD00021F0A80160E070E010D1CE01DF91CF9147
:100FE0001F910F910895CF93DF93AC01029710F4F6
:100FF00042E050E020E030E0A091D803B091D90366
:10100000BD01F901109709F44CC08D919C91119785
:101010008417950731F14817590738F42115310520
:1010200019F08217930708F49C01FD01A281B38196
:10103000109759F721153105A1F1C901841B950BB2
:10104000049708F4A901DB01E0E0F0E0109749F112
:101050008D919C91119782179307F9F442175307CA
:1010600079F4ED018A819B81309719F09383828313
:1010700004C09093D9038093D803CD0102964AC04F
:10108000241B350BFD01E20FF31F419351932250B6
:1010900030402D933C93CF013DC0FD01A281B3812F
:1010A000D5CF8091D6039091D703892B41F48091BD
:1010B0004703909148039093D7038093D603E09120
:1010C0004503F0914603309741F4EDB7FEB78091A8
:1010D000490390914A03E81BF90BA091D603B09104
:1010E000D7039F012A1B3B0B2417350788F0CA0141
:1010F00002962817390760F0CD01840F951F0296DC
:101100009093D7038093D6034D935D93CD0102C096
:1011100080E090E0DF91CF910895CF93DF93009727
:1011200009F454C0DC011297ED011B821A828091F0
:10113000D8039091D903009721F1FC0140E050E0E1
:10114000EA17FB0718F1ED01FB83EA832D913C912F
:101150001197C20FD31FCE0102968E179F0771F40D
:101160008A819B81280F391F2E5F3F4F11963C9338
:101170002E9382819381FD019383828341155105D2
:1011800059F4B093D903A093D80320C0AF010280D3
:10119000F381E02D3097A1F6EA01BB83AA83CA014F
:1011A000029628813981820F931F8A179B0771F459
:1011B0008D919C911197280F391F2E5F3F4F3983D6
:1011C0002883FD01828193819B838A83DF91CF9164
:1011D0000895FC0105900020E9F7809590958E0F09
:1011E0009F1F0895FC010590615070400110D8F7D1
:1011F000809590958E0F9F1F0895DC0101C06D931F
:1012000041505040E0F70895FC016150704001905A
:101210000110D8F7809590958E0F9F1F08950F931A
:101220001F93CF93DF938C01EB018B81992781FF73
:101230001CC082FF0DC02E813F818C819D812817AB
:10124000390764F4E881F9810193F983E88306C0E2
:10125000E885F985802F0995892B39F48E819F8146
:1012600001969F838E83C80102C08FEF9FEFDF91AD
:10127000CF911F910F910895991B79E004C0991F98
:10128000961708F0961B881F7A95C9F780950895E0
:1012900009D001921A94E1F7089501900BD01A94A5
:1012A000E1F70895E199FECFBFBBAEBBE09A11967E
:1012B0000DB20895E199FECFBFBBAEBB0DBA11963A
:1012C0000FB6F894E29AE19A0FBE0895A1E21A2EA1
:1012D000AA1BBB1BFD010DC0AA1FBB1FEE1FFF1FDA
:1012E000A217B307E407F50720F0A21BB30BE40B2A
:1012F000F50B661F771F881F991F1A9469F7609571
:101300007095809590959B01AC01BD01CF0108952A
:101310002F923F924F925F926F927F928F929F9205
:10132000AF92BF92CF92DF92EF92FF920F931F93F3
:10133000CF93DF93CDB7DEB7CA1BDB0B0FB6F894A4
:10134000DEBF0FBECDBF09942A88398848885F84E4
:101350006E847D848C849B84AA84B984C884DF8055
:10136000EE80FD800C811B81AA81B981CE0FD11D39
:0E1370000FB6F894DEBF0FBECDBFED0108959D
:10137E00302E3200736572766F626F617264202553
:10138E00730A3E2000534552564F20256420564185
:10139E004C55452025640A0048454C50004449539D
:1013AE00504C415920202020202020202020202079
:1013BE002020202020446973706C6179207365723F
:1013CE00766F2073657474696E67730A4558504F53
:1013DE005254202020202020202020202020202099
:1013EE00202020204578706F7274207372766F20E3
:1013FE0073657474696E67730A53455420733D6E3A
:10140E005B2C6C2C755D202020202020202020209D
:10141E002053657420736572766F207365747469DA
:10142E006E67730A202020202020202020202020DC
:10143E00202020202020202020202020202020209E
:10144E0073203D20736572766F206E756D626572C6
:10145E002028312D36290A2020202020202020204F
:10146E00202020202020202020202020202020206E
:10147E002020206E203D206E65757472616C207088
:10148E006F736974696F6E2028302D323535290AD5
:10149E00202020202020202020202020202020203E
:1014AE002020202020202020202020206C203D20C5
:1014BE006C6F776572206C696D69742028302D32DF
:1014CE003535290A202020202020202020202020F1
:1014DE0020202020202020202020202020202020FE
:1014EE0075203D207570706572206C696D69742071
:1014FE0028302D323535290A435552206E202020B2
:10150E0020202020202020202020202020202020CD
:10151E005365742063757272656E7420736572768E
:10152E006F2E202B203D20696E6372656173652CD2
:10153E00202D203D206465637265617365207661A0
:10154E006C75650A4C4F414420202020202020201D
:10155E002020202020202020202020204C6F61647D
:10156E002073657474696E67732066726F6D206583
:10157E006570726F6D0A5341564520202020202041
:10158E0020202020202020202020202020205772C4
:10159E006974652073657474696E677320746F2047
:1015AE00656570726F6D00444953504C415900533C
:1015BE004552564F2025642C204E45555452414CD1
:1015CE002025642C204C494D49542025642D25643A
:1015DE000A004558504F5254005345542025643D3F
:1015EE0025642C25642C25640A004C4F414400537D
:1015FE00415645004355522000200000435552529B
:10160E00454E5420534552564F2025640A005345EB
:10161E005420003D002C00496E76616C6964207385
:10162E006572766F00496E76616C696420636F6DCA
:10163E006D616E642C20747970652048454C5000A5
:10164E0052656365697665206275666665722066A9
:0C165E00756C6C2E000000DA0320000008
:00000001FF
/branches/V0.76g-acid/servoboard/twislave.c
8,6 → 8,7
 
uint8_t I2C_RXBuffer[32];
uint8_t Byte_Counter = 0;
uint8_t I2C_timeout = 0;
 
void i2c_init(uint8_t adr)
{
26,11 → 27,6
 
ISR(TWI_vect) {
 
static char cnt = 0;
if (cnt++ == 0) {
if (PORTD & 0x80) PORTD &= ~0x80; else PORTD |= 0x80;
}
switch (TWSR & 0xF8) {
case SR_SLA_ACK:
TWCR |= (1<<TWINT);
37,6 → 33,7
Byte_Counter = 0;
return;
case SR_PREV_ACK:
I2C_timeout = 5;
if (Byte_Counter < 32) {
I2C_RXBuffer[Byte_Counter++] = TWDR;
}
/branches/V0.76g-acid/servoboard/twislave.h
1,6 → 1,8
#ifndef _TWI_SLAVE_H_
#define _TWI_SLAVE_H_
 
extern uint8_t I2C_timeout;
 
extern void i2c_init(uint8_t adr);
 
#define TWI_BUS_ERR_1 0x00
/branches/V0.76g-acid/servoboard/uart.c
10,6 → 10,7
uint8_t rx_buffer[RX_BUFFER_SZ];
//uint8_t tx_buffer[TX_BUFFER_SZ];
uint8_t rx_pos, tx_pos;
uint8_t current_servo = 0;
 
void uart_init() {
 
36,6 → 37,20
 
uint8_t i = UDR;
 
if (i == '+') {
if (pwm_neutral_position[current_servo - 1] < 255) {
pwm_neutral_position[current_servo - 1]++;
}
printf("SERVO %d VALUE %d\n", current_servo, pwm_neutral_position[current_servo - 1]);
return;
} else if (i == '-') {
if (pwm_neutral_position[current_servo - 1] > 0) {
pwm_neutral_position[current_servo - 1]--;
}
printf("SERVO %d VALUE %d\n", current_servo, pwm_neutral_position[current_servo - 1]);
return;
}
 
uart_putchar(i);
 
if (i == '\r') {
53,6 → 68,7
" n = neutral position (0-255)\n"
" l = lower limit (0-255)\n"
" u = upper limit (0-255)\n"
"CUR n Set current servo. + = increase, - = decrease value\n"
"LOAD Load settings from eeprom\n"
"SAVE Write settings to eeprom\n");
} else if (!strcasecmp(rx_buffer, "DISPLAY")) {
77,8 → 93,21
eeprom_init();
} else if (!strcasecmp(rx_buffer, "SAVE")) {
eeprom_write();
// } else if (!strncasecmp(rx_buffer, "INC ", 4)) {
// } else if (!strncasecmp(rx_buffer, "DEC ", 4)) {
} else if (!strncasecmp(rx_buffer, "CUR ", 4)) {
char *s, *t;
s = strtok_r(rx_buffer, " ", &t);
if (s) {
s = strtok_r(NULL, "", &t);
if (s) {
i = atoi(s) + 1;
if (i >= 1 && i <= 6) {
current_servo = i;
printf("CURRENT SERVO %d\n", i);
} else {
printf("Invalid servo\n");
}
}
}
} else if (!strncasecmp(rx_buffer, "SET ", 4)) {
char *s, *t;
uint8_t servo;
96,7 → 125,7
s = strtok_r(NULL, ",", &t);
if (s) {
l = atoi(s);
s = strtok_r(NULL, ",", &t);
s = strtok_r(NULL, "", &t);
if (s) {
h = atoi(s);
} else {
104,6 → 133,7
}
}
pwm_limit[servo] = (h << 8) | l;
pwm_check_active();
i = servo;
printf("SERVO %d, NEUTRAL %d, LIMIT %d-%d\n",
(i + 1),
/branches/V0.76g-acid/servoboard/uart.h
7,8 → 7,8
#define EICR EICRB
#define INT_VEC_TX SIG_UART_TRANS
 
#define RX_BUFFER_SZ 128
#define TX_BUFFER_SZ 128
#define RX_BUFFER_SZ 64
#define TX_BUFFER_SZ 0
 
void uart_init();
int uart_putchar (char c);