Ho un piccolo problema riguardo l'uso di due PWM differenti sul PIC 16F877.
Dunque credo sia la sezione migliore poiché reputo un errore nel codice, ma non mancherò di postare lo schema se richiesto, per certezza!
Vorrei (come esercizio basilare prima di usarlo in altro) gestire la luminosità di due led collegati a due generici pin in uscita del PIC, con due segnali PWM separati controllati da due potenziometri separati.
Ecco qui il codice:
- Codice: Seleziona tutto
/*
* programma per generare il PWM e regolare
* il Duty Cycle con un potenziometro
*/
#include <PIC.h>
#include <stdio.h>
#include "delay.c"
int main(void)
{
short ang, ang1;
TRISB=0; //PORTB tutte uscite
TRISC=0; //PORTC tutte uscite
T2CON=4; //Timer2 acceso con prescaler a 1
CCP1CON=12; //Modulo CCP1 settato in modalita' PWM
CCP2CON=12; //Modulo CCP2 settato in modalita' PWM
PR2=0xfe; //Step massimo del duty cycle (e frequenza)
ADCON0 = 0b11000001; //attiva porte analogiche
ADCON1= 0b10000000;
while(1)
{
CHS0=0; // seleziona la porta da leggere (RA0)
DelayUs(10); //ritardo per il cambio porta analogica
ADGO = 1; //Fa partire la conversione
while(ADGO)
continue; //Attende che la conversione sia completa
ang = ADRESL+(ADRESH<<8); // risultato a 10 bit
CCPR1L=ang/4; //duty cycle CCP1
CHS0=1; //seleziona la porta da leggere (RA1)
DelayUs(10); //ritardo per il cambio porta analogica
ADGO = 1; //Fa partire la conversione
while(ADGO)
continue; //Attende che la conversione sia completa
ang1 = ADRESL+(ADRESH<<8); // risultato a 10 bit
CCPR2L=ang1/4; //duty cycle CCP2
}
}
Il PIC comanda entrambe le uscite PWM indifferentemente dal potenziometro utilizzato, dunque ogni potenziometro ha influenza su entrambi i pin dedicati al PWM (ovvero CCP1 e CCP2) il che non dovrebbe accadere poiché dovrebbero essere indipendenti!.
Grazie a tutti!