Autor Tema: No se como empezar  (Leído 3872 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
No se como empezar
« en: 14 de Abril de 2009, 18:44:40 »
Hola a todos el problema es que no se como traducir este codigo a lenguaje C, se un poco de ensamblador y nada en C si alguien pudiera pasarlo se lo agradeceria. Seria una buena manera de ver como se hace y despues yo poder seguir con el resto,ya se que es como empezar la casa por el tejado pero he estado mirando ejemplos y sigo sin saber como,es el principio de un robot haxapodo, cuando tenga todo el codigo lo posteare en el foro para quien quiera copiarlo.
Gracias y un saludo.

                               clrf                                  PORTB
                               bcf                                  STATUS,RP1
                               bsf                                  STATUS,RP0
                               movlw                             b'11111000'
                               movwf                             TRISB
                               movlw                             b'11000001'
                               movwf                             OPTION_REG
                               bcf                                  STATUS,RP0

                               movlw                            .25
                               movwf                            Bucle
Mov_1                      movlw                            0x03
                               movwf                            Delay_Cont
                               bsf                                 PORTB,1
Delay2.0                  movlw                            .130
                               movwf                           TMR0
Delay2_2.0              clrwdt             
                               btfss                               INTCON,2
                               goto                               Delay2_2.0
                               bcf                                 INTCON,2
                               decfsz                             Delay_Cont,1
                               goto                               Delay2.0
                               movlw                             0x37
                               movwf                            Delay_Cont
                               bcf                                 PORTB,1
Delay_A                   movlw                            .175
                               movwf                            TMR0
Delay_1                   clrwdt
                               btfss                               INTCON,2
                               goto                                Delay_1
                               bcf                                  INTCON,2
                               decfsz                             Delay_Cont,1
                               goto                                Delay_A
                               decfsz                             Bucle,1
                               goto                                Movimiento_1

 PD: Prometo fijarme como se hace.  :shock: :shock:               
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: No se como empezar
« Respuesta #1 en: 14 de Abril de 2009, 19:22:08 »
Para traducir un lenguaje a otro lenguaje, necesita conocimientos de los dos. Por mas que te lo den echo, no sabrás porqué se hiso de esa manera.

Además, el programa que subiste, así como está, está incompleto. :-)
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: No se como empezar
« Respuesta #2 en: 15 de Abril de 2009, 04:55:21 »
Hola Leon Pic referente a tu respuesta en ensamblador me defiendo bastante bien, se para que sirve cada instruccion y cuando ponerla incluso tengo el programa del cual te pase un trozo todo completo en asm.
Pero, me hubiera gustado ver este trozo en C ya que lo estoy estudiando y intentar hacerlo todo en C, se el significado de while,for,if,else,se lo que es una variable,lo que es un entero o un float etc... incluso no tengo problemas para apagar o encender leds,probe de hacer uno que contara objetos con un sensor conectado a un pin (RA4), y me saliera el resultado por 8 leds conectados al (PORTB), despues de haberlo multiplicado por el preescaler que podia seleccionar con tres interruptores y  me funciono,primero tuve que arreglar un par de fallos  :mrgreen: :mrgreen:pero lo consegui.
Per este no se como empezar como dije antes,por este motivo me gustaria verlo traducido y lo que no entienda lo preguntaria.   
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: No se como empezar
« Respuesta #3 en: 15 de Abril de 2009, 05:11:04 »
Esta bien. Como habías dicho que no sabías casi nada de C, dije lo anterior.

Al programa anterior hay un error. La etiqueta Mov_1 al parecer, abajo de todo el pedazo del programa llamas a Movimiento_1 el cual, asumo que te refieres a Mov_1 ¿Es correcto?
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: No se como empezar
« Respuesta #4 en: 15 de Abril de 2009, 05:47:05 »
Hola de nuevo Leon Pic,perdona por el fallo tan tonto efectivamente deberia ser Mov_1, y referente a lo que me has dicho no te preocupes lo decia porque por mucho que sepas nunca lo sabes todo.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: No se como empezar
« Respuesta #5 en: 15 de Abril de 2009, 22:42:39 »
Estube intentando escribirlo, pero no me salió. Recién estoy dando mis primeros pasos y no tengo el machete de cada instrucción del C a mano.

Intentaré mañana haber si me sale.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado x-logan

  • PIC10
  • *
  • Mensajes: 14
Re: No se como empezar
« Respuesta #6 en: 17 de Abril de 2009, 13:58:51 »
Hola

revise el trozo de código que pones y lo único que hace es poner a 1 el pin 1 del puerto B pasa cierto tiempo y luego lo pone a cero y vuelve a iniciar, ahora si no me equivoco (si lo hago corrijan me) utiliza la interrupción del Timer0, cada que se produce un desbordamiento del timer resta en uno y evalúa si es cero al Delay_Cont y cuando es cero salta al siguiente segmento pone en ceero el bit u1 del puerto B y luego hace un retardo parecido.

Ahora no se en que lenguaje C estas programando con que compilador, yo utilizo el de CCS y ya trae muchas funciones muy útiles lo que implica que solo te preocupas por QUE hacer y ya no tanto en COMO lo hace.

En fin en CSS el trozo de codigo seria muy simple
Código: [Seleccionar]
while(1) // ciclo infinito del programa
{
    output_high(PIN_B1);   // Pone en 1 el pin 1 del puerto B
    delay_ms(1000);         // retardo de 1 segundo
    output_low(PIN_B1);   // Pone en 0 el pin 1 del puerto B
    delay_ms(1000);         // retardo de 1 segundo
}


Bueno espero que de algo te sirva esta información. y date una vuelta por la pagina de CCS

salu2

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: No se como empezar
« Respuesta #7 en: 17 de Abril de 2009, 15:24:49 »
Hola x-logan agradezco tu respuesta,referente al compilador que uso es el ccs lo que no veo claro es que con el codigo que tu me has pasado, el cual ya he usado otras veces,para hacer un retardo para apagar o encender un led si valdria pero lo mi es un poco mas complicado te explico:
Necesito mover 18 servos pero hablaremos solo de uno ya que para el resto solo seria repetir el codigo,se trata de realizar una secuencia de movimiento de una de las patas del hexapodo,pulso de 1ms para posicionar el servo en un extremo el cual repetimos 25 veces para darle tiempo a que se posicione,pasamos a nivel bajo con otra temporizacion de 20ms,pasamos a pulso alto con un pulso de 2ms repetimos 25 veces pasamos otra vez a pulso bajo de 20ms etc etc.
Como  dije en una ocasion a nuestro amigo Leon Pic, tengo el codigo en asm de todas las secuencias de movimiento para que ande pero en C no se como hacerlo por
eso me gustaria ver el trozo de codigo que esta escrito verlo en C.
Por lo que entiendo seria por ejemplo lo que tu has escrito repetirlo 25 veces, el TMR0 fuera contando y al desbordarse saltar a la otra temporizacion pues precisamente esto es lo que no me va bien hacer.
Un saludo y perdona por las molestias.  :)
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado STAI

  • PIC12
  • **
  • Mensajes: 81
Re: No se como empezar
« Respuesta #8 en: 21 de Abril de 2009, 23:29:48 »
Acuerdese que el programa en C, cambia dependiendo del compilador...
Primero que todo le aconcejo (si quiere aprender de verdad) estudiar lenguaje C, te recomiendo Programación en C de Joyanes y Zahonero, pues si pide que se lo hagan no aprende la esencia de esa programación... osea llega a la solución usted mismo de ese pequeño programa...
Segundo determinar el compilador que va a utilizar...
Tercero, familiarizarse con la sintaxis de ese compilador...
Cuarto, a disfrutar del placer de programar en lenguaje C....
Suerte...
Álvaro I. Sandoval T.
Ing. en Control Electrónico e Instrumentación

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: No se como empezar
« Respuesta #9 en: 21 de Abril de 2009, 23:54:55 »
es mas facil que lo empieces de CERO en C, a que te pongas a "traducirlo", no le veo el caso, suponiendo que ya sabes C, no se te hara dificil, ademas hay un hilo de controlando X servos con un solo timer por el maestro RedPIC, sino mal recuerdo, si lo habrio otro, mis mas sinceras disculpas,  con respecto a lo que quieres hacer en C

saludos
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: No se como empezar
« Respuesta #10 en: 22 de Abril de 2009, 04:18:54 »
Gracias a todos por vuestras respuestas.La verdad es que ya lo tengo empezado desde cero como me aconseja scientist, y referente a la respuesta de Stai tiene toda la razon, la unica manera de aprender es hacerlo tu mismo,lo de traducir el trozo de codigo era porque no tengo claro cuando usar el while o el for o el if etc.
De todos modos lo estoy haciendo parte en C y parte en ASM asi tengo mas control sobre los servos.
Un saludo a todos y cuando lo tenga terminado lo colgare del foro para quien lo necesite.    :lol:
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: No se como empezar
« Respuesta #11 en: 26 de Abril de 2009, 12:06:40 »
Hola de nuevo, cambio mi ultimo mensaje no soy capaz de hacer lo del codigo que escribi anteriormente en asm, hacerlo en C me hubiera gustado que alguien me hubiera ayudado un poco pasando este trozo de codigo a C.
Asi hubiera visto como se hace el saltar de una instruccion a otra cuando se desborda el temporizador,cuales son las instrucciones equivalentes en dicho lenguaje.etc.etc... de esta manera aprendi ha programar en asm, o sea viendo ejemplos que no fueran solamente encender leds y conectar interuptores,espero que alguien me de la solucion antes de abandonar el dichoso lenguaje C y volverme al asm,que para mi a dia de hoy es mas facil :(

PD:Me gustaria aprender a programar en C.

Un Saludo y disculpen.
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: No se como empezar
« Respuesta #12 en: 26 de Abril de 2009, 13:38:43 »
Al final no se si entendi bien, pero acá te muestro una manera de hacerlo. Cualquier cosa pregunta.

Código: C
  1. void Pulso_B1(int Repeticiones)
  2. {
  3. int i;
  4.    for(i=1;i<=Repeticiones;++i)
  5.    {
  6.    output_high(pin_B1);
  7.    delay_us(800);
  8.    output_low(pin_B1);
  9.    delay_ms(20);
  10.    }
  11. }
  12.  
  13. Void Pulso_B2(int Repeticiones)
  14. {
  15. int i;
  16.    for(i=1;i<=Repeticiones;++i)
  17.    {
  18.    output_high(pin_B2);
  19.    delay_us(800);
  20.    output_low(pin_B2);
  21.    delay_ms(20);
  22.    }
  23. }
  24.  
  25.  
  26. void main()
  27. {
  28.  
  29.    output_b(0x00);
  30.    set_tris_b(0xF8);
  31.    
  32.    
  33.    Pulso_B1(25); //Llamamos a la funcion y generamos 25 pulsos.
  34.    
  35.    do{
  36.    
  37.    }while(true); //Bucle infinito.-
  38.  
  39. }
No contesto mensajes privados, las consultas en el foro

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: No se como empezar
« Respuesta #13 en: 26 de Abril de 2009, 14:22:33 »
Hola Suky no me funciona en el proteus y no se si lo tengo bien,porfa mirame el porque
Gracias.


////////////////////////////////////////////////////////////////////////////////
//                     Miquel_S     
//                     13/Abril/09
//
//   Programa:   Robot Bipedo (PREDATOR)
//   Version:   0.0
//
//   Dispositivo: PIC 16F873             Compilador:    CCS vs4.023
//   Entorno IDE: MPLAB IDE v8.20a       Simulador:    Proteus 7.2sp6
//
//   Notas: La version 0.0  es el movimiento de una sola pierna. 
//         
//
//            RA0 -> 1º Servo
//            RA1 -> 2º Servo
//            RA2 -> 3º Servo
//            RA3 -> 4º Servo
//            RA4 -> 5º Servo
//            RA5 -> 6º Servo
//
////////////////////////////////////////////////////////////////////////////////

#device PIC16F873                              //pic a utilizar         
#fuses HS,NOWDT,NOPROTECT,NOPUT,BROWNOUT      //ordenes para el programador
#use delay (clock=20000000)                  //Fosc=20Mhz
#use standard_io(A)                         //Puerto A como salida
#bit RA0 = 0x05.0
#bit RA1 = 0x05.1
#bit RA2 = 0x05.2
#define PIN_A0 40
#define PIN_A1 41
#define PIN_A2 42
#define Pulso_A1
#define GLOBAL
 
  int i;                       /*Configuramos las variables*/

///PROGRAMA
       
 void Pulso_A0(int Repeticiones)
{
int i;
   for(i=1;i<=Repeticiones;++i)
   {
   output_high(pin_A0);
   delay_us(800);
   output_low(pin_A0);
   delay_ms(20);
   }
}
 
Void Pulso_A00(int Repeticiones)
{
int i;
   for(i=1;i<=Repeticiones;++i)
   {
   output_high(pin_A0);
   delay_us(800);
   output_low(pin_A0);
   delay_ms(20);
   }
}
 
 
void main()
{
 
   output_a(0x00);
   set_tris_a(0xF8);
   
   
   Pulso_A1(25); //Llamamos a la funcion y generamos 25 pulsos.
   
   do{
   
   }while(1); //Bucle infinito.-
 
}
     
 
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: No se como empezar
« Respuesta #14 en: 26 de Abril de 2009, 15:13:47 »
Habias llamado a Pulso_A1 que no existia. Tambien agregue la directiva #include <16F873A.h> que tiene declarado todos los registros y bits del micro.
Otra cosita, puedes tener variables locales, que son de cada función y las declaras al iniciar la función o variables globales. En este caso yo habia declarado i como variable local de cada función, pero si la declaras al comienzo del código ya no seria necesario definirlas nuevamente.



Código: C
  1. #include <16F873A.h>
  2. #device *=16                              //pic a utilizar  
  3.  
  4.  
  5. #fuses HS,NOWDT,NOPROTECT,NOPUT,BROWNOUT      //ordenes para el programador
  6. #use delay (clock=20000000)                  //Fosc=20Mhz
  7. #use standard_io(A)                         //Puerto A como salida
  8. //#bit RA0 = 0x05.0
  9. //#bit RA1 = 0x05.1
  10. //#bit RA2 = 0x05.2
  11. //#define PIN_A0 40
  12. //#define PIN_A1 41
  13. //#define PIN_A2 42
  14. //#define Pulso_A1
  15. //#define GLOBAL
  16.  
  17.  // int i;                       /*Configuramos las variables*/
  18.  
  19. ///PROGRAMA
  20.        
  21.  void Pulso_A0(int Repeticiones)
  22. {
  23. int i;
  24.    for(i=1;i<=Repeticiones;++i)
  25.    {
  26.    output_high(pin_A0);
  27.    delay_us(800);
  28.    output_low(pin_A0);
  29.    delay_ms(20);
  30.    }
  31. }
  32.  
  33. void Pulso_A00(int Repeticiones)
  34. {
  35. int i;
  36.    for(i=1;i<=Repeticiones;++i)
  37.    {
  38.    output_high(pin_A0);
  39.    delay_us(800);
  40.    output_low(pin_A0);
  41.    delay_ms(20);
  42.    }
  43. }
  44.  
  45.  
  46. void main()
  47. {
  48.  
  49.    output_a(0x00);
  50.    set_tris_a(0xF8);
  51.    
  52.    
  53.    Pulso_A0(25); //Llamamos a la funcion y generamos 25 pulsos.
  54.    
  55.    do{
  56.    
  57.    }while(1); //Bucle infinito.-
  58.  
  59. }
No contesto mensajes privados, las consultas en el foro