Author |
Topic |
|
mullemeck
Starting Member
2 Posts |
Posted - 2005/06/14 : 22:36:40
|
Hej, har blivit med en 24 volts klocka modell stor (ca 1m)finns ingen styrning till den, men läste någor gammalt sido-spår här, om någon som fixat en sådan, (men saken gällde något annat) så nu undrar jag om nån kunde hjälpa mig . Vet att det skall vara 24v dc och den skall få en impuls exakt! en gång i minuten samt polvända + - varje gång. spolen har ca 1,3 kilo ohm Hur löser man detta billigast?
Flyttar den till DIY till att börja med /Z |
mulle |
|
mounte
Member
73 Posts |
Posted - 2005/06/15 : 01:21:35
|
Det kan man ju göra på mer eller mindre exotiska sätt ...
Just nu är jag inne på FPGA, så ett enkelt litet "program" som via en kristall med lämpligt värde räknar tiden, vid rätt tidpunkt så låter man t.ex. ett relä switcha polerna (alternativt så låter man FPGAn via en opamp ställa om polerna)
Sedan fick jag en tanke att man kan ju köpa en billig radio-kontrollerad klocka och plocka ut signalen då "minutvisaren" ändrar läge och då detta sker göra polskiftet ...
men det kommer säkert någon med en fullständig lösning inom en snar framtid, håll ut och lycka till! |
|
|
CF
Member
63 Posts |
Posted - 2005/06/15 : 04:04:19
|
Hej
En arbetskompis hittade exakt en sådan gammal skol/järnvägsstations klocka tillverkad av Ericsson i en kontainer utanför Ericsson i Karlskrona. (Jobbade på ericsson i Karlskrona då). Det var ju lite av ett kultur arv så vi bestäm,de oss för att få liv i den. jag och en annan kille satte ihop en styrning baserad på en PIC 16F84 med en referens klocka från en AXE. Vi använde -48v spänningen från vår labb nät nedreglerad för att styra klockan en gång i minuten måste man polvända 24volt. Detta gjorde vi med ett relä som som faktikt slutade fungera för en vecka sedan.
Om du vill kan jag leta fram ett skema och mjukvaran till pic. För de som jobbar på EPK ex epkpeng finns klockan att beskåda inne i Peters och Chads bur på plan 5.
Vår konstruktion är inte helt 100% den klarar inte sommar vintertid automatiskt och den drar sig cirka 1 sekund per halvår.
/// CF |
Edited by - CF on 2005/06/15 07:25:19 |
|
|
CF
Member
63 Posts |
Posted - 2005/06/15 : 05:49:11
|
Jag hittade mjukvaran till picen hoppas att det är den senaste! Tror inte att jag har något schema. Vi kopplade nog upp allt på ett veroboard. Skall höra med min kollega om han har nått hand ritat schema kvar eller om han kommer ihåg kristallens frekvens.
mvh ///CF
;*********************************************************************** ; ; PIC 16F84 clock controll S/W by CF ; ; ; RA0 OUTPUT ; RA1 OUTPUT ; RA2 OUTPUT ; RA3 OUTPUT ; RA4 OUTPUT ; ; RB0 OUTPUT Second Indicator toggles on and off ; RB1 OUTPUT 8 KHz callibrating point for ; RB2 OUTPUT Minute Indicator toggles on and off ; RB3 INPUT Stop at low and start running at high ; RB4 INPUT Fast forward at low first toggle minute ; ; RB5 OUTPUT ; RB6 OUTPUT ; RB7 OUTPUT ;*********************************************************************** #include "p16f84.inc"
#define SEL_BANK_0 bcf STATUS,RP0 ; Select Bank 0 #define SEL_BANK_1 bsf STATUS,RP0 ; Select Bank 1 #define CARRY STATUS,C #define ZERO STATUS,Z
processor 16F84A __FUSES _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF
;******************************************************** ; <<<<< Dynamic Memory variables >>>>>>>>>>>>>>>>>>>>>>> ;******************************************************** RAMbase equ 12 cblock RAMbase S_Temp W_Temp Flags hiByte loByte seconds stop fast stopshift fastshift faststate ; 0 = no fast 1 = first fast 2 = repeat fast repeatfast endc
;******************************************************** ; <<<<< Common macros >>>>>>>>>>>>>>>>>>>>>>> ;******************************************************** TOGGLE_PIN MACRO WHICH_PORT,WHICH_PIN LOCAL TOGGLE_PIN10, TOGGLE_END BTFSC WHICH_PORT,WHICH_PIN ; is the pin high ? GOTO TOGGLE_PIN10 ; yes, clear it BSF WHICH_PORT,WHICH_PIN ; no, so set it GOTO TOGGLE_END TOGGLE_PIN10: BCF WHICH_PORT,WHICH_PIN ; clear the pin TOGGLE_END: ENDM
;******************************************************** ; <<<<< Start of memory/program >>>>>>>>>>>>>>>>>>>>>>> ;******************************************************** org 0 call initPic goto Main
;******************************************************** ; <<<<< INTERRUPT SERVICE ROUTINE >>>>>>>>>>>>>>>>>>>>>>> ;********************************************************
org 4 Interrupt_Vector if (Interrupt_Vector != 0x004 ) ERROR "Warning Interrupts must start at address 0x004" endif movwf W_Temp swapf STATUS,W movwf S_Temp ; push registers SEL_BANK_0
Disable_Int bcf INTCON,GIE ; Disable all Interrupts btfsc INTCON,GIE ; Are Interrupts disabled ? goto Disable_Int ; NO, try again btfsc INTCON,INTF ; Skip PORTB0/Interrupt? goto RB0_Int ; NO, goto RB0
btfsc INTCON,T0IF ; Skip Timer Overflow Interrupt ? goto Timer_Int ; NO, goto Timer Interrupt
btfsc INTCON,RBIF ; Skip Interrupt on change? goto RBChange ; NO, goto Timer Interrupt
; Check what caused the interrupt ; and chain to the propper ISR ; ; Add code here for the rotary encoder
;******************************************************** ; <<<<< INT ON CHANGE ISR >>>>>>>>>>>>>>>>>>>>> ;******************************************************** RBChange swapf S_Temp,W movwf STATUS ; Return STATUS swapf W_Temp,F swapf W_Temp,W ; Return W
bcf INTCON,RBIF ; clear interrupt occured flag bcf INTCON,RBIE ; enable interrupt on change retfie ; No ISR implemented yet
;******************************************************** ; <<<<< Timer ISR >>>>>>>>>>>>>>>>>>>>> ;******************************************************** Timer_Int TOGGLE_PIN PORTB,1 incf loByte ; Increase the counter btfsc STATUS,Z incf hiByte movlw b'01000000' subwf loByte,0 btfss STATUS,Z goto end_int ;******************************************************** ; <<<<< Debounce Stop >>>>>>>>>>>>>>>>>>>>> ;******************************************************** bcf STATUS,C btfss PORTB,3 bsf STATUS,C rlf stopshift movlw 0x00 subwf stopshift,0 btfss STATUS,Z goto isstop movlw 0x00 movwf stop isstop movlw 0xFF subwf stopshift,0 btfss STATUS,Z goto endstop movlw 0x01 movwf stop endstop
;******************************************************** ; <<<<< Debounce fast >>>>>>>>>>>>>>>>>>>>> ;******************************************************** bcf STATUS,C btfss PORTB,4 bsf STATUS,C rlf fastshift movlw b'00000011' andwf fastshift,1
movlw 0x00 subwf fastshift,0 btfss STATUS,Z goto isfast movlw 0x00 movwf fast isfast movlw 0x03 subwf fastshift,0 btfss STATUS,Z goto endfast bcf PORTB,0 clrf hiByte clrf seconds movlw 0x00 subwf fast,0 btfss STATUS,Z goto nextState1 incf fast bcf PORTB,0 TOGGLE_PIN PORTB,2
movlw d'45' movwf repeatfast goto endfast
nextState1 movlw 0x01 subwf fast,0 btfss STATUS,Z goto endfast decfsz repeatfast goto endfast
TOGGLE_PIN PORTB,2
clrf hiByte clrf seconds movlw d'20' movwf repeatfast
endfast movlw b'00011111' subwf hiByte,0 btfss STATUS,Z goto end_int incf seconds TOGGLE_PIN PORTB,0 clrf loByte clrf hiByte end_int swapf S_Temp,W movwf STATUS ; Return STATUS swapf W_Temp,F swapf W_Temp,W ; Return W
bcf INTCON,T0IF ; clear interrupt occured flag
retfie ; No timers implemented yet
;******************************************************** ; <<<<< RB0 INT ISR >>>>>>>>>>>>>>>>> ;********************************************************´ RB0_Int
swapf S_Temp,W movwf STATUS ; Return STATUS swapf W_Temp,F swapf W_Temp,W ; Return W
bcf INTCON,INTF ; clear interrupt occured flag bcf INTCON,INTE ; enable RB0/INT interrupt retfie ; Return setting GIE
;******************************************************** ; <<<<< Set up pic reg and port>>>>>>>>>>>>>>>>>>>>>>>>>> ;******************************************************** initPic SEL_BANK_1 ; select bank 1
bcf OPTION_REG,T0CS ; source timer: internal clock ; set up the timer 0 movlw b'00011000' movwf TRISB ; Port B, bit 0 input
movlw b'00000000' movwf TRISA ; Port A, bit 0 input bsf OPTION_REG,PSA bcf OPTION_REG,PS0 bcf OPTION_REG,PS1 bcf OPTION_REG,PS2
SEL_BANK_0 ; select bank 0
bcf INTCON,INTE ; Disable RB0/INT bcf INTCON,RBIE ; Disable RB Port change bsf INTCON,T0IE ; Enable TMR0 Interrupt
; Disable all interrupts that is of no interrest to us return
;******************************************************** ; <<<<< Main Program >>>>>>>>>>>>>>>>> ;********************************************************
Main movlw 0 clrf loByte clrf hiByte clrf seconds clrf stop clrf fast clrf stopshift clrf fastshift bsf INTCON,GIE ; Enable Interrupts Global
LOOP movlw d'60' ; Check if we had a minute overflow subwf seconds,0 btfsc STATUS,Z call newMinute movlw d'1' subwf stop,0 btfss STATUS,Z goto LOOP clrf hiByte clrf seconds bsf PORTB,0
goto LOOP ; not my address
;******************************************************** ; <<<<< Main Program >>>>>>>>>>>>>>>>> ;******************************************************** newMinute movlw 0x00 movwf seconds TOGGLE_PIN PORTB,2 return
END
|
Edited by - CF on 2005/06/15 05:51:47 |
|
|
CF
Member
63 Posts |
Posted - 2005/06/15 : 07:26:20
|
Min kollega hadde en enkel ritning som han skall to kort på sedan postar vi denna här i forumet.
///CF |
|
|
mullemeck
Starting Member
2 Posts |
Posted - 2005/06/15 : 20:09:50
|
Ja det löser sig nog , ni verkar ju kunna det här snabba svar må ja säga håller ut en stund till innan jag bygger ihop nått! |
mulle |
|
|
|
Topic |
|
|
|