La practica que se mostrará a continuación hará uso del modulo ADC y del USART0 del microcontrolador AVR, con el fin de realizar el envió de datos de un microcontrolador a otro, para demostrar el funcionamiento en tiempo real de la comunicación serial.
La practica constan de dos microcontroladores, el primero ha sido programado para el envió del valor captado por el canal 0 del ADC, el segundo programa realiza la recepción de los datos lo utiliza para determinar el ancho de pulso que tendrá el timer0 en modo fast PWM.
DESCRIPCIÓN DEL PROGRAMA
PROGRAMA 1
Para comenzar se describirá el programa 1 el cual realiza la captura del voltaje analógico y envía por medio del UART.
canalADC(0);
initADC(2,1,5);
Estas funciones lo que realizan es la selección del canal que utilizara el ADC para la conversión y la configuración del ADC para su funcionamiento en modo corrida libre, el voltaje de referencia es definido por el numero 2, la justificación del resultado adquirido por el ADC se configura a la izquierda para únicamente aceptar 8 bits de información con el numero 1, y se configura el reloj de la conversión con preescalamiento 32 con el numero 5.
initializeUART0(9600,0,8,2,2);
Se inicializa el modulo de comunicación serial con los siguientes parámetros:
- Baudrate de 9600.
- Modo normal asíncrono.
- 8 bits de datos.
- Sin paridad.
- 2 bits de stop.
Estos parámetros deben ser los mismos para ambos programas para poder realizar la comunicación.
PROGRAMA 2
La función del segundo programa es la de recepción de los datos y actualización del registro OCR0A con lo que se variara el ancho de pulso de modo fast PWM.
initTIMER0_FAST1();
COMPAREA_FAST(2);
PREESCALL(5);
El timer0 se configura para funcionar en modo fast PWM, con un preescalamiento de 1024 lo cual se consigue ingresando 5 en la función, en cuanto al modulo al haber coincidencia de los registros TCNT0 y OCR0A es la de cambiar el estado de la salida del pin PD6. No se debe de olvidar declarar el pin del PWM como salida de no ser así el programa no funcionara como es debido.
NOTA: Al final colocare el link de ambos programas y su simulación en proteus, alguna duda o sugerencia puede colocarla en los comentarios.
PROGRAMA 1
/*
* pot_uart_pwm.c
*
* Created: 08/02/2014 17:42:48
* Author: TERRAFORMARS
*/
#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 8000000UL // XTAL de 8 MHz
#endif
#include "InitADC.h"
#include "UARTAiNit.h"
#include <util/delay.h>
unsigned char n;
int main(void)
{
canalADC(0);
initADC(2,1,5);
initializeUART0(9600,0,8,2,2);
while(1)
{
//TODO:: Please write your application code
n=convADC();
TransmiteUART0(n);
_delay_ms(20);
}
}
PROGRAMA 2
/*
* pot_pwm.c
*
* Created: 08/02/2014 17:59:39
* Author: TERRAFORMARS
*/
#include <avr/io.h>
#ifndef F_CPU
#define F_CPU 8000000UL // XTAL de 8 MHz
#endif
#include "UARTAiNit.h"
#include "TIMER0.h"
#define setbit(sfr,bit) (_SFR_BYTE(sfr)|=(_BV(bit)))
#define clearbit(sfr,bit) (_SFR_BYTE(sfr)&=~(_BV(bit)))
#define bittoggle(sfr,bit)(_SFR_BYTE(sfr)^=_BV(bit))
unsigned char n;
int main(void)
{
initTIMER0_FAST1();
COMPAREA_FAST(2);
PREESCALL(5);
initializeUART0(9600,0,8,2,2);
setbit(DDRD,DDD6);
while(1)
{
//TODO:: Please write your application code
n=ReceiveUART0();
OCR0A=n;
}
}
IMÁGENES
diagrama de funcionamiento del modo fast PWM
PROGRAMA 1 Y 2 EN ATMEL STUDIO
LINK
https://mega.co.nz/#!owsBBDaJ!hU9gfNqtSdxJ85fLj0rVa4LEXhTwg_ho8xASBQOy4-U
No hay comentarios:
Publicar un comentario