TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: kidpic en 15 de Enero de 2010, 09:15:28

Título: verficación
Publicado por: kidpic en 15 de Enero de 2010, 09:15:28
Tengo este programita de eescritura en eeprom
desearia saber si la sintaxis de escritura e incremento de la dirección estan correctos

En primer lugar definiria
 
long i=0;            // inicio de direccion de memoria
long value=0;     //  variable donde guardo la lectura del adc

//me meto en un bucle hasta llegar a la direccion 16384
while(i<=16384);
{
value = read_adc();             //leo el conversor
write_ext_eeprom (i,value);   //escribo en la direccion 00 la parte baja del adc
i=i++;                                  //  incremento la direccion para la parte alta
value= value>>8;                 // roto para guardar la parte alta
write_ext_eeprom (i,value); // guardo en la direccion siguiente la parte alta
i=i++                                // incremento memoria para que guarde otro dato
}

Bueno esto seria el tronco del programita, por supuesto tengo que configurar el adc, el pic etc......
Gracias por el aporte!!!!
Título: Re: verficación
Publicado por: Suky en 15 de Enero de 2010, 09:22:05
En el bucle vas a guardar 16385 datos, es correcto? mmm...
Con respecto al incremento, se hace solo i++; no es necesario la asignación a la misma variable.


Saludos!
Título: Re: verficación
Publicado por: kidpic en 15 de Enero de 2010, 13:13:35
La idea es : "i" es el puntero de la direccion de memoria,  esta se va incrmentando para que se guarde un  dato  de 1 byte en la dirección de "i". y asi hasta llegar a la maxima dirección que es la 0x7ff  o sea la 32767 e decimal
Título: Re: verficación
Publicado por: Suky en 15 de Enero de 2010, 13:21:01
Pero 0x7FF es 2047  :shock:

Si es 0x7FF seria:

Código: C
  1. i=0;
  2. while(i<0x800){
  3.     value = read_adc();            
  4.     write_ext_eeprom (i++,value);    // Aquí guarda en i y después incrementa en 1 (i+1)
  5.     write_ext_eeprom (i++,(value>>8));
  6. }


Saludos!
Título: Re: verficación
Publicado por: kidpic en 15 de Enero de 2010, 18:56:17
Gracias por el aporte suky: de acuerdo a lo escrito sería 
write_ext_eeprom (i++,(value>>8));     En esta línea desplaza y guarda  en i incrementado ? e incrementa i nuevamente  ??
Título: Re: verficación
Publicado por: fidodido18 en 15 de Enero de 2010, 19:05:34
Gracias por el aporte suky: de acuerdo a lo escrito sería 
write_ext_eeprom (i++,(value>>8));     En esta línea desplaza y guarda  en i incrementado ? e incrementa i nuevamente  ??

utiliza i en el valor actual y luego le suma 1, segun tengo entendido si quieres que sume antes y luego la utilice es ++i  en todo caso siempre se incrementa i cuando pasa a la siguiente instrucción.
Título: Re: verficación
Publicado por: Suky en 15 de Enero de 2010, 19:19:03
Exactamente como dice fidodido18, en este caso tienes que usar i++, para que use el valor actual, y después incremente en 1 para el posterior almacenamiento.

Saludos!
Título: Re: verficación
Publicado por: kidpic en 15 de Enero de 2010, 20:20:29
Gracias por el aporte muchachos!!!
Título: Re: verficación
Publicado por: kidpic en 16 de Enero de 2010, 23:52:05
Ahora como se haria para leer esas direcciones de memorias.??? :-/ :-/ :-/
Título: Re: verficación
Publicado por: Suky en 17 de Enero de 2010, 15:08:42
Una opción puede ser:

Código: C
  1. ValorLeido=((long)read_ext_eeprom(i++)+((long)write_ext_eeprom(i++)<<8));

O separarlo en terminos para no confundirse.

Código: C
  1. ValorLow=read_ext_eeprom(i++);
  2. ValorHigh=read_ext_eeprom(i++);
  3. Valor=((long)ValorHigh<<8);  // o ((long)ValorHigh*0x100)  *
  4. Valor+=ValorLow; //    *

O usar

Código: C
  1. Valor=make16(ValorHigh,ValorLow);

en reemplazo de (*)


Saludos!
Título: Re: verficación
Publicado por: kidpic en 17 de Enero de 2010, 22:50:10
Gracias suky!!! lo implementare y te cuento
Título: Re: verficación
Publicado por: bigluis en 18 de Enero de 2010, 03:02:49
Por si les interesa MikroC trae funciones que se utilizan para leer los bytes que componen los valores ya sean int ó long. estas son:

Lo(long number)        Regresa el byte más bajo del numero, bits 0..7
Hi(long number)         Regresa el byte siguiente al más bajo del numero, bits 8..15
Higher(long number)   Regresa el byte anterior al más alto del numero, bits 16..23
Highest(long number)  Regresa el byte más alto del numero, bits 24..32

y para ello hay que incluir la librería built_in.h

Supongo que CCS trae alguna librería similar, estas librerías hacen que el codigo sea más corto que si rotaramos los bits del numero. Sino las traen creo que sería posible adaptarlas o hacer algunas para CCS
Título: Re: verficación
Publicado por: Nocturno en 18 de Enero de 2010, 03:13:20
En CCS también existen: make8, make16, make32
Título: Re: verficación
Publicado por: Suky en 18 de Enero de 2010, 09:06:35
Exacto, que en si hace mas o menos lo mismo. El problema de usar estas funciones tan especificas es que uno se acostumbra y cuando le toca usar otro compilador no sabe como resolverlo!  :x


Saludos
Título: Re: verficación
Publicado por: kidpic en 22 de Enero de 2010, 16:13:34
Como podria mandar esos valores leidos a la pc, tengo este programita
{
      for(cnt=0;cnt<=8;cnt++)       //Lectura de los 7 primeros bytes de la eeprom
         {
         dat_serie[cnt]=read_ext_eeprom(cnt);
         }
      for(cnt=0;cnt<=8;cnt++)       //Visualiza los 7 primeros bytes de la eeprom
         {
         printf("BYTE %u=%3u \r",cnt,dat_serie[cnt]);
         }
   }

Pero solo funciona en el proteus. cuando lo llevo al y pc no camina. Que puede estar sucediendo
Título: Re: verficación
Publicado por: fidodido18 en 22 de Enero de 2010, 16:26:48
Como podria mandar esos valores leidos a la pc, tengo este programita
{
      for(cnt=0;cnt<=8;cnt++)       //Lectura de los 7 primeros bytes de la eeprom
         {
         dat_serie[cnt]=read_ext_eeprom(cnt);
         }
      for(cnt=0;cnt<=8;cnt++)       //Visualiza los 7 primeros bytes de la eeprom
         {
         printf("BYTE %u=%3u \r",cnt,dat_serie[cnt]);
         }
   }

Pero solo funciona en el proteus. cuando lo llevo al y pc no camina. Que puede estar sucediendo

lo mas probable es que tengas una configuración de baudios diferente en el PC y PIC, verifica eso!

si no es eso, el problema tendría que ser del hardware!