TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: 25javier en 01 de Diciembre de 2005, 17:27:00
-
Hola estoy tratando de leer una memoria spi ,usando el modulo spi del 18f452,no tengo problemas para leer y escribir direcciones particualres de memoria pero cuando trato de leer una pagina entera solo puedo leer el primer dato,
yo hice un polling con spi_read(0) para recibir los demas datos,pero parece que no genera los clocks para que la memoria siga mandando los datos!!!??alquin me puede dar una mano?
aca los ejemplos,el que me anda y el que no...
ESTO ANDA BIEN
output_low(EEPROM_SELECT);
delay_ms(5);
spi_write(3) ; //comando leer
spi_write(5); //3 bytes direccion
spi_write(0);
spi_write(0); //byte mas significativo
value= spi_read(0); // leo contenido direccion 5
output_high(EEPROM_SELECT);
delay_ms(300);
AHORA SI QUIERO LEER DESDE LA POSICION 5 A LA 10
output_low(EEPROM_SELECT);
delay_ms(5);
spi_write(3) ; //comando leer
spi_write(5); //3 bytes direccion
spi_write(0);
spi_write(0); //byte mas significativo
for (i=0; I<=5 ;i++){
recib = spi_read(0);} // datos los cargo en recib
output_high(EEPROM_SELECT);
for (i=0; i<=5; i++){
printf("valor = %u
",recib);} //NO ANDA, RECIBE SOLO EL DATO DE LA DIRECCION 5
}
-
hola
yo estoy tratando de comunicar por hardware el pic con la memoria ..... si podes por favor me sera de gran ayuda si me podes pasar el codigo en c dado q lo q estoy haciendo no me anda
muchas gracias
-
Hola estoy tratando de leer una memoria spi ,usando el modulo spi del 18f452,no tengo problemas para leer y escribir direcciones particualres de memoria pero cuando trato de leer una pagina entera solo puedo leer el primer dato,
yo hice un polling con spi_read(0) para recibir los demas datos,pero parece que no genera los clocks para que la memoria siga mandando los datos!!!??alquin me puede dar una mano?
aca los ejemplos,el que me anda y el que no...
ESTO ANDA BIEN
output_low(EEPROM_SELECT);
delay_ms(5);
spi_write(3) ; //comando leer
spi_write(5); //3 bytes direccion
spi_write(0);
spi_write(0); //byte mas significativo
value= spi_read(0); // leo contenido direccion 5
output_high(EEPROM_SELECT);
delay_ms(300);
AHORA SI QUIERO LEER DESDE LA POSICION 5 A LA 10
output_low(EEPROM_SELECT);
delay_ms(5);
spi_write(3) ; //comando leer
spi_write(5); //3 bytes direccion
spi_write(0);
spi_write(0); //byte mas significativo
for (i=0; I<=5 ;i++){
recib = spi_read(0);} // datos los cargo en recib
output_high(EEPROM_SELECT);
for (i=0; i<=5; i++){
printf("valor = %u
",recib);} //NO ANDA, RECIBE SOLO EL DATO DE LA DIRECCION 5
}
Primero:
Que memoria quieres leer??
Segundo:
Dependiendo del tipo de memoria, la lectura por bloques es mas compleja que usar solo SPI_read()
Tercero:
Prueba de cambiar esto:
recib = spi_read(0);} // datos los cargo en recib
por esto:
recib = spi_read(i);} // datos los cargo en recib
ya que estas tratando de leer utilizando un indice pero pones el valor en cero, entonces es posible que no te funcione y solo lea la primer posicion, que es a la única a la cual apuntas...
Eso sí, la lees 5 veces seguidas... :D :D :D