PDA

Επιστροφή στο Forum : Πρόβλημα με τον PIC18F2431



MOJO
14-06-07, 17:50
Γεία σας. Γράφω τον παρακάτω κώδικα χρησιμοποιόντας την CCS 3.249. Ο κώδικας αυτός μεταβάλλει το εύρος ενός τετραγωνικού παλμού σταθερής συχνότητας(PWM) μεταβάλλοντας ένα ποτασιόμετρο που είναι συνδεδεμένο στο αναλογικό κανάλι 1 του μικροελεγκτή PIC18F2431.
Ο κώδικας ενώ δουλεύει μια χαρά με τον PIC16F877, με τον PIC18F2431 δεν έχω τα αναμενόμενα αποτελέσματα. Επειδή δεν είναι και ο ποιό δημοφιλής μικροελεγκτής (γιατι απευθύνεται κυριως σε εξειδικευμένες εφαρμογές οπως έλενχος κίνησης κ.α) και μπορεί πολλοί να μην τον έχετε για να πειραματιστείτε και να βρείτε τι φταίει στο πρόβλημα αυτό θα προσπαθήσω να γίνω λίγο ποιό σαφής. Συνδέοντας τον παλμογράφο στο CCP2/PWM του μικροελγκτή αύτο που βλέπω είναι η τετραγωνική κυματομορφή με την μέγιστη τιμη που μπορεί να πάρει σε ευρος. Αλλάζοντας το όρισμα του set_pwm1_duty() απο value σε ένα σταθερό αριθμό παρατηρώ στον παλμογράφο να μεταβάλλεται η τιμή του εύρους όπως είναι λογικό. Άρα εστιάζω το πρόβλημα στο γεγονός οτι δεν μεταβάλλεται η τιμή της μεταβλητής value. Δοκιμασα αρκετα για να δω μήπως εχω λάθη στα fuses ή στην αρχικοποίηση του αναλογικού καναλιού αλλα δεν κατάφερα κάτι.
Έχετε καμια ιδέα για το τι μπορεί να φταίεί;

#include<18f2431>
#device adc=10
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOCPD,NOBROWNOUT,NOLVP
#use delay(clock=20000000)

void main()
{
int16 value;

setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_4, 63, 1);

setup_adc_ports(all_analog);
setup_adc(adc_clock_internal);
set_adc_channel(1);
delay_us(20);

while(1)
{
value=read_adc();
set_pwm1_duty(value/4);
}
}

gsmaster
14-06-07, 20:39
Δοκίμασε να δείς αν όντως διαβάζει το αναλογικό κανάλι. Εμφάνισε κάπου την τιμή του αναλογικού καναλιού όπως είναι μετά την ανάγνωση του καναλιού. Που θα την εμφανίσεις? σε μια lcd, μέσω σειριακής, μέσω debugger.... (τι το έχεις το icd2...)


ΥΓ. γιατί μου φαίνονται λίγα τα fuses που έχεις βάλει? σίγουρα έχει περισσότερα. Έχει και ένα το οποίο επιλέγεις σε ποιο πίν θα είναι το CCP1 (B0 ή στο B3)

th_shak
14-06-07, 21:25
Στο manual του Compiler στη σελίδα 35 λέει:

Some chips also have fuses which allows to multiplex the ccp/pwm on different pins. Be sure to
check the fuses to see which pin is set by default. Also fuses to enable/disable pwm outputs.

Το πρόβλημά σου είναι σίγουρα απο τα fuses.

MOJO
15-06-07, 12:28
Τελικά για κάποιον λόγο δεν διαβάζει το αναλογικό κανάλι. Εμφανιζω την τιμή του value σε μια οθονη. Η τιμή δεν μεταβαλεται. Οσο για τις FUSES που λετε αυτες που έβαλα κατα την γνώμη μου είναι και οι ποιο σημαντικές.
Κοιταξτε λιγο εδω: http://www.ccsinfo.com/forum/viewtopic.php?t=29868&highlight=pic18f2431
Αν είναι οντως έτσι οπως τα λεέι τοτε οι FUSES μου είναι εντάξει. Ο συγκεκριμενος μικροελεγκτης εχεί καποια ιδιαίτερα χαρακτηριστικα που αφορουν το AD.

High-Speed, 200 Ksps 10-bit A/D Converter:
• Up to 9 channels
• Simultaneous two-channel sampling
• Sequential sampling: 1, 2 or 4 selected channels
• Auto-conversion capability
• 4-word FIFO with selectable interrupt frequency
• Selectable external conversion triggers
• Programmable acquisition time

Διάβασα το Header file έκανα κάποιες αλλαγές στα ορίσματα και το πρόβλημα παραμένει.....