puerto de salida PIC PWM

0

Estoy empezando a aprender a programar una foto. Estoy prácticamente enseñándome esto. Estoy usando el pic16f1829. Estoy jugando con los ejemplos y tratando de hacer PWM. Obviamente, funciona y el código está bien. Pero me gustaría (solo para uso futuro y averiguar cómo hacerlo) para que la señal PWM salga de cualquier pin. Actualmente, sale de RC3. He intentado cambiar el TRISC y el LATC a valores diferentes (aún no conozco los términos reales), pero no he tenido ningún resultado. ¿Hay algo en la hoja de datos que me falta al asignar los pines?

void main(void) {
OSCCON = 0b00111000;                            //500KHz clock speed
TRISC = 0;                                      //all LED pins are outputs
LATC = 0;

                                                //setup ADC
TRISAbits.TRISA4 = 1;                           //Potentiamtor is connected to RA4...set as input
ANSELAbits.ANSA4 = 1;                           //analog
ADCON0 = 0b00001101;                            //select RA4 as source of ADC and enable the module (AN3)
ADCON1 = 0b00010000;                            //left justified - FOSC/8 speed - Vref is Vdd

                                                //setup the PWM
CCP2CON = 0b00001100;                           //PWM mode single output
PR2 = 255;                                      //Frequency at 486Hz. Anything over ~60Hz will get rid of any flicker
                                                //PWM Period = [PR2 + 1]*4*Tosc*T2CKPS = [255 + 1] * 4 * (1 / 500KHz) * 1
CCPTMRSbits.C2TSEL = 0b00;                      //select timer2 as PWM source
T2CONbits.T2CKPS = 0b00;                        //1:1 prescaler
T2CONbits.TMR2ON = 1;                           //start the PWM

while (1) {
    __delay_us(5);                              //wait for ADC charging cap to settle
    GO = 1;                                     //start the ADC conversion
    while (GO) continue;                        //wait for conversion to be finished
    CCPR2L = ADRESH;                            //put the top 8 MSbs into CCPR2L
    CCP2CONbits.DC2B = (ADRESL>>6);             //put the 2 LSbs into DC2B register to complete the 10bit resolution
}

}

Como he dicho, el código es un ejemplo directo. ¿Alguien estaría dispuesto a indicarme en la dirección correcta sobre cómo cambiar el pin de salida?

Estoy en este sitio varias veces todos los días, y en lugar de votarme (estoy tratando de poder comentar cosas) simplemente diga "¡aquí en los comentarios está tu respuesta! ¡Ahora borra esta pregunta!" y lo haré.

    
pregunta Rayray

3 respuestas

0

Puede hacer un software PWM en cualquier pin (no recomendado), pero debe usar un pin que tenga una salida de temporizador CCP para poder usar el temporizador para la fuente PWM.

Por ejemplo, si desea PWM en el pin 11, entonces necesita usar CCP3, no CCP2 como está configurado actualmente. Si desea usar el pin 10, no veo ninguna salida CCP asignada a él, por lo que tendría que hacer un PWM en el software (configurar pin, esperar, borrar pin, esperar). El pin 9 tiene una salida CCP4, por lo que podría usar eso, pero probablemente tendría que cambiar su temporizador al temporizador 4. Y así sucesivamente ...

Esto es algo a lo que hay que prestar atención cuando estás haciendo tu esquema.

    
respondido por el slightlynybbled
0

Este MCU tiene dirección PWM, por lo que debe tener el PWM en modo de salida única, borrar el bit apropiado en el registro TRIS y configurar los registros PSTR1CON / PSTR2CON para dirigir la salida a cualquier pin que tenga el Microchip Permitió que fuera enrutado a.

Todo está en la hoja de datos, que vale la pena leer. Vea la página 244 por ejemplo.

    
respondido por el Spehro Pefhany
0

No todas las funciones del PIC están disponibles en todos los pines. Y algunas características se pueden mover a diferentes pines. En el registro APFCON1, el bit 0 controla a qué pin está conectada la función CCP2. Si este bit es 0 CCP2 está conectado a RC3. Si 1 CCP2 está conectado a RA5.

    
respondido por el st2000

Lea otras preguntas en las etiquetas