Αρχικό μήνυμα από
_ab
... 16f630 ... osccal ... pickit 2 ... auto calibrate osccal
Ας δούμε αρχικά πως τοποθετούμε την τιμή του OSCCAL στη θέση του για το PIC16F630. Προϋπόθεση να υπάρχει εντολή RETLW xx στη θέση μνήμης 0x3FF:
Κώδικας:
BSF STATUS, RP0 ;Bank 1
CALL 3FFh ;Get the cal value
MOVWF OSCCAL ;Calibrate
BCF STATUS, RP0 ;Bank 0
(από το datasheet του PIC16F630)
Επειδή ο καταχωρητής OSCCAL είναι ο 0x90 χρειάζεται το bank switching για τα registers με το BSF/BCF STATUS,RP0 (αυτά φαντάζομαι τα έχει στο πρόγραμμα ο σχεδιαστής αλλά τα αναφέρω για να βρούμε μια άκρη).
Ενας πρώτος έλεγχος είναι να διαβάσεις το chip μετά τον προγραμματισμό και να δεις τι περιέχει η διεύθυνση 0x3FF (μη τυχόν και έχει κανένα GOTO pouthena). Αν δεν έχει RETLW xx σημαίνει ότι χάθηκε η πληροφορία και πρέπει να επαναπρογραμματιστεί (συνήθως τα εργαλεία προγραμματισμού της microchip προστατεύουν αυτή τη θέση μνήμης).
Δεν έχω pickit2. Αν δεν λειτουργεί το 'auto calibrate' βάλε εσύ RETLW 0x80 στη θέση 0x3FF (δηλαδή address=0x3FF data=0x3480).
Δεν έχω καταλάβει αν "εμβαθύνεις" στα PIC ή απλά θέλεις να λειτουργήσει το συγκεκριμένο πρόγραμμα που χρειάζεται μια σχετική ακρίβεια στον ταλαντωτή για να γίνει ο τηλεχειρισμός. Αν παράλληλα μαθαίνεις μπορείς να βάλεις δικό σου πρόγραμμα στο PIC για να κάνει set/reset ένα I/O pin και να μετρήσεις συχνότητα, ή να χρησιμοποιήσεις τον ταλαντωτή "INTRC CLOCKOUT on Pin" και να μετρήσεις τη συχνότητα του ταλαντωτή (αυτό μάλλον κάνει το auto-calibrate-osccal). Τέλος θεωρώ ότι δεν πειράζεις τα cdonfiguration bits τα οποία ελέγξαμε ότι είναι τα σωστά. Με το READ μπορείς να τα επιβεβαιώσεις.
G