TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ADY12 en 18 de Mayo de 2015, 05:44:12

Título: MEMORIA EXTERNA SPI Y PIC18F4550
Publicado por: ADY12 en 18 de Mayo de 2015, 05:44:12
Tengo la intención de almacenar los datos que obtengan los 4 sensores que tengo. Mi memoria se trata de una memoria N25Q06 tipo de comunicación SPI. La idea que tengo es que al pulsar una tecla del teclado predefinida anteriormente en el programa, esta almacene los datos y posteriormente estos datos serán volcados en el LABVIEW. He estado observando varias informaciones teóricas para poder comenzar con la comunicación SPI . Me gustaría tener un pequeño ejemplo para poder comenzar a tirar y ya poderlo desenvolupar.
Título: Re: MEMORIA EXTERNA SPI Y PIC18F4550
Publicado por: Thulsa Doom en 04 de Junio de 2015, 09:36:43
Mira a ver este proyecto que me hice para manejar una memoria 25LC1024

25LC1024_C18 (https://mega.co.nz/#!kB0WBTJA!0bNYbF8P8oGZEMuW0ZsNp39LdhjKKbRm8Fzh64jjn98)

El proyecto está realizado con C18 y creo recordar que hay hasta un ejemplo en proteus.

Espero que te sirva

Título: Re: MEMORIA EXTERNA SPI Y PIC18F4550
Publicado por: ADY12 en 18 de Junio de 2015, 17:13:12
He realizado un pequeño programa, para que escriba 7 datos y lea 7 datos. El problema es que lo escribe pero al leer, solamente me lee 0s, esto a que es debido?

Tengo un memoria externa N25Q064 comunicacion SPI

Aqui teneis el programa:

Código: [Seleccionar]
#include <18F4550.h>
//!#fuses XT               //Cristal de cuarzo de 8 MHz
//!#fuses NOWDT            //Perro guardian deshabilitado
//!#fuses NOPROTECT        //Inhabilitado la proteccion contra la lectura
//!#fuses NOLVP  
//!#fuses MCLR
#fuses INTHS                  //Oscilador Interno

#use delay(internal=8MHz)       //Velocidad Oscilador Interno
#use spi(master,DI=PIN_C7,DO=PIN_B0,CLK=PIN_B1,ENABLE=PIN_A5)                                 //Comunicacion PIC-MEMORIA SPI
#include "C:\Users\x\Desktop\x\PROGRAMA_DEFINITIVO\flex_lcd420.c"       //LCD
#include <math.h>                                    
#include "C:\Users\x\Desktop\x\PROGRAMA_DEFINITIVO\kbd.c"               //Teclado
#include <stdlib.h>

//Variables
int dato;
int direccion;

void main(){

//Configuracion de la memoria
setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16);
//Inicializar LCD
lcd_init();
//Habilitar Escritura
output_low(PIN_A5);            //Habilitar dispositivo
spi_write(6);                    //Habilitar la escritura de la memoria
output_high(PIN_A5);            //Deshabilitar el dispositivo
//Escribir Memoria
output_low(PIN_A5);            //Habilitar dispositivo
spi_write(2);                    //Instruccion de escritura de la memoria
spi_write(0);                    //Direccion de la memoria
lcd_putc("E");
for (dato=0;dato<7;dato++){               //Dato
spi_write(dato);                    //Valor del dato
printf(lcd_putc,"%u",dato);         //Muestra el valor del dato en LCD
delay_ms(500);                   //Tiempo de espera
}
//Leer
output_high(PIN_A5);            //Deshabilita escritura
delay_ms(1000);
lcd_putc("\nL");
output_low(PIN_A5);            //Habilitar dispositivo
spi_read(3);                     //Habilitar la lectura de la memoria
spi_read(0);
for (direccion=0;direccion<7;direccion++){
dato=(spi_read(direccion));                 //Lee el dato
printf(lcd_putc,"%u",dato);          //Muestra el valor del dato en LCD
delay_ms(500);
}
output_high(PIN_A5);            //Deshabilita escritura
}
Título: Re: MEMORIA EXTERNA SPI Y PIC18F4550
Publicado por: Thulsa Doom en 18 de Junio de 2015, 18:26:27
No estoy seguro pero creo que te faltan datos a la hora de decirle a la memoria que vas ha leer, ¿Has mirado el datasheet para ver cual es la secuencia de lectura?, en la página 56 dice cual es el procedimiento
Título: Re: MEMORIA EXTERNA SPI Y PIC18F4550
Publicado por: ADY12 en 19 de Junio de 2015, 05:37:23
He seguido el datasheet, pero es correcto las funciones de leer. No entiendo porque me aparecen 0s al leer? También he comprobado las conexiones en la placa pero todas son correctas, nose es algo que no veo, y no se porque ocurre.
Título: Re: MEMORIA EXTERNA SPI Y PIC18F4550
Publicado por: Thulsa Doom en 19 de Junio de 2015, 11:08:12
¿La velocidad de lectura la has comprobado?
Título: Re: MEMORIA EXTERNA SPI Y PIC18F4550
Publicado por: RALF2 en 19 de Junio de 2015, 13:55:21
Citar
He realizado un pequeño programa, para que escriba 7 datos y lea 7 datos. El problema es que lo escribe pero al leer, solamente me lee 0s, esto a que es debido?

Como sabes que el dato fue escrito?   :?
Título: Re: MEMORIA EXTERNA SPI Y PIC18F4550
Publicado por: ADY12 en 29 de Junio de 2015, 05:45:59
Me di cuenta que estaba mezclando los protocolos de comunicación de hardware con los de software. He establecido que lo haré por software por lo tanto, sera usar:

#use spi(master,DI=PIN_C7,DO=PIN_B0,CLK=PIN_B1,ENABLE=PIN_A5)   para la configuración.

spi_xfer (stream Data) para el tema de comunicarlo.

Ahora al haber encontrado este error estoy un poco perdido, de como por ejemplo guardar los valores de temperatura que obtiene una NTC por ejemplo cada 5 segundos, durante una hora.

Sabemos que con #task (rate=5s,max=1ms) void NTC ();

 se lee la NTC durante los 5 segundos.