Autor Tema: Proyecto Cabeza ROBOT  (Leído 2870 veces)

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

Desconectado xacal

  • PIC10
  • *
  • Mensajes: 3
Proyecto Cabeza ROBOT
« 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.


Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: Proyecto Cabeza ROBOT
« Respuesta #1 en: 03 de Noviembre de 2006, 05:51:36 »
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.


Desconectado xacal

  • PIC10
  • *
  • Mensajes: 3
Re: Proyecto Cabeza ROBOT
« Respuesta #2 en: 14 de Noviembre de 2006, 19:47:06 »
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...

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Proyecto Cabeza ROBOT
« Respuesta #3 en: 15 de Noviembre de 2006, 02:12:32 »
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?)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Proyecto Cabeza ROBOT
« Respuesta #4 en: 17 de Noviembre de 2006, 13:01:30 »
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()

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado xacal

  • PIC10
  • *
  • Mensajes: 3
Re: Proyecto Cabeza ROBOT
« Respuesta #5 en: 17 de Noviembre de 2006, 15:00:11 »

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.


 

anything