En este programa se mide la velocidad con un encoder el primer microcontrolador simula los pulsos del encoder
een el segundo se implementa el medidor de velocidad, deben tener la libreria del LCD
Esta programado en el Atmega164p en lenguaje c
/*
* medir_velocidad_con_encoder.c
*
* Created: 17/03/2016 12:31:58
* Author: Toshiba Satellite
*/
#include
#define F_CPU 8000000UL
#include
#include
#include "lcd.h"
#include
uint8_t EEMEM dir_distancia;
int pulsosv,velocidad;
int danterior;
unsigned int pulsosd;
unsigned int distancia;
unsigned int msm[16];
void configurar(void);
int main(void)
{
configurar();
while(1)
{
//TODO:: Please write your application code
//calculo de la disttancia
distancia=(pulsosd*0.0261666*0.001)+danterior;
lcd_gotorc(1,1);
sprintf(msm,"%d ",distancia);
lcd_puts(msm);
lcd_gotorc(1,7);
lcd_puts("Km");
lcd_gotorc(2,1);
sprintf(msm,"%d ",velocidad);
lcd_puts(msm);
lcd_gotorc(2,5);
lcd_puts("Km/h");
}
}
void configurar(void)
{
DDRD=0b00000000; //entrada para int0 sin pull up porq viene de un sensor
DDRA=255;
PORTD=0b00001000;
//configuracion de la interruptions
EICRA=0b00001011;
EIMSK=0b00000011;
EIFR=0b00000011;
//inicializar lcd
lcd_init();
//
//configurar eeprom
danterior=eeprom_read_byte(&dir_distancia);
//configuracion del timer
TCCR1A=0;
OCR1A=31249;
TCCR1B=0b00001100;
TIMSK1=2;
TIFR1=2;
sei();
}
ISR(INT0_vect)
{
pulsosd++;
pulsosv++;
}
ISR(TIMER1_COMPA_vect)
{
if (pulsosv>36)
{
velocidad=pulsosv*0.08333*6.28*0.05*3.6;
pulsosv=0;
}
}
ISR(INT1_vect)
{
eeprom_write_byte(&dir_distancia,distancia);
sbi(PORTB,0);
}
//
Aqui esta el programa que genera los pulsos del encoder
/*
* variador_de_frecuencia.c
*
* Created: 18/03/2016 11:47:32
* Author: Toshiba Satellite
*/
#include
#define F_CPU 8000000UL
#include
#include
void configurar(void);
int main(void)
{
configurar();
while(1)
{
//TODO:: Please write your application code
ADCSRA=0b11000110;
_delay_ms(2);
OCR0A=ADCH;
}
}
void configurar(void)
{
DDRB=0b00001000; //salida de OC0A
//configuracion del timer
TCCR0A=0b01000010;
TCCR0B=0b00000100;
//configuracion del ADC
ADMUX=0b01100000;
DIDR0=0b00000000;
}
//
No hay comentarios.:
Publicar un comentario