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);
}
}
Ο κώδικας ενώ δουλεύει μια χαρά με τον 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);
}
}