Sida 1 av 1
Någon som änvänt Icecap's RS232 R/C-Servo Freebie?
Postat: 5 december 2009, 21:56:17
av HenkiBoy
Som topic lyder, har någon här på forumet använt detta "program" till ett projekt?
Jag skulle vilja mha en pic läsa av en
2 axlad joystick och sen skicka värdet till en pic16f628a som har Icecap's "
RS232 R/C Servo controller" program i sig.
OBS, Med "en pic" menas någon av följande: 12f683, 16f628a, 16f648a, 16f688, 16f690, 16f877a, 18f2550 och 18f4550 då det är desa jag har tillgång till.
Finns det någon här på forumet som har gjort något liknande och skulle vilja dela med sig av koden?
EDIT: Helst assembler, om någon vill dela med sig.
MVH Henke
Re: Någon som änvänt Icecap's RS232 R/C-Servo Freebie?
Postat: 5 december 2009, 23:39:33
av sodjan
Varför inte ta chansen och bli först !
Hur som helst, du kanske får bättre svar om du först tittar på de olika delarna
och sedan frågar lite om det som är oklart. Jag har inte tittat på Icecap's kod,
men har ingen anledning att anta att den inte fungerar...
Re: Någon som änvänt Icecap's RS232 R/C-Servo Freebie?
Postat: 5 december 2009, 23:56:54
av Glenn
Den koden gör ju inte alls samma sak, det känns som du vinner mer på att bara ta ett exempel på servostyrning och bygga vidare på det.
..Eller så använder du ett programmeringsspråk som redan kan styra servon out of the box
Jag har byggt en liknande sak men orkade aldrig få till det så bra, mitt problem var mest att servona rörde sej väldigt ryckigt,
det hade säkert gått att fixa om man hade ansträngt sej lite mer.
Re: Någon som änvänt Icecap's RS232 R/C-Servo Freebie?
Postat: 6 december 2009, 09:22:26
av Trex
Har inte tittat på Icecap’s rutin, men om du skall styra servon med ett analogt värde så skulle jag fundera runt antal grader som servot skulle stå/röra sig till.
Har gjort klart en metod för servon hur detta skulle gå till men inte gjort koden än eftersom allt skall lösas innan man kodar (koden är ju det minsta jobbet).
Min metod är att servo rutinen får in grader som servor skall stå/gå till.
Om du inte skall styra mer än max 10st servon så kanske denna metod skulle fungera, såg ett C exempel som hade denna metod en gång i tiden.
- Vänta 20 ms vid programstart
- Beräkna puls servo 1
- Puls till servo 1
- Vänta tills servo 1 pulsen är klar
- Beräkna puls servo 2
- Puls till servo 2
- Vänta tills servo 2 pulsen är klar
- Etc. tills sista servot har fått sin puls (max 10)
- ----
- ----
- Addera alla pulslängder från servorna dra ifrån dessa från 20ms
- Vänta xx ms som blev kvar av 20ms – alla pulslängder
Exemplen här förutsätter att kristallen är 20MHz samt att Timer1 är satt på prescale 1:2
Då det finns olika servon som rör sig olika långt exempelvis 60, 180 och 360 graders (möjligt än flera).
För att beräkna servots pulslängd så gör jag så här (har bara testkod utan beräkningar eftersom det tar sin tid att bygga upp ett bibliotek av rutiner i assembler)
1ms är 2500 (om man använder 20MHz kristall och satt timer1 1:2) uppräkningar vilket betyder att servots grader/ 2500 = faktor som skall användas vid beräkning av antal uppräkningar av timern tex. om vi har ett 60 graders servo så blir beräkningarna följande
60/2500 = 0.024 * 1000 = 24 (lättas att beräkna heltal där av blir faktor * 1000)
Om servot skall stå i 30grader (mittenläget)
30*1000 (justera för faktorn) = 30000
30000/24=1250
1250+2500 (2500 är ju 0 grader) = 3750
65535-3750 = 61785 (möjligt att det skall vara + 1 också för att få med överslaget på timern)
Så timer1 skall laddads med talet 61785
Är det text 180 graders servo så räknar man bara om faktorn 180/2500*1000 = faktorn.
Skulle kunna tänka mig att denna metod skulle passa om man tex. skall ta ett analogt värde och helt enkelt räknade om värdet till grader som skickas till din servo rutin. Vilket inte borde vara så svårt att lösa tex. om du har ett 180 graders servo så är det ju bara att dela analoga upplösningen så får du ju en faktor som du skall multiplicera med inkommande värde.
För perioden som skall väntas mellan servorna pulserna får du ju enkelt genom att utgå från 20ms vilket är här i detta exemplet 15535 som skall in i timer 1, om man adderar varje servots tal vilket i exemplet är 3750 så minskar man 20ms med 1,5ms enl. exemplet.
Metoden ger en hög upplösning för servona, Timer 1 kan enbart användas för servona vilket kan vara en nackdel
Re: Någon som änvänt Icecap's RS232 R/C-Servo Freebie?
Postat: 6 december 2009, 10:33:45
av sodjan
Jag kan nog tycka ett det är att röra till det i onödan att hålla på
och räkna med "grader". Det räcker med att veta att 1.5 +/- 0.5 ms
är fullt utslag, det gäller alltid oavsett hur det aktuella servot ser ut.
Och har man så pass stora beräkningar för detta som i ditt exempel
så har man vanligtsvis inte tänkt till ordentligt.
Re: Någon som änvänt Icecap's RS232 R/C-Servo Freebie?
Postat: 6 december 2009, 10:52:04
av Icecap
Jag vet att det projekt faktisk är använd av minst 2 personer.
Och att ändra arbetssättet till att läsa en AD-omvandlare och styra servo-positionerna med dom ser jag inte som ett större problem.
Re: Någon som änvänt Icecap's RS232 R/C-Servo Freebie?
Postat: 6 december 2009, 12:09:58
av HenkiBoy
sodjan skrev:...Jag har inte tittat på Icecap's kod,
men har ingen anledning att anta att den inte fungerar...
Ett litet förtydligande, jag har fått Icecap's kod att fungera.
Det jag ville med denna tråden var att jag ville ta reda på ifall någon har använt Icecap's program.
Sedan skrivit ett program till en annan PIC som läser av 2 A/D ingångar och skickar en "sträng" över RS232 som ser ut som följande till PICen med Icecap's program:
ex:
som ställer servot på kanal 0 i mittenläge (499).
Hoppas att jag har gjort det lite tydligare.
[OffTopic]
Något som jag blev lite överraskad över var att jag inte blev överkörd av de som kan PIC här på forumet. Det har nämligan hänt tidigare.
Kan det vara så att jag formulerade mej bättre här?
[/OffTopic]
Re: Någon som änvänt Icecap's RS232 R/C-Servo Freebie?
Postat: 6 december 2009, 12:50:45
av sodjan
Behöver du 1000 olika lägen på servot ? Ju färre steg du
behöver ju enklare blir kodningen av 1.5 +/- 0.5 loopen...
Det beror ju lite på vad servot ska kontrollera, men det är inte
speciellt ofta man behöver fler en ca 100 steg.
Personligen väljer jag skrivbara tecken som start/slut tecken,
det blir lite enklare att debugga med en terminal. Eller i alla fall
CRLF som sluttecken vilket ger en snygg utskrift på terminalen.
I ditt exempel, var är "channel" ?
Re: Någon som änvänt Icecap's RS232 R/C-Servo Freebie?
Postat: 6 december 2009, 13:14:53
av HenkiBoy
Det jag skrev med "STX channel A/D-value ETX", det är så Icecap's program vill ha informationen via rs232.

Bild tagen från
http://www.icecap.se/Freebies_se.html
Saxat från "RC_servo.c" som finns att hämta på Icecap's sida:
Kod: Markera allt
// RC-servo controller
// © Icecap 2006-03-11
// Recieves commands through the serial port and sends out the appropriate datsa om the ports
// Protocoll:
// STX Channel Data ETX (spaces left for clarity only)
// Channel: '0' - '9','A'-'D'
// Data: '0' - '999'
// I.e. to set channel '1' to midposition (499):
// STX 1499 ETX or in hex: 02 31 34 39 39 03
// Processor:
// PIC16F628A using INTOSC with NOCLKOUT
Jag vill inte ädra på något som redan är bra, det som behövs är en extra PIC med program som läser av 2 A/D inputs och skickar en strång via rs232 som PICen med Icecap's program vill ha.
Re: Någon som änvänt Icecap's RS232 R/C-Servo Freebie?
Postat: 6 december 2009, 13:27:13
av Icecap
Det var ju en mycket dålig anledning!
Du ska ju likaväl programmera den PIC som avläser manöverdonet varför du likaväl kan använda den del av mitt program som styr servo-pulserna. Att ta 2 PIC för att du ska programmera den ena och inte behöver programmera den andra är en mycket dålig anledning!
Re: Någon som änvänt Icecap's RS232 R/C-Servo Freebie?
Postat: 6 december 2009, 13:27:52
av sodjan
OK, fungerar det så fungerar det. Jag sa bara att *jag*
kanske inte hade valt STX/ETX som avgränsare...
Men visst, i detta fall är det kanske enklast att anpassa sig
till den befintliga designen.
En annan sak...
Varför *två* PIC's ? Sitter de långt från varandra ?
Annars är det ju enklare att lägga in ADC avläsningen i samma
PIC som styr servona. Servostyrningen tar så lite tid så du har
massor av tid över till ADC'n (som ju dessutom i princip sköter sig
självt efter att man har kickat igång den...).
Re: Någon som änvänt Icecap's RS232 R/C-Servo Freebie?
Postat: 6 december 2009, 14:23:23
av HenkiBoy
Okej, jag ska fundera lite över det ni har nämt.
Re: Någon som änvänt Icecap's RS232 R/C-Servo Freebie?
Postat: 6 december 2009, 15:10:18
av Trex
Finns färdiga servotestare, kanke funka med två sådana?
http://www.fast-lad.co.uk/store/ek2-090 ... -1716.html
Kan kanske gå att ansluta din 2 axlade joystick med en vis anpassning, billiga är dom ju 80kr stycket plus frakt som brukar ligga runt 6-7 pund på småsaker.
Bara en tanke som slog mig (lite sjövild kanske men) då du verkar vilja ha färdig lösning.