Timer i PIC
"Ta det problem du har nu t.ex. Det enklaste är att göra ett mini PIC-Basic program med enbart ett "Pause 60000" kommando och titta på vilken assemblerkod som genereras. Det skulle direkt tala om varför tiderna blir fel !"
Kunde likväl vara grekiska, du har kanse kunskaper att tala om vad som är fel.
Det finns inte mycket på svenska om assembler och ska jag börja lära mig engelska så lär jag inte bli klar med detta projet.
Hade jag vetat detta för 40 år seda så hade det varit enklare, nu får jag fråga ungdomen om tips och hoppas på ett bra svar.
Kunde likväl vara grekiska, du har kanse kunskaper att tala om vad som är fel.
Det finns inte mycket på svenska om assembler och ska jag börja lära mig engelska så lär jag inte bli klar med detta projet.
Hade jag vetat detta för 40 år seda så hade det varit enklare, nu får jag fråga ungdomen om tips och hoppas på ett bra svar.
Senast redigerad av tusse 27 september 2005, 09:46:21, redigerad totalt 1 gång.
tusse
Det låter ju prima med 58 sekunder.
öka då kanske till pause 62000 och
i = 0
WHILE i < 60
pause 62000
WEND
Borde bli runt 60minuter.
Sätt sedan det där i en funktion som du kan anropa när du trycker dig fram med dina knappar. När du tar fotot, så anropar du den här funktionen.
Borde inte det funka?
Det låter ju prima med 58 sekunder.
öka då kanske till pause 62000 och
i = 0
WHILE i < 60
pause 62000
WEND
Borde bli runt 60minuter.
Sätt sedan det där i en funktion som du kan anropa när du trycker dig fram med dina knappar. När du tar fotot, så anropar du den här funktionen.
Borde inte det funka?
Visst ! Men då måste du visa lite kod... 
Gör ett mini-program, med bara ett "pause 60000" kommando (om det går). Se till att assembler filen sparas (behöver inte alltid vara default, vet inte hur PIC Basic gör, du får kolla det). Posta ASM filen här (om den inte blir tokstor!). Sen får vi se...
> Kunde likväl vara grekiska,
Jo, och just assemblerkoden från en *kompilator* är nog mer grekiska än nödvändigt, den är ju inte primärt avsedd att vara lättläst. Men, en liten snutt som genereras av ett enstaka Basic kommando bör man nog kunna förstå, det är väldigt praktiskt för att få bättre förståelse för vad kompilatorn har för sig.

Gör ett mini-program, med bara ett "pause 60000" kommando (om det går). Se till att assembler filen sparas (behöver inte alltid vara default, vet inte hur PIC Basic gör, du får kolla det). Posta ASM filen här (om den inte blir tokstor!). Sen får vi se...
> Kunde likväl vara grekiska,
Jo, och just assemblerkoden från en *kompilator* är nog mer grekiska än nödvändigt, den är ju inte primärt avsedd att vara lättläst. Men, en liten snutt som genereras av ett enstaka Basic kommando bör man nog kunna förstå, det är väldigt praktiskt för att få bättre förståelse för vad kompilatorn har för sig.
sodjan>>
; PicBasic Pro Compiler 2.43, from www.sonsivri.cjb.net UIN:100245565 sonsivri@hotmail.com
PM_USED EQU 1
INCLUDE "16F628.INC"
RAM_START EQU 00020h
RAM_END EQU 0014Fh
RAM_BANKS EQU 00003h
BANK0_START EQU 00020h
BANK0_END EQU 0007Fh
BANK1_START EQU 000A0h
BANK1_END EQU 000EFh
BANK2_START EQU 00120h
BANK2_END EQU 0014Fh
EEPROM_START EQU 02100h
EEPROM_END EQU 0217Fh
R0 EQU RAM_START + 000h
R1 EQU RAM_START + 002h
R2 EQU RAM_START + 004h
R3 EQU RAM_START + 006h
R4 EQU RAM_START + 008h
R5 EQU RAM_START + 00Ah
R6 EQU RAM_START + 00Ch
R7 EQU RAM_START + 00Eh
R8 EQU RAM_START + 010h
FLAGS EQU RAM_START + 012h
GOP EQU RAM_START + 013h
RM1 EQU RAM_START + 014h
RM2 EQU RAM_START + 015h
RR1 EQU RAM_START + 016h
RR2 EQU RAM_START + 017h
_PORTL EQU PORTB
_PORTH EQU PORTA
_TRISL EQU TRISB
_TRISH EQU TRISA
INCLUDE "TABORT.MAC"
INCLUDE "PBPPIC14.LIB"
PAUSE?C 0EA60h
; PicBasic Pro Compiler 2.43, from www.sonsivri.cjb.net UIN:100245565 sonsivri@hotmail.com
PM_USED EQU 1
INCLUDE "16F628.INC"
RAM_START EQU 00020h
RAM_END EQU 0014Fh
RAM_BANKS EQU 00003h
BANK0_START EQU 00020h
BANK0_END EQU 0007Fh
BANK1_START EQU 000A0h
BANK1_END EQU 000EFh
BANK2_START EQU 00120h
BANK2_END EQU 0014Fh
EEPROM_START EQU 02100h
EEPROM_END EQU 0217Fh
R0 EQU RAM_START + 000h
R1 EQU RAM_START + 002h
R2 EQU RAM_START + 004h
R3 EQU RAM_START + 006h
R4 EQU RAM_START + 008h
R5 EQU RAM_START + 00Ah
R6 EQU RAM_START + 00Ch
R7 EQU RAM_START + 00Eh
R8 EQU RAM_START + 010h
FLAGS EQU RAM_START + 012h
GOP EQU RAM_START + 013h
RM1 EQU RAM_START + 014h
RM2 EQU RAM_START + 015h
RR1 EQU RAM_START + 016h
RR2 EQU RAM_START + 017h
_PORTL EQU PORTB
_PORTH EQU PORTA
_TRISL EQU TRISB
_TRISH EQU TRISA
INCLUDE "TABORT.MAC"
INCLUDE "PBPPIC14.LIB"
PAUSE?C 0EA60h
sodjan skrev:Vi lägger ner det...
Det här är någon pre-assemblerfil. "PAUSE?C 0EA60h" kommer sannolikt att expanderas av något senare steg innan den slutgiltiga assembler koden är färdig.
Skit samma, du verkar inte behöva någon speciell noggranhet i alla fall...
Kan det var detta som saknas?
NOLIST
; PicBasic Pro Compiler 2.43, from www.sonsivri.cjb.net UIN:100245565 sonsivri@hotmail.com
PAUSE?C macro Cin
if (high (Cin) == 0)
MOVE?CA Cin
L?CALL PAUSE
else
MOVE?CB high (Cin), R1 + 1
MOVE?CA low (Cin)
L?CALL PAUSEL
endif
endm
PAUSE_USED = 1
LIST
Det är möjligt att jag kan rucka på tiden lite men en timme ska vara samma tid varje gång.
Om man kan starta en av de 3 inbyggda timer-modulerna i picbasic så kan du göra det ganska snyggt.
Timer1 är 16-bitars så jag utgår ifrån den.
Här kommer lite "princip kod":
Först ska du göra:
Total=0
GammalTid=0
Sekunder=0
Konfigurera TMR1 utan prescaler och nollställ den.
Denna rutin kan du anropa så ofta du vill, lämpligtvis i en loop där du kollar om Sekunder har fått rätt värde:
Tid=TMR1
Skillnad=Tid-GammalTid
GammalTid=Tid
Total=Total+Skillnad
if Total>1000000 then Total=Total-1000000 : Sekunder=Sekunder+1
Tid,Skillnad,GammalTid ska vara 16-bitars unsigned
Total ska vara 24-bitars unsigned eller 32-bitars unsigned
Principen är att man låter den inbyggda timern snurra fritt och slå runt.
Så länge man inte nollställer den så kan man ha koll på tiden.
I exemplet är 1 sekund 1000000 klockcycler.
Timer1 är 16-bitars så jag utgår ifrån den.
Här kommer lite "princip kod":
Först ska du göra:
Total=0
GammalTid=0
Sekunder=0
Konfigurera TMR1 utan prescaler och nollställ den.
Denna rutin kan du anropa så ofta du vill, lämpligtvis i en loop där du kollar om Sekunder har fått rätt värde:
Tid=TMR1
Skillnad=Tid-GammalTid
GammalTid=Tid
Total=Total+Skillnad
if Total>1000000 then Total=Total-1000000 : Sekunder=Sekunder+1
Tid,Skillnad,GammalTid ska vara 16-bitars unsigned
Total ska vara 24-bitars unsigned eller 32-bitars unsigned
Principen är att man låter den inbyggda timern snurra fritt och slå runt.
Så länge man inte nollställer den så kan man ha koll på tiden.
I exemplet är 1 sekund 1000000 klockcycler.
tusse
Tja, jag vet inte riktigt vad som kan räcka eller vilka val du vill ha. 60 minuter max är ju rätt stadigt i alla fall =)
Jag blev lite nyfiken, hur kopplar du in din uppfinning sen så att den styr själva exponeringen på din kamera, samt vad är det du skall fotografera?
Men när jag funderat lite, i och med att du vill ha långa slutartider, hade det inte vart nice med att härma en bulb funktion då? Så att du själv kan välja dina slutartider hur länge eller kort du vill utan att röra kameran.
Dra en längre sladd från kameran till din pryl så att den inte rubbas det minsta när du grejar. Då skulle du kunna sätta exempelvis en 1:a in på ett ben på PIC:en med en liten switch. Ditt PICBasic program kollar hela tiden värdet på ingånsbenet och skickar i sin tur ut en etta på ett annat ben som du kan antingen styra kameran direkt med, eller koppla till ett relä för att styra nåt större.
eller är jag helt ute och cyklar? Jag antar att du vill ha det ganska enkelt också...
Tja, jag vet inte riktigt vad som kan räcka eller vilka val du vill ha. 60 minuter max är ju rätt stadigt i alla fall =)
Jag blev lite nyfiken, hur kopplar du in din uppfinning sen så att den styr själva exponeringen på din kamera, samt vad är det du skall fotografera?
Men när jag funderat lite, i och med att du vill ha långa slutartider, hade det inte vart nice med att härma en bulb funktion då? Så att du själv kan välja dina slutartider hur länge eller kort du vill utan att röra kameran.
Dra en längre sladd från kameran till din pryl så att den inte rubbas det minsta när du grejar. Då skulle du kunna sätta exempelvis en 1:a in på ett ben på PIC:en med en liten switch. Ditt PICBasic program kollar hela tiden värdet på ingånsbenet och skickar i sin tur ut en etta på ett annat ben som du kan antingen styra kameran direkt med, eller koppla till ett relä för att styra nåt större.
eller är jag helt ute och cyklar? Jag antar att du vill ha det ganska enkelt också...
Så här ser texten ut på fotosidan.se:
Fjärrkontroll till Canon
Tänkte försöka bygga en radiostyrning till min Canon 10D och sitter och funderar över om man med radiolänken skulle kunna använda en timer för Bulb-tid, nu skulle jag kunna programmera in 15 stycken fasta tider som jag enkelt kan ändra med en omkopplare.
Nu är frågan vilka tider skulle man välja?
Som du ser så har jag försökt att utveckla det med lite fler tider men annars så är vi nog inne på samma ide.
Inkoppling till själva kameran blir samma som min IR-styrning. http://hem.bredband.net/berte/Canon/ircanon.htm
Fjärrkontroll till Canon
Tänkte försöka bygga en radiostyrning till min Canon 10D och sitter och funderar över om man med radiolänken skulle kunna använda en timer för Bulb-tid, nu skulle jag kunna programmera in 15 stycken fasta tider som jag enkelt kan ändra med en omkopplare.
Nu är frågan vilka tider skulle man välja?
Som du ser så har jag försökt att utveckla det med lite fler tider men annars så är vi nog inne på samma ide.
Inkoppling till själva kameran blir samma som min IR-styrning. http://hem.bredband.net/berte/Canon/ircanon.htm
Senast redigerad av tusse 27 september 2005, 21:26:40, redigerad totalt 1 gång.