Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Страница 1 из 6 1234 ... ПоследняяПоследняя
Показано с 1 по 10 из 56

Тема: Частотомер на mega8

  1. #1

    Частотомер на mega8

    Всем добрый день!
    Задавал вопрос в ветке "Измерения", что-то все молчат.
    Может быть сюда заглянет опытный программист...

    Собрал простенький частотомер.
    Возможно не учел какую то тонкость в программе.
    При измерении показания прыгают вперед-назад примерно на 100 Гц.
    Например при измерении частоты tiny2313 с кварцем 4 МГц показывает 4000.27, 4000.17, 4000.27 ... и т.д. Т.е. два фиксированных числа. И это при измерении любого источника сигнала.
    Видимо где-то не доработал.
    Помогите советом пожалуйста.

    Роман

    Chip type : ATmega8
    Program type : Application
    AVR Core Clock frequency: 16,000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 256
    ******************** ******************** *************/
    #include <mega8.h>
    #asm
    .equ __lcd_port=0x12
    #endasm
    #include <alcd.h>
    #include <stdio.h>
    #include <delay.h>
    float A=0; // частота
    unsigned char C=0; // временнаяпеременная
    char temp[64];// массив LCD

    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    A=A+256; // количество входных импульсов
    }

    Прерывание раз в секунду
    interrupt [TIM1_COMPA] void timer1_compa_isr(voi d)
    {
    C=TCNT0;
    A=(A+C)/100; //с учетом предварительного делителя на 10
    lcd_clear();
    lcd_gotoxy(0,0);
    sprintf(temp,"%.2f", A);
    lcd_puts(temp);
    lcd_gotoxy(4,1);
    lcd_puts("kHz");
    A=0;
    C=0;
    TIFR=0xFF;
    #asm("cli")
    TCNT1=0;
    TCNT0=0;
    #asm("sei")
    Никогда такого не было и вот опять...


  2. #2
    Аватар для Tadas
    Регистрация
    12.06.2002
    Адрес
    KO24AV
    Сообщений
    3,356
    Позывной
    LY1CE
    Попробуйте переменные А и С объявить с аттрибутом volatile.
    Хороша теория, но что ты с ней будешь делать ?
    73 de LY1CE

  3. #3

    Регистрация
    28.07.2012
    Адрес
    Yelets
    Сообщений
    544
    Позывной
    R2GKH
    Ох уж алгоритм больно "некузявый".
    Я бы сделал отдельный регистр, и инкременировал по переполнению TMR0,
    а по прерыванию его умножал на 256, и складывал со значением из TMR0.

    Еще не забывайте про тактирование входа таймеров в AVR. В отличие от PIC, для корректного счета, на вход тймера в AVR нельзя подавать частоту, большую, чем CLK/8- в вашем случае 2 МГц максимум.
    Последний раз редактировалось Vital R2GKH; 21.12.2017 в 18:56.

  4. #4
    Только не /8, а /2. Точнее, длительность "0" и "1" входного сигнала должна быть больше одного периода системной тактовой.

  5. #5
    Цитата Сообщение от Vital R2GKH Посмотреть сообщение
    Я бы сделал отдельный регистр, и инкременировал по переполнению TMR0,
    а по прерыванию его умножал на 256, и складывал со значением из TMR0.
    Если честно особой разницы я не вижу. Можно видимо и переменную А сделать регистровой, будет тоже самое. (мое мнение).

    Про volatible почитал. Вы считаете есть вероятность повреждения в прерывании??
    Никогда такого не было и вот опять...

  6. #6
    Аватар для Tadas
    Регистрация
    12.06.2002
    Адрес
    KO24AV
    Сообщений
    3,356
    Позывной
    LY1CE
    Цитата Сообщение от Ромм Посмотреть сообщение
    Вы считаете есть вероятность повреждения в прерывании??
    Тут многое зависит от компилятора и степени оптимизации.
    Сам не раз встречался с случаями, когда аттрибут volatile сразу прекращал все танцы с бубном
    Хороша теория, но что ты с ней будешь делать ?
    73 de LY1CE

  7. #7
    Ага, понял. Сегодня попробую и отпишусь.
    Спасибо!

    П.С. Компилятор CVAVR
    Никогда такого не было и вот опять...

  8. #8
    Нажмите на изображение для увеличения. 

Название:	Частота - напряжение.GIF 
Просмотров:	823 
Размер:	15.8 Кб 
ID:	277535Нажмите на изображение для увеличения. 

Название:	Делитель10.GIF 
Просмотров:	991 
Размер:	17.8 Кб 
ID:	277533Перепрошил МК. Особых изменений нет. Видимо надо разбираться с моим формирователем.
    Вложения Вложения
    Последний раз редактировалось Ромм; 23.12.2017 в 14:32.
    Никогда такого не было и вот опять...

  9. #9
    Вы и вправду тактовый вход первого триггера бросили в воздухе по постоянке, как нарисовано на схеме ?


  10. #10
    Да. Правда. Я сначала рисовал подстроечный резистор (делитель) как для Т1, но кто-то сказал что он не нужен.
    Косяк??
    Никогда такого не было и вот опять...

Страница 1 из 6 1234 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Частотомер
    от 4L1FL в разделе Измерения
    Ответов: 30
    Последнее сообщение: 05.02.2017, 17:51
  2. Частотомер
    от Yrec24 в разделе Конструкции на микроконтроллерах для радиолюбителей
    Ответов: 97
    Последнее сообщение: 15.02.2011, 15:06
  3. Частотомер
    от Yrec24 в разделе Конструкции на микроконтроллерах для радиолюбителей
    Ответов: 5
    Последнее сообщение: 18.05.2010, 21:42
  4. Частотомер
    от UR5WPR в разделе Бытовая техника, мой автомобиль, домашняя автоматизация
    Ответов: 6
    Последнее сообщение: 09.12.2008, 21:59
  5. Частотомер ч3-38
    от rz3abk в разделе Антенны
    Ответов: 9
    Последнее сообщение: 06.03.2007, 20:59

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •