GeorgeVita
19-02-11, 14:37
Αρκετές φορές χρειαζόμαστε παλμούς χρονισμού για μέτρηση ή καταγραφή συμβάντων (ωρομετρητές, καταγραφικά, συχνόμετρα). Υπάρχουν αρκετά εξειδικευμένα ολοκληρωμένα κυκλώματα που καλύπτουν αυτή την ανάγκη αλλά δεν είναι πάντα διαθέσιμα.
Παρακάτω δείχνω μια απλή εφαρμογή για "παραγωγή παλμών χρονισμού 1sec, 0.1min, 0.1h" με PIC των 8pin μικρής δυναμικότητας.
http://acomelectronics.com/GeorgeVita/OpHW/Time360/Time360.jpg
Ο χρονισμός έρχεται από τον κρύσταλλο 32768Hz. Μικρομετρική ρύθμιση μπορεί να γίνει με μεταβολή της χωρητικότητας των πυκνωτών 15pF.
Η είσοδος COUNT (pin4) ενεργοποιεί ή σταματά την παραγωγή παλμών στην έξοδο. Οταν η επαφή είναι κλειστή (pin4=0V) η παραγωγή παλμών είναι συνεχής. Οταν η επαφή ανοίξει (pin4=Vdd) οι παλμοί "παγώνουν" στο σημείο αυτό μέχρις ότου ξανακλείσει η επαφή οπότε η μέτρηση συνεχίζεται από το σημείο που σταμάτησε.
Υπάρχουν 3 έξοδοι παλμών για κύκλο 1 δευτερόλεπτο, 0.1 λεπτά και 0.1 ώρες.
Οι παλμοί στην έξοδο έχουν σχεδόν 50% duty cycle.
http://acomelectronics.com/GeorgeVita/OpHW/Time360/T360timing.jpg
Χρονισμός εξόδων:
pin7 1 sec: 500 mSec HIGH και 500 mSec LOW
pin6 1/10 min: 3 Sec HIGH και 3 Sec LOW
pin5 1/10 hour: 180 Sec HIGH και 180 Sec LOW
Η εφαρμογή δοκιμάστηκε σε PIC12C509A με το πρόγραμμα time360.hex (http://acomelectronics.com/GeorgeVita/OpHW/Time360/time360.hex)
Αν θέλετε να προσαρμόσετε το πρόγραμμα σε άλλο PIC θα ξεκινήσετε από το παρακάτω αρχείο .asm:
;************************************************* *********************
; File: time360.asm
; Date: 18-FEB-11
; Last: 19-FEB-11
;************************************************* *********************
list p=12c508a, R=DEC
#include <p12c508a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF & _LP_OSC
;------------------------------------------------------------------------
Time6 equ 0x09
Time360 equ 0x0A
TMRbuffer equ 0x0C
OUTbuffer equ 0x0D
;------------------------------------------------------------------------
org 0x00
goto Start
;------------------------------------------------------------------------
org 0x10
dt "GeorgeVita - Time counter 360 seconds"
;------------------------------------------------------------------------
Start movlw b'11000011'
option
movlw b'00111000'
tris GPIO
clrf OUTbuffer
clrf GPIO
clrf Time6
clrf Time360
;------------------------------------------------------------------------
Main
loop_00
movfw TMR0
skpz
goto Main
loop_01
decfsz TMR0,W
goto loop_01
tstENB
btfsc GPIO,3
goto Main
toggleT1
movlw b'00000001'
xorwf OUTbuffer,F
movfw OUTbuffer
movwf GPIO
btfsc OUTbuffer,0
goto Main
incrT6
incf Time6,F
movlw .3
xorwf Time6,W
skpz
goto incrT360
toggleT6
clrf Time6
movlw b'00000010'
xorwf OUTbuffer,F
incrT360
incf Time360,F
movlw .180
xorwf Time360,W
skpz
goto Main
toggleT360
clrf Time360
movlw b'00000100'
xorwf OUTbuffer,F
goto Main
;------------------------------------------------------------------------
END
Φιλικά,
Γιώργος
Παρακάτω δείχνω μια απλή εφαρμογή για "παραγωγή παλμών χρονισμού 1sec, 0.1min, 0.1h" με PIC των 8pin μικρής δυναμικότητας.
http://acomelectronics.com/GeorgeVita/OpHW/Time360/Time360.jpg
Ο χρονισμός έρχεται από τον κρύσταλλο 32768Hz. Μικρομετρική ρύθμιση μπορεί να γίνει με μεταβολή της χωρητικότητας των πυκνωτών 15pF.
Η είσοδος COUNT (pin4) ενεργοποιεί ή σταματά την παραγωγή παλμών στην έξοδο. Οταν η επαφή είναι κλειστή (pin4=0V) η παραγωγή παλμών είναι συνεχής. Οταν η επαφή ανοίξει (pin4=Vdd) οι παλμοί "παγώνουν" στο σημείο αυτό μέχρις ότου ξανακλείσει η επαφή οπότε η μέτρηση συνεχίζεται από το σημείο που σταμάτησε.
Υπάρχουν 3 έξοδοι παλμών για κύκλο 1 δευτερόλεπτο, 0.1 λεπτά και 0.1 ώρες.
Οι παλμοί στην έξοδο έχουν σχεδόν 50% duty cycle.
http://acomelectronics.com/GeorgeVita/OpHW/Time360/T360timing.jpg
Χρονισμός εξόδων:
pin7 1 sec: 500 mSec HIGH και 500 mSec LOW
pin6 1/10 min: 3 Sec HIGH και 3 Sec LOW
pin5 1/10 hour: 180 Sec HIGH και 180 Sec LOW
Η εφαρμογή δοκιμάστηκε σε PIC12C509A με το πρόγραμμα time360.hex (http://acomelectronics.com/GeorgeVita/OpHW/Time360/time360.hex)
Αν θέλετε να προσαρμόσετε το πρόγραμμα σε άλλο PIC θα ξεκινήσετε από το παρακάτω αρχείο .asm:
;************************************************* *********************
; File: time360.asm
; Date: 18-FEB-11
; Last: 19-FEB-11
;************************************************* *********************
list p=12c508a, R=DEC
#include <p12c508a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _MCLRE_OFF & _LP_OSC
;------------------------------------------------------------------------
Time6 equ 0x09
Time360 equ 0x0A
TMRbuffer equ 0x0C
OUTbuffer equ 0x0D
;------------------------------------------------------------------------
org 0x00
goto Start
;------------------------------------------------------------------------
org 0x10
dt "GeorgeVita - Time counter 360 seconds"
;------------------------------------------------------------------------
Start movlw b'11000011'
option
movlw b'00111000'
tris GPIO
clrf OUTbuffer
clrf GPIO
clrf Time6
clrf Time360
;------------------------------------------------------------------------
Main
loop_00
movfw TMR0
skpz
goto Main
loop_01
decfsz TMR0,W
goto loop_01
tstENB
btfsc GPIO,3
goto Main
toggleT1
movlw b'00000001'
xorwf OUTbuffer,F
movfw OUTbuffer
movwf GPIO
btfsc OUTbuffer,0
goto Main
incrT6
incf Time6,F
movlw .3
xorwf Time6,W
skpz
goto incrT360
toggleT6
clrf Time6
movlw b'00000010'
xorwf OUTbuffer,F
incrT360
incf Time360,F
movlw .180
xorwf Time360,W
skpz
goto Main
toggleT360
clrf Time360
movlw b'00000100'
xorwf OUTbuffer,F
goto Main
;------------------------------------------------------------------------
END
Φιλικά,
Γιώργος