Easyelectronics.ru

Электроника для всех
Текущее время: 26 фев 2021, 03:58

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Таймеры AVR
СообщениеДобавлено: 15 фев 2010, 09:33 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 17:40
Сообщения: 34
Откуда: Ижевск
Здравствуйте, подскажите, пожалуйста, как работать с таймерами ATmega16.
Я использую CVAVR, учусь писать на Си.

На примере такой задачи:
При приходе на ножку положительного импульса, таймер запускается( считает время в микро секундах(если это возможно)).
При повторном приходе импульса, таймер останавливается, и выдаёт, то что насчитал, в какую-л переменную.

з.ы. Понятных обьяснений на эту тему, для языка Си, почему-то не нашёл.

з.з.ы Мой опыт работы с AVR (да и вообще с мк) меньше недели.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 15 фев 2010, 12:05 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 16:17
Сообщения: 716
Откуда: Смоленск
Лучше с асма начинай, потом проще будет.

Задачку можно сделать так- включаем какое- нибудь внешнее прерывание на on rising edge, тоесть по положительному фронту импульса, а в обработчике прерывания смотрим- если таймер не запущен- стартуем, если запущен- останавливаем и читаем результат.

Таймер юзай лучше 1-й (он 16- битный, больше насчитает). На 8 мегагерцах будет 1 тик в 125 наносекунд, тоесть 8 тиков в 1 микросекунду (это без прескалера).

_________________
Enter or Escape? выбор есть всегда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 15 фев 2010, 12:25 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 17:40
Сообщения: 34
Откуда: Ижевск
И всётаки, как это можно сделать в Си?
Просто уже немного освоился в CVAVR


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 15 фев 2010, 15:34 
Старожил
Аватара пользователя

Зарегистрирован: 29 янв 2010, 16:17
Сообщения: 716
Откуда: Смоленск
Принцип тот же.

Умение программировать- умение грамотно составить алгоритм, предусмотрев обработку ошибок и нестандартных ситуаций. Язык- лишь инструмент.

_________________
Enter or Escape? выбор есть всегда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 15 фев 2010, 20:07 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2010, 19:07
Сообщения: 280
Откуда: пантикапей
hexFF писал(а):
....Умение программировать- умение грамотно составить алгоритм...


во! правильно! поэтому и пишу в Algorithm Builder, сразу двух зайцев ем...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 15 фев 2010, 22:54 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 17:40
Сообщения: 34
Откуда: Ижевск
Ну алгоритм то я представил, проблема в другом:
как это реализовать(какие настройки должны быть, какие команды и т.д.)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 16 фев 2010, 03:13 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 26 янв 2010, 21:46
Сообщения: 125
Откуда: г. Буча, Киевская обл., Украина
а пдф-ку на контроллер религия не позволяет открыть? там все предельно доступно расписано\нарисовано.
И по настройкам, и по командам.

_________________
-||devil was an angel too||-
-||world is a ghetto||-


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 16 фев 2010, 19:53 
Заглядывает иногда

Зарегистрирован: 01 фев 2010, 12:30
Сообщения: 55
DeVOuR писал(а):
а пдф-ку на контроллер религия не позволяет открыть? там все предельно доступно расписано\нарисовано.
И по настройкам, и по командам.

А где эта загадочная пдф-ка?.Я скачал парочку даташитов на АТмега8, но там в основном только какие бывают корпуса.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 16 фев 2010, 20:11 
Старожил

Зарегистрирован: 27 янв 2010, 12:28
Сообщения: 446
Откуда: Харьков
Anatoliy писал(а):
А где эта загадочная пдф-ка?.Я скачал парочку даташитов на АТмега8, но там в основном только какие бывают корпуса.

Скачай полный файл отсюда http://www.atmel.com/dyn/resources/prod_documents/doc8159.pdf. Поиском находится в два-три клика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 16 фев 2010, 21:19 
Заглядывает иногда

Зарегистрирован: 28 янв 2010, 21:20
Сообщения: 117
Откуда: Днепропетровск
Найди и скачай в ините книгу Евстифеева "микроконтроллеры AVR семейства MEGA"
ссылок полно.
Там как бы те же datasheet только на русском.
Есть некоторые неточности, но не критические.
Конечно лучше бумажный вариант, но это дело наживное!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 16 фев 2010, 21:23 
Заглядывает иногда

Зарегистрирован: 28 янв 2010, 21:20
Сообщения: 117
Откуда: Днепропетровск
Вдогонку, а лучше попробуй Си WINAVR Или как его еще называют GCC. Он дружит с AVR Studio, да и примеров, думаю, тебе больше накидают под него.
Я сам начинал с CVAVR, потом перешел на WINAVR, а сейчас осваиваю ассемблер.
Удачи!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 16 фев 2010, 23:14 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 17:40
Сообщения: 34
Откуда: Ижевск
Vlad777 писал(а):
Найди и скачай в ините книгу Евстифеева "микроконтроллеры AVR семейства MEGA"


Ну эту книгу я смотрел, но она про работу на ассемблере, а я как-то больше понимаю си.
Да и то,что это
Vlad777 писал(а):
как бы те же datasheet только на русском

не совсем есть хорошо:
мне, как начинающему, намного понятней то, как рассказывает уважаемый DI HALT, или же как на 123avr.com


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 16 фев 2010, 23:23 
Заглядывает иногда

Зарегистрирован: 28 янв 2010, 21:20
Сообщения: 117
Откуда: Днепропетровск
Ну не совсем так. Это просто справочник значений битов, байтов регистров и т.п. Т.е. их имен и возможных значений, которые есть в файлах *.inc. Они тебе все равно понадобятся. Конечно Ди-Хальт - уникум! И ему хватает способностей доходчиво излагать сложные вещи и терпеливо отвечать на вопросы новичков.
123avr.com лично мне - не понравился.
В общем - тебе решать! Главное желание разобраться!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 18 фев 2010, 01:27 
Заглядывает иногда

Зарегистрирован: 28 янв 2010, 21:20
Сообщения: 117
Откуда: Днепропетровск
Вот может конечно я и не прав, но по моему человек сюда пришел за "курсовой" с конкретной задачей....
А мы тут распинаемся.......


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 18 фев 2010, 16:58 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 17:40
Сообщения: 34
Откуда: Ижевск
Ну я это спросил не для "курсовой", а ради интереса, для себя так сказать.
Просто я выбрал си, потому что он мне понятнне.
А одной PDFки мне недостаточно, чтобы понять. Вот и решил спросить как это делается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 18 фев 2010, 17:40 
Заглядывает иногда

Зарегистрирован: 28 янв 2010, 21:20
Сообщения: 117
Откуда: Днепропетровск
Ну звиняй!!! -)))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 18 фев 2010, 17:47 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2010, 12:18
Сообщения: 1259
Откуда: Moscow
Делается это легко:

Регистр выбранного таймера = (1 << бит управления) | (1 << другой бит управления) | (ещё биты если нужно)

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

ldi temp, то что справа от знака =
out регистр, temp

и так, пока не настроите нужный таймер. А что и куда писать - как раз в пдфке и написано. Таймеры в АВР - самая развесистая периферия. Вы же просите написать готовую программу.

А если ради интереса - должен быть интерес разобраться, а то по каждому режиму таймера будете про готовую программу спрашивать.

ЗЫ. Подробно расписывать таймеры и их возможность - по сути переводить даташит.
ЗЗЫ. А по поводу Вашей задачи - я бы использовал ICP без остановки таймера, вычисляя разницу между прошлым и текущим значением, а чтоб в микросекундах - соответствующий предделитель (prescaler) в зависимости от тактовой частоты.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 22 фев 2010, 11:24 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 17:40
Сообщения: 34
Откуда: Ижевск
Вроде как немного разобрался с работой таймеров(по переполнению, шим, с часовым кварцем поработал)
Но никак не даётся режим "Захват" : всё пробовал, и меандр с мультиметра тестовый подавать на ножку ICP1, и кнопкой щёлкать, и просто к + и к - подтягивать ; словом всё, что только можно.
Но всегда разультат один- на терминал приходят только нули; я так понимаю, что должны были получаться случайные числа, а приходят нули( или у меня такое чувство ритма, что я нажимаю в тот момент, когда счётчик на нуле? :) ).
Вот текст программы:
Цитата:
#include <mega16.h>
#include <delay.h>
// Standard Input/Output functions
#include <stdio.h>
char a;
// Timer 1 input capture interrupt service routine
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{
// Place your code here
a=(256*ICR1H)+ICR1L;
UDR=(a);
delay_ms(500);
}


з.ы Использую CVAVR.
з.з.ы. Точность не важна, важно, стобы просто работало.
з.з.з.ы Юзаю PinBoard, если это может помочь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 22 фев 2010, 11:27 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 17:40
Сообщения: 34
Откуда: Ижевск
И ещё: данные посылаются в терминал каждые 0,5 сек, а ведь должны только при захвате?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 25 фев 2010, 13:50 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 17:40
Сообщения: 34
Откуда: Ижевск
Самое интересное, что если бы я сказал что это мне надо для курсача, сразу бы сказали как это делается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 25 фев 2010, 14:29 
Супермодератор
Аватара пользователя

Зарегистрирован: 28 янв 2010, 05:47
Сообщения: 1027
Откуда: Винница
Asche писал(а):
a=(256*ICR1H)+ICR1L;


Чота мне эта строчка не нравится. Переменная a вроде char, куда ты в нее пихаешь (256*ICR1H)?

_________________
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 25 фев 2010, 15:36 
Старожил
Аватара пользователя

Зарегистрирован: 26 янв 2010, 23:30
Сообщения: 2785
за использование задержки в теле прерывания надо бить палкой по башке


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 25 фев 2010, 15:49 
Супермодератор
Аватара пользователя

Зарегистрирован: 26 янв 2010, 22:17
Сообщения: 2235
Откуда: Krasnoyarsk
256*Х попахивает беззнаковым целым. Оверфлоу будет.
Задержка в прерываниях не страшна если знаешь для чего она там нужна. Тут она нужна чтобы не допустить бесконечного потока байт в USART. Правда реализовано несколько криво. Я бы это в for завернул или while.

_________________
У кошки четыре ноги: вход (in), выход (out), земля (gnd) и питание (vcc). А хвост для беспроводной передачи данных.
http://www.orcinus.ru (null)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 25 фев 2010, 15:53 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 17:40
Сообщения: 34
Откуда: Ижевск
Даже если обьявить как "unsigned int" никаких изменений.
Так же каждые 0,5 сек данные приходят на терминал( все нули).
Но есть одна странность: мк начинает посылать данные через10-15 сек после включения, независимо, подключено что-либо к ноге PD6 или она висит в воздухе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Таймеры AVR
СообщениеДобавлено: 25 фев 2010, 15:57 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 17:40
Сообщения: 34
Откуда: Ижевск
Задержка из-за непрерывного потока в терминал.
Без задержки терминал начинал жутко тормозить и в конечном итоге, если не успеть отключиться, полностью зависал от потока данных.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 33 ]  На страницу 1, 2  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB