Первая программа "Тахометр"

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Грызет канифоль
Аватара пользователя
Сообщения: 255
Зарегистрирован: Пн фев 11, 2008 20:32:45
Откуда: Краснодарский край

Сообщение knyaz* »

Вот написал первую программу оцените...
Вопрос перед заливкой и сборкой цепи хочу поинтересоватся какие могут быть ошибки в программе...

Код: Выделить всё

//Version 1.0.1
//Частота кварцевого резонатора 32,768 Hz
#include<avr>		
#include<avr>
int temp;	//Переменная для хранения числа импульсов
int cat[3];	//В массив записываются разряды
		//Для вывода на сегмент
char segments[] = { 0x7e, 0xc, 0xb6, 0x9e, 0xcc, 0xda, 0xfa,
                    0xe, 0xfe, 0xde };	
//Прерывание на входе INT0
ISR(SIG_INTERRUPT0)
{
	temp++;		//Счет импульсов при каждом импулсе добавит 1
}
//Прерывание при переполнении T/C0
ISR(SIG_OVERFLOW0)
{
	TCNT0=0x80;	//Записываем 128 для того что бы прерывание
			//происходило каждую секунду
	temp=temp*6;	//Число прешедших на вход импульсов
			//умножаем на 6
	cat[0]=temp%10;	//Делим на 10 остаток в масив 1-разряд
	temp=temp/10;	//Оставляем 2 разряда 
	cat[1]=temp%10;	//Делим на 10 остаток в масив 2-разряд
	cat[2]=temp/10;	//Делим на 10 целое число в масив 3-разряд
	temp=0;		//Обнуляем счетчик импульсов
}
int main(void)
{
DDRB=0xFE;	//Конфигурация порта В 11111110
DDRD=0x07;	//Конфигурация порта D 00000111
GIMSK=0x40;	//Внешнее прерывание на входе INT0 активно
MCUCR=0x0B;	//Прерывание на входе INT0 по возрастаюшему фронту
TCCR0B=0x04;	//Частота тактов делится на 256
TIFR=0x00;	//Сбрасываем флаги прерываний от T/C0
TIMSK=0x02;	//Прерывание при переполнении T/C0
TCNT0=0x80;	//Записываем 128 для того что бы прерывание
		//происходило каждую секунду
ACSR=0x80;	//Выключение аналогово компаратора
sei();		//Глобальное разрешение прерываний
while(1){
PORTD=0x01;		//Зажигаем первый разряд
PORTB=segments[cat[0]];	//Зажигаем элементы разряда
PORTD=0x02;		//зажигаем второй разряд
PORTB=segments[cat[1]];	//Зажигаем элементы разряда
PORTD=0x04;		//Зажигаем тертий разряд
PORTB=segments[cat[2]];	//Зажигаем элементы разряда
};
}
:))
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 139
Зарегистрирован: Ср сен 19, 2007 10:26:43
Откуда: Украина,Черновцы

Сообщение Reboot_s »

Я не знаю, но по моему( а может и нет) выложу общее мнение.
А хрен (огородний овощ 8) ) его знает!
Все ошибки обычно выявляются при симулировании процеса или на макетке, а потом устраняются.
Сомневаюсь, что кто-то будет сидеть считать, что у вас на выводах порта и куда оно подается. Если нет грубых ошибок налицо, врятли кто-то найдет другие. Причем кода выкладываете текст программы, удосуживайтесь выкладывать хотя бы принципиальную схему устройства или описание его работы.
Не напрягайся - перезагрузись!
Контактная информация:
Реклама
Модератор
Аватара пользователя
Сообщения: 11169
Зарегистрирован: Чт окт 27, 2005 18:50:07
Откуда: из мест не столь отдалённых

Сообщение Сэр Мурр »

Подобные листинги программ надо оформлять в виде приложения к сообщению- для экономии трафика при просмотре и скорости загрузки страницы. Кому интересно- тот откроет приложение и посмотрит.
Встал на лапы
Аватара пользователя
Сообщения: 120
Зарегистрирован: Чт ноя 08, 2007 12:12:41
Откуда: г.Оренбург

Сообщение ua9ssa »

Выложи полный исходник программы...
Истина где-то рядом...
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Грызет канифоль
Аватара пользователя
Сообщения: 255
Зарегистрирован: Пн фев 11, 2008 20:32:45
Откуда: Краснодарский край

Сообщение knyaz* »

схема
Изображение
Исходники[b/]
http://webfile.ru/1759665

Правдо еще плату саму не собирал/
Но при отладке в avrstudio неплохие результаты программа показала///
Кстати ктонибудь может дать ссылу на какойнить учебник по VMLAB///
Буду очень благодарен! :))
Реклама
Родился
Сообщения: 2
Зарегистрирован: Пт фев 22, 2008 11:36:09

Сообщение СанСаныч »

А я делал по другому, измерял не число импульсов, а период
между импульсами. После внешнего прерывания необходимо
запретить на время примерно 0.002с реакцию на внешние прерывания, чтобы не ловить помехи от системы зажигания.
Вложения
tax1.rar
(23.86 КБ) 446 скачиваний
Реклама
Грызет канифоль
Аватара пользователя
Сообщения: 255
Зарегистрирован: Пн фев 11, 2008 20:32:45
Откуда: Краснодарский край

Сообщение knyaz* »

Как можно избавится от мерцания сегментов/// задержки мало помогают///
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 375
Зарегистрирован: Вс мар 04, 2007 13:14:25
Откуда: Украина

Сообщение Krik99 »

Если можно, поделитесь куском кода под CodeVision AVR , который измеряет количество оборотов для тахометра, а остальной код, ну там вывод на LED у меня есть. За ранние спасибо. :)
Изображение
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»