Autor Tema: Problema con spi en pic18f97j60  (Leído 2913 veces)

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

Desconectado martino84

  • PIC10
  • *
  • Mensajes: 32
Problema con spi en pic18f97j60
« en: 24 de Junio de 2011, 12:52:13 »
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.
Código: [Seleccionar]
#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

Código: [Seleccionar]
//  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

Código: [Seleccionar]
#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 TCPIP

La 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.

Desconectado diguito_69

  • PIC16
  • ***
  • Mensajes: 136
Re: Problema con spi en pic18f97j60
« Respuesta #1 en: 24 de Junio de 2011, 14:28:37 »
Podrias guardarlos en la flash del pic.
"Carezco de un don especial. Sólo soy apacionadamente curioso". Albert Einstein.

Desconectado martino84

  • PIC10
  • *
  • Mensajes: 32
Re: Problema con spi en pic18f97j60
« Respuesta #2 en: 24 de Junio de 2011, 15:28:09 »
como seria eso?, busco y no encuentro nada, el buscador me tira sobre memorias flash, campact flash. Todas externas.
Algun link o algo para leer por favor.
Muchas gracias.

ya encontre algo

http://www.todopic.com.ar/foros/index.php?topic=30100.0
« Última modificación: 24 de Junio de 2011, 15:31:00 por martino84 »

Desconectado diguito_69

  • PIC16
  • ***
  • Mensajes: 136
Re: Problema con spi en pic18f97j60
« Respuesta #3 en: 24 de Junio de 2011, 19:51:04 »
Si eso es.
"Carezco de un don especial. Sólo soy apacionadamente curioso". Albert Einstein.