Ayuda PWM 16f877a
2 participantes
Página 1 de 1.
Ayuda PWM 16f877a
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
- Mensajes : 6
Fecha de inscripción : 31/03/2012
Re: Ayuda PWM 16f877a
¿Qué lenguaje de programación estas usando?
astaroth86- Nuevo Usuario
- Mensajes : 4
Fecha de inscripción : 08/03/2012
Re: Ayuda PWM 16f877a
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
- Mensajes : 6
Fecha de inscripción : 31/03/2012
Re: Ayuda PWM 16f877a
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);
}
#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
- Mensajes : 6
Fecha de inscripción : 31/03/2012
Re: Ayuda PWM 16f877a
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.
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
- Mensajes : 4
Fecha de inscripción : 08/03/2012
Re: Ayuda PWM 16f877a
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
- Mensajes : 6
Fecha de inscripción : 31/03/2012
Temas similares
» Compilar un proyecto en Piklab con CCS [VIDEO]
» Compilador CCS con wine
» Ayuda con LCD LMG-162-STN
» Ayuda con PWM
» master prog en linux??
» Compilador CCS con wine
» Ayuda con LCD LMG-162-STN
» Ayuda con PWM
» master prog en linux??
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|