Tinus016
www.tinuselectronics.nl Because DIY Electronics Matters!!!!
Hoi,
Ik wil voor mijn digitale camera een Time Lapse schooter maken. maar weet even niet hoe te beginnen. T lieft met een Pic 16f628a en een in te stellen tijd voor de tijd voor focus en tijd voor de tijd tussen de foto's in.
Wie kan mij helpen?
Edit: Zelf maar even een proggje geschreven maar werkt dit?
DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
;Logische constanten
SYMBOL LAAG = 0
SYMBOL OFF = 0
SYMBOL ON = 1
;Algemene constanten
SYMBOL Schaal = 124 ;schaal waarde in vullen
;Poortnamen
SYMBOL Potmeter = PORTA.1 ;Potmeter aangesloten via een condensator aan GND
SYMBOL Focusen = PORTA.2 ;Focusen
SYMBOL Foto = PORTA.3 ;Foto
SYMBOL S1 = PORTB.0 ;Toets om grenswaarden van instelling potmeter vast te leggen
;Variabelen declareren
DIM Focus AS BYTE ;Bevat de Focus tijd
DIM Wacht AS BYTE ;Bevat de wacht tijd
; 76543210
PORTA = %00000000 ;Alle PORTA uitgangen uit (laag maken)
TRISA = %11110011 ;PORTA.3 en PORTA.2 omschakelen als uitgang voor de LED's
PORTB_PULLUPS ON ;On-chip pull-up weerstanden actief (voor S1)
CLEAR ;Wis alle RAM geheugen
DELAYMS 500 ;LCD stabilisering
;Hoofdprogramma
CLS ;Alles van het LCD scherm wissen
;1234567890123456
PRINT AT 1, 1, " Stel Focus " ;Plaats tekst op het LCD
PRINT AT 2, 1, " S1 = Save "
REPEAT
Focus = POT Potmeter, Schaal ;Geef nieuw gemeten waarde aan 'Focus'
;1234567890123456
PRINT AT 3, 1, "Focus = sec "
PRINT AT 3, 9, DEC Focus, " " ;Geef potmeterinstelling rechtsonder op LCD weer
UNTIL S1 = LAAG ;Focus is in te stellen totdat op S1 is gedrukt
DELAYMS 25 ;even wachten voor de zekerheid
WHILE S1 = LAAG : WEND ;Wacht tot toets is losgelaten (Zolang S1 laag is...)
;90123456
PRINT AT 1, 9, "Wacht " ;Wijzig tekst op LCD
REPEAT
Wacht = POT Potmeter, Schaal ;Geef nieuw gemeten waarde aan 'Wacht'
;1234567890123456
PRINT AT 4, 1, "Wacht = sec "
PRINT AT 4, 9, DEC Wacht, " " ;Geef potmeterinstelling rechtsonder op LCD weer
UNTIL S1 = LAAG ;Wacht is in te stellen totdat op S1 is gedrukt
DELAYMS 25 ;even wachten voor de zekerheid
WHILE 1 = 1 ;Programma continu uitvoeren
HIGH Focusen
DELAYMS Focus * 1000
HIGH Foto
DELAYMS 10 ; even wachten met loslaten
LOW Focusen
LOW Foto
DELAYMS Wacht * 1000
WEND
END
Edit2: nieuwe code
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Ja zoiets heb ik ook gemaakt voor m'n nikon maar dan met een AVR.
Mogelijk zijn de signalen laag-actief, dus dan moet je hoog een laag omdraaien.
Wat voor camera heb je?
Tinus016
www.tinuselectronics.nl Because DIY Electronics Matters!!!!
klein is fijn
Moderator
Twee optocouplers zijn aan te raden. Ik kreeg nogal wat vage effecten toen ik de focus en trigger rechtstreeks aanstuurde bij mijn A510. Beide zijn active low, en de tor van een opto is genoeg om ze omlaag te trekken.
Met een A560 kan het nog veel simpeler :
http://chdk.wikia.com/wiki/CHDK
Aanrader ! Je kunt op die manier zelfs de timer in de camera programmeren, geen externe hardware nodig.
OF je stelt de camera zo in dat je hem via de usb poort kunt triggeren ( standaard functie in chdk, spanning op de usb poort = trigger )
Mijn A520 kan het helaas niet, maar m'n G7 trigger ik via USB.
http://smdshop.nl/Rosmalen20100313/PICT0019.JPG ( met dank aan Paul voor de foto )
Als je puur timelapse gaat schieten kan het dus 100% in software, behalve als je met motion control wilt gaan werken, dan wil je de cam extern kunnen triggeren.
Tinus016
www.tinuselectronics.nl Because DIY Electronics Matters!!!!
@ Kif bedankt voor de Tip werkt nu perfect!!
@ Sine ook bedankt voor de info maar wil hem stak ook op een afstandje kunnen bedienen met een 433Mhz zendertje dus vandaar 
Foto's en filmpje volgen nog 
Edit Timelapsedemo
Edit2: Op het breadboard
[Bericht gewijzigd door Tinus016 op (12%)]
Ik zie dat je blijkbaar de camera laat autofocussen (gezien de melding op het LCD). Naar mijn mening is dat bij timelapse soms onhandig. Best een handmatige focus gebruiken, dan heb je ook geen last van te weinig licht en andere (auto)focus verstorende elementen. Just my 2 cents.
Tinus016
www.tinuselectronics.nl Because DIY Electronics Matters!!!!
@Sine, O, je bedoelt dat ik hem ook via de USB had kunnen triggeren. na ja volgende keer beter 
@mbbneon en Henry, Um zal het eens proberen.
Op 16 maart 2010 17:19:57 schreef tinus016:
@Sine, O, je bedoelt dat ik hem ook via de USB had kunnen triggeren. na ja volgende keer beter
Jep, en dan nog zou ik eens naar chdk kijken, er zitten veel extra fucties in die je cammetje standaard niet kan.
Pre focussen ( de sluiter half indrukken ) heeft overigens wel degelijk zin, niet voor de focus die je inderdaad het beste handmatig instelt, maar om de sluitertijd te bepalen.
Je kunt je cam bijvoorbeeld in Av mode zetten en de camera aan de hand van het omgevingslichgt de sluitertijd laten bepalen.
Dingen als zonsop- /ondergangen zoals deze kun je bijna niet anders schieten :
Tinus016
www.tinuselectronics.nl Because DIY Electronics Matters!!!!
Ik heb nog even naar dat chdk gekeken maar ik krijg het maar niet aan de praat dus maar even op gegeven En verder wil de countdown in pic basic ook niet egt lukken. Dus wie weet raad?
Dit is wat ik nu heb:
Aftellen:
;12345678901234567890
PRINT AT 3, 1, "Wacht is nog: sec"
REPEAT
PRINT AT 3, 14, Wacht, " "
DEC Wacht
DELAYMS 1000
UNTIL Wacht = 0
RETURN
T werkt wel maar na een lus is de Wacht nul en das nou net niet de bedoeling.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
je bedoel:
t=wacht
repeat
print ...
dec t
delayms 1000
until t <= 0
(merk op: ik schrijf <= 0... mogelijk probeer je later 4.5sec te wachten, en dan wordt ie nooit precies gelijk aan nul! )
Tinus016
www.tinuselectronics.nl Because DIY Electronics Matters!!!!
Aha bedankt! alleen ondervind ik een probleem bij het opgeven van t = Wacht
hij heeft het over variable 'wacht' not found terwijl de wel in de variable lijst staat
Edit: anders om doen maakt ook niet uit dan is enkel de melding anders maar komt op het zelfde neer.
[Bericht gewijzigd door Tinus016 op (24%)]
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Rob,
Bij het initializeren, geeft hij "wacht" een waarde. Met
DELAYMS wacht * 1000werkt dat. Als je dan een lusje maakt waarin "wacht" aftelt, gaat hij de volgende keer fout...
Dus moet je aftellen met een variabele t of zo. Dus
t = wachtIk hoop dat ik dat goed schrijf, want ik spreek al bijna 25 jaar geen basic meer....
Misschien moest je t nog declareren?
Tinus016
www.tinuselectronics.nl Because DIY Electronics Matters!!!!
Nou ik krijg het toch niet voor elkaar dus wil iemand (even) kijken wat ik verkeerd doe?
hier een link naar het volledige programma.
*KLIK*
Fredjuhh
"Ben nog een N00B, maar dat is al aan het veranderen ;)
Ohh je stelt dat symbol t = wacht, en verderop declareer je alles. Je wilt dat ze beide altijd het zelfde zijn?
Dan zet je dat gewoon in je main, en dan zet je gewoon T = Wacht
(Nu probeer je namelijk iets in te stellen, maar er is niet duidelijk wat het moet zijn voor de uC)
Maar kun je wacht niet gewoon overal vervangen voor T? Dit omdat het toch altijd hetzelfde moet zijn volgens je alias 
[Bericht gewijzigd door Fredjuhh op (39%)]
Tinus016
www.tinuselectronics.nl Because DIY Electronics Matters!!!!
Nee kan 'Wacht' niet vervangen voor 'T' want dan is de Wacht(T) na een rondje nul en wacht hij dus niet meer en zal dus constant foto's maken. Of zie ik dat verkeerd?
Fredjuhh
"Ben nog een N00B, maar dat is al aan het veranderen ;)
Ja, maar jij zet boven in dat wacht = T dus wat jij dan nu zegt, is dat wacht altijd hetzelfde als T is, dus kun je wacht net zo goed als T schrijven.
MAAR als je ergens in je programma T gelijk aan wacht wilt maken, dan zet je daar wacht = T
Dus met andere woorden: haal die symbol t = wacht gewoon weg 
M.a.w. verwijder deze:
SYMBOL T = Wacht <<<<<<<<<<<<<<<<<<< dit pikt hij om een of andere reden niet.[Bericht gewijzigd door Fredjuhh op (17%)]
Klopt, 'wacht' is op dat moment niet gedefineerd.
Gebruik Symbol wacht = 10 (of andere waarde)
En zet meteen onder Aftellen: het volgende
T = wacht
Daarmee wordt T weer gereset voor het begin van het aftellen.
Verder zit er nog een bug in, GOSUB hoofdprogramma onderaan de hoofdlus. Dat gaat de stack niet leuk vinden, Na een paar keer loopt het programma vast.
Gebruik GOTO hoofdprogramma, maar dat is ook niet netjes.
Nog beter is je hele hoofdprogramma in een While 1=1 en Wend te zetten.
Deze vergelijking is altijd waar en het programma blijf continue lopen.
Fredjuhh
"Ben nog een N00B, maar dat is al aan het veranderen ;)
En als je nu eens "wacht = 10 net boven je main lus zet, en SYMBOL wacht = 10
laat vervallen??
Want je bent weer tegenstrijdige dingen aan het doen: je zegt dus eerst wacht moet altijd 10 zijn, maar later wil je wacht dus wel weer wijzigen.... DAT GAAT NIET he 
EDIT: nu gebruik je een DIM en een SYMBOL voor een en dezelfde naam, dat vindt je compiler niet leuk.
Ik ben niet van plan om je hele proggie door te gaan spitten, maar als je ergens in je programma wacht = 10 neerzet (op de juiste plek), dan gaat het vast en zeker lukken 