Юрец

Частотомер На Atmega

53 сообщения в этой теме

mazzi    3
...большая разница в синтаксисе, в регистрах...

Откуда там большая разница в регистрах? Там почти одно и то же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
Zenner    1

Я кстати знаю пару человек, которые сидят на CVAVR только из-за того, что там можно писать "PORTB.x=x" :D

Про регистры подметили верно. Они в МК, а не в компиляторе. Потому разными быть не могут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Юрец    7

пытаясь уйти от старого алгоритма подсчета частоты импульсов столкнулся с очередной проблемой:

//Clock frequency	 : 8,000000 MHz

unsigned long int counter; // количество тиков между прерываниями INT0 для расчетов
unsigned long int counter_timer;  // количество тиков между прерываниями INT0 для таймера
unsigned int c_tacho=0;  //  // расчитанное количество числа оборотов

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 1000,000 kHz
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x02;
TCNT2=0x00;
OCR2=0x00;

TIMSK=0x40;	 //0b01000000   разрешаем прерывания по TOIE2-переполнение таймера2	bit6

interrupt [EXT_INT0] void ext_int0_isr(void) //прерывание по появлению импульса на INT0
{
counter=counter_timer;
counter_timer=0;		//обнуляем количество пройденных импульсов timer2
c_tacho=60/(counter*0.000001);  // 0.000001 - период в секундах для частоты таймера2 1000,000 kHz
}

interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
counter_timer++;
}

void tacho_lcd_view()
{
sprintf(lcd_buffer,"%4d ob/min",c_tacho);	// 
lcd_gotoxy(0,0);
lcd_puts(lcd_buffer);//выводим 
}

Посмотрим расчет на примере.

расчитаем для частоты 8000 об/мин.

(1/8000)*60 = время измерительного импульса (период вращения одного оборота) и составляет 0,0075 сек, а период следования импульсов измерительного генератора (таймера) 0,000001с (1 мкс или 1000кГц), тогда за период одного оборота вращения зафиксируем:

0,0075сек/0,000001сек=7500 (импульсов), и скорость вращения будет F=60/(7500*0,00001)=8000 об/мин. что и требовалось доказать.

в протеусе так:

подаю на вход INT0 сигнал частотой 133.33333Гц ( 1/0,0075сек)

и вместо 8000 ob/min вижу 28000-30000 ob/min.

если в программе тупо делаю так: c_tacho=60/(7500*0.000001); то протеус показывает 8000 ob/min.

а если так: sprintf(lcd_buffer,"%4d ob/min",counter); то протеус показывает 29-30ob/min.

что-то я недопонимаю...

либо я где-нибудь затупил, либо протеус не умеет правильно эмулировать тактирование частоты.

все, разобрался. таймер 8-битный, и прерывание происходит на 256-й тик таймера а не с каждым его тиком, поэтому нужно так:

interrupt [EXT_INT0] void ext_int0_isr(void) //прерывание по появлению импульса на INT0

{

counter=counter_timer;

c_tacho=60/(counter*0.000256);

counter_timer=0; //обнуляем количество пройденных импульсов timer2

}

Изменено пользователем Юрец

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • О как что бы силовой трансформатор влиял на управляющий сигнал затвора верхнего ключа не когда бы не подумал.
    • предлагают "сменить 2n5551 на более диофильский 2SC3071", технически это нормально? У меня есть подлинные KEC эти  - внешне отличаются в лучшую сторону от китовых, но не слушал их, так как поставил фирмовый Санкен и оч. доволен существенному прогрессу в звуке в сравнении с китовыми.
    • Хочешь, я объясню тебе на пальцах... Средний видишь? Встретились Чубайс и Билл Гейтс. Чубайс говорит: Знаешь, Билл, я покруче тебя буду. Билл Гейтс выпадает в осадок: Это почему, мол? Чубайс говорит: Ну, вот смотри. Ты крутой бизнесмен, я крутой бизнесмен. Ты монополист, я тоже монополист. Билл Гейтс: Ну?.. Чубайс: Только хрен ты отключишь тех, кто тебе за Винды не платит!!! 
    • Почему было не задать вопрос людям "в теме"? Есть специальный раздел по МД.
    • Ничиконы обычные, а ФКП Вима раза в 4 крупнее по габаритам именно на 0.1 и 1 мкф которые, МКП Вима там видимо
    • Вольтметры эти уже затёрты до дыр. Собраны на STM.
    • Приобрёл на АЛИ термометр. Предназначен как заявляли для АВТО, но при получении вроде как для компьютера, так укомплектовали по питанию. Естественно разобрал и посмотрел что внутри и какой датчик.  Датчик обычный терморезистор NTC на 10 к. На плате капля   и индикатор и всё что обнаружил. Вольтметр/Амперметр  по видимому собран на ATtny2313 если судить по количеству выводов. Название затёрто.
        Прислали быстро дней 20 прошло. Остался доволен покупками.   Ещё преобрёл тестер компонентов. GM328 и заказал 2 ATmega328 заменю  прошивку на русское меню как придут.