Юрец

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

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

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

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

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


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

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

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

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


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

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

//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

}

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас


  • Сообщения

    •   А у темы есть реальный потенциал на 10 страниц...
    • @Limonad Что за схема у Вас ?  Я с похожей проблемой долго мучился пока не посоветовали закоротить входы согласующего трансформатора.  Косяк оказался в неисправности одного силового транзистора который видимо коротил вторичку управляющего трансформатора. И у Вас может быть беда в силовой части.
    • у дитя вон в китайском телефоне тоже пишется что памяти не 4 а аж 32 оказалось)-но благо я и на меньшие рассчитывал .гарантию вам в магазине по 400руб за шт дадут,потом догнят и еще дадут.в магните масло тоже есть по150р,а есть и по 50р.и то и то масло,смысл?вы меня жизни научете,или я вас?проще будьте.позиция помему всем о всех ясна.новый кареец или б.у японец)))риторические вопросы,пустое это все.в теме по делу давайте писать.  
    • вы даете гарантию?   ёмкость даже выше заявленных оказалась. 2700мА*ч. Нече так подделка побольше бы таких 
    • судя по емкости и качеству, проработают они явно больше безродных пустышек.я просил не гадить в теме.чтото нравится-не нравиться,в л,с нравиться китайские варианты по каким то причинам-покупайте.смысл мне рассматривать фейки и спорить о них)).считаю что спор о б.у исправном оригинале и новом китайском нонейме глупым, практически в любой отрасле.нашли новые оригинальные акумы, на сайте переполненным подтелками по 100 с копейками рублей?жизнь била мало и в сказки вериться?)ну берите.ссылка на мои ее раз https://ru.aliexpress.com/item/Genuine-18650-CGR18650CG-MH12210-Li-ion-2200mAh-3-7v-Battery/523793534.html?af=2052&cv=5288922&cn=42p9drbuvgipu84e8jkg9o74tranqduq&dp=v5_42p9drbuvgipu84e8jkg9o74tranqduq&mall_affr=pr1&aff_platform=default&cpt=1527412890607&sk=jqf2Rf6&aff_trace_key=51d6207ab8d747ba9d74196604b6d9f9-1527412890607-03704-jqf2Rf6&terminal_id=d36b4e3da7e347d78e0ca333cc8d1b89 вот такие следующие у меня на очереде на проверку(шт 50 есть) https://ru.aliexpress.com/item/Free-shipping-Sunway-100-New-Original-18650-3-7V-2200-mAh-Power-Battery-LG18650-MF1-10A/32835148684.html?ws_ab_test=searchweb0_0,searchweb201602_2_10152_5722917_10151_10065_10344_10068_10342_10343_5722817_5711417_10340_10341_10543_5722617_10696_10084_10083_10618_10307_10301_5722717_10059_5711217_308_100031_10103_5722517_10624_10623_10622_5711517_10621_10620_5711317_10125,searchweb201603_2,ppcSwitch_5&algo_expid=45d7de56-2212-4f20-b094-be1f88c51c04-9&algo_pvid=45d7de56-2212-4f20-b094-be1f88c51c04&transAbTest=ae803_2&priceBeautifyAB=0 ну и дальше в томже формате
    • вы их  пропустили мимо ушей.  
    • Я брал тут аккумуляторы. 3.7 В 2600 мАч http://s.aliexpress.com/IjaY3qiY? 4 аккумулятора чуть больше 500 руб стоят. И что странно, паспортная ёмкость даже выше заявленных оказалась. 2700мА*ч. Китайцы не перестают удивлять))