TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: darck_khronos en 14 de Noviembre de 2009, 17:40:23

Título: Escribiendo en I2C
Publicado por: darck_khronos en 14 de Noviembre de 2009, 17:40:23
Bueno tengo un problemita no logro hacer que los datos que envio por rs232 se guarden en la memoria

Código: C
  1. #include <18f4550.h>
  2. #fuses NOWDT,NOPROTECT,NOLVP,INTRC_IO
  3. #use delay (clock= 8000000)  
  4. #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
  5. #define EEPROM_SDA PIN_B0        
  6. #define EEPROM_SCL PIN_B1        
  7. #include <24256.c>
  8. #include "lcd.c"
  9.  
  10. void main()
  11. {  char entrada,dato,direccion;
  12.     lcd_init();
  13.     init_ext_eeprom();
  14.     for(;;){
  15.     entrada=getchar();
  16.    
  17.     if(entrada=='E')
  18.          {
  19.    lcd_putc("~ Escribiendo en...\n24LC256\n");
  20.    delay_ms(500);
  21.    direccion=getchar();
  22.    dato=getchar();
  23.    write_ext_eeprom(direccion,dato);
  24.          }
  25.        }
  26.        
  27. }
Intente poner una matriz en Dato pero del mimo modo me compila pero al simular simplementye no hay respuesta
Título: Re: Escribiendo en I2C
Publicado por: Suky en 14 de Noviembre de 2009, 17:43:51
Colocaste las resistencias pull-up?
Título: Re: Escribiendo en I2C
Publicado por: darck_khronos en 14 de Noviembre de 2009, 17:55:00
ya le agrege las resistencias y funciono en la simulacion, ahora otra pregunta la direccion debo ponerla en int o mantenerla en Char
Título: Re: Escribiendo en I2C
Publicado por: darck_khronos en 14 de Noviembre de 2009, 18:09:16
Código: C
  1. #include <18f4550.h>
  2. #fuses NOWDT,NOPROTECT,NOLVP,INTRC_IO
  3. #use delay (clock= 8000000)  
  4. #use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
  5. #define EEPROM_SDA PIN_B0        
  6. #define EEPROM_SCL PIN_B1        
  7. #include <24256.c>
  8. #include "lcd.c"
  9.  
  10. void main()
  11. {  char entrada,dato;
  12.    int direccion;
  13.     lcd_init();
  14.     init_ext_eeprom();
  15.     for(;;){
  16.     entrada=getchar();
  17.    
  18.     if(entrada=='E')
  19.          {
  20.    lcd_putc("\f~ Escribiendo en...\n24LC256\n");
  21.    direccion=getchar();
  22.    dato=getchar();
  23.    delay_ms(500);
  24.    write_ext_eeprom(direccion,dato);
  25.             }
  26.             else
  27.    if(entrada=='L')
  28.          {
  29.    lcd_putc("\f~ Leyendo en...\n24LC256\n");
  30.    delay_ms(500);
  31.    direccion=getchar();
  32.    printf(lcd_putc,"\f\n %d ~ %s",direccion,read_ext_eeprom(direccion));
  33.    printf("\f\n %d ~ %s",direccion,read_ext_eeprom(direccion));
  34.             }
  35.  
  36.        }
  37.        
  38. }
Al intentar leer lo que esta en la memoria simplemente no me manda lo que supuestamente escribi
hay forma de que lo que meta lo pueda meter dentro de una bariable
char Menu[]="mensaje "
Título: Re: Escribiendo en I2C
Publicado por: Suky en 14 de Noviembre de 2009, 18:50:08
Necesitas guardar en una variable lo que recibiste de la memoria? Si es el caso lo haces así:

Código: C
  1. int Letra;
  2.  
  3. Letra=read_ext_eeprom(direccion);

No se si era eso  :?

char en una variable de 8 bit sin signo, luego int es de 8 bits, pero que por default es sin signo, y para signarla solo hay que agregar el pre-modificador signed. (signed int)
Entonces para la variable dirección da lo mismo usar int o char.


Saludos!
Título: Re: Escribiendo en I2C
Publicado por: darck_khronos en 14 de Noviembre de 2009, 19:01:47
hay un problemita cuando Escribo no me saca del ciclo si preciono L no me manda a la parte de lectura
Título: Re: Escribiendo en I2C
Publicado por: MLO__ en 14 de Noviembre de 2009, 23:30:03
Luego de escribir en la memoria externa hay que esperar unos 5mS para que se complete la escritura.

Saludos