Webcampista.com

mucho más que un foro

PIC 18f4550 y CCS compiler

Bueno, no sé si está en la otra pagina o lo puse en el chat, así que lo repito y aclaro mejor.

Los Bootloader se limitan a copiar lo que viene por el puerto serie en la memoria de programa, como ellos (los bootloader) están en la memoria de programa, hemos de tener cuidado y "avisar" de que lo copie "más allá" para no chafarlo. (cosa muy habitual hasta que lo consigues) si lo chafas, has de reprogramar el PIC, esta vez con un programador de verdad.
La información de "echarlo más p'allá" viaja en el .hex, es decir: la genera el compilador, y para desplazar las direcciones (en CCS) son necesarias esas lineas que pongo antes, sobre todo la de #org esas lineas debes ponerlas en todos los programas que quieras cargar con el bootloader, antes de cualquier linea que genere código, y solo una vez (o te machacas a ti mismo)

¿que pasará cuando se arranque un PIC que tiene bootloader y un programa de usuario? lo primero que se ejecutará siempre es el bootloader, que decidirá (con una pata, o por tiempo, o por recepción) si entra en modo programación o no, si es que no, salta al programa de usuario (que debe estar en la dirección correcta).
Con las interrupciones pasa lo mismo, la primera rutina de interrupción la tiene el bootloader (es el que está en esa dirección de memoria) que lo que hará será saltar inmediatamente a la dirección del programa de usuario, y que, debe estar en la dirección correcta.

Con estas lineas que he puesto el código de usuario se pone a partir de la dirección 0x800, ese será su dirección de "reset" y los vectores de interrupción en el 0x808 y 0x818, que corresponden a los vectores de alta y baja prioridad respectivamente.

Todo este rollo para decirte que te asegures de que el hex que generas empieza en la dirección adecuada para no chafar el bootloader (si lo chafas, toca reprogramar y no ganamos nada) ojo con los vectores de interrupción.
Al usar un compilador diferente entre el bootloader y el programa de usuario, hay que saber como lo hace uno y otro, el bootloader del MCC18 (de microchip) salta a la dirección 0x800 con los vectores como he dicho, si quieres que tus programas generados con el CCS se coloquen ahí, pues eso, las instrucciones que pongo antes, aunque ahora sospecho que me falta lo de las interrupciones...

Si se puede hacer, mira el código generado por el CCS en ensamblador, allí tienes las direcciones donde va a parar cada cosa, si está por debajo de 0x800, no te servirá para el bootloader de microchip...
 
Una pregunta rapida, estoy haciendo la placa del gestor y, el pic tiene varias vcc y vdd, las conecto todas???? es que hasta ahora en proto solo conectaba una. gracias.
 
Me pillas, porque trabajo con el de 28 patas, que solo tiene dos masas y un Vcc, en ese no es necesario conectar una de las VCC, pero yo lo haría, cuanto más patas de masa, más inmunidad al ruido, solo será peor si le das muuuucha vuelta a la pista. Recuerda el condensador de desacoplo lo más cerca posible de Vcc y Vdd
 
si, si , no esta mas cerca porque sino compartirian "hole" jejeje
 
joe, puse que no es necesario alimentar una de las Vcc y solo tiene una... me refería a vdd, que no hace falta, pero como digo, yo lo hago y haré siempre.


Hoy tengo que entrar y salir muchas veces, ¿como lo llevas?
 
Mal, solo dormi 2 horas. Voy con sobre dosis de cafeina, Y he pasado por todos los estados, Venga va que llegamos, Va que yo puedo, mierda que me falta tiempo, que le den al proyecto que estoy hasta mas alla, etc, etc....

Ahora solo tengo ganas que llege el miercoles y que se lo que dios quiera, jejejeje.
 
Voy retrasado, a ver si me pongo al dia!
Ayer tuve un lio con la maquina, en arreglar el sistema se tarda un rato, pero intentar hacerlo 50 veces te lleva 300 ratos, ahora ya está.

Como está el tema, era para hoy? ya anda? todo? no puede ser.
 
Por si le interesa a Navegante, aun que sea para aclarar alguna idea para el futuro, hay una página de un tal Chiculita que tiene un bootloader de la minima expresion, creo que es interesante. Tambien tiene el prog terminal para la comunicacion sobre el PC con varias opciones de interpretacion de datos.


Se ofrece el asm y una comparativa de diferentes bootloaders. Explica el tema de posicion del codigo para no interferir con el nuevo codigo cargado.
 
Gracias gerard, hoy tube un mal dia, empeze con un cuadro de ansiedad y hasta que no me hizo efecto el valium y el diazepan, apenas podia respirar.

Ahora ya estoy mas tranquilo, ya he hecho la placa del gestor, luego os subo unas fotos,
 
Caramba, me iba a dormir y me encuentro esto!, si que lo siento, espero que a estas horas ya este todo olvidado.
Cuidate, que queda mucho por aprender :)
 
mucho por aprender, mucho por hacer y poco tiempo, jejejeje,

toy por aquí Oscar, haciendo los diagramas del gestor para pasrlos al c, haber si mañana tengo esto listo y el viernes hago el bootloader y lcd graficas, el finde monto y el lunes lo pruebo y el martes pa gerona.

si me da muchos problemas el bootloader, he pensado utilizar lo que tengo, en un pics y hacer la demo de que funciona el USB y en otro pic monto la comunicacion i2c y las lcds con los 4 cambios del box.
 
Bueno os las subo cuando llege a casa, que a qui no puedo.
 
Y a mi que no me gustaba el C.....

PHP:
/*==============================================================================================

                  GESTOR DE CARRERAS EVO2
                                   por
                            Jaime Roman
                                Oscar
                               Gerard
================================================================================================*/                  
#include <18F4550.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES BORV20                   //Brownout reset at 2.0V
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES MCLR                     //Master Clear pin enabled
#FUSES LPT1OSC                  //Timer1 configured for low-power operation
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES PLL12                    //Divide By 12(48MHz oscillator input)
#FUSES CPUDIV4                  //System Clock by 4
#FUSES USBDIV                   //USB clock source comes from PLL divide by 2
#FUSES VREGEN                   //USB voltage regulator enabled
#FUSES ICPRT                    //ICPRT enabled

#use delay(clock=8000000)
#use i2c(Master,Fast,sda=PIN_B0,scl=PIN_B1)
#use fast_io (A)
#use fast_io (B)
#use fast_io (C)
#use fast_io (D)
#byte CMCON=0xFB4


int1 penalty1=0,penalty2=0,cuentavueltas=0,carrera=0,programar=0,tempo1=0;
int8 display1=0,display2=0,vueltas_coche1=0, vueltas_coche2=0,vueltas=0, vueltas_penalty1=3,vueltas_penalty2=3,select=1;


#int_RB
void  RB_isr(void) 
{
   disable_interrupts(GLOBAL) ;
   //cuentavueltas coche 1
   if(input(pin_B4)==0)
      {
      if(penalty1==1)
         {
         if(select!=5)
            {
            if(select==7)
               {
               vueltas_penalty1--;
               if(tempo1==1)
                  {
                  //activar timer3
                  }
                else
                  {
                  tempo1=1;
                  //activar timer0
                  }
               }
            else
               {
               vueltas_penalty1=3;
               if(penalty2==1)select=7;
               else select=5;
               }
            }
         else
            {
            vueltas_penalty1--;
            //activar timer0
            }
         }
      if(cuentavueltas==1)
         {
         vueltas_coche1--;
         if(vueltas_coche1==0)
            {
            if(vueltas_coche2!=0) select=9;
            }
         else
            {
            if(penalty2=0)select=8;
            }
         }
      else vueltas_coche1++;   
      }
    
    //Cuenta vueltas coche2
    if(input(pin_B5)==0)
      {
      if(penalty2==1)
         {
         if(select!=6)
            {
            if(select==7)
               {
               vueltas_penalty2--;
               if(tempo1==1)
                  {
                  //activar timer3
                  }
                else
                  {
                  tempo1=1;
                  //activar timer0
                  }
               }
            else
               {
               vueltas_penalty2=3;
               if(penalty1==1)select=7;
               else select=6;
               }
            }
         else
            {
            vueltas_penalty2--;
            //activar timer0
            }
         }
      if(cuentavueltas==1)
         {
         vueltas_coche2--;
         if(vueltas_coche2==0)
            {
            if(vueltas_coche1!=0) select=9;
            }
         else
            {
            if(penalty1=0)select=8;
            }
         }
      else vueltas_coche2++;
      }
   
   //Boton de programación
   if(input(pin_B6)==0)
      {
      output_bit(PIN_d2,(~input(pin_d2)));
      }
   
   //boton inicio
   if(input(pin_B7)==0)
      {
      output_bit(PIN_d3,(~input(pin_d3)));
      }
   delay_ms(20);
   enable_interrupts(GLOBAL);
}                                
                               
#int_COMP                     
void  COMP_isr(void) 
{
   if(C1OUT==1)output_high (pin_D4);
   else output_low (pin_D4);
   if(C2OUT==1)output_high (pin_D5);
   else output_low (pin_D5);  
   clear_interrupt(INT_COMP);
}  



void main()
{
   set_tris_D (0b11000000);
   set_tris_A (0b11111111);
   set_tris_B (0b11111100);
   
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
  
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_RB);
   enable_interrupts(INT_COMP); 
   setup_vref(VREF_LOW|5|VREF_COMP);
   CMCON=0b00000110;
                         
      
   setup_oscillator(OSC_8MHZ|OSC_TIMER1|OSC_31250|OSC_PLL_OFF);
   output_D(0);
   // TODO: USER CODE!!
     
   while(1);
   
   switch(select)
      {
      case 1:
      
      break;
      
      case 2:
      
      break;
      
      
      
      
      
      }
   
}

pedazo codigo que me esta saliendo. jejejeje
 
Veo que ya desactivas la interrupción del comparador ¿lo has probado así?

Como veo que has cambiado algo del comparador, puedes hacer esto:

en vez de
if(C1OUT==1)output_high (pin_D4);
else
output_low (pin_D4);

puedes poner
output_pin(pin_D4, C1OUT);


Será aún más rápido.

¿porque sigues metiendo un retardo de 20ms en la interrupción de RB?

¿has probado primero una cosa y después otra?
 
jejeje, es que a esa parte todavia no habia llegado, jejeje, los rebotes los hago con hard, ya veras que placa mas chula cuando pueda subir las fotos, asi que va fuera. y al comparador todavia no he llegado, estoy con su diagrama de flujo.

Con el miedo que me daba el puto C,y ahora, hasta me esta gustando y todo.
 
Animo, aunque mejor que empieces poco a poco, primero un bloque, por ejemplo el cuanta vueltas, después otro bloque, el comparador, después otro... así te aseguras que un bloque funciona, cuando todos los bloques funcionen por separado, los juntas de dos en dos, y después todos.
 
nos echan pa casa, en 20 min subo fotos.
 
lo prometido es deuda, una parte del gestor.

Gestor.jpg

Y este es le box, lo que tenemos que hacer con el bootloader, lcd, etc.

box.jpg

box2.jpg

En cuanto a tu sugerencia, ya lo tenia previsto, pero un profe hoy me ha fastidiado un poco el planing, no haciendsome las placas que me faltaban, asi que mañana a saco, Probaré suerte, y si pita, eso que me llevo. Sino pos por partes.
 
Joer con el programita...... no me estraña que me estresara,:D:D

PHP:
/*==============================================================================================

                  GESTOR DE CARRERAS EVO2
                      por Jaime, Oscar y Gerard
================================================================================================*/                  
#include <18F4550.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES BORV20                   //Brownout reset at 2.0V
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES MCLR                     //Master Clear pin enabled
#FUSES LPT1OSC                  //Timer1 configured for low-power operation
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES PLL12                    //Divide By 12(48MHz oscillator input)
#FUSES CPUDIV4                  //System Clock by 4
#FUSES USBDIV                   //USB clock source comes from PLL divide by 2
#FUSES VREGEN                   //USB voltage regulator enabled
#FUSES ICPRT                    //ICPRT enabled

#use delay(clock=8000000)
#use i2c(Master,Fast,sda=PIN_B0,scl=PIN_B1)
#use fast_io (A)
#use fast_io (B)
#use fast_io (C)
#use fast_io (D)
#byte CMCON=0xFB4

//flags
int1 penalty1=0,penalty2=0,cuentavueltas=0,carrera=0,programar=0,tempo1=0,tempo2=0,tempo3=0,tempo4=0;

//datos
int8 display1=0,display2=0,vueltas_coche1=0, vueltas_coche2=0,vueltas=0, vueltas_penalty1=3,vueltas_penalty2=3,select=1;

//Tabla bin a 7seg
int dec7[12]={0b0111111,  //0
              0b0000110,  //1
              0b1011011,  //2
              0b1001111,  //3
              0b1100110,  //4
              0b1101101,  //5
              0b1111101,  //6
              0b0100111,  //7
              0b1111111,  //8
              0b1101111,  //9
              0b1110011,   //P(10)
              0b1010000};   //r(11)
char buffer_car[5];
void saa1064_putc(int,int,int,int);
#int_RB
void  RB_isr(void) 
{
   disable_interrupts(GLOBAL) ;
   //cuentavueltas coche 1
   if(input(pin_B4)==0)
      {
      if(penalty1==1)
         {
         if(select!=5)
            {
            if(select==7)
               {
               vueltas_penalty1--;
               if(tempo2==1)
                  {
                  tempo3=1;
                  //activar timer3
                  }
                else
                  {
                  tempo1=1;
                  //activar timer0
                  }
               }
            else
               {
               vueltas_penalty1=3;
               if(penalty2==1)select=7;
               else select=5;
               }
            }
         else
            {
            vueltas_penalty1--;
            tempo1=1;
            //activar timer0
            }
         }
      if(cuentavueltas==1)
         {
         vueltas_coche1--;
         if(vueltas_coche1==0)
            {
            if(vueltas_coche2!=0) select=9;
            }
         else
            {
            if(penalty2=0)select=8;
            }
         }
      else vueltas_coche1++;   
      }
    
    //Cuenta vueltas coche2
    if(input(pin_B5)==0)
      {
      if(penalty2==1)
         {
         if(select!=6)
            {
            if(select==7)
               {
               vueltas_penalty2--;
               if(tempo1==1)
                  {
                  tempo4=1;
                  //activar timer3
                  }
                else
                  {
                  tempo2=1;
                  //activar timer0
                  }
               }
            else
               {
               vueltas_penalty2=3;
               if(penalty1==1)select=7;
               else select=6;
               }
            }
         else
            {
            vueltas_penalty2--;
            tempo2=1;
            //activar timer0
            }
         }
      if(cuentavueltas==1)
         {
         vueltas_coche2--;
         if(vueltas_coche2==0)
            {
            if(vueltas_coche1!=0) select=9;
            }
         else
            {
            if(penalty1=0)select=8;
            }
         }
      else vueltas_coche2++;
      }
   
   //Boton de programación
   if(input(pin_B6)==0)
      {
      if(carrera==0)
         {
         if(programar==0)
            {
            programar=1;
            select=2;
            }
         else
            {
            if(vueltas>=99)
               {
               vueltas=0;
               select=2;
               }
            else
               {
               vueltas++;
               select=2;
               }
            }
            
         }
      else
         {
         if(cuentavueltas==0)
            {
            if(C1OUT==0&&C2OUT==0)
               {
               programar=1;
               vueltas=0;
               carrera=0;
               select=2;
               }
            }
         }
         
      }
   
   //boton inicio
   if(input(pin_B7)==0)
      {
      if(programar==1)
         {
         programar=0;
         if(vueltas==0)
            {
            cuentavueltas=0;
            select=1;
            }
         else
            {
            cuentavueltas=1;
            select=1;
            }
         }
      else select=3;      
      }
   enable_interrupts(GLOBAL);
}                                
                               
#int_COMP                     
void  COMP_isr(void) 
{
   //seguidor de tension1
   if(C1OUT==0)
      {
      if(select=3) penalty1=1;
      else
         {
         if(penalty1=0)
            {
            if(penalty2=0)
               {
               if(C2OUT=0)select=8;
               else select=4;
               }
            }
         }
      }
   else
      {
      if(select=8)
         {
         select=4;
         }
      else
         {
         if(tempo1=1)
            {
            if(penalty1=1)
               {
               select=11;
               }
            }
         }
      }
      
   //segudor tension coche2   
   if(C2OUT==0) {
      if(select=3) penalty1=1;
      else
         {
         if(penalty2=0)
            {
            if(penalty1=0)
               {
               if(C1OUT=0)select=8;
               else select=4;
               }
            }
         }
      }
   else
      {
      if(select=8)
         {
         select=4;
         }
      else
         {
         if(tempo2=1)
            {
            if(penalty2=1)
               {
               select=11;
               }
            }
         }
      }  
   clear_interrupt(INT_COMP);
}  



void main()
{
   set_tris_D (0b11111101);
   set_tris_A (0b11111111);
   set_tris_B (0b11111100);
   
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
  
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_RB);
   enable_interrupts(INT_COMP); 
   setup_vref(VREF_LOW|5|VREF_COMP);
   CMCON=0b00000110;
                         
      
   setup_oscillator(OSC_8MHZ|OSC_TIMER1|OSC_31250|OSC_PLL_OFF);
   output_D(0);
   // TODO: USER CODE!!
     
   while(1);
   
   switch(select)
      {
      case 1://modo stanby
      i2c_start();
      i2c_write(0b01110110);
      i2c_write(0x00);
      i2c_write(0x40);
      i2c_write(0x1f);
      i2c_write(0x00);
      i2c_stop();
      vueltas_coche2=vueltas;
      vueltas_coche1=vueltas;
      sprintf(buffer_car,"%02u%02u",vueltas_coche2,vueltas_coche1);
      saa1064_putc(buffer_car[0]-0x30,buffer_car[1]-0x30,buffer_car[2]-0x30,buffer_car[3]-0x30);
      break;
      
      case 2://Modo Programación
      i2c_start();
      i2c_write(0b01110110);
      i2c_write(0x00);
      i2c_write(0x40);
      i2c_write(0x00);
      i2c_write(0x00);
      i2c_stop();
      sprintf(buffer_car,"%02u%02u",vueltas,vueltas);
      saa1064_putc(dec7[10],dec7[11]-0x30,buffer_car[2]-0x30,buffer_car[3]-0x30);
      break;
      
      case 3://modo inicio de carrera
      i2c_start();
      i2c_write(0b01110110);
      i2c_write(0x00);
      i2c_write(0x40);
      i2c_write(0x00);
      i2c_write(0x00);
      i2c_stop();
      delay_ms(500);
      //1 rojo
      i2c_start();
      i2c_write(0b01110110);
      i2c_write(0x00);
      i2c_write(0x40);
      i2c_write(0x01);
      i2c_write(0x00);
      i2c_stop();
      output_high (pin_D1);
      delay_ms(500);
      output_low (pin_D1);
      delay_ms(500);
      //2 rojo
      i2c_start();
      i2c_write(0b01110110);
      i2c_write(0x00);
      i2c_write(0x40);
      i2c_write(0x03);
      i2c_write(0x00);
      i2c_stop();
      output_high (pin_D1);
      delay_ms(500);
      output_low (pin_D1);
      delay_ms(500);
      //3 rojo
      i2c_start();
      i2c_write(0b01110110);
      i2c_write(0x00);
      i2c_write(0x40);
      i2c_write(0x07);
      i2c_write(0x00);
      i2c_stop();
      output_high (pin_D1);
      delay_ms(500);
      output_low (pin_D1);
      delay_ms(500);
      //4 rojo
      i2c_start();
      i2c_write(0b01110110);
      i2c_write(0x00);
      i2c_write(0x40);
      i2c_write(0x0f);
      i2c_write(0x00);
      i2c_stop();
      output_high (pin_D1);
      delay_ms(500);
      output_low (pin_D1);
      delay_ms(500);
      //5 rojo
      i2c_start();
      i2c_write(0b01110110);
      i2c_write(0x00);
      i2c_write(0x40);
      i2c_write(0x1f);
      i2c_write(0x00);
      i2c_stop();
      output_high (pin_D1);
      delay_ms(500);
      output_low (pin_D1);
      delay_ms(1000);
      //apagado
      i2c_start();
      i2c_write(0b01110110);
      i2c_write(0x00);
      i2c_write(0x40);
      i2c_write(0x00);
      i2c_write(0x00);
      i2c_stop();
      select=13;
      break;
      
      case 4://modo precaución
      i2c_start();
      i2c_write(0b01110110);
      i2c_write(0x00);
      i2c_write(0x40);
      i2c_write(0x60);
      i2c_write(0xe0);
      i2c_stop();
      sprintf(buffer_car,"%02u%02u",vueltas_coche2,vueltas_coche1);
      saa1064_putc(buffer_car[0]-0x30,buffer_car[1]-0x30,buffer_car[2]-0x30,buffer_car[3]-0x30);
      break;
      
      case 5://modo penalty1
      
      
      
      break;
      
      case 6://modo penalty2
      
      
      
      break;

      case 7://modo penalty1y2
      
      
      
      break;
      
      case 8://modo carrera ok
      i2c_start();
      i2c_write(0b01110110);
      i2c_write(0x00);
      i2c_write(0x40);
      i2c_write(0x00);
      i2c_write(0x1f);
      i2c_stop();
      sprintf(buffer_car,"%02u%02u",vueltas_coche2,vueltas_coche1);
      saa1064_putc(buffer_car[0]-0x30,buffer_car[1]-0x30,buffer_car[2]-0x30,buffer_car[3]-0x30);
      
      break;

      case 9://modo gana coche1
      
      
      
      break;
      
      case 10://modo gana coche2
      
      
      
      break;
      
      case 11://modo realizacion penalty1
      
      
      
      break;
      
      case 12://modo realizacion penalty2
      
      
      
      break;
      
      case 13://modo intermedio
      delay_ms (500);
      if(select==13)select=8;   
      break;
      
      }
   
}  
void saa1064_putc(int d4,int d3,int d2,int d1)
{
i2c_start();
i2c_write(0b01110000); //dirección
i2c_write(0x00);
i2c_write(0b1000001);  //modo dinámico, sin parpadeo, 12mA

i2c_write(dec7[d1]);
i2c_write(dec7[d2]);
i2c_write(dec7[d3]);
i2c_write(dec7[d4]);

i2c_stop();
}

Espero y rezo por que ande, por que si me toca ir probandolo por partes, no acababo en todo el finde.

Haber con un poco de suerte este finde podré hacer la demos del box, aunque sea sin bootloader.
 
Bueno, no cuentas nada más, ayer por la mañana tuve que hacer un viaje relámpago al pueblo y pensé que podría entrar por la tarde, pero no pudo ser, no me acabo de enterar la vida tan ajetreada que llevan las niñas cuando yo no estoy... hoy por la mañana tampoco he podido por que tenía que llevar a la mayor a un maratón de gimnasia rítmica y por fin pude entrar.

A ver, leído por encima y suponiendo que i2c funcione, tiene buena pinta, no acabo de entender lo que es cada "penalty", supongo que el uno y el dos son por cada coche, pero me pierdo con lo que es cada uno, te sugiero que pongas más comentarios, para que podamos enterarnos y al mismo tiempo veas si lo que estás diciendo que es, es en realidad lo que es :scratch: quiero decir que hay veces que estás poniendo una cosa y al escribirlo te das cuenta de que no es así.
 
Pues si tienes razon, esta vez esta muy poco comentado, para lo que estoy acostumbrado, pero comparto de unos diagramas de flujo muy, pero que muy estudiados, cuando lo paso al c entre que no se, y que no quiero cagarla, en vez de comentarlo, lo que hago es repasarlo una y otra vez....:) pero si ahora lo comentaré.

Bueno hoy me he dedicado al maquetismos y ha falta de colocar las placas, los sensores, la trencilla conductora, y una mano de pintura blanca, esto es como esta quedando el box.

P5210502.jpeg
P5210503.jpeg
P5210504.jpeg
 
Que chulo te esta quedando todo esto! has fresado las ranuras de las pistas? las pistas las sacaras de otros tramos comerciales? para cuando en el montilivi?

No queria marear con el tema del programa, pensaba que Oscar ya estaba al tanto de los detalles...la verdad es que no podia seguir el codigo y pensaba que era culpa mia :)

Con el follon de If then else me he perdido, yo tambien empezaba por los diagramas, luego los adaptaba al lenguaje o a las intrucciones disponibles. Conoces el prog DIA? para presentar diagramas creo que esta bien y es gpl.

Animo, que ya lo tienes casi a punto.
 
Que chulo te esta quedando todo esto! has fresado las ranuras de las pistas? las pistas las sacaras de otros tramos comerciales? para cuando en el montilivi?

Si, he fresado todas las ranuras de las pistas, con fresa de 3mm y una profundidad de 6mm, porque asi tambien pueden pasar sin problemas los coches de otras casas comerciales.
Si a pistas te refieres a la parte metalica de conduccion, no, lo hago con muchos metros de trencilla, que pacientemente tengo que pegar.

Montilivi?????? Gerard, me tienes descolocado totalmente...... Como sabes lo de Montilivi?????? por si he dicho que es un concurso y que lo tengo que presentar en Gerona, pero no dije donde...... Como has sabido que es allí????

No queria marear con el tema del programa, pensaba que Oscar ya estaba al tanto de los detalles...la verdad es que no podia seguir el codigo y pensaba que era culpa mia :)

Con el follon de If then else me he perdido, yo tambien empezaba por los diagramas, luego los adaptaba al lenguaje o a las intrucciones disponibles. Conoces el prog DIA? para presentar diagramas creo que esta bien y es gpl.

Es lo que pasa cuando no conoces el lenguaje, Yo con bits me manejo, con lotes tambien, pero con el C ni P.I. Asi que abuso del If que digamos que es lo mas parecido al tan recurrido goto/return del ensambler.

y si conozco el dia, el año pasado le dimos buena cuenta de él en c-7 Tecnicas de programacion.

Animo, que ya lo tienes casi a punto.

Muchas gracias, por los animos, Ya sabeis que os debo mucho, y que si no fuera por vosotros, no hubiese llegado hasta aquí. Así que por vosotros, voy a ir a por todas, hasta el final, aunque me cueste una parte de mi salud.
 
Arriba
© 2004-2024 Webcampista.com