0
Αρκετές φορές χρειαζόμαστε παλμούς χρονισμού για μέτρηση ή καταγραφή συμβάντων (ωρομετρητές, καταγραφικά, συχνόμετρα). Υπάρχουν αρκετά εξειδικευμένα ολοκληρωμένα κυκλώματα που καλύπτουν αυτή την ανάγκη αλλά δεν είναι πάντα διαθέσιμα.
Παρακάτω δείχνω μια απλή εφαρμογή για "παραγωγή παλμών χρονισμού 1sec, 0.1min, 0.1h" με PIC των 8pin μικρής δυναμικότητας.
Ο χρονισμός έρχεται από τον κρύσταλλο 32768Hz. Μικρομετρική ρύθμιση μπορεί να γίνει με μεταβολή της χωρητικότητας των πυκνωτών 15pF.
Η είσοδος COUNT (pin4) ενεργοποιεί ή σταματά την παραγωγή παλμών στην έξοδο. Οταν η επαφή είναι κλειστή (pin4=0V) η παραγωγή παλμών είναι συνεχής. Οταν η επαφή ανοίξει (pin4=Vdd) οι παλμοί "παγώνουν" στο σημείο αυτό μέχρις ότου ξανακλείσει η επαφή οπότε η μέτρηση συνεχίζεται από το σημείο που σταμάτησε.
Υπάρχουν 3 έξοδοι παλμών για κύκλο 1 δευτερόλεπτο, 0.1 λεπτά και 0.1 ώρες.
Οι παλμοί στην έξοδο έχουν σχεδόν 50% duty cycle.
Χρονισμός εξόδων:
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
Αν θέλετε να προσαρμόσετε το πρόγραμμα σε άλλο 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
Γιώργος