martes, 8 de enero de 2008
Direccion Web
http://pic16f877.dmchihuahua.com/
Recibo sus comentarios a iess2600(a)gmail .com
Gracias
viernes, 2 de noviembre de 2007
Programa Comunicacion SPI - Dos Microcontroladores 16F877A
Este programa muestra el uso de comunicacion SPI entre dos microcontroladores 16F877A, como ya se vio la comunicacion usa basicamente tres lineas de comunicacion, la SDO (Salida de datos), SDI, Entrada de datos, SCK (Señal de reloj) y una opcional de SS o CS, Slave Select o Chip Select.
(Musica del video por Erick Johnson, espero no sea retirado de la Web)
Como se puede ver en el video, el Microcontrolador Master esta enviando datos por SPI al segundo uC el cual lo esta mostrando por medio de leds en le PortB. Mas interesante seria cuando monitoreamos un proceso usando SPI y podemos tomar decisiones desde el Slave o Master de acuerdo a la info que llega lo dejaremos para mas adelante, talvez para trabajar con variables fisicas como temperatura de manera que podamos tomar decisiones cuando alcance un valor predeterminado etc.
En el video podemos ver que cuando reseteamos al Master, el dato a ser enviado reinicia en ceros; pero cuando reseteamos al Slave, esta cuenta no se pierde pues el Master es quien la esta llevando. Si desconectamos el Chip Select SS', el Slave no es habilitado y se pierde la comunicacion SPI.
MASTER SPI.
Despues de configurar los TRIS de manera correcta, hacemos CKE=1, habilitamos el SPI, asignamos el estado idle del clock (1) y seleccionamos una frecuencia de trabajo.
El ChipSelect sera llevado a cabo mediante PortA, 2=0. y cada vez que haya transmision de un dato, incrementa el registro y llama al retardo para poder visualizarlo.
Del ASM:
; SPI_MASTER.asm
; PROGRAMA QUE ENVIA DATOS DE UN CONTADOR BINARIO A OTRO MICROCONTROLADOR USANDO COMUNICACION SPI
; EL MASTER SELECCIONA EL SLAVE USANDO EL PIN PORTA, 2. LA TRANSMISION INICIA CUANDO ESCRIBIMOS EL VALOR EN
; EL REGISTRO SSPBUF, LUEGO ESPERAMOS A QUE TERMINE TRANSMISION CHECANDO AL BIT BF DEL SSPSTAT
; CUANDO EL DATO ES ENVIADO, ESPERAMOS (RETARDO) PARA ENVIAR EL SIGUIENTE DATO.
; Fosc=4MHz
SLAVE SPI.
Configuramos PortA como salidas digitales, excepto PortA, 5 que sera entrada de SS'.
Despues de haber configurado los registros, el programa continuamente esta verificando si el bit BF ha sido puesto (transmision completa), cuando asi sea, mostrara el valor recibido por el puerto B
En ambos casos de transmision y recepcion, el sampleo se hara a la mitad del tiempo asignado y los datos seran transmitidos en la caida de la señal de Reloj.
Del ASM:
; SPI_SLAVE.asm
; PROGRAMA QUE RECIBE DATOS USANDO TRANSMISION SPI, CON CHIP SELECT Y MUESTRA EL DATO POR EL PORTB (LEDS)
; EL PROGRAMA CONTINUAMENTE BUSCA SI ES QUE HAY TRANSMISION (BF=1), CUANDO LA HAY, MUESTRA EL DATO EN EL
; PORTB MEDIANTE LEDS, ES AHI CUANDO PUEDE EFECTUAR OTRAS OPERACIONES.
; Fosc= 4MHz, VIDEO DISPONIBLE ONLINE, picmicrocontroller877.blogspot.com
Para la conexion usamos el sig diagrama:
Los archivos Hex son los siguientes:
HEX MASTER:
:020000040000FA
:1000000002201528A0018316031300308500073055
:100010009F00831603131030870040309400831232
:1000200003133230940005150800051120089300D1
:1000300083160313141C1A288312031313080515BF
:10004000A00A23201528FF30A100A200A10B26281A
:06005000A20B26280800A7
:00000001FF
HEX SLAVE:
:020000040000FA
:1000000002201228831603132030850007309F003A
:100010008601183087004030940083120313343077
:1000200094000800831603139430141C12288312C2
:0C00300003131308831203138600122828
:00000001FF
Saludos desde Chihuahua Mexico, links de Chihuahua: Turismo Chihuahua y Mapa Chihuahua
Espero sus comentarios.
.
lunes, 29 de octubre de 2007
Comunicacion SPI - PIC 16F877
Para la comunicacion se requieren basicamente de tres pines:
- SDO (Serial Data Out) - RC5
- SDI (Serial Data In) - RC4
- SCK (Serial Clock) - RC3
Registros.
Los registros a usar son:
- SSPCON1 - Control Register
- SSPSTAT - Status Register
- SSPBUF - Buffer Register
- SSPSR - Shift Register (no implementado fisicamente, pero se puede direccionar)
SSPCON1. Este es el registro de controla para la comunicacion SPI, nos idica si hay una colision de informacion, Overflow, habilita el SSPI, polaridad del reloj, y otras configuraciones como Master o Slave, y velocidad de transmision.
Inicio de operacion.
Para inciar la operacion SPI, varias opciones deben ser seleccionadas, tales son:
- Master Mode - SCK es salida
- Slave Mode - SCK es entrada
- Clock Polarity - Polaridad del Clock
- Sample Phase Data Input - Al inicio o final del tiempo de salida
- Clock Edge - Salida de info al subir o bajar SCK
- Clock Rate - Solo para Master Mode
- Slave Select Mode - Solo para Slave Mode
En la recepcion conforme el SSPSR recibe los 8 bits, los va pasando uno a uno al SSPBUF, cuando temina de enviar el byte, se pone en uno el bit BF (Buffer Full) y la bandera de interrupcion SSPIF.
Todos los registros asociados con la transmision SPI:
Conexion tipica SPI:
En la siguiente entrada veremos un programa de ejemplo para comunicar dos PIC 16F877 por medio de SPI.
.
Modulo MSSP del PIC 16F877A
Ambos modos pueden usarse para comunicarce con otros dispocitivos compatibles con estos protocolos de comunicacion, como pueden ser EEPROMs, Shift registers, Convertidores A/D, otros microcontroladores, etc.
El modulo MSSP tiene asociados tres registros: Status Register (SSPSTAT), y dos registros de control (SSPCON1 y SSPCON2), el uso de cada registro y su configuracion individual depende del modo de comunicacion que se este empleando (SPI o I2C).
Diagrama a Bloques del modulo MSSP.
Como se puede ver en la imagen, el MSSP toma com base de tiempo el Timer 2, las terminales SDI y SDO van directamente sobre el Shift Register SSPSR, lo que permite la comunicacion serial. Cada parte del diagrama sera comentada en ambos modos de comunicacion al momento de ser vistos y explicados.
Saludos.
.
miércoles, 24 de octubre de 2007
PWM de Ancho Variable con PIC 16F877A
En el Video se observa la variacion en la intencidad de luz conforme variamos el potenciometro del AD, de la misma manera se puede controlar la velocidad de un motor DC pues se esta controlando la energia que se le aplica por unidad de tiempo, lo que hace a esta tecnica muy eficiente pues no se disipa calor como en otras tecnicas de control.
09/Nov/07 Nota:Como se ve en el video, el LED esta un poco iluminnado debido a que los ultimos bit del Byte de configuracion (CCPCON1<5:4>) estan en 1, puedes cambiarlos a 00 sinproblema alguno en el ciclo de trabajo debido a que son los LSB, no cambia de manera significativa el ciclo, quedando practicamente a 50%.
Programa Hex:
:020000040000FA
:1000000002201F2883160313F93092008312031372
:100010007C3095003C30970083160313071188014C
:1000200083120313073092008312031341309F00A1
:10003000831603130E309F008312031308008312EC
:1000400003131F151F1D22281E08950088001F2856
:00000001FF
Formas de Onda:
Saludos.
.
Programa del Modulo PWM
El objetivo es tener una señal PWM de 250 Hz al 50% no modificable para lo cual se siguieron lo pasos:
- Dar valor a PR2 para el Periodo del PWM
- Para poner el ciclo de trabajo damos valor a CCPR1L y CCP1CON<5:4> (10 bits)
- Configurar la salida en RC2, haciendo BCF TRISC, 2
- Dar valor al prescaler del Timer 2 usando T2CON
- Configurar em modulo CCP1 para uso de PWM
Seleccionamos los valores que deseamos en la Frecuencia de PWM y Ciclo de trabajo. En este caso son 250 Hz y 50% respectivamente.
Usando las formulas dadas anteriormente despejamos la variable que nos interesa de la siguiente manera:
Calculo de PR2:
PR2 = (Periodo PWM/4*Tosc*Prescaler) - 1
Periodo PWM = 1/Fpwm = 4*10exp-3
Asi PR2 = 249D = F9h = 11111001b
Calculo de CCPR1L:CCP1CON<5:4>:
Tiempo de ciclo = % Ciclo de trabajo*Periodo PWM
CCPR1L:CCP1CON<5:4> = (% Ciclo/ Fpwm)/(Tosc*Prescaler)
CCPR1L:CCP1CON<5:4> = (50%/250)/(25*10exp-8*16) = 500
CCPR1L:CCP1CON<5:4> = 1F4h = 0111110100;
Asi cargamos
CCPR1L = 01111101 = 7Dd
CCP1CON<5:4> = 00
Usando la liga dada anteriormente se obtiene:
CCPR1L = 01111101 = 7Ch
CCP1CON<5:4> = 11b
Que son los valores cargados al programa
La forma de onda en el pin RC1 es similar a la siguiente (distorcion por falta de BW al osciloscopio):
Se observa el ciclo de trabajo del 50%.
Baja el programa ASM, el HEX es el siguiente:
:020000040000FA
:100000000220172883160313F9309200831203137A
:100010007C3095003C30970083160313071188014C
:1000200083120313073092008312031308000000A9
:0200300018288E
:00000001FF
Saludos.
.
Modulo PWM del PIC 16F877A
Periodo PWM
El Periodo del Modulo PWM es configurado dando un valor al registro PR2. Este periodo puede ser calculado usando la siguiete formula:
PWM Period = [(PR2) + 1] • 4 • TOSC • Prescale del Timer 2
Como ya es sabido la frecuencia esta determinada por 1/Periodo PWM
Cuando el valor del Timer 2 alcanza el valor de PR2, los siguientes eventos ocurren en el siguiente ciclo de tiempo:
- TMR2 es limpiado
- El pin CCP1 es puesto a 1
- El Periodo de trabajo del PWM es cambiado de CCPR1H a CCPR1L
Ciclo de trabajo del PWM
El ciclo de trabajo del PWM es determinado escribiendo al registro CCPR1L y CCP1CON<5:4> (10 bits de resolucion).
El ciclo de trabajo se obtiene usando la siguiente formula:
Tiempo de Trabajo PWM = (CCPR1L:CCP1CON<5:4>) •TOSC • (TMR2 Prescale Value)
Para modificar el ciclo de trabajo, en cualquier momento se puede escribir a CCPR1L y CCP1CON<5:4>, pero estos valores no seran tomados en consideracion hasta que el Timer alcance al PR2 y reinicie su operacion tomando en cuenta los nuevos valores.
Tiempo de trabajo = % Ciclo de trabajo / Fpwm
Para calcular la maxima resolucion del PWM a determinada frecuencia usamos la siguiente formula:
Formula para resolucion del modulo PWM
CONFIGURACION DEL PWM:
Pasos para la configuracion del Modulo PWM del PIC 16F877A
1. Configurar el Periodo dando un valor al registro PR2
2. Configurar el Ciclo de Trabajo escribiendo en: CCPR1L:CCP1CON<5:4>
3. Limpiar el Tris C, 2 para asignar la salida del modulo (CCP1)
4. Asignar el valor del Prescale del Timer 2 (T2CON)
5. Configurar el modulo CCP1 para operacion PWM.
Ejemplo de frecuencias y su resolucion
Para mas calculos del modulo PWM visita esta pagina:
http://www.micro-examples.com/public/microex-navig/doc/097-pwm-calculator.html
.
Modulo PWM - Que es PWM
PWM = Pulse Width Modulation, Modulacion del Ancho de Pulso
Breve explicacion del PWM.
Hay muchos circuitos analogicos para el uso de PWM, por ej. los basados en el famoso LM555, que por medio de voltage hacemos que el pulso cambie su ancho.
La forma de onda de un PWM se puede ver enseguida:
Como se observa, se tiene la misma frecuencia con un diferente ancho de pulso (o cliclo de trabajo) de esta manera podemos regular la cantidad de energia que es aplicada a una planta como un motor DC o una lampara, controlando de esta manera su velocidad o intencidad de luz.
El uso de un microcontrolador con modulo de PWM tiene varias ventajas sobre un circuito analogico, como lo son la precision y un mejor control de las variables involucradas ademas de espacio y ahorro de energia. Como el micro trabaja a 5V, puede usarse como disparador de Driver como un transistor de potencia o SCR para controlar cargas mayores.
.
Programa del Timer 2
Cuando la interrupcion del Timer sucede, hace que se incremente una cuenta por el Puerto D.
Cuando la interrupcion Externa ocurre, cambia los valores del Postscale y Prescale a 1:1 haciendo en conteo mas rapido como se observa en el video.
El Archivo ASM lo encuentras aqui, el esquematico es el mismo que el del Timer 1 y el HEX es el siguiente:
:020000040000FA
:04000000202036285E
:08000800831203138B1C09286D
:100010003828831203138C1C09003D288312031314
:060020008B108C1009009A
:1000400083120313D0308B00793092008316031390
:1000500002308C00F230920040308100860188012D
:100060008312031386018801121508000000372847
:1000700083120313043092000E2883120313880A9C
:020080000E2848
:00000001FF
.
lunes, 22 de octubre de 2007
Timer 2 del PIC 16F877A
El Timer 2 tiene un registro de Periodo PR2 que a diferencia de los anteriores que terminaban en FFh o FFFFh utiliza este registro el cual le indica al Timer 2 cuando reiniciarce utilizando un comparador interno. PR2 tiene un FFh al Reset.
Es importante ver y entender el diagrama de bloques del Timer 2 que se muestra enseguida:
En el se puede ver que al estar contando los ciclos de reloj Fosc/4, despues del prescaler seleccionable, se va incrementando el registro TMR2, el resultado entra al comparador que continuamente hace su trabajo comparando con PR2 (FFh al inicio). El resultado del compardor pasa por el Postscaler seleccionable el cual se encarga de poner la bandera en un momento determinado.
.