Buenas a todos!!!!, les comento que estoy tratando de grabar datos analogicos que leo por pines del pif18f97j60, este pic se puede conectar a red ethernet que es lo que estoy haciendo en mi proyecto. Pero como este pic no tiene memoria eeprom interna decidi grabarlos en una memoria externa (25lc1024) el tema esta en que despues de tanto renegar con spi ya que no puedo simular este pic en el proteus, por que no esta en la libreria, me di cuenta que cuando incluyo las librerias para la comunicacion ethernet no funciona el spi.
Probe con este programa que seria sin la libreria de ethernet y funciona de diez, algo sencillo para probar.
#include <18F97J60.h>
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=25000000)
#include "tcpip/elcd.c"
#use rs232(baud=9600, xmit=PIN_B7, rcv=PIN_B6) */
#include "25xx1024.c"
void main(){
int a;
lcd_init();
init_ext_eeprom();
write_ext_eeprom(0x00,0x41);
a=read_ext_eeprom(0x00);
lcd_gotoxy(1,1);
printf(lcd_putc,"Hola mundo");
lcd_gotoxy(1,2);
printf(lcd_putc,"%c",a);
printf("Hola mundo rs 232");
}
y funciona.
La libreria es una que encontre aqui por el foro.
Esta es la libreria para la memoria spi
// 25LC1024 DRIVER VERSION 1
#ifndef EEPROM_SELECT
#define EEPROM_SELECT PIN_H1
#define EEPROM_CLK PIN_C3
#define EEPROM_DI PIN_C4
#define EEPROM_DO PIN_C5
#endif
#define EEPROM_ADDRESS int32
#define EEPROM_SIZE 8388608
void init_ext_eeprom() {
output_high(EEPROM_SELECT);
output_low(EEPROM_DI);
output_low(EEPROM_CLK);
}
BOOLEAN ext_eeprom_ready() {
BYTE cmd[1], i, data;
cmd[0] = 0x05; //rdsr opcode
output_low(EEPROM_SELECT);
for(i=1; i<=8; ++i) {
output_bit(EEPROM_DI, shift_left(cmd,1,0));
output_high(EEPROM_CLK); //data latches
output_low(EEPROM_CLK); //back to idle
}
for(i=1; i<=8; ++i) {
output_high(EEPROM_CLK); //data latches
shift_left(&data,1,input(EEPROM_DO));
output_low(EEPROM_CLK); //back to idle
}
output_high(EEPROM_SELECT);
return !bit_test(data, 0);
}
void write_ext_eeprom(EEPROM_ADDRESS address, BYTE data) {
BYTE cmd[5];
BYTE i;
BYTE wren;
wren=0x06;
cmd[0]=data;
cmd[1]=address;
cmd[2]=(address>>8);
cmd[3]=(address>>16);
cmd[4]=0x02;
// Wait until the eeprom is done with a previous write
while(!ext_eeprom_ready());
output_low(EEPROM_SELECT);
for(i=0; i<8; ++i)
{
output_bit(EEPROM_DI, shift_left(&wren,1,0));
output_high(EEPROM_CLK);
output_low(EEPROM_CLK);
}
output_high(EEPROM_SELECT);
output_low(EEPROM_SELECT);
for(i=0; i<40; ++i)
{
output_bit(EEPROM_DI, shift_left(cmd,5,0));
output_high(EEPROM_CLK);
output_low(EEPROM_CLK);
}
output_high(EEPROM_SELECT);
}
BYTE read_ext_eeprom(EEPROM_ADDRESS address) {
BYTE cmd[4];
BYTE i,data;
cmd[0]=address;
cmd[1]=(address>>8);
cmd[2]=(address>>16);
cmd[3]=0x03;
// Wait until the eeprom is done with a previous write
while(!ext_eeprom_ready());
output_low(EEPROM_SELECT);
for(i=0; i<32; ++i)
{
output_bit(EEPROM_DI, shift_left(cmd,4,0));
output_high(EEPROM_CLK);
output_low(EEPROM_CLK);
}
for(i=0; i<8; ++i)
{
shift_left(&data,1,input(EEPROM_DO));
output_high(EEPROM_CLK);
output_low(EEPROM_CLK);
}
output_high(EEPROM_SELECT);
return(data);
}
Ahora el problema esta que cuando incluyo la libreria "ccstcpip" deja dse funcionar el spi. Busque cual puede ser el problema pero ya se me quemaron los libros no se que hacer. Los pines no los utiliza absolutamente para nada.
Con este codigo que agragar un par de lineas ya no funciona el spi
#define STACK_USE_ICMP 1
#define STACK_USE_ARP 1
#define STACK_USE_TCP 1
#define STACK_USE_HTTP 1
#include "ccstcpip.h"
#include "25xx1024.c"
void main(){
int a;
lcd_init();
init_ext_eeprom();
write_ext_eeprom(0x00,0x41);
a=read_ext_eeprom(0x00);
lcd_gotoxy(1,1);
printf(lcd_putc,"Hola mundo");
lcd_gotoxy(1,2);
printf(lcd_putc,"%c",a);
printf("Hola mundo rs 232");
}
Cuando se agrega la libreria "ccstcpip" se agregan muchas mas librerias con las que me pierdo para entenderlas, como veran hay librerias que dentro de lo que es la de tcpip las declara por eso no la declare a rs232 que ya esta dentro de estas, pero no vi nada de spi que me pueda estar modificando el funcionamiento del spi.
Aqui esta el link para ver las librerias de tcpip
Libreria TCPIPLa comunicacion ethernet ya la tengo funcionando por si alguien necesita una ayuda algo aprendi con los ejemplos de ccs, leo y muestro valores por pagina web, hipervinculos, etc. Solo pregunten.
No tengo mucha experiencia con pics 18 pero para mi proyecto necesito la comunicacion ethernet. Si hay otra solucion que no sea la eeprom externa o lo que sea. No necesito guardar muchos datos, con 50 valores de 8 bits es suficiente.
Desde ya gracias a quien pueda ayudar.