реклама на сайте
подробности

 
 
> И снова частотомер на Atmega8., нужен алгоритм
Peeoner
сообщение Jul 10 2008, 23:45
Сообщение #1





Группа: Новичок
Сообщений: 10
Регистрация: 2-07-08
Пользователь №: 38 711



Добрый день всем!
На этом форуме я вобщем новичек.
Вот уже меня достал этот вопрос,бо я лажу-и везде готовые схемы,без самой идеи как оно работает!
Не надо мне готовые варианты нада сама идея!!!
Вобщем в чем суть то вопроса
Сваял так сказать частотомер на Atmega8+LMXxxxx пределитель,с выводом на МЭЛТ MT10T7-7.
Тут запортачка с самим принципом измерения!
Пишу на ассемблере,писать на С для таких контролеров,как по мне это полное извращение!
И так.
Использую 2 таймера-8битный Т0,и 16 битный Т1.
Измерительная частота поступает сразу на вход Т1(PD5).
После инициализацие портов,дисплея и LMX,инициализирую таймеры--
на Т0 пускаю сигнал с кварца,поделенный на 8, вход T1 подкл к источнику сигнала.
А забыл-в Т0 записую константу,что бы прерывание от него наступило после 100 импульсов поступивших на него.
Потом запускаю бесконечный цикл.
Наступает прирывани через 100имульсов тактируемые частотой 1МГЦ(8МГЦ/8).
Останавлваем Т1,изымаем даные с регистров,преобразуем 16бит в 5 десятичных знаков,выводим на экран. запускаем таймеры-счетчики,возвращаемся в бесконечный цикл.

Так вот в чем глюк! Когда тестил прогу,тестил ее на частах до 2х Мгц,т е 8 бит 16битного счетчика,потом прикурил LMX,тут чюдеса когда значение в Т1 больше 255,почемуто не корректно просходит преобразование двоичного числа в десятичное...один алгорит нарыл преобразования,а все остальное бред какойто...возникли сомнения -правильно ли у меня преобразование 2х 8битных регистров с T1 в десятичный код?
бо в инете токо один пример нарыл,остальное для школы 11 класса!

Вопрос. Будет ли работать моя идея??? И какие тут подводные камни,и точность.Вобще работает,но я не уверен чт идея верна
И как реализуют алгоритм на одном 8 битном таймере? ведь прерывание,изьятие из регистра и запись,это погрешность ,и приличная!

Почитав это http://electronix.ru/forum/index.php?showt...29796&st=75 ,я пришол в УЖАС!!! 07.gif
Мне хватит и 5 разрядов.
Сразу скажу частоту мерять до 3 ГГц,точность +-0.5МГЦ не критично!
Схема собрана,работает,но вот с алгоритмом измерения походу не то.

Посмотрел тут схемы,почемуто народ использует 8 битный таймер-счетчик...да и прошивы все hex,пришлось дизасемблить и смотреть....ну просто бесит..что нигде ни кто подробно не описал по человечиски....

Жду коментарием. За любой ответ буду благодарен.

Сообщение отредактировал Peeoner - Jul 10 2008, 23:59
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Peeoner
сообщение Jul 11 2008, 00:23
Сообщение #2





Группа: Новичок
Сообщений: 10
Регистрация: 2-07-08
Пользователь №: 38 711



Вот участок кода самого цикла измерения,сильно не пинать.
Я варрировал тут с изменением циклов измерения,так как у меня предделитель выставлен на 1280,в этом примере 8МГЦ/1024 и тактируем Т0, то что тут команды поставлены немного не корректно,т е T1 подстичает еще 5-10имульсов,для теста не критично,подправлю когда все будет нормально работать.
С Input Capture негодиться,бо там низкая частота,а сам по себе таймер считает намного быстрее(вроде)..хотя я подумаю,10 разрядов было бы интересно заполнить,но там матиматека нифиговая получиться...
Код
;Инициализация таймера 0
  
  ldi tmp,(1<<toie0)
  out timsk,tmp

;Инициализация 16 битноо таймера 1
ldi tmp,0x07;07
mov lw,tmp
ldi tmp,0x03
out tifr,tmp
ldi tmp,0x9c;9c ;запись в регистр таймера периода счета
out tcnt0,tmp
ldi tmp,0x03;02
mov k,tmp
ldi tmp,0x00 ;подготовка константы для остановки t1

out tccr0,k  ;Тактовые импульсы с кварца /1024
out tccr1b,lw;Подключения входа таймера к внешнему источнику
ser nxx

sei ;разрешение прерываний


  loop:
  rjmp loop

tim0:     ;Прерывания от таймера формирующего пириод измерения



push nxx    ;Сохранение регистров в стеке (станет необходимым
in nxx,sreg    ;когда основная программа будет выполнять
push nxx       ;какие-либо действия)


out tccr1b,tmp ;Остановка 16 битного счетчика импульсо

in lw,tcnt1l     ;Копируем младший байт со счетчика входных импульсов
in hi,tcnt1h     ;Копируем старший байт

ldi tmp,0x00      
out tcnt1l,tmp   ;Очищяем счетчик импульсов
out tcnt1h,tmp   ;

out tccr0,tmp    ;Останавливаем таймер периода счета
out tcnt0,tmp    ;очищяем таймер периода счета

;Преобразуем двоичное 16битное число в десятичное


;.def lw=r17
;.def hi=r18
;************************************************************************
;Преобразуем двоичное 16битное число в десятичное вида
;{0x0(цифра 10000)} {тысячи,сотни} {десятки,единицы}
;************************************************************************
;
;
;
;
;
;.def    lw   =r17           ;двоичное значение, младший байт
;.def    hi   =r18           ;двоичное значение, старший байт
;.def    dig0   =r18           ;BCD значение, цифры 1 и 0
;.def    dig1   =r19           ;BCD значение, цифры 3 и 2
;.def    dig2   =r20           ;BCD значение, цифра 4
;Примечание: Переменные hi и dig0 должны размещаться в одном
;регистре.
;*************************************************************************

BCD5:
        ldi     dig2, -1
BCD5_loop_1:
        inc     dig2
        subi    lw, low(10000)
        sbci    hi, high(10000)
        brsh    BCD5_loop_1
        subi    lw, low(-10000)
        sbci    hi, high(-10000)
        ldi     dig1, -0x11
BCD5_loop_2:
        subi    dig1, -0x10
        subi    lw, low(1000)
        sbci    hi, high(1000)
        brsh    BCD5_loop_2
        subi    lw, low(-1000)
        sbci    hi, high(-1000)
BCD5_loop_3:
        inc     dig1
        subi    lw, low(100)
        sbci    hi, high(100)
        brsh    BCD5_loop_3
        subi    lw, -100
        ldi     dig0, -0x10
BCD5_loop_4:
        subi    dig0, -0x10
        subi    lw, 10
        brsh    BCD5_loop_4
        subi    lw, -10
        add     dig0,lw


Сообщение отредактировал zltigo - Jul 11 2008, 15:17
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Peeoner   И снова частотомер на Atmega8.   Jul 10 2008, 23:45
- - defunct   Цитата(Peeoner @ Jul 11 2008, 02:45) Пишу...   Jul 11 2008, 00:10
- - Peeoner   Ну вот все проверил,дествительно глюк именно в пре...   Jul 11 2008, 03:42
|- - zhevak   Цитата(Peeoner @ Jul 11 2008, 09:42) Тепе...   Jul 11 2008, 05:45
|- - Nanobyte   Цитата(Peeoner @ Jul 11 2008, 07:42) ...В...   Jul 11 2008, 10:21
|- - Qwertty   Цитата(Peeoner @ Jul 11 2008, 07:42) глюк...   Jul 11 2008, 12:59
- - =GM=   Цитата(Peeoner @ Jul 10 2008, 22:45) Почи...   Jul 11 2008, 12:33
- - akl   Цитата(Peeoner @ Jul 11 2008, 04:45) ...в...   Jul 11 2008, 12:58
|- - Sneg_87   Цитата(akl @ Jul 11 2008, 18:58) Как Вам ...   Oct 13 2009, 04:12
- - Peeoner   ЦитатаПосмотрел вашу ссылку, там моя переписка с Я...   Jul 11 2008, 15:09
|- - zltigo   Цитата(Peeoner @ Jul 11 2008, 17:09) Ну в...   Jul 11 2008, 15:22
||- - zhevak   Цитата(zltigo @ Jul 11 2008, 21:22) Moder...   Jul 11 2008, 15:37
|- - =GM=   Цитата(Peeoner @ Jul 11 2008, 14:09) А на...   Jul 11 2008, 16:15
|- - Peeoner   Цитата(=GM= @ Jul 11 2008, 19:15) Ну-у-у,...   Jul 11 2008, 16:22
|- - Огурцов   Цитата(=GM= @ Jul 11 2008, 16:15) На ATti...   Jul 11 2008, 17:29
|- - sKWO   Цитата(Огурцов @ Jul 11 2008, 21:29) Точн...   Jul 11 2008, 19:09
|- - Огурцов   Цитата(sKWO @ Jul 11 2008, 19:09) для коп...   Jul 11 2008, 19:41
|- - gte   Цитата(sKWO @ Jul 11 2008, 23:09) термост...   Jul 12 2008, 07:01
|- - sKWO   Цитата(gte @ Jul 12 2008, 11:01) И скольк...   Jul 12 2008, 16:59
|- - Огурцов   Цитата(sKWO @ Jul 12 2008, 16:59) Полагаю...   Jul 12 2008, 20:16
|- - foxit   Цитата(Огурцов @ Jul 12 2008, 23:16) Ну В...   Jul 13 2008, 09:16
|- - sKWO   Цитата(foxit @ Jul 13 2008, 12:16) Кварц ...   Jul 13 2008, 13:08
- - Peeoner   Правила читал.Вроде не че такого не сказал,забанит...   Jul 11 2008, 15:34
|- - zltigo   Цитата(Peeoner @ Jul 11 2008, 17:34) Прав...   Jul 11 2008, 15:41
- - Peeoner   Спасибо,понял. Народ почемуто тут везде исходники ...   Jul 11 2008, 15:45
|- - zltigo   Цитата(Peeoner @ Jul 11 2008, 17:45) Наро...   Jul 11 2008, 15:51
- - Peeoner   Ну вобщем решил я реализовать метод =GM=,как бы вр...   Jul 12 2008, 09:30
- - Tiny   Такой вопрос. CodeVision, пример из пакета \c...   Jul 13 2008, 07:32
|- - foxit   Цитата(Tiny @ Jul 13 2008, 10:32) Есть ли...   Jul 13 2008, 09:28
|- - Nanobyte   Цитата(foxit @ Jul 13 2008, 13:28) ...смо...   Jul 14 2008, 14:47
- - Tiny   Извиняюсь, почему-то я разместил свое сообщение не...   Jul 13 2008, 09:20
- - akl   Здравствуйте. Имелась в виду LMX2326 в качестве пр...   Oct 14 2009, 03:00


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 15:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01413 секунд с 7
ELECTRONIX ©2004-2016