Autor Tema: Problema al leer una 24lc256 con ccs por hardware  (Leído 2237 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado paymer

  • PIC10
  • *
  • Mensajes: 23
Problema al leer una 24lc256 con ccs por hardware
« en: 06 de Enero de 2005, 14:47:00 »
Hola, lo primero, feliz año nuevo a tod@s .
Estoy empezando a aprender c con el ccs y gracias a vuestro "microcursillo",pero
se me a planteado un problema a la hora de leer un memoria eeprom, tengo el siguiente codigo:

////////////////////////////////////// PREPROCESADO ///////////////////////////////////

#include <16F877.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPUT,NOPROTECT
#ORG 0x1F00,0x1FFF // estas dos lineas son para no sobreescribir el bootloader
void loader() { }  // que hay en el pic
#include <lcd.c>
#include <24256.c>
#use I2C(master,sda=PIN_C4,scl=PIN_C3,SLOW,FORCE_SW)
/////////////////////////////////////// PRINCIPAL /////////////////////////////////////

void main()
   {
   init_ext_eeprom();
   lcd_init();
   lcd_putc("f");
   lcd_putc("Escrito En 0 100");
   write_ext_eeprom(0,100);
   delay_ms(500);
   printf(lcd_putc,"
Leido en 0: %u",read_ext_eeprom(0));
   for (;;){}
   }
El problema reside en que si esto lo ejecuto tal como esta, osea generando las señales i2c por sofware, no hay problema, pero si lo intento utilizando el interfaz
i2c del 877 no funciona y el programa se queda colgado despues del delay_ms(500) ,lo he probado en proteus y funciona de las dos formas por software y por hardware si enbargo en la placa de prueba de pacalaconcurso solo me funciona por software.
para activar el interfaz i2c del 877 cambio la linea:

#use I2C(master,sda=PIN_C4,scl=PIN_C3,SLOW,FORCE_SW)

por:

#use I2C(master,sda=PIN_C4,scl=PIN_C3,SLOW,FORCE_HW)

¿es esto correcto?
¿porque solo me funciona utilizando el control por software?

Saludos a tod@s

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: Problema al leer una 24lc256 con ccs por hardware
« Respuesta #1 en: 06 de Enero de 2005, 20:31:00 »
Que onda Paymer,
Si no pones Force_hw  el compilador lo hace via software, solo cuando pones esa opcion, lo hace via hardware.
No se si en tu hardware pusiste las resitencias de pullup en scl y sda,
Salu2

Desconectado kruskal

  • PIC16
  • ***
  • Mensajes: 108
RE: Problema al leer una 24lc256 con ccs por hardware
« Respuesta #2 en: 06 de Enero de 2005, 20:55:00 »
y que version de CCS estas usando recuerdo que habia algunos problemas. Talves ese sea tu problema.

Salud2

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: Problema al leer una 24lc256 con ccs por hardware
« Respuesta #3 en: 06 de Enero de 2005, 21:40:00 »
Un detalle mas seria que usas la libreria 24256.c y esta incluye #use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL) , por tanto tendrias que definir los pines como EEPROM_SDA, EEPROM_SCL en el programa principal, para que te tome encuenta las rutinas que empleas para lectura y escritura:
#define EEPROM_SDA  PIN_B1
#define EEPROM_SCL  PIN_B0
Te puedes dar cuenta que en la libreria 24256.c viene definido como software, y no como hardware, por tanto tendrias que poner ambos:
#define EEPROM_SDA  PIN_c4
#define EEPROM_SCL  PIN_c3
#use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL,FORCE_SW) <--- anular en el 24256.c o modificarlo sobreescribiendolo....

ejemplo:

#INCLUDE <16F877.H>
#USE DELAY(CLOCK=4000000)
#FUSES HS,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT
#define use_portb_lcd TRUE
#define EEPROM_SDA  PIN_c4
#define EEPROM_SCL  PIN_c3
#use rs232(baud=9600, xmit=PIN_c6,rcv=PIN_c7)
#use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL,FORCE_SW)
#INCLUDE<24256x.C> /*quitar linea //#use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL,FORCE_SW)*/
#include <lcd.c>
int dir;
int val;
MAIN(){
val=0;
lcd_init();
LCD_PUTC("f~ Grabando ô
");delay_ms(500);
init_ext_eeprom();
for(dir=0;dir<=10;++dir){write_ext_eeprom(dir,val);val=val+2;delay_ms(1);};delay_ms(500);
LCD_PUTC("f~ Leyendo!!
");delay_ms(200);
printf("Iniciando Transmision");
for(dir=0;dir<=10;++dir){printf("  %d --> %d",dir,read_ext_eeprom(dir));printf(LCD_PUTC,"
  %d ~ %d",dir,read_ext_eeprom(dir));delay_ms(500);};
printf("Fin de la Transmision");
lcd_putc("fLectura completa!
");
delay_ms(1000);
printf("f");
WHILE(1){};
}



Salu2

Desconectado paymer

  • PIC10
  • *
  • Mensajes: 23
RE: Problema al leer una 24lc256 con ccs por hardware
« Respuesta #4 en: 07 de Enero de 2005, 04:10:00 »
Ahora si, el problema estaba en que aunque definia las pines sda y scl en el propio
archivo de la 24256 no quitaba de la libreria la linea:

#use i2c(master,sda=EEPROM_SDA, scl=EEPROM_SCL)

como me pones en tu ejemplo. Ahora funciona sobre la placa tanto por software como por hard.

Gracias Lager  y Kruskal

Desconectado Lager.

  • Moderadores
  • PIC18
  • *****
  • Mensajes: 477
RE: Problema al leer una 24lc256 con ccs por hardware
« Respuesta #5 en: 07 de Enero de 2005, 19:42:00 »
No hay nada que agradecer pana paymer, solo trato de auxiliar un poco a los genios de este subforo que les hechan demasiado trabajo Sonrisa.
Salu2 pana


 

anything