TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: remi04 en 17 de Octubre de 2011, 09:04:36
-
Hola a todos. Antes que nada quiero presentarme, mi nombre es Javi y me registro desde Sevilla, España. Llevo bastante tiempo en programación de microcontroladores sobre todo en ASM y PBP deseoso de empezar con CCS próximamente.
Queria exponer una cuestion que llevo buscando por la web y el foro y no termino de localizar o entender. Resulta que tengo un programa que maneja un lcd 84 x 48 y resultó ser tan complejo que no me cabía en la rom de un 16f877. Finalmente depurando y reduciendo espacio y con ayuda de una eprom i2c conseguí meter todo en el 877. La eprom que utilicé fué una 24lc256 (32 Kb) para almacenar tablas de constantes, imagenes, textos y datos de control. Mi programa nunca escribe info en la eprom. la eprom solo se graba la primera vez y jamás se accede a ella para grabar nada. debido a ello la seguridad de los datos de la eprom es primordial. Trabajando en la placa board en ocasiones por provocar accidentalmente un corto en la linea de 5v he visto que algunos datos de la eprom se perdieron o modificaron fácilmente y la tuve que volver a regrabar. Sé que ello se soluciona con un buen sistema de filtrado electrico en el diseño del PCB pero visto lo visto no me fio. Me gustaria llegar mas allá y programar en el micro una rutina que lea la eprom en busca de errores y los corrija. Como es de 32 K y solo uso 9 podria grabar por triplicado y hacer que la rutina compare y corrija los datos que no coincidan con sus dos redundantes equivalentes. Tambien he pensado en implementar codigo CRC, ¿alguien sugiere una manera de hacerlo con codigo lo mas liviano posible??
Un saludo.
-
Lo unico que se me ocurre es que cuando envies un dato requerir una lectura del mismo dato y compararlo para ver si son iguales, lo demas no puedes hacer nada mas, porque la 24lc256 no puedes modificar su programacion interna, es decir, puedes poner un crc pero la memoria no sabra que le estas enviando...
-
Con el CRC, cada 20 bytes, por ejemplo, podrías determinar si existe un error en esos bytes. Eso serviría para controlar y determinar si es necesario una actualización de los datos.
Saludos!
-
Una primera aproximación podría ser poner por triplicado la información, y agregar un CRC como dice Suky.
Igualmente hay algorítmos muy avanzados para incluír información adicional que puede recuperar información dañada. Te recomiendo que leas:
Forward error correction (http://en.wikipedia.org/wiki/Forward_error_correction)
Por otro lado, si la memoria no se modifica jamás, por qué no deshabilitar la escritura físicamente mediante el pin WP?
-
Yo estoy con algo parecido:
Por medio de un emisor RF de datos, envio la temperatura de 5 sensores (Un tren de informacion), y lo envio 3 veces. En el receptor lo comparo, si hay algun dato diferente, esos datos no los tomo y le digo que me los vuelva a enviar. Funciona bien...
lo de brunoF
"Por otro lado, si la memoria no se modifica jamás, por qué no deshabilitar la escritura físicamente mediante el pin WP?"
creo que es otra solucion buena.
-
Pero el hecho de proteger mediante WP a vdd, ¿ imposibilita la corrupcion de algunos bytes ante un picotazo electrico, interferencias o ruidos??.
saludos.
-
Pero el hecho de proteger mediante WP a vdd, ¿ imposibilita la corrupcion de algunos bytes ante un picotazo electrico, interferencias o ruidos??.
saludos.
Pruebalo, es una buena solución.
-
Pero el hecho de proteger mediante WP a vdd, ¿ imposibilita la corrupcion de algunos bytes ante un picotazo electrico, interferencias o ruidos??.
saludos.
Pruebalo, es una buena solución.
Ojalá puedas probar y comentar tus resultados, puesto que de fallar ante picos e interferencias eléctricas, no habría ningún método que permitiera recuperar la información ante un error, lo único que podrías hacer es avisar de que hay inconsistencias para que se proceda a grabar nuevamente la información.