Ayuda PWM 16f877a

Ir abajo

Ayuda PWM 16f877a

Mensaje por B-shad el Mar 1 Mayo 2012 - 2:04

Bueno pues el problema que deseo resolver es configurar dos salidas PWM en un 16f877a para controlar 2 motores segun sea el boton pulsado, esto lo planeo implementar al recibir pulsos mediante el puerto paralelo de una pc que iran al micro , espero me puedan ayudar, Saludos

B-shad
Nuevo Usuario
Nuevo Usuario

Mensajes : 6
Fecha de inscripción : 31/03/2012

Volver arriba Ir abajo

Re: Ayuda PWM 16f877a

Mensaje por astaroth86 el Dom 6 Mayo 2012 - 22:09

¿Qué lenguaje de programación estas usando?

astaroth86
Nuevo Usuario
Nuevo Usuario

Mensajes : 4
Fecha de inscripción : 08/03/2012

Volver arriba Ir abajo

Re: Ayuda PWM 16f877a

Mensaje por B-shad el Dom 20 Mayo 2012 - 2:22

Estoy utilizando CCS Y MikroC, alguna idea para realizar mover un motor por pwm al presionar cierto boton que no sea el rb0/int ?

B-shad
Nuevo Usuario
Nuevo Usuario

Mensajes : 6
Fecha de inscripción : 31/03/2012

Volver arriba Ir abajo

Re: Ayuda PWM 16f877a

Mensaje por B-shad el Dom 20 Mayo 2012 - 2:40

Este es un codigo que tengo :

#include <16F877a.h>

#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP

#use delay(clock = 4000000)

#use fast_io(A)

#use fast_io(B)

//#byte PORT_A = 0x05

#byte PORT_B = 0x06


void setPWM(){

// 0 salidas // 1 entradas //

set_pwm1_duty(31); // 25% en CCP2

Delay_ms(1000);

}


void main()

{
do{
PORT_B = 0;

set_tris_b(0x01); // RB0 como entrada, los demas como salidas.

output_low(PIN_C1); // CCP2 en estado bajo

setup_ccp2(CCP_PWM); // CCP2 como PWM

setup_timer_2(T2_DIV_BY_16, 124, 1); // 500 Hz



if(input(PIN_B0))

{

setPWM();

PORT_B=0x02;

Delay_ms(1000);

PORT_B=0x00;

break;

}



else{

PORT_B=0x00; // limpiamos los puertos

}

}while(1);

}

B-shad
Nuevo Usuario
Nuevo Usuario

Mensajes : 6
Fecha de inscripción : 31/03/2012

Volver arriba Ir abajo

Re: Ayuda PWM 16f877a

Mensaje por astaroth86 el Lun 21 Mayo 2012 - 17:39

Hola.

Yo CCS o MikroC no los he usado nunca, yo utilizo el C del fabricante, para micros de 8 bits de medio rango, el Hi-Tec. Este es el codigo para mover unos servos utilizo el Timer2 para temporizar, pero puedes usar un delay si te es mas comodo, es un ejemplo que hice en clase y nos obligaba a usar un timer.
Código:

// Ficheros de cabecera
#include <pic1687x.h>
#include <htc.h>

// Los fusibles de configuracion

__CONFIG(HS & WDTDIS & PWRTEN & BORDIS & LVPDIS & DUNPROT & WRTDIS & DEBUGDIS);

// Definicion de constantes


#define _XTAL_FREQ 1000000        //NECESARIO PARA USAR DELAY, DEFINE AL COMP LA FREQ DE RELOJ 1Mhz para trabajar con servos

#define MARCHA RB0 //LCD Si es 0 es un comando y si es 1 es un codigo ASCII

// Definicion de las variables globales

unsigned char estado = 0;

// Prototipos de las funciones a definir

void funcionInicial(void);
void funcion00(void);
void funcion01(void);
void funcion02(void);
void delay333(void);
void delay266(void);
   
// Programa principal

void main(void){
   
    //Predefinimos los procesos
   
    //Programa principal
   
    funcionInicial();
   
    while(1){
       
        switch (estado){
            case 0:
                funcion00();
                break;
            case 1:
                funcion01();
                break;
            case 2:
                funcion02();
                break;           
        }                           
    }       
}   

// Definicion de las funciones

void funcionInicial(void){

                                /*Configuramos el Timer2*/
    //---------------------------------------------------------------------------------------
    //Configuramos el preescaler en 16 pag 57
    T2CKPS1=1;
    T2CKPS0=0;
   
    TMR2ON=1;//Activamos el Timer2
    //.......................................................................................
   
                                /*Configuramos el PWM*/
    //---------------------------------------------------------------------------------------
    //Configuramos para que trabaje como PWM el modulo CCP1 pag 60
    CCP1M3=CCP1M2=1;
    CCP1M1=CCP1M0=0;
   
    PR2=255; //Configuramos el periodo de la señal PWM
    //.......................................................................................
   
   
    //Configuramos el puerto B como entrada
    TRISB=0xFF;
    RBPU=0;
   
    //Puerto C
    TRISC2=0;

    estado =0;
   
}
void funcion00 (void){
    CCPR1L=15; //Ponemos el servo en -90º
    if(!MARCHA){
        estado=1;
    }
}
void funcion01 (void){       
    for(CCPR1L=16; CCPR1L<31;CCPR1L++){
        delay333();   
    }   
    estado =2;
}   

void funcion02 (void){
    for(CCPR1L=32; CCPR1L>16;CCPR1L--){
        delay266();   
    }       
    estado = 0;
}

void delay333(){
    delay266();
    __delay_ms(67);
}
void delay266(){
    __delay_ms(100);
    __delay_ms(100);
    __delay_ms(66);
}

astaroth86
Nuevo Usuario
Nuevo Usuario

Mensajes : 4
Fecha de inscripción : 08/03/2012

Volver arriba Ir abajo

Re: Ayuda PWM 16f877a

Mensaje por B-shad el Miér 23 Mayo 2012 - 16:41

Ok pues ya he logrado trabajar con PWM, como podria enviar ciertos datos desde el micro a la PC mediante le puerto serial en el compilador PIC C

B-shad
Nuevo Usuario
Nuevo Usuario

Mensajes : 6
Fecha de inscripción : 31/03/2012

Volver arriba Ir abajo

Re: Ayuda PWM 16f877a

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.