PIC16F877 + Potenziometro + PWMout: in alto mare
Inviato: 20 set 2013, 10:54
Ciao a tutti,
sto provando ad avvicinarmi ai PIC e la loro configurazione/programmazione.
A disposizione ho un PIC16F877 e vorrei iniziare a fargli generare un PWM controllato da un potenziometro (ne ho uno da 10K).
Per il lato FW ho trovato e seguito questo thread:
http://www.electroyou.it/forum/viewtopic.php?f=17&t=24820
che ho semplificato eliminando la gestione del secondo PWM.
Per il lato HW:
- ho collegato la 5V e massa al micro;
- ho collegato la 5V al pin di reset (MCLR) tramite una resistenza da 4K7
- ho collegato l'uscita del potenziometro al pin di ingresso analogico AN0
Leggendo l'uscita sul pin CCP1, non vedo nessun segnale uscente così sto sbattendo la testa sul reference manual ma non riesco ad uscirne...
Step successivo è stato collegare un risuonatore ceramico a 3 pin da 4MHz tra i 2 pin del micro dedicati (visto che non son riuscito a capire se di oscillatore ce ne sia uno integrato o meno...) ma nessun cambiamento...
Nella maniera più umile possibile, vi chiedo qualche dritta
[EDIT]: scusate, dimenticavo un'informazione (credo) importante.
Come ambiente FW utilizzo MPLAB X IDE(v.190) e come compilatore l'XC8
sto provando ad avvicinarmi ai PIC e la loro configurazione/programmazione.
A disposizione ho un PIC16F877 e vorrei iniziare a fargli generare un PWM controllato da un potenziometro (ne ho uno da 10K).
Per il lato FW ho trovato e seguito questo thread:
http://www.electroyou.it/forum/viewtopic.php?f=17&t=24820
che ho semplificato eliminando la gestione del secondo PWM.
- Codice: Seleziona tutto
#include <PIC.h>
#include <stdio.h>
int main(void)
{
int ang; //
TRISC=0; //PORTC tutte uscite per il PWM
TRISA=0b00101111; // Porte A analogiche come ingressi
TRISD=0;//Porte D come uscite
PORTD=0;//Porte D tutte a zero
T2CON=4; //Timer2 acceso con prescaler a 1
CCP1CON=12; //Modulo CCP1 settato in modalita' PWM
PR2=0xFF; //Step massimo del duty cycle (e frequenza)
ADCON0 = 0b01000101; //attiva porte analogiche con Fosc/8: 5MHz e lettura su AN0
ADCON1= 0b10001110;
while(1)
{
CHS0=0; // seleziona la porta da leggere (AN0)
ADCON0bits.GO = 1; //Fa partire la conversione
while (ADCON0bits.GO); //Attende che la conversione sia completa
ang = ADRESL+(ADRESH<<8); // risultato a 10 bit
CCPR1L=ang/4; //duty cycle CCP1
}
}
Per il lato HW:
- ho collegato la 5V e massa al micro;
- ho collegato la 5V al pin di reset (MCLR) tramite una resistenza da 4K7
- ho collegato l'uscita del potenziometro al pin di ingresso analogico AN0
Leggendo l'uscita sul pin CCP1, non vedo nessun segnale uscente così sto sbattendo la testa sul reference manual ma non riesco ad uscirne...
Step successivo è stato collegare un risuonatore ceramico a 3 pin da 4MHz tra i 2 pin del micro dedicati (visto che non son riuscito a capire se di oscillatore ce ne sia uno integrato o meno...) ma nessun cambiamento...
Nella maniera più umile possibile, vi chiedo qualche dritta
[EDIT]: scusate, dimenticavo un'informazione (credo) importante.
Come ambiente FW utilizzo MPLAB X IDE(v.190) e come compilatore l'XC8