Häftig klocka! (kedjeroterande motor)

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Häftig klocka! (kedjeroterande motor)

Inlägg av PopUnoNkoK »

Netrunner: Lite läcker ide, det får bli en annan, senare, version.

Sodjan: Näedu! :) Kommer inte att programmera in någon kalender. Jag får vackert lyfta på kedjan och vrida till den rätt manuellt två ggr per år.


Nu till några frågor.

När jag i koden testar att bara driva motorn ett varv och sedan stanna så stämmer det inte med mina uträkningar.
När jag nu lyckats få den att köra ett varv och sedan stanna så kör den 2048helsteg.

Hur ska jag med denna info komma fram till det svaret.
•Step angle: 5.625 x 1/64
•Reduction ratio: 1/64
Alltså så här ser det ut just nu.
Min kod där jag byter vilket "steg" som ska skickas till stegmotorn har 8 steg. Men det är med halvsteg så det motsvarar bara 4 helsteg.

Jag räknar nu varje gång den nollar, börjar om från början på denna "stegserie".
Alltså när jag räknar så motsvarar varje räkning 4 helsteg.

Sedan har jag två register. Ett som som räknar ner från 128.
Sedan ett som räknar ner från 4, ett steg varjegång den andra räknaren når noll.

Detta blir enligt mig: 4*128*4=2048.

Hur jag kommit fram till denna siffra är att när jag räknade själv så fick jag det till att ett varv skulle vara 4096 steg. När jag sedan testade så såg jag att den gick 2 varv.

Så om någon orkar och vill, hur gör jag för att räkna ut antalet steg på ett varv via mattematisk väg.

MVH Peter



PS, det här med att bara snurra ett varv är bara för att testa och lära känna stegmotorn, inget som kommer vara kvar när jag kör den som klocka.

Koden som den ser ut nu:

Kod: Markera allt

;******************************************************************************
;   This file is a basic code template for object module code                 *
;   generation on the PIC12F629. This file contains the                       *
;   basic code building blocks to build upon.                                 *
;                                                                             *
;   Refer to the MPASM User's Guide for additional information on             *
;   features of the assembler and linker (Document DS33014).                  *
;                                                                             *
;   Refer to the respective PIC data sheet for additional                     *
;   information on the instruction set.                                       *
;                                                                             *
;******************************************************************************
;                                                                             *
;    Filename:      xxx.asm                                                   *
;    Date:                                                                    *
;    File Version:                                                            *
;                                                                             *
;    Author:                                                                  *
;    Company:                                                                 *
;                                                                             *
;                                                                             *
;******************************************************************************
;                                                                             *
;    Files required: P12F629.INC                                              *
;                                                                             *
;                                                                             *
;                                                                             *
;******************************************************************************
;                                                                             *
;    Notes:                                                                   *
;                                                                             *
;******************************************************************************

;------------------------------------------------------------------------------
; PROCESSOR DECLARATION
;------------------------------------------------------------------------------

     LIST      P=12F629              ; list directive to define processor
     #INCLUDE <P12F629.INC>          ; processor specific variable definitions


;------------------------------------------------------------------------------
;
; CONFIGURATION WORD SETUP
;
; The 'CONFIG' directive is used to embed the configuration word within the 
; .asm file. The lables following the directive are located in the respective 
; .inc file.  See the data sheet for additional information on configuration 
; word settings.
;
;------------------------------------------------------------------------------

    __CONFIG   _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT 

;------------------------------------------------------------------------------
; VARIABLE DEFINITIONS
;------------------------------------------------------------------------------


;4096 steps för ett helvarv.
;Konstanta variabler
TMRO_EXTRA_COUNT	EQU		.3	;229

MISC_C_1_VALUE		EQU		.128
MISC_C_2_VALUE		EQU		.4




; example of using Shared Uninitialized Data Section
INT_VAR     UDATA_SHR   0x20   
W_TEMP      RES     1             ; variable used for context saving 
STATUS_TEMP RES     1             ; variable used for context saving

TMRO_EXTRA	RES		1				;TMROs extraräknare
STEP_COUNTER RES	1				;Håller koll på vilket "steg" som ska användas

MISC_COUNTER_1	RES	1
MISC_COUNTER_2	RES	1

;------------------------------------------------------------------------------
; EEPROM INITIALIZATION
;
; The 12F629 has 128 bytes of non-volatile EEPROM, starting at address 0x2100
; 
;------------------------------------------------------------------------------

DATAEE    CODE  0x2100
    DE    "MCHP"          ; Place 'M' 'C' 'H' 'P' at address 0,1,2,3

;------------------------------------------------------------------------------
; OSCILLATOR CALIBRATION VALUE
;------------------------------------------------------------------------------

OSC       CODE    0x03FF

; Internal RC calibration value is placed at location 0x3FF by Microchip as
; a 0xADDLW K instruction, where the K is a literal value to be loaded into 
; the OSCCAL register.  

;------------------------------------------------------------------------------
; RESET VECTOR
;------------------------------------------------------------------------------

RESET_VECTOR  CODE      0x0000 ; processor reset vector
        GOTO    START          ; go to beginning of program

;------------------------------------------------------------------------------
; INTERRUPT SERVICE ROUTINE
;------------------------------------------------------------------------------

INT_VECTOR    CODE    0x0004  ; interrupt vector location
        MOVWF   W_TEMP        ; save off current W register contents
        MOVF    STATUS,w      ; move status register into W register
        MOVWF   STATUS_TEMP   ; save off contents of STATUS register

; isr code can go here or be located as a call subroutine elsewhere

		BCF		INTCON, T0IF	;Rensa TMRO Interruptflaggan

		BTFSS	GPIO, 5			;Kolla om knappen är intryckt
		GOTO	intryckt
		
		BANKSEL	TMRO_EXTRA		;Hantera Extraräknaren
		DECFSZ	TMRO_EXTRA,1
		GOTO	ISR_SLUT		;Om den inte är noll än, skippa resten av ISRen.
		MOVLW	TMRO_EXTRA_COUNT;Annars, återställ extraräknaren och fortsätt
		MOVWF	TMRO_EXTRA
intryckt			
		NOP
		BANKSEL	STEP_COUNTER
		MOVFW	STEP_COUNTER		;Kolla vilken "steg" vi är på
		BANKSEL	PCL
		CALL	rulla_bitar			;Hämta rätt bitar från LookUpTable
		BANKSEL	GPIO
		MOVWF	GPIO				;Lägg ut till världen

		BANKSEL	STEP_COUNTER
		INCF	STEP_COUNTER, F		;Öka så vi är redo för nästa "steg"
	
		NOP

		MOVLW	.8					;KOlla om vi är vid det sista "steget"
		BSF		STATUS,C
		SUBWF	STEP_COUNTER, 0		;Ta bort antalet steg från Step_Counter
		BTFSS	STATUS,C			;Blev det noll, alltså sista steget.
		GOTO	ISR_SLUT			;Nej, fortsätt som vanligt
		CLRF	STEP_COUNTER		;Ja, Rensa Step_Counter så att vi börjar om från början
;------------------- Denna del bara för att testa ett varv.
		BANKSEL	MISC_COUNTER_1

		DECFSZ	MISC_COUNTER_1		
		GOTO	ISR_SLUT

		MOVLW	MISC_C_1_VALUE		;Återställ ettan
		MOVWF	MISC_COUNTER_1

		BANKSEL	MISC_COUNTER_2

		DECFSZ	MISC_COUNTER_2
		GOTO	ISR_SLUT

		MOVLW	MISC_C_2_VALUE		;Återställ tvåan
		MOVWF	MISC_COUNTER_2

		BANKSEL	INTCON
		MOVLW	b'00000000'		;Slå på Global interrupt OCH TMRO Interuppt.
		MOVWF	INTCON

		
		


		NOP




ISR_SLUT
        MOVF    STATUS_TEMP,w ; retrieve copy of STATUS register
        MOVWF   STATUS        ; restore pre-isr STATUS register contents
        SWAPF   W_TEMP,f
        SWAPF   W_TEMP,w      ; restore pre-isr W register contents
        RETFIE                ; return from interrupt

;------------------------------------------------------------------------------
; MAIN PROGRAM
;------------------------------------------------------------------------------

MAIN_PROG     CODE

START

;------------------------------------------------------------------------------
; OSCCAL RESTORE (not required if internal OSC is not used)
;------------------------------------------------------------------------------

        errorlevel -302
        BSF     STATUS,RP0    ; set file register bank to 1 
        CALL    0x3FF         ; retrieve factory calibration value
        MOVWF   OSCCAL        ; update register with factory cal value 
        BCF     STATUS,RP0    ; set file register bank to 0
        errorlevel +302
        
;------------------------------------------------------------------------------
; PLACE USER PROGRAM HERE
;------------------------------------------------------------------------------

SETUP

		BANKSEL	INTCON
		MOVLW	b'10100000'		;Slå på Global interrupt OCH TMRO Interuppt.
		MOVWF	INTCON

		BANKSEL	OPTION_REG
		MOVLW	b'00000000'		;Här sätter vi prescaler på de sista 3 bitarna
		MOVWF	OPTION_REG

		BANKSEL	TRISIO
		MOVLW	b'00100000'			
		MOVWF	TRISIO			;Sätter alla I/O till utgångar, Utom MCLR
		BANKSEL	CMCON
		MOVLW	07h
		MOVWF	CMCON

		BANKSEL	TMRO_EXTRA		;rensa extraräknaren
		MOVLW	TMRO_EXTRA_COUNT
		MOVWF	TMRO_EXTRA

		BANKSEL	STEP_COUNTER
		CLRF	STEP_COUNTER





		BANKSEL	GPIO
		MOVLW	b'00000001'
		MOVWF	GPIO			;Sätter första pinnen hög

		BANKSEL	MISC_COUNTER_1
		MOVLW	MISC_C_1_VALUE
		MOVWF	MISC_COUNTER_1

		BANKSEL	MISC_COUNTER_2
		MOVLW	MISC_C_2_VALUE
		MOVWF	MISC_COUNTER_2
		


MAIN_LOOP
		NOP
		GOTO	MAIN_LOOP



;---------------------------------------------------------------------------------

rulla_bitar		ADDWF PCL,F                  ; Hoppa till rätt "Steg" med värdet i w.
				RETLW b'00000001'			;Halvsteg      
				RETLW b'00000011' 
				RETLW b'00000010' 
				RETLW b'00000110' 
				RETLW b'00000100'                
				RETLW b'00010100' 
				RETLW b'00010000' 
				RETLW b'00010001'     

			;	RETLW b'11111110'			;Halvsteg      
			;	RETLW b'11111100' 
			;	RETLW b'11111101' 
			;	RETLW b'11111001' 
			;	RETLW b'11111011'                
			;	RETLW b'11101011' 
			;	RETLW b'11101111' 
			;	RETLW b'11101110'                



;---------------------------------------------------------------------------------


;---------------------------------------------------------------------------------		



        END                       ; directive 'end of program'

PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Häftig klocka! (kedjeroterande motor)

Inlägg av PopUnoNkoK »

Nu har jag fräst till denna. Det blev att byta till PIC 16F690 för att få nog med pinnar för kristall, 4utgångar och en ingång till en knapp.

La upp lite bilder i "senaste kretskorts" tråden. Här finns dom

Jag har fortfarande problem med uträkningen av hur många pulser 1 varv ska vara. Frågan jag ställde i posten här ovan alltså. Jag gör ett till försök här annars får jag starta en ny tråd med en mer allmån fråga om växlade stegmotorer.

Jag är dock orolig att jag valde en lite knasig kristall. 32.768 kHz. Jag kom på det innan jag lödde dit den men jag vill testa i alla fall, har aldrig använt extern kristall.

MVH Peter
Användarvisningsbild
Mr. Pink
Inlägg: 109
Blev medlem: 18 april 2008, 14:49:44
Ort: Belmont, Kalifornien, USA

Re: Häftig klocka! (kedjeroterande motor)

Inlägg av Mr. Pink »

Fick min 3d skrivare för ett par veckor sen och kom ihåg denna tråden vilket resulterade i ett projekt. :vissla:

Till er som har tillgång till 3d skrivare. :mrgreen:
http://www.thingiverse.com/thing:29711
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
CPMS
Inlägg: 1530
Blev medlem: 6 december 2010, 20:34:36
Ort: Långsele, Västernorrland

Re: Häftig klocka! (kedjeroterande motor)

Inlägg av CPMS »

Tar du beställningar på satser förutom uret? :)
Användarvisningsbild
MadModder
Co Admin
Inlägg: 31388
Blev medlem: 6 september 2003, 13:32:07
Ort: MadLand (Enköping)
Kontakt:

Re: Häftig klocka! (kedjeroterande motor)

Inlägg av MadModder »

Varför är det ingen som reagerar på att den snurrar åt fel håll? Det blir ju helt bakvänt. Siffrorna borde sitta i samma ordning som på en urtavla, och kedjan snurra åt vänster.
Användarvisningsbild
Mr. Pink
Inlägg: 109
Blev medlem: 18 april 2008, 14:49:44
Ort: Belmont, Kalifornien, USA

Re: Häftig klocka! (kedjeroterande motor)

Inlägg av Mr. Pink »

Det går ju att få tag på baklängesverk också som är gjorda för frisörsalongsur.

Jag är väl inte så jättesugen att ta beställningar. Blir ju en hel helgs printande då det tar ca 50min skrivtid för bara 15st länkar.
Annars kan jag varmt rekommendera en 3d-skrivare. Roligare leksak får man leta efter. En helt ny värd har öppnat sig för mig! :tumupp:
Användarvisningsbild
prototypen
Inlägg: 11105
Blev medlem: 6 augusti 2006, 13:25:04
Ort: umeå

Re: Häftig klocka! (kedjeroterande motor)

Inlägg av prototypen »

Kom ihåg denna tråd när jag hittade detta ur i korsningen E20 Rv50 på restaurangen där.
Klockan ett.jpg
Fem över ett.jpg
Tio över ett.jpg
Kvart över ett.jpg
Tjugo över ett.jpg
Fem i halv två.jpg
Protte
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Användarvisningsbild
netrunner
Inlägg: 5510
Blev medlem: 4 februari 2005, 12:26:05
Ort: 127.0.0.1

Re: Häftig klocka! (kedjeroterande motor)

Inlägg av netrunner »

Jag tycker att det är något som saknas på kedjeroterande klockan, att man inte använder konceptet till sin fulla potential.

Minuter bör finnas med på något sätt, kanske med en annan kedja.

Har man 2 kedjor så kan man också göra en av dom jord och den andra till +5VDC, så låta en lampa / klocka / LED eller en andra stegmotor (?) hänga mellan kedjorna.

Kugghjulet som snurrar med är bra, där kunde man kanske ha ett kullager + motvikt som håller något annat, tex en gamla analog termometer.
Användarvisningsbild
gOry
Inlägg: 5060
Blev medlem: 6 juni 2003, 22:41:25
Ort: Stockholm
Kontakt:

Re: Häftig klocka! (kedjeroterande motor)

Inlägg av gOry »

"Kugghjulet som snurrar med är bra, där kunde man kanske ha ett kullager + motvikt som håller något annat, tex en gamla analog termometer."

Eller varför inte motvikt och sen en utväxling typ planetväxel eller nått som är kopplat till en minutvisare!
Användarvisningsbild
prototypen
Inlägg: 11105
Blev medlem: 6 augusti 2006, 13:25:04
Ort: umeå

Re: Häftig klocka! (kedjeroterande motor)

Inlägg av prototypen »

netrunner skrev:Jag tycker att det är något som saknas på kedjeroterande klockan, att man inte använder konceptet till sin fulla potential.

Minuter bör finnas med på något sätt, kanske med en annan kedja.

Har man 2 kedjor så kan man också göra en av dom jord och den andra till +5VDC, så låta en lampa / klocka / LED eller en andra stegmotor (?) hänga mellan kedjorna.

Kugghjulet som snurrar med är bra, där kunde man kanske ha ett kullager + motvikt som håller något annat, tex en gamla analog termometer.
Jädra stressputte, det räcker väl att se om det är dags för förmiddagsfika eller lunch. Är det mera exakt så gå ut med en gradskiva och mät vinkeln på solen. Är det mulet så är det ändå bara att gå och lägga sig.

Prutte
Skriv svar