Lecto-grabador de tarjetas MMC, SD, MicroSD con PIC

Yo dispongo del mismo compilador y de la placa easypic4 de mikroelectronica tambien con el modulo de grabacion/lectura en sd card.

Yo quiero hacer un log de sensores de temperatura y humedad , es decir, como una estacion meteorologica que guarde los datos en la sd.

El problema q tengo es q una vez grabados los datos en un sector de la sd no se como crear un archivo .txt o similar para hacerlo inteligible.

¿A alguien se le ocurre algo?

Muchas gracias
 
Hola Kim_of_the_river.

Tienes que guardar los datos en formato FAT, para poder creear un *.txt.

Microchip, tiene unas notas de aplicacion que explica como hacerlo.

Un Saludo.
 
Hola muchachos. Ya tengo comunicacion (al fin lo consegui) entre ambos dispositivos garcias a ustedes y sus valiosos aportes.
Ahora tengo otra pregunta: Kim of the river, ya conseguiste guardar los archivos en un .txt?
He buscado en microchip como lo recomendo Paloky y aun no he vista nada de como hacerlo.
Si conseguis algo les recomiendo, estoy varado en ese punto.
Como siempre gracias totales :D
 
Hola amigos, aver si me pueden dar una mano con esto de las SD! hace rato que estoy intentando la comunicación sin éxito, hice un programa simple que grabe el bloque de 512 bytes con datos cualquiera. una cosa mas, cuando se escriba la sd, como puedo hacer para verla en la PC? se genera un archivo sin extension, o que? muchas gracias, ahi va el codigo

Código:
;===============================DESCRIPCION===============================================
; Escribe datos en una memoria SD, usando el protocolo de comunicación SPI
; Programador: Sergio
;=========================================================================================

;======================================INICIALIZACION=====================================

__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
PROCESSOR	16F876			;Indica el PIC a usar
INCLUDE	"P16F876.INC"		;Incluye la libreria que trae el MPLAB
RADIX		hex			;Define sistema de numeración por defecto

ORG		0		            ;Define el comienzo del programa
goto		Inicio

;----------------------------Definicion de variables internas-----------------------------

CBLOCK	0x20
	cont1
ENDC

#DEFINE		RB0	0
#DEFINE		RB1	1
#DEFINE		RB2	2


;-----------------------------------------------------------------------------------------

;====================================PROGRAMA PRINCIPAL===================================

Inicio
	movlw	b'00110010'			;palabra de configuracion para reg 
	movwf	SSPCON
	bsf	STATUS,RP0			;selecciona banco1
	movlw	b'10000000'			;palabra de configuracion para reg SSPSTAT
	movwf	SSPSTAT
	clrf	TRISB				;pone el puerto B como salida
	movlw	b'00111000'
	movwf	TRISA				;pone el puerto A como entrada
	movlw	b'00010000'
	movwf	TRISC
	bcf	STATUS,RP0			;selecciona banco0
	
IniciaSD
loopCMD0
	btfsc	PORTA,4	;espera que se active el pulsador para enviar otro comando
	goto	loopCMD0
	bsf	PORTA,0	;activa RA0 indicando que se esta escribiendo
	call	Retardo_1s	;espera, para que se pueda ver el led
	call	CMD0		;envia el comnado 0 a la SD para setearla en modo idle
	bcf	PORTA,0	;RA0=0 (termino escritura)
	movwf	PORTB		;muestra la respuesta en el puerto B
loopCMD1
	btfsc	PORTA,4	 ;espera que se active el pulsador para enviar otro comando
	goto	loopCMD1
	bsf	PORTA,0	;activa RA0 indicando que se esta escribiendo
	call	Retardo_1s	;espera, para que se pueda ver el led
	call	CMD1		;envia el comnado 0 a la SD para setearla en modo idle
	bcf	PORTA,0	;RA0=0 (termino escritura)
	movwf	PORTB		;muestra la respuesta en el puerto B

loopCMD55
	btfsc	PORTA,4	;espera que se active el pulsador para enviar otro comando
	goto	loopCMD55
	bsf	PORTA,0	;activa RA0 indicando que se esta escribiendo
	call	Retardo_1s	;espera, para que se pueda ver el led
	call	CMD55		;envia el comnado 0 a la SD para setearla en modo idle
	bcf	PORTA,0	;RA0=0 (termino escritura)
	movwf	PORTB		;muestra la respuesta en el puerto B
		
loopCMD58
	btfsc	PORTA,4	;espera que se active el pulsador para enviar otro comando
	goto	loopCMD58
	bsf	PORTA,0	;activa RA0 indicando que se esta escribiendo
	call	Retardo_1s	;espera, para que se pueda ver el led
	call	CMD58		;envia el comnado 0 a la SD para setearla en modo idle
	bcf	PORTA,0	;RA0=0 (termino escritura)
	movwf	PORTB		;muestra la respuesta en el puerto B

loopCMD24
	btfsc	PORTA,4	;espera que se active el pulsador para enviar otro comando
	goto	loopCMD24
	bsf	PORTA,0	;activa RA0 indicando que se esta escribiendo
	call	Retardo_1s	;espera, para que se pueda ver el led
	clrf	Byte2
	clrf	Byte3
	clrf	Byte4
	clrf	CRC
	call	CMD24		;envia el comnado 0 a la SD para setearla en modo idle
	bcf	PORTA,0	;RA0=0 (termino escritura)
	movwf	PORTB		;muestra la respuesta en el puerto B
loopDATOS
	btfsc	PORTA,4	;espera que se active el pulsador para enviar los datos
	goto	loopDATOS
	bsf	PORTA,2	;activa RA2 indicando que se esta escribiendo datos
	call	Retardo_1s	;espera, para que se pueda ver el led
	movlw	0xFF
	movwf	cont1
	movlw	0xFE		;inicio del bloque de datos
	call	SD_dato
loop
	decfsz	cont1
	goto	envia
	movlw	0xFF
	movwf	cont1
loop2
	decfsz	cont1
	goto	envia2
	goto	fin
	
envia
	movlw	0xF0
	call	SD_dato
	goto	loop
envia2
	movlw	0xF1
	call	SD_dato
	goto	loop2
fin
	movlw	0xFF		;envia los dos bytes de CRC que como esta en modo
	call	SD_dato	;SPI puede tomar cualquier valor
	call	SD_dato
bcf		PORTA,2	;RA2=0 (termino escritura)
bcf		PORTA,1	;RA2=1 fin del programa
INCLUDE	"SD.INC"
INCLUDE "RETARDOS.INC"
END


aqui les paso tambien la libreria que hice yo mismo "SD.INC"

;***********************************Libreria "SD.INC"**********************************
;include los comandos para operar una tarjeta SD en modo SPI con sus respuestas
;
;********************************ZONA DE DATOS Y VARIABLES********************************

CBLOCK
	Byte2
	Byte3
	Byte4
	Byte5
	R1
	R12
	R13
	R21
	R22
	R31
	R32
	R33
	CRC
ENDC


;******************************COMIENZO DE LOS SUB-PROGRAMAS******************************
CMD0	;por respuesta se obtiene R1
	movlw	b'01000000'
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x95
	call	SD_dato
	call	SD_respuesta
	movwf	R1	
	return
CMD1	;por respuesta se obtiene R1
	movlw	b'01000001'
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0xFF
	call	SD_dato
	call	SD_respuesta
	movwf	R1
	return
CMD9	;por respuesta se obtiene R1
	movlw	b'01001001'
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	movwf	SSPBUF
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0xFF
	call	SD_dato
	call	SD_respuesta
	movwf	R1
	return
CMD10	;por respuesta se obtiene R1
	movlw	b'01001010'
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	movwf	SSPBUF
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0xFF
	call	SD_dato
	call	SD_respuesta
	movwf	R1
	return
CMD13	;por respuesta se obtiene R2
	movlw	b'01001101'
	call	SD_dato
	movlw	0x00
	movwf	SSPBUF
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0xFF
	call	SD_dato
	call	SD_respuesta
	movwf	R21
	call	SD_respuesta
	movwf	R22
	return
CMD16	;por respuesta se obtiene R1
	movlw	b'01010000'
	call	SD_dato
	movfw	Byte2
	call	SD_dato
	movfw	Byte3
	call	SD_dato
	movfw	Byte4
	call	SD_dato
	movfw	Byte5
	call	SD_dato
	movfw	CRC
	call	SD_dato
	call	SD_respuesta
	movwf	R1
	return
CMD17	;por respuesta se obtiene R1
	movlw	b'01010001'
	call	SD_dato
	movfw	Byte2
	call	SD_dato
	movfw	Byte3
	call	SD_dato
	movfw	Byte4
	call	SD_dato
	movfw	Byte5
	call	SD_dato
	movfw	CRC
	call	SD_dato
	call	SD_respuesta
	movwf	R1
	return
CMD24	;por respuesta se obtiene 3 R1 (R1, R12, R13)
	movlw	b'01011000'
	call	SD_dato
	movfw	Byte2
	call	SD_dato
	movfw	Byte3
	call	SD_dato
	movfw	Byte4
	call	SD_dato
	movfw	Byte5
	call	SD_dato
	movfw	CRC
	call	SD_dato
	call	SD_respuesta
	movwf	R1
	call	SD_respuesta
	movwf	R12
	call	SD_respuesta
	movwf	R13
	return
CMD55	;por respuesta se obtiene R1
	movlw	b'01110111'
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0xFF
	call	SD_dato
	call	SD_respuesta
	movwf	R1
	return
CMD58	;por respuesta se obtiene R3
	movlw	b'01111010'
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0x00
	call	SD_dato
	movlw	0xFF
	call	SD_dato
	call	SD_respuesta
	movwf	R31
	call	SD_respuesta
	movwf	R32
	call	SD_respuesta
	movwf	R33
	return

SD_respuesta
	movlw	0x00			;w=0
SD_dato
	movwf	SSPBUF			;w->SSPBUF y comienza la lectura/escritura
	bsf		STATUS,RP0		;selecciona el banco1
loop_SD_dato
	btfss	SSPSTAT,BF		;¿buffer lleno? ¿termino lectura/escritura?
	goto	loop_SD_dato	;no, pregunta de nuevo
	bcf		STATUS,RP0		;selecciona banco0
	movf	SSPBUF,W		;SSPBUF->w borrando automaticamente SSPSTAT,BF
	return

la verdad que no se donde esta el error, por favor, si me pueden ayudar se los agradeceria! GRACIAS!
 
Hola Sergio! como lo llevas?

Yo estoy en lo mismo, debemos ser los unicos que estamos intentandolo en asm. Yo lo hago con un PIC16F690 asi que no tenemos muchas diferencias.

Dices que no te funciona pero tienes escrito semejante tocho de codigo? Ufff.. has comprobado primero que manejas bien el SPI? yo compre una memoria 25LC040 por unos cincuenta centimos y comprobe que funcionaba bien mi codigo SPI para asegurarme

Despues ya sabiendo que eso funciona yo haria la inicializacion paso por paso.. le he estado echando un ojo a tu codigo y he encontrado un par de cosillas, te comento:

cuando mandas un comando, por ejemplo CMD0, envias los bytes correspondientes y luego llamas a sd_respuesta para leer R1, no? pues bien.. R1 esta compuesto por tres bytes: FFxxFF y tu solo haces una lectura asi que lees solamente FF (con hacer dos ya es suficiente). Te recomiendo coger un osciloscopio y ver todas las respuestas de la tarjeta, veras como es asi.

cuando leas el segundo byte (xx en FFxxFF) tienes que comprobar que es lo que esperabas. despues de mandar CMD0 deberias obtener como respuesta FF01FF -tarjeta en idle-, sin embargo tu lees, almacenas en R1 y no compruebas el valor..

eso no deberia darte muchos problemas. despues la gente manda el comando CMD1 pero los d e la SD card association en sus documentos recomiendan mandar ACMD41 (precedido del CMD55 por ser un aplication command). En cualquiera de los casos tu envias el comando y recibes otro response R1, pero esta vez tienes que leer FF00FF, asi que tendras que hacerte un loop hasta que te llegue eso y no el FF01FF que te llegara mientras la tarjeta siga en modo idle..

Hala, creo que tienes un poquico de faena, animo! Si no me he explicado bien o no entiendes algo pregunta cuanto quieras! Un saludo :)
 
hawpic, muchas gracias por tu guia! la verdad q estaba un poco perdido.
al funcionamiento del protocolo SPI del pic, yo lo he probado con "proteus" (programa de simulacion que recomiendo) y funciona bien.
La verdad que no sabia que la respuesta de la SD fuese de tal forma, pues en todos lados dicen que es un solo byte de respuesta. por eso no le di importancia a la comprobacion en el codigo

Ahora con tu ayuda, manos a la obra nuevamente..!
dos preguntitas, la configuracion que hice para el puerto SPI es correcta? (CKP=1 CKE=0 SMP=0)
una cosa mas, luego de escribir la tarjeta, hay alguna forma de ver esos datos en la PC?

bluetoothman ni idea de micros motorola, pero sigue intentando que se de personas que lo hicieron funcionar... mas precisamente en mi facultad, un proyecto final se basaba en parte a la comunicacion SD - micro Motorola

Saludos!
 
Bueno, la verdad que de PICs no tengo mucha idea. Pero hace bastante tiempo ví esto en hackaday.com y me parece que les puede ser útil. Es un sócalo para tarjetas SD/MMC echo con un conector para los floppys de 5 1/4. Mi SD Kingston de 1GB entra :)



Está en inglés pero les puede ser útil.

Salu2!
 
De nada serchy, pa eso estamos aqui :)

Lo del funcionamiento del SPI simulado con proteus me parece bien, pero supongo que tambien te habrá pasado que alguna vez una simulacion es buenisima pero luego llegas, montas y misteriosamente no funciona. Por eso te recomiendo que lo compruebes primero pa por si acaso.

Lo de la respuesta de la SD.. Sabes que hay diferentes tipos de respuestas segun el comando que envies, no? en los que tu envias recibes un response R1, que es cierto que todos dicen que es un byte de respuesta, pero te animo a que leas tres bytes despues de enviar un comando y lo veas con tu osciloscopio. El primer byte leido sera FF, el segundo R1 y el tercero FF (este ultimo si quieres ni lo leas, pero antes del R1 siempre leeras FF)

Tus preguntas..

La configuración para el puerto SPI.. Pues veras, acabo de probar con tu configuracion (CKP=1 CKE=0 SMP=0) y funciona, pero te recomiendo mejor usar esta: CKP=0 CKE=1 SMP=0, si ves las formas de onda con el osciloscopio veras que se ven mucho mejor. He visto codigo de gente aqui que usa tu configuracion, yo la mia la saque de un codigo de microchip. Asi que eso a tu gusto, parece ser que funciona igual de bien de las dos formas, eso si, si lo miras con un osciloscopio la mia es mucho mas clara :)

Tu otra pregunta.. si señor, claro que hay forma! Lo de darle formato de texto parece bastante chungo asi en principio (para mi eso aun esta muy lejano.. ) asi que tienes dos formas de leer los datos desde el ordenador. Una es mediante RS232, la otra es leyendo la tarjeta en el ordenador mediante algun lector y algun programa que la lea en hexadecimal como el HEXPLORER que ademas es gratuito ;)

Supongo que ya habras buscado mucha información y tal pero pa por si acaso te recomiendo mirarte esto:
www.cs.ucr.edu/~amitra/sdcard/Additional/sdcard_appnote_foust.pdf
y esto:
http://www.sdcard.org/about/memory_card/pls/Simplified_Physical_Layer_Spec.pdf

Hala, si tienes tiempo libre ya tienes en que ocuparlo Un saludo!
 
Hola a todos, muchachos, ya logre inicializar la tajejta :D no lo hice antes porque en mi cuidad se quedaron sin PIC ni 877 ni 876 y al que yo tenia lo queme insertandolo mal en el programador :( (no critiquen che que a todos le puede pasar).

Paso a contarles el problema que tengo, cuando intento escribir la tarjeta, mando el comando 24 como es debido, recibo respuesta 0x00 de la tarjeta.. todo ok
mando el byte de comiezo de escritura 0xFE el token de 512 bytes de datos (en escritura el tamaño debe ser ese siempre), los 2 bytes de CRC, y luego ocurre algo extraño, la tarjeta se la pasa mandando 0x00 mande lo que mande... como que se queda tildada ahi... agradeceria su respuesta...
ahora voy a intentar enviar los datos mas rápido, pues creo que se trata de un problema de tiempo... alguna novedad, posteo nuevamente, y GRACIAS a todos sus aportes y a hawpic!
 
Última edición por un moderador:
Que hay de nuevo serchy? me alegra ver que no has desistido :)
Lo primero.. eso de los 2 bytes de CRC.. me temo que es una vez que hayas enviado ya los 512 que quieres guardar en la tarjeta.
Te digo como lo hice yo:
-CMD24
-leo R1 con 00
-mando el token FE
-mando dos bytes x256 veces =512bytes (mando dos en cada iteracion para usar solo una variable contador)
-mando dos dummy bytes de CRC
-leo el response: xxx00101? => data accepted
-si no espero 1 mseg y vuelvo a leer el response y asi hasta que es correcto o tengo un timeout
-CMD13 para leer el registro status y ver si esta todo en orden

De todas formas antes de esto un briconsejo Antes de escribir un bloque prueba a mandar el comando CMD8 y mira si las tensiones son correctas y si te devuelve bien el patron que le mandas. Esto es valido para las sd version 2, si es anterior te devolvera en R1 un error de comando incorrecto, pero me imagino que tu memoria sera version 2 y asi puedes ver si el problema es de alimentacion o que.

Animo, ya te queda poco!

Si alguien esta interesado en mi codigo no tiene mas que pedirlo! Un saludo a todos
 
Hola hawpic, muchas gracias por tus consejos.
Despues de probar una serie de pasos, el CMD8 me tira error en CRC.. no se a que se deberá quizá mi tarjeta es version 1.1 y no 2.0 como supones. Me gustaría mucho que me pases tu codigo para darle una mirada, y de paso probar si funciona en mi circuito... como para descartar problemas de hardware :D desde ya muchas gracias!
Después de esto, voy a hacer una super guia paso a paso para que nadie mas tenga inconvenientes con una tarjeta de memoria... Saludos a la comunidad.
 
Hola , que tal
Leyendo este foro he encontrado que muchos han tenido problemas con la inicializacion de una targeta SD, bueno pues yo no soy la escepcion. Hace unas semanas estoy intentando inicializar una targeta SD de la marca kingston de 512 Mb, unicamente he logrado que se ponga en Idle_State, estoy trabajando con un microcontrolador Pic 16F877 con un Cristal de 4Mhz. Estoy utilizando la comunicacion en SPI modo Master con un divisor de frecuencia de 16 lo cual me da una frecuencia de 250khz lo cual entra dentro del rango permitido por las targetas SD, segun he leido en las especificaciones.
Las secuencias de comandos que he enviado es la siguiente:
CMD0 seguido de CMD1 y la tarjeta me responde b00000101
tambien he enviado la secuencia CMD0 seguido de CMD55 y ACMD41, la respuesta es la misma
otra secuencia ha sido CMD0 seguido de ACMD41 y en este caso no responde.
No se cual sea el problema en si, no se si, segun lo que he leido en el foro posiblemente sea un error en la frecuencia a la cual trabajo.
Si alguno a tenido un problema similar y lo a solucionado, espero pueda ayudarme

Este foro me ha ayudado bastante, muchas gracias a los colaboradores
Saludos desde Yucatan
 
Hola Poxa.
Yo una vez tuve un problema similar...
mando CMD0 y me responde 00000001 o 00000101 no recuerdo bien, y luego cuando mando
mando CMD1 y me responde 00000101
probando muchas veces distintas configuraciones obtenia el mismo resultado...
resolví el problema, cambiando de memoria, a una Kingston de 2GB y funciono correctamente.
la primera era una tarjeta marca "DANE-ELEC", q x lo visto no soporta este tipo de inicializacion... o algo asi... quiza es el mismo inconveniente que vos tienes, intenta probar con otra tarjeta.

Este seria el funcionamiento correcto
mando CMD0 y me responde 00000001
mando CMD1 y me responde 00000001
mando CMD1 y me responde 00000000

En cuanto a la escritura, no he probado mucho aún, pues estoy en época de examenes en mi facu, pero prometo que cuando logre hacer funcionar todo escribo una super guia
 
Hola, es la primera vez que escribo pero llevo bastante tiempo visitando el foro.

Os pido ayuda haber si me podeis echar un cable.

Estoy como la mayoria de vosotros haciedo un proyecto con un pic y una tarjeta sd.

Estoy usando un 16f876 y la parte del spi me funciona sin problemas porque la he probado con un rtc ds 1305 y puedo leer y escribir la hora por el hiperterminal sin problemas.

Estoy programando en ensamblador, el pic esta a 5 voltios y la tarjeta la conecto con un regulador de tension a 3.3 v, las lineas que van del pic a la sd estan con resistencias de 2k2 y 1k8 para que no haya problemas con las tensiones y la linea de salida de la tarjeta DO va directa al pic porque se supone que un 3.3 sera un alto para el pic con una resistencia de pull-up a 3.3.

Me he leido no se cuantos pdf de como funcionan las tarjetas y de los comandos y no se que me falla.

el proceso que hago es el que explicais aqui, CS en alto le envio 80 ciclos de reloj, pongo cs en bajo envio el cmd0 y espero la respuesta R1 y aqui esta el problema siempre leo FF , da igual que lea 3 bytes que 8 bytes la tarjeta no pasa a estado idle.

He probado con varias tarjetas y nada.

No se si es que el proceso de inicializacion hay que empezarlo en algun momento en concreto,
en la documentacion habla de esperar a que el bus de la tarjeta este a 2,2 voltios porque si no no admite comandos o algo asi,contra mas leo la documentacion mas me lio.

Algun consejo de que puedo hacer.

Un saludo y gracias.
 
Hola, la inicializacion se hace en cualquier momento, intenta probar con dos transistores a la salida de la tarjeta (de modo de que no invierta la señal proveniente de la misma), para elevar la tension que llega al micro, pues con 3.3v estas casi en el limite de nivel alto admitido por el pic. Suerte desde ARGENTINA!
 
Hola Serchy, gracias por contestar.

Ayer hice pruebas con el osciloscopio y lo que me pasa es lo siguiente: sin insertar la tarjeta en el zocalo veo los pulsos de reloj y como se envia el comando, pero con la tarjeta puesta no sale nada por el reloj ni por la linea de datos, se queda como muerto.

Un saludo.
 
Monly, la verdad que lo que dices, me suena bastante raro... :eek: pués no recibir respuesta de la SD, es posible, pero que de repente no tengas la señal de CK del micro, es raro... probaste que cuando colocas la tarjeta no cae la tension en el micro provocando un BOR posiblemente... el consumo de la tarjeta es pequeño, pero quiza tiene algun problema de cortocircuito interno, o el adaptador que usas puede ponerse en corto cuando colocas la tarjeta, la verdad ueq no se me ocurren muchas alternativas
 
Última edición por un moderador:
Hola parece que ya inicializa bien, la verdad no se si es por lo que he hecho o es que he tocado algo en la placa de pruebas y ahora hace buen contacto y antes no, por si le interesa a alguien lo que vi es que por la pata 1 de la sd habia tension y segun he leido en la documentacion se puede usar para detectar la insercion de la tarjeta y parece que el conflicto era este, al declarar en el pic la pata cs como salida y ponerla a 1 se ve que se producia un conflicto al tener las dos tension, no se, el caso es que la he declarado al inicio como entrada dandole tiempo a la tarjeta que coja tension y despues la declaro como salida y ya envio los 80 ciclos de reloj y ya no me hace lo de antes.

Ahora el problema que tengo es que para que me conteste que esta lista tengo que resetar el pic nunca lo hace a la primera, y quiero empezar a ver si puedo leer y escribir un sector.

Un saludo.
 
Atrás
Arriba