Zo dat duurde dus ff lang. Eerst eens weer uitzoeken hoe foto's en schema's toegevoegd kunnen worden.
Kon het experimenteren toch weer niet laten en dus....
Hierbij het schema van mijn 1e prototype van een servo automaat. En een plaatje van de ""spin"". Aangezien ik nu eenmaal (nog) beter ben in hardware componenten nu gemaakt met een 556 en wat discrete componenten:-)De servo draait nu automatisch van links naar rechts. De weerstanden zijn experimenteel vastgesteld om de servo uitslag te beperken voor de pop. Want als het hoofd ca. 180gr. kan draaien en het armpje ook zo iets naar achteren is dat wat pijnlijk voor de pop:-( De BC547 sluit de 4k7 dus min of meer kort).
Eigenlijk heb je dus een automatische variabele weerstand nodig, in dit geval over de 4k7 weerstand. Tja.... en een zaagtand aan die transistor toevoegen lost dat niet op denk ik. Ik sta dus open voor (simpele) suggesties!
Overigens zijn de meeste van deze onderdelen ook nog van ca. 1970. Daar heb ik nog heel wat van en werken nog perfect. Zelf mijn experimenteer board is nog uit die periode:-) Voor het overige heb ik nog wel wat sloopprints liggen van oa. beeldschermen waar ik dan voor experimenten wat onderdelen uithaal. Hoef ik niet voor elk onderdeel 30 - 40 km te rijden. Overigens door het zelf wat experimenteren worden de schema's die jullie gestuurd hebben ook weer duidelijker en ga ik er anders naar kijken. Waarvoor dank!


Dit is een schema met een PIC'je wat zeer klein van formaat is.
Als je het schema opstart met een gesloten "sweep" gaat de servo gelijk in sweepstand.
Geen idee waar je woont, maar er is vast wel iemand in de buurt die een PIC'je voor je kan programmeren.
Met de potmeter is tevens de snelheid van de sweep in te stellen.
De hex en de layout is aanwezig, dus je hoeft niet zelf (of een ander) wat te gaan tekenen of programmeren.
Hallo Generaal,
Bedankt voor de informatie maar wat is de uitgangbelasting? Een beetje servo, zeker de digitale én vooral de kleine, trekt al gauw een paar honderd milli's.
De puls geeft in geen enkele servo schakeling zoveel stroom af.
De puls moet je zien als dat hele kleine schakelaartje wat die hele grote elektromotor inschakelt dmv relais oid.
Zo ook in de servo zitten FET's oid die de motor aansturen, dat doet in ieder geval niet de puls.
De batterij die je gebruikt bepaalt de stroom welke de motor van de servo doet draaien.
Zelf gebruik ik deze schakeling op zeer grote servo's (60Nm) welke ik in bigboats (speedboten) heb zitten die ruim 130cm groot zijn.
Je moet deze schakeling zien als je ontvanger, daar kan je ook 2 of meer servo's op aansluiten zonder dat je een knoepert van een ontvanger nodig hebt.
Je moet alleen meer of grotere accu's gebruiken als je meer servo's op je ontvanger aansluit.
Sorry, Je hebt helemaal gelijk. Foutje bedankt! Ik kan achter één ontvanger kanaal tenminste 3 a 4 Servo's hangen. Voor wat betreft de puls belasting. Dus dat is inderdaad geen probleem. Moet dus ook wel een 10Mc kristal bij komen zie ik.
Die dingen kosten inderdaad bijna niets. Ook zo'n 10Mc kristal dubbeltjes werk.. bij Conrad.
Uh.... vraagje... kan jij dat niet voor me programmeren? En als je dat toevallig ook hebt...samen met dat kristal opsturen? Kosten hoor ik wel. Of nog anders... ik weet niet waar je woont maar 28 en 29 juni hebben we hier in Nijverdal een grote internationale modelvliegshow. Zie je ook het nieuwste van het nieuwste op dat gebied. Zorg ik voor gratis toegang en drankje:-)Kijk voor gegevens even op onze site http://www.modelvliegclubnijverdal.nl/
[Bericht gewijzigd door Henry S. op (54%)]
Hunter
Damn the torpedoes, full speed ahead!
Een PIC12F675 heeft helemaal geen kristal nodig, zeker niet in dit geval, gezien de nauwkeurigheid van de servo. De interne oscillator is met 1% nauwkeurig genoeg.
Doe je best zou ik zeggen 
BTW, het kristal kan ook een resonator van 10MHz zijn.
;Servo test routine, serv675C
;Author EdwardM
__CONFIG _CP_OFF & _CPD_OFF & _WDT_OFF & _MCLRE_OFF & _BODEN_OFF & _HS_OSC
#define __12F675
#include <12f675.inc>
;====================================
; Pin Defs
;====================================
; Pin1......Vdd
; Pin2......GP5
; Pin3......CLKOUT............TEST.......OUT
; Pin4......GP3/MCLR/Vpp......CENTRE.....IN
; Pin5......AN2...............POT........Analog
; Pin6......GP1/ICPCLK........SWEEP......IN
; Pin7......GP0/ICPDTA........PWM........OUT
; Pin8......VSS
;====================================
; RAM 0x20 to 0x5F
;====================================
CounterA equ 0x20
CounterB equ 0x21
CounterC equ 0x22
CounterD equ 0x23
Timer_rtn equ 0x24
temp_loops equ 0x25
us_loops equ 0x26
tempf equ 0x27
set_centre equ 0x28
old_ADC equ 0x29
ADC_low equ 0x2A
ADC_high equ 0x2B
mode_state equ 0x2C
LOW_count equ 0x2D
HIGH_count equ 0x2E
last_low equ 0x2F
last_high equ 0x30
max_low equ 0x31
max_high equ 0x32
min_low equ 0x33
min_high equ 0x34
inc_high equ 0x35
inc_low equ 0x36
inc_up equ 0x37
init_inc equ 0x38
last_pos_high equ 0x39
last_pos_low equ 0x3A
Org 0x00
goto main
table addwf PCL,f
retlw D'254'
retlw D'205'
retlw D'153'
retlw D'102'
retlw D'77'
retlw D'62'
retlw D'48'
retlw D'34'
retlw D'26'
retlw D'19'
retlw D'13'
retlw D'9'
retlw D'6'
retlw D'4'
retlw D'2'
retlw D'1'
;================================
; 16 bit Comparison MAX
;================================
compMAX
movf max_high,w
subwf ADC_high,w
btfss STATUS,Z
goto res16A
movf max_low,w
subwf ADC_low,w
res16A
return
;================================
; 16 bit Comparison MIN
;================================
compMIN
movf ADC_high,w
subwf min_high,w
btfss STATUS,Z
goto res16B
movf ADC_low,w
subwf min_low,w
res16B
return
main
call initial_setup
main_loop
call set_20ms_frame
call set_position ;Position set from previous loop
call check_pbuttons ;Check pushbuttons for mode change
call check_mode ;Get current test mode
call wait_end20ms
goto main_loop
;================================
; Wait for end of 20ms frame
;================================
wait_end20ms
btfss PIR1,0
goto wait_end20ms
return
;================================
; Which mode are we in?
;================================
check_mode
clrf inc_high
clrf inc_low
iorlw 0x00 ;w=0xFF if change
btfsc STATUS,Z ;
goto nochange ;If no jump, status has changed
btfsc mode_state,0 ;Centre?
goto do_centre
btfsc mode_state,1
goto do_sweep ;must be sweep
goto changetopot
do_centre
call get_ADC
call set_ADC_limits
dc1
movlw 0xFF ;1.5ms
movwf LOW_count
movlw 0x01
movwf HIGH_count
clrf mode_state
bsf mode_state,0
return
nochange
clrf inc_low
clrf inc_high
btfsc mode_state,0 ;Centre
goto check_centre
btfsc mode_state,1 ;Sweep
goto check_sweep ;else set by pot position
changetopot
call get_ADC
movf ADC_high,w
movwf HIGH_count
movf ADC_low,w
movwf LOW_count
clrf mode_state
bsf mode_state,2
return
check_centre
call get_ADC
call compMAX
btfsc STATUS,C ;Carry set then out of range, set posn to pot
goto changetopot
call compMIN
btfsc STATUS,C
goto changetopot
goto dc1
return
check_sweep
call get_ADC
call div64
call SetCountper20ms
btfss inc_up,0
goto cs1
call add_inc
return
cs1
call sub_inc
return
do_sweep
call get_ADC
call div64
call SetCountper20ms
bsf inc_up,0
call add_inc
return
add_inc
movfw inc_low
addwf last_pos_low,f
btfsc STATUS,C
incf last_pos_high,f
btfss last_pos_high,2
goto ai1
movlw 0x03
movwf HIGH_count
movlw 0xFF
movwf LOW_count
bcf inc_up,0
return
ai1
movfw last_pos_high
movwf HIGH_count
movfw last_pos_low
movwf LOW_count
return
sub_inc
movfw inc_low ;last_pos_low
subwf last_pos_low,w ;inc_low,w
movwf LOW_count
movfw last_pos_high
btfss STATUS,C
addlw 0xFF
movwf HIGH_count
btfss HIGH_count,7
return
movlw 0x00
movwf HIGH_count
movwf LOW_count
bsf inc_up,0
return
div64
rrf ADC_low,f
rrf ADC_low,f
rrf ADC_low,f
rrf ADC_low,f
rrf ADC_low,f
rrf ADC_low,f
movlw 0x03
andwf ADC_low,f
rlf ADC_high,f
rlf ADC_high,f
movlw 0x0C
andwf ADC_high,w
iorwf ADC_low,w
return
SetCountper20ms
call table
movwf inc_low
clrf inc_high
return
;================================
; Check ADC
;================================
get_ADC
movlw 0x8B ;Start ADC
movwf ADCON0
sp2
btfsc ADCON0,1 ;check go/done bit for end of conversion
goto sp2
bsf STATUS,RP0 ;set bank 1
movf ADRESL,w
bcf STATUS,RP0 ;set bank 0
movwf ADC_low ;LOW_count
movwf LOW_count
movf ADRESH,w
movwf ADC_high ;HIGH_count
movwf HIGH_count
return
;========================================
; Set ADC limits
;========================================
set_ADC_limits
clrw
movwf max_low
movwf max_high
movwf min_low
movwf min_high
movf ADC_low,w
addlw D'10'
movwf max_low
movf ADC_high,w
btfsc STATUS,C
addlw 0x01
movwf max_high
movlw D'10'
subwf ADC_low,w
movwf min_low
movf ADC_high,w
btfss STATUS,C
addlw 0xFF
movwf min_high
movlw 0x00
subwf min_high,f
return
;========================================
; Check pushbutton state for mode change
;========================================
check_pbuttons
btfss GPIO,GPIO3 ;Centre?
goto mode_centre
btfss GPIO,GPIO1 ;Sweep?
goto mode_sweep
retlw 0x00 ;No change
mode_centre
clrf mode_state
bsf mode_state,0
retlw 0xFF
clrf inc_low
clrf inc_high
mode_sweep
clrf mode_state
bsf mode_state,1
retlw 0xFF
;================================
; Set PWM output on
;================================
set_20ms_frame
bsf GPIO,0 ;Output on
movlw 0x3B ;Set timer to 20ms-setup time @10MHz
movwf TMR1H
movlw 0xBB
movwf TMR1L
movlw 0x01
movwf T1CON ;Timer enable
bcf PIR1,0 ;Clear timer overflow flag
return
;================================
; Set position
;================================
set_position
call init_delay ;Nominal 1ms delay
movfw HIGH_count
movwf last_pos_high
movfw LOW_count
movwf last_pos_low
clrw
iorwf LOW_count,f
btfsc STATUS,Z
goto low_zero
low_nonzero
decfsz LOW_count,f
goto low_nonzero
low_zero
clrw
iorwf HIGH_count,f
btfsc STATUS,Z
goto high_zero
do_loops
decfsz LOW_count,f
goto do_loops
decf HIGH_count,f
goto low_zero
high_zero
bcf GPIO,0 ;Output off
return
init_delay
movlw D'3'
movwf CounterB
movlw D'210'
movwf CounterA
loop decfsz CounterA,1
goto loop
decfsz CounterB,1
goto loop
return
us_delay
movlw D'4'
movwf CounterA
loopus decfsz CounterA,1
goto loopus
nop
nop
nop
nop
nop
return
;================================
; Initial setup
;================================
initial_setup
bcf STATUS,RP0 ;set bank 0
clrf GPIO ;set GPIO 's to 0
movlw 07H ;
movwf CMCON ;Comparator control - off
bsf STATUS,RP0 ;set bank 1
movlw 0x24
movwf ANSEL
movlw 0x3E ;GP2/AN2 input only
movwf TRISIO ;all others output, bank 1
bcf STATUS,RP0 ;set bank 0
movlw 0x89 ;Initialise adc
movwf ADCON0 ;bank 0
bcf mode_state,0 ;Centre
bcf mode_state,1 ;Sweep
bsf mode_state,2 ;Pot
call get_ADC
clrf inc_low
clrf inc_high
movlw 0x01
movwf init_inc
return
end
Hunter
Damn the torpedoes, full speed ahead!
Uh.... vraagje... kan jij dat niet voor me programmeren?
Ik kan nergens een e-mailadres van je vinden en hier op het forum ga ik er niet op in.
https://www.youtube.com/watch?v=dG_wxdWVmAo
https://www.youtube.com/watch?v=hoy1v1UaXAQ
https://www.youtube.com/watch?v=dXaGCjuDFKI
Je ziet hierop ook de print, er zit nu wel een grote potmeter op, maar die kan vervangen worden door een klein instelpotje.
Deze laatste versie is met een Pic.
Dat zal ook wel gaan, maar dan heb je wel heel andere tools nodig dan het lijstje dat ik eerder heb doorgegeven:
- Andere ontwikkelSoftware.
- Andere programmer.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Op 15 mei 2014 11:14:57 schreef Generaal:
Zo ook in de servo zitten FET's oid die de motor aansturen, dat doet in ieder geval....
FYI, ik heb eens een servo opgengemaakt en het circuit wat zitten bestuderen. Er blijkt een "single chip solution" te zijn, waabij de chip ingebouwde transistoren heeft. Gewone bipolaire jongens. En best wel rotte ook. VCEsat van iets van 1V of zo bij de nominale stroom van de motor....
Ik heb hier servo's in gebruik van ~6mm tot ~45mm dik, waar een behoorlijke motor in zit.
De dikke jongens trekken ruim 1 Ampere bij volle belasting.
Op haast alle printen voor normale servo's zit een standaard chip waar de puls in verwerkt wordt en een H-brug om de motor aan te sturen.
De grote jongens hebben nog een paar extra Dpack FET's op de print zitten. De stroom die de motor trekt kan niet door de H-bridge in het chipje geleverd worden. Bij middelmaat servo's zit nog wel eens een gewone H-bridge chip op de print ipv losse FET's.
Mijn e-mailadres staat toch in mijn gebruikers status?
[Bericht gewijzigd door xxxPietxxx op (32%)]
Helaas staat uw e-mail adres niet openbaar. Zoals je hem nu neer zet op het forum is het een spamvanger.
achter deze regel : Verberg e-mailadres voor anderen , het vinkje weghalen, en uw e-mail adres midels de edit uit het topic halen.
[Bericht gewijzigd door Shiptronic op (39%)]
Zo, na één dag vakantie, 29 mei, waren we weer thuis. Mijn vrouw gleed uit over het caravanopstapje en had gelijk en forse gecompliceerde bovenarmbreuk. Dus dag erna weer thuis en inmiddels is ze geopereerd (pen erin en paar ""tyre wraps"" om het bot:-) en aan herstel begonnen. Dus nu druk als ""mantelzorger:-)""En... weer wat tijd voor het servo probleem. Dat heb ik nu als volgt opgelost. Ik had zo'n goedkope servotester van paar euro gekocht. Daar zitten 3 blauwe led's op. Stand na inschakelen op ""hand"" bediening van de servotester. Middelste led brengt de te testen servo naar middenstand. En stand drie is de automaat. Nu was ik er al achter dat doorschakelen gebeurt doordat de drukknop naar massa schakelt en op de achterflank naar volgende stand schakeld. Wat ik nu gedaan heb is dat ik 2x BC547 torren over het drukknop contact gemaakt heb. De basis van de eerste BC547 via 10k op de 1e led aangesloten. Die led gaat na opstarten branden. De 1e BC547 trekt dan de drukknop aansluiting even naar massa.. en schakelt het geheel naar de middenstand. Die led gaat dan branden en....die schakelt via 10k en een 470uF elco de tweede BC547 wat vertraagd in. Die brengt knop aansluiting weer even naar massa. Dus wordt er doorgeschakeld naar de automatische stand. En....klaar is Kees! Werkt perfect. Pop gaat nu na in schakelen direct arm en kopje bewegen. Nu nog zo regelen dat ik via een zender kanaal de pop spanning kan inschakelen.
........ vervolgens heb ik een piepkleine defecte servo (tandwielen defect)ontdaan van het motortje en in plaats daarvan via een 1N4148 diode en een elco een plus spanning gemaakt die.... het servotester printje weer voedt. Via het (defecte servo) servopotmetertje nu een stand gezocht waarmee ik via een schakelaar op de zender het geheel kan in/uit schakelen. Dan krijgt de servotester/pop ca. 4 volt bij een ontvanger spanning van 6 volt. Is voldoende om de pop te laten bewegen. Ik heb over de ingang van de servotester nog wel een extra elco van 470 uF gezet om de puls wat anders het motortje zou krijgen verder af te vlakken.
Het geheel werkt nu perfect!
Nu nog even een duurtest van paar uur om te bekijken of de elektronica van het (defecte) servo'tje de stroom van de popservo wel aan kan want het was een micro servo'tje. Zo niet dan de elektronica van een wat grotere defecte servo gebruiken.
Laat ik nog wel weten.
Tussen haakjes ik zet wel een zekering van paar honderd millies tussen dit geheel om te voorkomen dat mocht er wat fout gaan niet de kist onbestuurbaar wordt.
[/url][/img]
[/img]

Op 15 mei 2014 18:17:37 schreef Hunter:
Om een signaal te krijgen waarmee een servo heen en weer beweegt heb je niet zoveel code nodig.
Dat is inderdaad een enorme lap code.
@ TS,
Ten eerste sterkte met je vrouw.
Hier heb je een kleiner stukje code, het kan met een paar regels.
Device 12F675 ; processor type
Xtal 10 ; crystal 10 Mhz
Config WDT_OFF,_ ; WatchDog Timer uit
PWRTE_ON,_ ; Power-up Timer Enable aan
MCLRE_OFF,_ ; Externe Master Reset Enable uit
HS_OSC ; X-tal groter dan 4MHz
All_Digital true ; alle poorten digitaal
Symbol aan = 1 ; Aan is hoog
Symbol uit = 0 ; Uit is laag
Symbol MOTOR = GPIO.0 ; Servo uit op poort 1
Symbol snelheid = 20 ; servo frequentie 50Hz
Dim positie As Word ; variabele positie servo
Clear ; wis geheugen
DelayMS 1000 ; stabilisering 1 sec
;543210 ; hulpregel
GPIO = %000000 ; maak poort laag
TRISIO = %000100 ; in en uitgangen
;----------------------------------------------------------
run:
For positie = 1000 To 1500 Step 10
Servo MOTOR,positie
DelayMS snelheid
Next
For positie = 1500 To 1000 Step - 10
Servo MOTOR,positie
DelayMS snelheid
Next
GoTo run
End
Als je de waarde 1000 en 1500 aanpast, kan je de slag van de servo vergroten of verkleinen.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Lambiek, als je "1000" in een variable "min" stopt, 1500 in "max", "snelheid" naar "servodelay" ofzo hernoemt en "10" in een variabele snelheid stopt, wordt het denk ik duidelijker voor mensen die het niet zelf geschreven hebben.
Wacht even heren,
Ik heb hier nog niets geprogrammeerd, behalve in de jaren 70, Algol, Cobal, Basic, met PDP8 ed. maar in bovenstaande heb ik het over een kant en klaar servotestertje dat ik via internet gekocht heb voor € 4,95 inc. verzendkosten. Daar zal ook wel een soort pic inzitten. En ik heb ze al voor minder gezien. Zelfs ca.$1,--op eBay. Dus valt er volgens mij niet veel aan te programmeren aan dit testertje. Toch? Of????? Vandaar mijn hardware oplossing. Maar het blijft natuurlijk interessant via een pic basiscode.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Nouja, dan is het "voor het geval dat"..... (je nog een keer via een PIC dezelfde functionaliteit maar dan flexibeler zou willen verkrijgen). Of voor anderen die iets vergelijkbaars willen maken en toevallig op deze thread landen.
Een aan en uit schakelaar.
http://www.rc-cam.com/bitsw.htm
Op 18 juni 2014 12:39:31 schreef Lambiek:
Hier heb je een kleiner stukje code, het kan met een paar regels.Device 12F675 ; processor type Xtal 10 ; crystal 10 Mhz Config WDT_OFF,_ ; WatchDog Timer uit PWRTE_ON,_ ; Power-up Timer Enable aan MCLRE_OFF,_ ; Externe Master Reset Enable uit HS_OSC ; X-tal groter dan 4MHz All_Digital true ; alle poorten digitaal Symbol aan = 1 ; Aan is hoog Symbol uit = 0 ; Uit is laag Symbol MOTOR = GPIO.0 ; Servo uit op poort 1 Symbol snelheid = 20 ; servo frequentie 50Hz Dim positie As Word ; variabele positie servo Clear ; wis geheugen DelayMS 1000 ; stabilisering 1 sec ;543210 ; hulpregel GPIO = %000000 ; maak poort laag TRISIO = %000100 ; in en uitgangen ;---------------------------------------------------------- run: For positie = 1000 To 1500 Step 10 Servo MOTOR,positie DelayMS snelheid Next For positie = 1500 To 1000 Step - 10 Servo MOTOR,positie DelayMS snelheid Next GoTo run EndAls je de waarde 1000 en 1500 aanpast, kan je de slag van de servo vergroten of verkleinen.
Lambiek, waarom gebruik je de interne klok van de PIC niet ?
[Bericht gewijzigd door Henry S. op (94%)]
Helemaal mee eens. Elke discussie of mogelijke oplossingen kunnen anderen altijd weer gebruiken. Dit hele item heeft me al wel een andere kijk op het programmeren van microprocessoren gegeven.
Maar tja... nog een hobby erbij zal moeilijk zijn. Ik heb er al zoveel. Dus ik hou het voor wat betreft dit punt maar bij wat elektronica bij het modelvliegen. Overigens als jullie nu eens het nieuwste op het gebied van modelvliegen willen zien. Zoals hi-speed electrokisten, straalkisten, drones ed. kom dan maar naar onze grote modelvlieg Fly-Inn op 28 en 29 juni.
Op 18 juni 2014 17:15:11 schreef Generaal:
Lambiek, waarom gebruik je de interne klok van de PIC niet ?
Tja ik had toevallig een printje met een kristal erop liggen.
Op 18 juni 2014 19:26:26 schreef xxxPietxxx:
Maar tja... nog een hobby erbij zal moeilijk zijn. Ik heb er al zoveel. Dus ik hou het voor wat betreft dit punt maar bij wat elektronica bij het modelvliegen.
Je moest eens weten wat je allemaal met een controller kan doen, ook in de modelbouw. 
Op 18 juni 2014 13:11:05 schreef rew:
Lambiek, als je "1000" in een variable "min" stopt, 1500 in "max", "snelheid" naar "servodelay" ofzo hernoemt en "10" in een variabele snelheid stopt, wordt het denk ik duidelijker voor mensen die het niet zelf geschreven hebben.
Ja dat is misschien duidelijker, maar ik had dit zo op de pc staan.
