Académique Documents
Professionnel Documents
Culture Documents
***********************************************************************************
*********
;This software is provided in an AS IS condition,NO WARRANTIES in any form apply
to this software.
;You can use/modify provided schematics and code without any limitations.
; picmicrolab.com 4.1.2014
;
***********************************************************************************
*********
;PIC16F877A Solar Tracking System
;
;----------------------------------------------------------------------------------
-
LIST P=PIC16F877A
include P16f877A.inc
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _HS_OSC & _LVP_OFF &
_DEBUG_OFF & _CPD_OFF
;
lcount equ 0x2B
ncount equ 0x2C
mcount equ 0x2D
SensorUP equ 0x20
SensorDown equ 0x21
SensorClock equ 0x22
SensorCounterClock equ 0x23
org 0x00
reset:
goto start
org 0x04
start:
next:
;------------------------------------------------
movlw 0x81
movwf ADCON0;Channel_0
call ADC
movwf SensorUP
movlw 0x89
movwf ADCON0;Channel_1
call ADC
movwf SensorDown
subwf SensorUP,W
btfsc STATUS,C
call StepUP
btfss STATUS,C
call StepDown
;----------------------------------Uncomment to enable Counter/ClockWise
Rotation---------------------------------
; In current hardware version rotating stepper is too weak and doesn't have
enough power
; to correctly rotate the platform "it's too heavy"
;----------------------------------------------------------------------------------
---------------------------------------
;movlw 0x91
;movwf ADCON0;Channel_2
;call ADC
;movwf SensorClock
;movlw 0x99
;movwf ADCON0;Channel_3
;call ADC
;movwf SensorCounterClock
;subwf SensorClock,W
;btfsc STATUS,C
;call RotateClock
;btfss STATUS,C
;call RotateCounterClock
;----------------------------------------------------------------------------------
----------------------------------------
goto next
ADC:
d_20:
movlw 0x20
movwf 0x22
loop1: decfsz 0x22,1
goto loop1
return
d_4:
movlw 0x06
movwf 0x22
loop2: decfsz 0x22,1
goto loop2
return
;---------------------------------------------------------------
StepUP:
movlw 0x01
movwf PORTC
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
movlw 0x02
movwf PORTC
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
movlw 0x04
movwf PORTC
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
movlw 0x08
movwf PORTC
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
;goto again
return
;----------------------------------------------------------------------------------
-
StepDown:
movlw 0x08
movwf PORTC
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
movlw 0x04
movwf PORTC
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
movlw 0x02
movwf PORTC
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
movlw 0x01
movwf PORTC
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
;goto again
return
;----------------------------------------------------------------------------------
-
RotateClock:
bcf PORTC,0X04
bsf PORTC,0X07
bcf PORTC,0X07
bsf PORTC,0X06
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
bcf PORTC,0X06
bsf PORTC,0X05
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
bcf PORTC,0X05
bsf PORTC,0X04
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
;goto again
return
;----------------------------------------------------------------------------------
-
RotateCounterClock:
;movlw 0x80;0x90
bcf PORTC,0X07
bsf PORTC,0X04
bcf PORTC,0X04
bsf PORTC,0X05
bcf PORTC,0X05
bsf PORTC,0X06
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
bcf PORTC,0X06
bsf PORTC,0X07
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
call pause ; delay 200ms
;goto again
return
;----------------------------------------------------------------------------------
--
return
;next: goto next
;---------------------------------------------------------------
end