TODOPIC
Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: xacal en 02 de Noviembre de 2006, 17:11:10
-
Pues eso he empezado un proyecto q consiste en el movimiento de ojos, cejas, parpados, boca de un robot. He escogido el pic 18f4550 para la programacion de 8 o 11 servos q realizaran distintas emociones governadas por un programa en el pc hecho en visual basic.
Me gustaria q me ayudarais ya q empiezo con los pics i necesito mucho tiempo para la parte mecanica.
Comenzaria con la configuracion del pic 18f4550 con el mplab c18. q es distinto al Pic c compiler, he echo una prueva con el pic 16f877 i la configuracion en el pic c compiler es facil:
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use standard_io(b)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#define PIN_SERVO1 PIN_B0
const int AJUSTE_FINO_DE_RTCC = 30;
const int ticks_PULSO_MINIMO = 31;
const int ticks_PULSO_MEDIO = 93;
const int ticks_PULSO_MAXIMO = 155;
int1 flagRTCC = 0;
int contRTCC = 0;
int1 flagSERVO1 = 0;
int tSERVO1 = ticks_PULSO_MEDIO;
char Keypress =0x00;
void eco_servos(void);
void ajusta_servo(void);
#int_rda
void rda_isr() {
Keypress=0x00;
if(kbhit()){
Keypress=getc();
}
}
#int_RTCC
RTCC_isr(){
++contRTCC;
if(contRTCC==4){
set_TIMER0(AJUSTE_FINO_DE_RTCC);
}
if(contRTCC==5){
flagRTCC=1;
contRTCC=0x00;
}
}
void main() {
int ValTIMER0;
setup_counters(RTCC_INTERNAL,RTCC_DIV_16);
enable_interrupts(int_rda);
enable_interrupts(global);
printf("\r\n\SERVO Commander\r\n\r\n" );
eco_servos();
set_TIMER0(0);
enable_interrupts(INT_RTCC);
do {
// DISPARO DEL PULSO PWM
if(flagRTCC==1){
flagRTCC=0;
output_high(PIN_SERVO1);
flagSERVO1=1;
}
// CONTROL DE ANCHO DEL PULSO PWM
if(flagSERVO1==1){
valTIMER0 = get_TIMER0();
if(valTIMER0>tSERVO1){
flagSERVO1=0;
output_low(PIN_SERVO1);
}
}
// CONTROL DESDE LA RS-232
if(Keypress!=0x00){
ajusta_servo();
Keypress=0x00;
}
} while (TRUE);
}
void ajusta_servo(void){
switch(Keypress){
// Periodos Prefijados
case '1': tSERVO1=ticks_PULSO_MINIMO;
break;
case '2': tSERVO1=ticks_PULSO_MEDIO;
break;
case '3': tSERVO1=ticks_PULSO_MAXIMO;
break;
// Inc Dec Periodo
case '+': if(++tSERVO1>ticks_PULSO_MAXIMO){
tSERVO1=ticks_PULSO_MAXIMO;
}
break;
case '-': if(--tSERVO1<ticks_PULSO_MINIMO){
tSERVO1=ticks_PULSO_MINIMO;
}
break;
// Dame Periodo actual
case 'r': eco_servos();
break;
}
}
void eco_servos(void){
printf("S=%u\r\n",tSERVO1);
}
Mi consulta es como configurar en el c18 el pic 18f4550 para adaptar este programa.
GRACIAS DE ANTEMANO.
Siempre pondre mis evoluciones.
-
Hola xacal, bienvenido a este maravilloso foro!
Es posible que esto te pueda ayudar?
http://www.ccsinfo.com/faq.php?54
PD: Eres el individuo con el que me tomé demasiados wiskys hace un par de semanas?? jeje... si es así pídele mi correo a Julio que te paso todo lo que necesitas para que estes quemando PIC´s en menos que canta un gallo.
Un saludo desde Alicante.
-
Nocturno, Podrias ayudarme a traducirlo para el c 18 me estoy bolbiendo locoooooooooooo!!!
GRACIAS DE ANTEMANO , el proyecto va por buen camino ahora voy a ponerme a programar en serio suvire planos de la parte mecanica del robot con 11 servos,yuyuyuyuyuuyyu...
-
Hola Xacal, te contesté por privado, pero veo que también me lo pides aquí: no he usado C18 en mi vida, pero seguro que algún forista que lo domine lee esto y te puede ayudar (¿verdad Maunix?)
-
Hola Xacal, te contesté por privado, pero veo que también me lo pides aquí: no he usado C18 en mi vida, pero seguro que algún forista que lo domine lee esto y te puede ayudar (¿verdad Maunix?)
Bueno, gracias Manolo :) , también recibí el mensaje privado.
Ando algo ocupado últimamente, por eso no les respondí antes.
xacal, la migración es perfectamente posible. Conozco el C18 pero el compilador no el que tu usas, para el cual me tendrás que dar algunas 'ayudas' para que hagamos juntos la migración del código.
Te paso a enumerar
1) Qué rango tiene una variable de tipo int ? Te pregunto porque en C18 es de 16bits y en otros compiladores suele ser de 8 bits.
2) ¿A qué llama RTCC ?
3) ¿Qué hace esta función? --> kbhit()
-
Te paso a enumerar
1) Qué rango tiene una variable de tipo int ? Te pregunto porque en C18 es de 16bits y en otros compiladores suele ser de 8 bits.
2) ¿A qué llama RTCC ?
3) ¿Qué hace esta función? --> kbhit()
ANTES Q NADA TE DIGO Q ESTA COMPILADO CON EL CSS.
BUeno int es enetro i es indiferente para este caso ya q no ocupo ni 8 bits, pero si en el c18 es de 16 pues de 16
Rtcc es la interrupcion q da el temporizador timer0 quando cuenta de 0 a 255 da una rtcc quando pasa a 0.
kbit() devuelve el caracter de la tecla q as pulsado, esto seguramente lo canviare porque tengo q adaptar el programa para la recepcion es visualbasic de un entero q ejecute una funcion.
El programa final consiste en el control de 11 servos, Tendra 4 funciones i cada una de estas ejecutara el movimiento de los servos simulando en la cara del robot "feliz " por ejemplo. UNa funcion sera feliz otra triste o tra enfadado i otra locoooooooooooo.
En visual realizare una ventana q dependiendo q boton pulses ara una cara o otra.
EL problema es que la parte mecanica me esta dando trabajo i no puedo dedicarle mucho al micro, i en navidad lo tengo q tener terminadoooooooooooooooooooooooooooooooo
jajajajjajaja, bueno gracias de antemano. espero q puedas ayudarme primero lo simulare en el proteus.