Comunicacion entre PIC 16f877a y CAD MCP3001 por SPI (mikroC)

Hola, les traigo un poco de código y explicaciones sencillas y básicas acerca de la comunicación SPI entre el convertidor analógico digital MCP3001 y el pic dieciseisefeochentaisietesietea (a que nunca lo habían leído así :D). Tambien hay un archivo adjunto para PROTEUS (ISIS) . Es primera vez que intento algo así, errores garantizados.:LOL:
Hay varios temas que tratan sobre comunicación SPI y lo hacen de mucho mejor manera, el objetivo es presentar una guia rápida para tener un sistema funcional en pocos minutos. Si tu interés va más allá de lo presentado, te sugiero que leas otros temas similares y estudies a fondo el datasheet de tus dispositivos.

Ah, si, el código expuesto esta hecho en mikroC. Y utilizaremos el hardware del SPI. Tambien se puede implementar en software pero la velocidad se limita a 50khz y vamos... 50 kilojers... que pensara la gente :rolleyes:.

Descarga los archivos .

El sistema trabajara a un reloj de 4Mhz (20+ Mhz es cosa de adolescentes que les gustan las grandes velocidades y emociones extremas). Dehabilitas el watchdog y basicamente todas las caracteristicas esas de los "configuration bits".

  • Por favor vayamos al código "spiejem.c", linea 1. Continuaremos ahí. Sigue leyendo el codigo y sus explicaciones hasta que tengamos que regresar al foro (ya te lo sugerire)

El modo SPI es un sistema de comunicacion full duplex (transmision-recepcion, como el telefono) el cual tiene 4 versiones dependiendo de la configuracion de su reloj (cuándo hace qué acción). Los ingenieros han designado a cada uno de estos tipos como 00, 01, 11 y 10. El CAD MCP3001 funciona con los modos 00 y 11, enviando los datos en cada caida de reloj. Por fortuna la configuracion SPI de la funcion SPI1_Init(); es 100% compatible con este dispositivo. Sin embargo cuando trabajes con otros componentes SPI lo mas probable es que debas ajustar el protocolo al del chip, usando una funcion para configurar llamada SPI1_Init_Advanced(). Pero eso son problemas que no nos tocan y nos podemos reir de los incautos que lo tengan juajuaguaguauaujaa.
En las siguientes lineas iniciaremos el protocolo y obtendremos la lectura, sin embargo debo explicarles antes qué es lo que leeremos.

En la caida de reloj, el dispositivo nos enviara 8 bits, siendo los mas significativos los primeros (el bit 7 se envia primero, el 0 al ultimo) Pe-e-e-ero, debido a que se ocupa tiempo para muestrear la señal, los dos primeros bits seran bits "nulos" y ademas, como la lectura es solo de 10 bits y en total tendremos 16 bits, la mitad del segundo byte no nos servira, es decir, no son informacion util, por lo tanto los debemos descartar. A ver, hare uso de mis habilidades en pintura para ilustrar esto; soy descendiente directo de Rembrandt asi que no deberan tener problemas para comprenderlo. (Si,como no :rolleyes:).
http://img337.imageshack.us/i/bitsmcp3001.jpg/

Con esto en mente, deberemos discriminar los bits rayados y "armar un nuevo par de bytes"
con los 10 bits utiles. Continuemos con el codigo, en la linea 51, donde pondremos en "bajo" el pin CS del ADC, lo cual lo activara.

Y eso es todo. Espero haya sido de su agrado. Espero sugerencias y correcciones.

CAFEINA Y DESTRUCCION!!! ARRGHH!
 
Saludos, yo ando buscando informacion sobre la comunicacion SPI porque deseo controlar un TLC5940, pero aun no entiendo como configuarar la frecuencia del reloj en mikroC. Tienes mas informacion sobre esta comuncacion
 
Atrás
Arriba