Autor Tema: Problema de programacion TIMER-PULSOS y PWM URGENTE!!!!!!!  (Leído 1321 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Adelbert666

  • PIC10
  • *
  • Mensajes: 1
Problema de programacion TIMER-PULSOS y PWM URGENTE!!!!!!!
« en: 20 de Enero de 2013, 14:49:48 »
Hola todos soy nuevo en foro y en esto de programar PIC´s. Utilizo un pic18f4520 y estoy intentando que mi programa realice la siguiente función;

El timer0 va a guardar los pulsos que meteré por la puerta A4 cuando este alcance el valor de 10 entonces el pwm se activara e enviara la señal a un servo que tengo conectado. A parte de esto también tengo un potencio-metro que dependiendo del valor encenderá un led u otro. El problema es que el potencio-metro funciona perfectamente hasta que le meto los diez pulsos, entonces el potencio-metro deja de funcionar.



INTCONbits.T0IF  Es un flag que se pondrá a uno cuando el timer0 llegue a los diez pulsos




#include <p18F4520.h>
#include <pwm.h>
#include <timers.h>
#include <stdlib.h>
#include <compare.h>
#include <adc.h>
#include <capture.h>
#include <delays.h>


#pragma config OSC = INTIO67
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config DEBUG = OFF
#pragma config MCLRE = ON



unsigned char period2 = 0x60;
unsigned int duty_cycle2 = 127;                                                                                                                                                                                       



int conversion;


void main(void)
{

OpenADC(ADC_FOSC_32 &
      ADC_LEFT_JUST &
      ADC_12_TAD, ADC_CH0 &
      ADC_INT_OFF &
      ADC_REF_VDD_VSS , ADC_1ANA);

TRISB = 0x00; //salida
PORTB = 0x00; //salida

TRISC = 0x00; //salida
PORTC = 0x00; //salida

TRISD = 0xFF; //entrada

PORTA=0x0;//Inicializar PORTA
TRISA=0x10; // habilita R4 como entrada


OSCCON = 0x0A;

while (1){

ConvertADC();
    while(BusyADC()==1)
    conversion= ADRESH;

            OpenTimer0(TIMER_INT_OFF&T0_8BIT&T0_SOURCE_EXT&T0_EDGE_RISE&T0_PS_1_1);//Inicializar timer

INTCONbits.T0IF=0;
WriteTimer0(0b11110110);// complemento A2 del numero 10
while (!OSCCONbits.IOFS)

   
       
       
        if(INTCONbits.T0IF==1)
        {
         
            OpenTimer2(TIMER_INT_OFF & T2_PS_1_1 & T2_POST_1_1);
            OpenPWM1 (period2);
            SetDCPWM1 (duty_cycle2);
                                       
                               
               Delay10KTCYx(200);
            WriteTimer0(0b11110110);// complemento A2 del numero 10
            INTCONbits.T0IF=0;
         
        }
   
                 if(conversion==0b00000000){
                     
                       
                        PORTBbits.RB0=1;
                        PORTBbits.RB1=0;
                        PORTBbits.RB2=0;
                        PORTBbits.RB3=0;
                }
                else if(conversion==0b00000111){
   
                 
                        PORTBbits.RB0=0;
                        PORTBbits.RB1=1;
                        PORTBbits.RB2=0;
                        PORTBbits.RB3=0;
    }
                else if(conversion==0b00111111){
   
                 
                        PORTBbits.RB0=0;
                        PORTBbits.RB1=0;
                        PORTBbits.RB2=1;
                        PORTBbits.RB3=0;
                        }
                else if(conversion==0b11111111){
   
                         PORTBbits.RB0=0;
                        PORTBbits.RB1=0;
                        PORTBbits.RB2=0;
                        PORTBbits.RB3=1;
    }

}
}

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Problema de programacion TIMER-PULSOS y PWM URGENTE!!!!!!!
« Respuesta #1 en: 23 de Enero de 2013, 21:46:41 »
hola compañero

no entendi muy bien el enunciado
pero creo que capte la idea por la entrada A4
le introduces pulsos si el timer configurado como contador
detecta 10 pulso se producira un evento y se activara el servo..

ahora dices que no te funciona el pontenciomnetro.

haz una cosa pones en un bucle lo del potenciometro
y por interupcion el cambio de valor de pin o de entrada la interrupcion
la pones en el rebose del timer de forma que cuando se produzca pulso
salga del bucle active el servo y vuelva al bucle.

que te parece.¿ ?