Autor Tema: Por fa una ayudita para escribir en la memoria interna del PIC18F4550  (Leído 6442 veces)

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

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Hola muchachos que tal? he venido a ustedes porque de verdad que necesito ayuda para escribir y leer en la memoria EEPROM interna del PIC 18F4550... se que hay instrucciones pero de verdadno entiendo.... Siempre he tenido problemas a la hora de programar memorias d cualquier tipo :( .... Por ejemplo, si yo quisiera hacer una pequeña lista de palabras y guardarlas en memoria, por ejemplo:

Ingredientes         Tipo

Azucar                     A
Harina                      B
Huevos                     A
.... etc.

y así sucesivamente y luego leer cada una de esas palabras... como haría, alguien e puede ayudar, explicar???? necesito un empujonsito...................


Y disculpen la molestia........

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Por fa una ayudita para escribir en la memoria interna del PIC18F4550
« Respuesta #1 en: 27 de Mayo de 2009, 19:42:00 »
Podrias nadams direccionar a la memoria con un #define y ya

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Por fa una ayudita para escribir en la memoria interna del PIC18F4550
« Respuesta #2 en: 28 de Mayo de 2009, 01:03:23 »
Podria servirte esta:

Código: CSS
  1. void EscribirNumeroEEPROM(int8 Dir, int8 Lenght)//.............................................Escribo numero en la EEPROM
  2. {
  3.         int8 i=0;
  4.  
  5.         for(i=Dir; i<Dir+Lenght; i++)
  6.                 write_eeprom(i,BuferData[i-Dir]);
  7. }

Y antes del main, defines las direcciones de lo que quieras guardar con #defines, tal como lo dijo darck:

Código: CSS
  1. #define DirEEContrasena                 0

Saludos
El papel lo aguanta todo

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Por fa una ayudita para escribir en la memoria interna del PIC18F4550
« Respuesta #3 en: 28 de Mayo de 2009, 09:57:28 »
Hola, agradezco sus respuestas....

haber, mlo_ una pregunta...

cuando tengo esto:

void EscribirNumeroEEPROM(int8 Dir, int8 Lenght)

el int8 lenght seria para escibir una palabra???

y por ejemplo:

write_eeprom(i,BuferData[i-Dir]);
como?, como escrbiria por ejemplo harina??? no entiendo mucho... estoy  más enredada que un papagayo!!!!!! estoy vuelta un 8... :z)

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Por fa una ayudita para escribir en la memoria interna del PIC18F4550
« Respuesta #4 en: 28 de Mayo de 2009, 10:06:40 »
 :D :D

Lenght es el tamaño del string que vas a escribir en la EEPROM, puede ser 1,2,3 ...... etc hasta 255 ....

Ejemplo:
Vamos a escribir "harina":

Lo primero es enviar ese string a nuestro bufer de datos BuferData[], eso se puede hacer mediante un strcpy(); y listo. Luego vamos a pasarlo a la EEPROM:

Código: [Seleccionar]
EscribirNumeroEEPROM(DirEEString1,6);
En donde previamente he definido que
Código: [Seleccionar]
#define DirEEString1     0
Por lo tanto el string "harina" se va a guardar desde la posicion 0. El tamaño del string es 6, este valor lo puedes ingrsar directamente o lo puedes calcular tambien ... todo depende de como quieras el programa.

Saludos
El papel lo aguanta todo

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Por fa una ayudita para escribir en la memoria interna del PIC18F4550
« Respuesta #5 en: 28 de Mayo de 2009, 12:16:52 »
Um gracias por tu respuesta mlo_ Pero ya va, lento por favor, que esto se me hace un poco dificil..

No entiendo algo.... Como yo le digo al pic:


Mira pic, escribe Harina en tu memoriz y al lado de la palabra harina escribe tipo A..??? con que instrucción mando hariana y tipo A?


Atte: Enigma... La llanerita de Guayana :-) y disculpa mi brutalidad..... :-) :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Por fa una ayudita para escribir en la memoria interna del PIC18F4550
« Respuesta #6 en: 28 de Mayo de 2009, 13:02:06 »
Hola.

Escribes despues del string harina el tipo y listo, en este caso se escribiria:

Código: [Seleccionar]
EscribirNumeroEEPROM(7,1);
Ya que como harina tiene 6 bytes, hay que escribirlo despues del ultimo byte y como solo es una A, entonces el lenght es 1.

Antes de usar la funcion EscribirNumeroEEPROM(); bebes copiar lo que quieres enviar a la variable BuferData[].
El papel lo aguanta todo

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Por fa una ayudita para escribir en la memoria interna del PIC18F4550
« Respuesta #7 en: 28 de Mayo de 2009, 15:08:10 »
Aja... entendiendo más o menos... rayos tengo que buscar más información acerca de esto... tengo una nube de polvo frente  mis ojos!!!!!!!!!! :(


Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Por fa una ayudita para escribir en la memoria interna del PIC18F4550
« Respuesta #8 en: 28 de Mayo de 2009, 17:08:00 »
la escritura a una memoria siempre va de la mano con la tabla de direcciones, antes de leer/escribir se debe asignar la dirección de memoria donde se aloja el dato.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Por fa una ayudita para escribir en la memoria interna del PIC18F4550
« Respuesta #9 en: 04 de Junio de 2009, 22:34:36 »
Hola.... miren este código.... que estoy haciendo mal... No se me escribe nada en la memoria o por lo menos no se muestra en el hyperterminal.... Index es el puntero que se mueve por cada dirección de memoria para escribir un dato n la dirección a la que apunte el puntero index...

#include <18F4550.h>
#fuses NOPROTECT,NOCPD,NOLVP,NOMCLR,XT
#use fast_io (A)
#use fast_io (B)
#use fast_io (C)
#use fast_io (D)
#use fast_io (E)
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)           // Habilita las funciones RS232, velocidad a 9600 baudios
#byte portd= 0xF83
#byte portb= 0xF81
#byte portc= 0xF82
#byte porta= 0xF80


int seccionador,index,datos,j;
void main(void)
   {
         set_tris_d(0x00);                                // Puerto D, como b'00000000 (salida)
         set_tris_b(0x00);                                // Puerto B, como b'00000000 (salida)
         set_tris_a(0xFF);                                // Puerto A, como b'11111111 (entrada)
         set_tris_c(0xFF);                                // Puerto c, como b'11111111 (entrada)
         setup_adc(ADC_OFF);                              // Deshabilito el conversor A/D
         setup_adc_ports(NO_ANALOGS);                     // Deshabilito las entradas análogicas
         output_b(0);                                     // Limpio el puerto B
         output_d(0);                                     // Limpio el puerto D
         output_a(0);                                     // Limpio el puerto A
         output_c(0);                                     // Limpio el puerto C
         delay_ms(10);                                    // Una demorita de 10 mS
         while(true)
            {
/////////////////////Enciende los leds cuando los seccionadores están en "1" lógico/////////////////////

            index= read_EEPROM(0x00);                     // Leo la memoria interna
            if(index==255)                                // Si la memoria interna está en la posición
            {index=0;}                                    // Entonces la mando a escribir desde el principio
            while(input(PIN_E0)==1)
               {
               if(input(PIN_A0)==1)                       // Seccionador 1
                  {
                     output_high(PIN_D0);                 // Enciendo un led de indicación
                     seccionador= 1;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
               else
                  {
                     output_low(PIN_D0);                  // Apago el led de indicación
                  }
               if(input(PIN_A1)==1)                       // Seccionador 2
                  {
                     output_high(PIN_D1);                 // Enciendo un led de indicación
                     seccionador= 2;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_D1);                  // Apago el led de indicación
                  }
               if(input(PIN_A2)==1)                       // Seccionador 3
                  {
                     output_high(PIN_D2);                 // Enciendo un led de indicación
                     seccionador= 3;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_D2);                  // Apago el led de indicación
                  }
               if(input(PIN_A3)==1)                       // Seccionador 4
                  {
                     output_high(PIN_D3);                 // Enciendo un led de indicación
                     seccionador= 4;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_D3);                  // Apago el led de indicación
                  }
               if(input(PIN_A4)==1)                       // Seccionador 5
                  {
                     output_high(PIN_D4);                 // Enciendo un led de indicación
                     seccionador= 5;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_D4);                  // Apago el led de indicación
                  }
               if(input(PIN_A5)==1)                       // Seccionador 6
                  {
                     output_high(PIN_D5);                 // Enciendo un led de indicación
                     seccionador= 6;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_D5);                  // Apago el led de indicación
                  }
               if(input(PIN_C0)==1)                       // Seccionador 7
                  {
                     output_high(PIN_D6);                 // Enciendo un led de indicación
                     seccionador= 7;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_D6);                  // Apago el led de indicación
                  }
               if(input(PIN_C1)==1)                       // Seccionador 8
                  {
                     output_high(PIN_D7);                 // Enciendo un led de indicación
                     seccionador= 8;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_D7);                  // Apago el led de indicación
                  }
               if(input(PIN_C2)==1)                       // Seccionador 9
                  {
                     output_high(PIN_B0);                 // Enciendo un led de indicación
                     seccionador= 9;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_B0);                  // Apago el led de indicación
                  }
               if(input(PIN_C4)==1)                       // Seccionador 10
                  {
                     output_high(PIN_B1);                 // Enciendo un led de indicación
                     seccionador= 10;                     // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_B1);                  // Apago el led de indicación
                  }
               }
/////////////////////Enciende los leds cuando los seccionadores están en "0" lógico/////////////////////

              if(input(PIN_A0)==0)                       // Seccionador 1
                  {
                     output_high(PIN_D0);                 // Enciendo un led de indicación
                     seccionador= 1;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }

               else
                  {
                     output_low(PIN_D0);                  // Apago el led de indicación
                  }
               if(input(PIN_A1)==0)                       // Seccionador 2
                  {
                     output_high(PIN_D1);                 // Enciendo un led de indicación
                     seccionador= 2;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_D1);                  // Apago el led de indicación
                  }
               if(input(PIN_A2)==0)                       // Seccionador 3
                  {
                     output_high(PIN_D2);                 // Enciendo un led de indicación
                     seccionador= 3;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_D2);                  // Apago el led de indicación
                  }
               if(input(PIN_A3)==0)                       // Seccionador 4
                  {
                     output_high(PIN_D3);                 // Enciendo un led de indicación
                     seccionador= 4;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_D3);                  // Apago el led de indicación
                  }
               if(input(PIN_A4)==0)                       // Seccionador 5
                  {
                     output_high(PIN_D4);                 // Enciendo un led de indicación
                     seccionador= 5;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_D4);                  // Apago el led de indicación
                  }
               if(input(PIN_A5)==0)                       // Seccionador 6
                  {
                     output_high(PIN_D5);                 // Enciendo un led de indicación
                     seccionador= 6;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_D5);                  // Apago el led de indicación
                  }
               if(input(PIN_C0)==0)                       // Seccionador 7
                  {
                     output_high(PIN_D6);                 // Enciendo un led de indicación
                     seccionador= 7;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_D6);                  // Apago el led de indicación
                  }
               if(input(PIN_C1)==0)                       // Seccionador 8
                  {
                     output_high(PIN_D7);                 // Enciendo un led de indicación
                     seccionador= 8;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_D7);                  // Apago el led de indicación
                  }
               if(input(PIN_C2)==0)                       // Seccionador 9
                  {
                     output_high(PIN_B0);                 // Enciendo un led de indicación
                     seccionador= 9;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_B0);                  // Apago el led de indicación
                  }
               if(input(PIN_C4)==0)                       // Seccionador 10
                  {
                     output_high(PIN_B1);                 // Enciendo un led de indicación
                     seccionador= 10;                      // Asigno el número del seccionador encendido
                     index++;
                     write_EEPROM(index,seccionador);     // Escribo el seccionador encendido
                  }
                else
                  {
                     output_low(PIN_B1);                  // Apago el led de indicación
                  }
                  delay_ms(3000);
                 for(j=1;j<=index;j++)
                 { datos= read_EEPROM(j);
                   printf("%d",datos);
                   delay_ms(5000);
                 }
            }
}

Atte: Enigma... La llanerita de Guayana :D
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Por fa una ayudita para escribir en la memoria interna del PIC18F4550
« Respuesta #10 en: 04 de Junio de 2009, 23:10:05 »
Rayos no entiendo!!!!  ayyyyy pinche memoria interna!!!!!!!! :x  :x  :x  :x  :x  :x  :x  :x  :x

Atte: Enigma... La llanerita de Guayana :x
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Por fa una ayudita para escribir en la memoria interna del PIC18F4550
« Respuesta #11 en: 05 de Junio de 2009, 00:41:30 »
Bueno hice otro intento de escribir y leer en la memoria interna: Este si muestra algo en el hyperterminal... pero siempre me muestra un 1, siempre.... Será que en realidad estoy escribiendo y leyendo en la memoria, o solo estaré imprimiendo el dato así nada más.... Pero si solo estuviera imprimiendo, porque entonces no incrementa al contador "dato", y en vez de eso mustra puros 1.... Miren el programa... Ay Dios ayudenme!!  :?

#include <18f4550.h>
#fuses NOPROTECT,NOCPD,NOLVP,WDT64,XT,NOMCLR
#use fast_io (A)
#use fast_io (B)
#use fast_io (C)
#use fast_io (D)
#use delay(clock=4000000)                               // El micro trabaja a una frecuencia de 4Mhz (1us por cada instrucción)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)          // Habilita las funciones RS232, velocidad a 9600 baudios

//::::::::::::::::::::::::::Declaración de variables:::::::::::::::::::::::::::::::::::::
float valorc;
int puntero=0,index,dato;
int8 i;


void main(void)
{
while(true)
{
               dato++;
               if(puntero>250)                         // Si el puntero (indicador) pasa de 250 posiciones de memoria, no sigo escribiendo (reescribo)
                   {
                      puntero=0;                        // Si llega a 250 pues reseteo al puntero y reescribo la memoria
                   }

                for(i = 1; i < puntero; ++i)                  // Bucle que escribe los datos en la EEPROM interna del pic
                   {
                      write_eeprom(puntero + i, *((int8 *)(&dato) + i));   // Escribo el voltaje en memoria
                   }
                puntero=puntero+1;                      // Lo incremento en 4 porque el float se toma 4 bytes en memoria por cada dato
                delay_ms(1);                           // Una demorita por si acaso


    while(index<=puntero)
       {
          for(i = 1; i <puntero; ++i)                                   // Bucle que escribe los datos en la EEPROM interna del pic
             {
                *((int8 *)(&dato) + i) = read_eeprom(index + i);   // Leo el voltaje desde la memoria
             }
          //index=index+1;                                           // Lo incremento en 4 porque el float se toma 4 bytes en memoria por cada dato
          printf("     Voltaje=  %2d V",dato);                   // Mando a mostrar el valor del voltaje en el hyperterminal
          delay_ms(1000);                                             // Una demorita por si acaso
          //output_low(PIN_A2);                                      // Apago el led de prueba


                   }
}
          }

Atte: Enigma... La llanerita de Guayana :?
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Por fa una ayudita para escribir en la memoria interna del PIC18F4550
« Respuesta #12 en: 05 de Junio de 2009, 14:48:39 »
Hola muchachos después de tantos intentos logreo por lo menos eso creo, leer y escribir en la memoria... Ustedes dirán pero es demasiado fácil hacer eso... pero para mi fue peluo porque primera vez que lo hago... en fin... Aquí está un programa y les voy a colocar una imagen del hyperterminal... pero tengo un detallito.... ya les explico... Primero aquí está el programa:


#include <18f4550.h>
#fuses NOPROTECT,NOCPD,NOLVP,WDT64,XT,NOMCLR
#use fast_io (B)
#use delay(clock=4000000)                               // El micro trabaja a una frecuencia de 4Mhz (1us por cada instrucción)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)          // Habilita las funciones RS232, velocidad a 9600 baudios

//::::::::::::::::::::::::::Declaración de variables:::::::::::::::::::::::::::::::::::::

int8 i=0,j=0;
int puntero=1,index,dato=0,valor;

void main(void)
{
               set_tris_b (0x00);                              // Configura puerto d como salida
while(true)
{
                dato++;
                puntero++;
               if(puntero>=20)                         // Si el puntero (indicador) pasa de 250 posiciones de memoria, no sigo escribiendo (reescribo)
                   {
                      puntero=1;                        // Si llega a 250 pues reseteo al puntero y reescribo la memoria
                   }

               //else
               //{

                output_high(PIN_B2);                      // Enciendo un led de prueba
                delay_ms(500);

                for(j = 0; j < puntero; ++j)                  // Bucle que escribe los datos en la EEPROM interna del pic
                   {
                      write_eeprom(puntero + j, *((int8 *)(&dato) +j ));   // Escribo el voltaje en memoria
                      output_low(PIN_B2);                                  // Enciendo un led de prueba
                   }
                //puntero=puntero+1;                      // Lo incremento en 4 porque el float se toma 4 bytes en memoria por cada dato
                delay_ms(1);                           // Una demorita por si acaso



//while(index<=puntero)
      // {
          for(i = 1; i <puntero; ++i)                                   // Bucle que escribe los datos en la EEPROM interna del pic
             {
                //*((int8 *)(&dato) + i) = read_eeprom(index + i);   // Leo el voltaje desde la memoria
                valor=read_eeprom(i);

             }
          //puntero=puntero+1;                                           // Lo incremento en 4 porque el float se toma 4 bytes en memoria por cada dato
   //}

          printf("     Voltaje=%d V",valor);                   // Mando a mostrar el valor del voltaje en el hyperterminal
          //delay_ms(1000);                                             // Una demorita por si acaso
          printf("\n\r ");
          printf("                    Puntero=  %d V",puntero);
           printf("\n\r ");
           printf("                                    Dato=  %d V",dato);
           printf("\n\r ");
          //output_low(PIN_A2);                                      // Apago el led de prueba


               //    }
}
          }




Ahora aquí les coloco la primera imagen del hyperterminal....

Fijense... valor es el valor que estoy sacando o más bien leyendo de la memoria; Dato es el valor que escribo en la memoria y Puntero es la variable que me desplaza al programa por las distintas posiciones de la memoria.... Muy bien..  El detalle está en que cuando leo el primer valor de la memoria, siempre me marca 19... :shock: y no se porque, ya que supuestamente la memoria empieza desde la primera dirección 0x00 hasta la 20, y de allí se tiene que devolver a 0x00... y supuestamente según yo en la primera posición estoy escribiendo a dato el cual contiene el número 1 no 19..... Ahora no entiendo porque siempre el 1er valor me marca 19....





Segunda imagen....





Atte: Enigma... La llanerita de Guayana :lol:

No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Señores por favor.... Resolvi un problema pero ahora tengo otro pequeñito! Help
« Respuesta #13 en: 05 de Junio de 2009, 23:28:10 »
Hola muchachos, les comento que logré resolver los otros problemas que expuse anteriormente..... Gracias a Dios.... Pero ahora tengo uno pequeñito, he estado toda la tarde tratandolo de resolver pero de verdad que no doy con la solución.... Por favor no sean malos y ayudenme... :(

La cuestión es la siguiente:

Tengo un programa el cual enciende un led cuando paso un contacto de un dipswitch, algo muy sencillo en realidad... Las entradas del dipswitch son 10, desde RA0 a RA6 y desde RC0 a RC4... Y por cada bit de un dipswitch se enciende un correspondiente led los cuales están ubicados en el puerto D y puerto B... Adicionalmente con un switch1 (SW1) puedo cambiar una bandera que hace que los leds se enciendan cuando el dipswitch este a 1 lógico o si el mismo este a 0 lógico... Es decir, con el SW1 en 1, los Leds encienden cuando el dipswitch en el puerto A y C está en 1 lógico; pero si SW1 está a 0, pues os Leds encienden cuando el dipswitch en el puerto A y C está en 0 lógico.... Todo bien por aquí  :lol:

Otra cosa que tiene el programa es que por cada bit del dipswitch que se encienda debe quedar registrado en memoria interna eeprom... Con el SW2, habilito para que toda la memoria se vacie sobre el hyperterminal imprimiendo los bits del dipswitch que se encendieron en un determinado tiempo...

Ahora el problema....

El problema está que todo funciona muy bien, pero a la hora de imprimir lo que se encuentra en memoria siempre se guarda en ella un solo bit del dipswitch, es decir, si tengo habilitados el bit 1,5,7,10 por ejemplo, siempre se me guarda el 10 y a los demás no les para ni pelotas... Si por ejemplo tengo habilitados el bit 1,5,7, siempre se guarda en  memoria el 7; Si por ejemplo tengo habilitados el bit 1,5, siempre se guarda en  memoria el 5... Y así sucesivamente.... Y de verdad ni entiendo porque.... POr favor ayudenme, llevo toda la tarde en esto y nada!

Por cierto hasta los momentos, la parte que guarda en memoria es la que dice:

/////////////////////Enciende los leds cuando los seccionadores están en "1" lógico/////////////////////

Pues aqui les dejo el programa y el ISIS a ver si me echan una ayudita please!!!!!

Atte: Enigma... La llanerita de Guayana :D
« Última modificación: 05 de Junio de 2009, 23:30:24 por Enigma »
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Por fa una ayudita para escribir en la memoria interna del PIC18F4550
« Respuesta #14 en: 06 de Junio de 2009, 00:05:41 »
Ayyy Dios estoy pariendo... Berro, ya no doy para más... Por fa no me dejen morior por favor amigos!!!! :(

Atte: Enigma... La llanerita de Guayana :? :z)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!


 

anything