Você está na página 1de 13

CONTROL DE ILUMINACIN

MEDIANTE POTENCIOMETRO Y
PWM
MARIA ISABEL MORA GUTIERREZ
1801819
CONVERSIN A/D
El ADC de 10 bits se puede dividir en dos secciones:
Adquisicin: es cuando un condensador se llena
para que coincida con la tensin de entrada
analgica.
Conversin: es cuando el voltaje en el muestreo y
retencin el condensador se convierte en una
representacin binaria utilizable en software.
PWM
(Compensacin de la salida del Modulo)
)
Este compara los contenidos del registro OCxR
con el valor en un timer.

A medida que el timer cambia de un valor de 0
a un valor igual a el del registro y hasta tener
una comparacin con el timer del registro de
comparacin, es decir se produce una
coincidencia entre los dos el mdulo de
comparacin de salida realiza la funcin.

En PWM una onda cuadrada se considera que
tiene un 50% del ciclo de trabajo y como el
voltaje de salida digital del PIC32 es de 3,3 V,
entonces el voltaje en esta onda ser de 1.65V.

Y un ciclo de trabajo del 70% tendr un voltaje
de 2.31V, es decir, que para cambiar el voltaje
analgico se debe cambiar solamente el ciclo de
trabajo.
Inicializo la frecuencia del PWM como 16000, la
inicializacin por defecto del SYSCLK es de
40000000.

Con RPB4Rbits. RPB4R = 0x0005, se le esta
asignando un OC1 a este pin con el fin de declararlo
como una salida de comparacin (Tomado de la
pagina 148 del Datasheet)

El OC1CON = 0x0006 (110 en binario), configura el
modo estndar para la salida PWM.
PROGRAMA


# include <plib.h> // incluir las funciones perifricas de la biblioteca

# define SYSCLK 40000000L
// Para obtener la ms baja, utilizar un pre-scaler del temporizador o utilice el
modo de temporizador de 32-bit
# define PWM_FREQ 16000

void delay_us( unsigned t){ //delay
T1CON = 0x8000;
while( t >= 100){
t-=100;
TMR1 = 0;
while( TMR1 < SYSCLK/10000);
}
while( t >= 10){
t-=10;
TMR1 = 0;
while( TMR1 < SYSCLK/100000);
}
while( t > 0)
{
t--;
TMR1 = 0;
while( TMR1 < SYSCLK/1000000);
}
T1CONCLR = 0x8000;
}
int analogRead(char analogPIN){ //leer la entrada
del potencimetro
AD1CHS = analogPIN << 16; //adquiere valor
haciendo el muestreo

while( ! AD1CON1bits.DONE );

return ADC1BUF0;
}
int main ( void )
{
int C=0;

ANSELBbits.ANSB3 = 1;
TRISBbits.TRISB3 = 1;
TRISBbits.TRISB5 = 0;
AD1CON1CLR = 0x8000;
AD1CON1 = 0x00E0;
AD1CON2 = 0;
AD1CON3 = 0x0f01;

SYSTEMConfigPerformance ( SYSCLK ) ;
SPI1CON=65536; //habilita PWM
// Establecer OC1 al pin RB4
RPB4Rbits. RPB4R = 0x0005 ;
OC1CON = 0x0006 ;

T2CONSET = 0x8000 ; // Habilitar Timer2, prescaler 1:01
OC1CONSET = 0x8000 ; // Habilitar salida de comparacin
Mdulo 1

while ( 1 ){

C=ADC1BUF0;

//: nota el prescaler TMR es 1 y por lo tanto se ignora
PR2 = ( SYSCLK / PWM_FREQ ) - 1 ;

// Una escritura en OCxRS configura el ciclo de trabajo
//: OCxRS / Pry = ciclo de trabajo
OC1RS = ( PR2 + 1 ) * ( ( float ) C / 100 ) ;
}

return 1 ;
}

Você também pode gostar