Суббота, 20.04.2024, 13:47
Микроконтроллерная техника AVR
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Помоги сайту
Поддержи наш сайт
Через WebMoney
U222865683087
R391933670808
Z877043628365
E649133782052

или пополни нашу SMS копилку
SMS.копилка

Ссылки

 Каталог статей
Главная » Статьи » Учимся работать с AVR

Подсчитываем промежуток времени импульсов

Code

//Chip type : ATmega8
//AVR Core Clock frequency: 8.000000 MHz
#include <mega8.h>
#include <delay.h>
#define SH_CP PORTB.2  
#define ST_CP PORTB.1  
#define DS PORTB.0  

unsigned char led_table[10]={0b00000011,0b10011111,0b00100101,0b00001101,0b10011001,0b01001001,0b01000001,0b00011111,0b00000001,0b00001001};
unsigned int show_data=0; //Отображаемое число
unsigned int dig_data=0;
unsigned char dig_number=0; //Номер разряда

void tmr_start() {
TCNT1=0; //Обнуляем счетчик
//Устанавливаем делитель 64
//Частота МК 8000KHz/256=31.25KHz
//31250 тиков в секунду, промежуток времени до переполнения 65536/31250=2.097152s  
TCCR1B=0x04;
}

void tmr_stop(void) {
TCCR1B=0x00; //Выключаем счетчик
}

//Внешнее прерывание
interrupt [EXT_INT0] void ext_int0_isr(void) {
tmr_stop(); //Останавливаем счетчик
//[Счетчик]/(31250/1000)=промежуток в ms
//Сохраняем для отображения в переменой show_data
show_data=TCNT1/31.25;  
tmr_start(); //Включаем счетчик
}

//Прерывание переполниния счетчика 1
interrupt [TIM1_OVF] void timer1_ovf_isr(void) {
tmr_stop(); //Останавливаем счетчик
TCNT1--; //Устанавливаем максимальное значение счетчика
}

void shiftbit(unsigned char newbit) {
if (newbit!=0) DS=1;
SH_CP=1;
SH_CP=0;
DS=0;
ST_CP=1;
ST_CP=0;
}

//Отображение разрядов числа
void dig_show(void) {
unsigned char data[2];
unsigned char i;
if (dig_number==0) dig_data=show_data;
data[0]=dig_data%10;
dig_data/=10;
data[0]=led_table[data[0]];
data[1]=1<<dig_number;
for (i=0;i<4;i++) {
shiftbit(data[1]&1);
data[1]>>=1;
}
for (i=0;i<8;i++) {
shiftbit(data[0]&1);
data[0]>>=1;
}
dig_number++;
if (dig_number>3) dig_number=0;
}

void main(void) {
DDRB=7; //Выход для семи-сегментника
TCCR1A=0x00; //Устанавливаем нормальный режим счетчика, максимальное значение 0xffff
//Устанавливаем внешнее прерывание INT0, по поднятию уровня
GICR=0x40;
MCUCR=0x03;
GIFR=0x40;
TIMSK=0x04; //Прерывание для счетчика 1
#asm("sei") //Разрешаем прерывание
while (1){
dig_show(); //Отображаем разряды
delay_ms(10);
}
}
Категория: Учимся работать с AVR | Добавил: HiSER (07.02.2010) | Автор: Литвин Артём
Просмотров: 9674 | Комментарии: 11 | Рейтинг: 0.0/0 |
Всего комментариев: 10
8 Artur  
0
не могу понять что тут считается, ставлю частоту импульсов 8, выдает 31 вместо 125 мс, кто-нибудь объясните мне бестолковому!!!!

9 HiSER  
0
Я тут уже не помню что писал... =\\\
посмотри в новой статье частотомер.

10 Artur  
0
частотометр я уже разобрал (тот что подсчет тактов синуса), теперь с этим долблюсь безрезультатно, надо именно замерить период импульсов (с разной задержкой идут)

7 Artos  
0
Тём, а как считать интервалы команд с ДУ? Можно же взять за основу этот пример?

6 Stanik  
1
А не проще ICP использовать?

5 SpSpider  
0
зачем ставить эти большие.. некрасивые цифры, давайте бинарно думать.

3 888  
0
А какой минимальный промежуток может быть зафиксирован?

4 HiSER  
0
Теоретически 1мс, погрешность +/-1мс

1 aleksyt  
0
А описание?

2 HiSER  
0
А комментариев в исходнике не достаточно?

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright My-AVR © 2024
Наша кнопка
У нас появилась кнопка, код кнопки:

Лаборатория самоделок на микроконтроллерах AVR

Форма входа
Наш опрос
Как вам материалы на сайте
Всего ответов: 863
Статистика/Друзья
CY-PR.com



Онлайн всего: 1
Гостей: 1
Пользователей: 0

РадиоКОТ - популярно об электронике. Авторские схемы, новые разработки. Обучение по электронике, микроконтроллерам, ПЛИС. Форум Сайт по радиоэлектронике. У нас все просто и интересно… ARV Reserch: Электроника — просто, полезно, увлекательно. Электронные устройства и программные средства для радиолюбителей и профессионалов, только авторские разработки, плагиата нет! Разработки на заказ. AVR projects Создание электронных роботов своими руками Схемы и программы на AVR http://ur5yfv.ucoz.ua/BANNER.gif Блог начинающего эмбеддера. Дай волю паяльнику! Самоделки на all-make.ru Принципиальные схемы Модулі автозапуску бензогенератора та системи АВР, електромонтажні роботи
Хостинг от uCoz