AI_Disable писал(а):
Попробуйте прогуляться по ссылкам на этой страничке
Это первое что я сделал...
Из всех предложенных там плат я не нашёл поддерживающую 16 мегу...
да и "имена" выводов(кроме выделеных жирным):
1 DCD Детектор принимаемого сигнала линии
2 RXD Вход данных
3 TXD Выход данных
4 DTR Готовность информационного терминала
5 SG (GND) Корпус (Земля)
6 DSR Готовность передатчика
7 RTS Запрос передачи
8 CTS Очистить для передачи
9 RI Индикатор вызова
ммм возник такой вопрос -- есть МК-регистратор, который должен считать число импульсов по линии ...
в принципе стандартный вариант -- поставить таймер и опрашивать ноги, а можно это делать с компаратора, чтобы импульс случайно не попал в период обработки прерывания и не был бы пропущен ?
я так понимаю, если задержка компаратора 750нс и частота МК 20МГц, а на обработку импульса потребуется 2 операции -- то время обработки импульса будет -- 1мкс ? (задержка на обработку прерывания 4 такта, сложение - 2 такта ; один такт 50нс )
и таким образом максимальная частота импульсов на линии ~ 1МГц?
в принципе нужна не частота, а точность подсчета импульсов -- рабочая частота будет в пределах 100Кгц
вместо спасибо лучше накиньте кармы,а что чакры запылились
AVR(tiny2313 и выше) + C (CVAVR)
Хочу завести счетчик секунд, через прерывание по переполнению буфера, от 0 и до 65000(int), или еще лучше до 86400+ (long int). А далее отталкиваясь от этого счетчика вычислять нужные интервалы времени в программе.
Вопрос:
не будут ли такие действия слишком ресурсоемкими для микроконтроллера?
Можно ли завести счетчик на год(31 536 000), без вреда для производительности МК?
rus-us писал(а):Хочу завести счетчик секунд, через прерывание по переполнению буфера
Wut? Какого буфера?
rus-us писал(а):от 0 и до 65000(int), или еще лучше до 86400+ (long int).
Тут непонятные цифры, взятые, видимо, из воздуха.
----
Если нужна скорость - старайтесь не использовать 32битные переменные. А для подсчёта секунд вообще достаточно одной 8 битной переменной (а то и вообще удаётся устроить как рас 1 прерывание в секунду). Используйте прескаллеры таймеров и режим СТС.
rus-us писал(а):AVR(tiny2313 и выше) + C (CVAVR)
Хочу завести счетчик секунд, через прерывание по переполнению буфера, от 0 и до 65000(int), или еще лучше до 86400+ (long int). А далее отталкиваясь от этого счетчика вычислять нужные интервалы времени в программе.
Вопрос:
не будут ли такие действия слишком ресурсоемкими для микроконтроллера?
Можно ли завести счетчик на год(31 536 000), без вреда для производительности МК?
Строго не судите, я пока учусь.
Спасибо!
считай сам, формирование прерывания занимает 4 такта процессора, само сложение займет вероятно тактов 2
а вот как ты будешь реализовывать вычисления нужных интервалов -- не знаю, так что сам считай .... за основу бери тактовую частоту процессора
если просто завести таймер и считать секунды, то особой нагрузки не будет(опять таки зависит от дальнейших действий после прерывания)
вместо спасибо лучше накиньте кармы,а что чакры запылились
david_8907 писал(а):мм использовать спец порты ? а они будут работать на максимальной частоте ? не учитывая задержку на формирование прерывания ?
Что понимается под "максимальная частота?". Внешнее прерывание происходит мгновенно (для точных цифр - см. даташит). Так что время "срабатывания" прерывания гораздо меньше минимально возможного периода тактирования ядра контроллера. Да, на обработку прерывания, в лучшем случаи, уйдёт порядка 10 тактов, так что если грубо прикинуть, максимальная частота, при которой импульсы не будут пропускаться Fтакт/10.
И при этом практически не останется времени, для исполнения основной программы, так что в таких случаях рациональнее использовать таймер, для подсчёта количества импульсов (использовать внешнее тактирование этого таймера).
За всеми подробностями - в даташит.
rus-us писал(а):Хочу завести счетчик секунд, через прерывание по переполнению буфера
Wut? Какого буфера?
rus-us писал(а):от 0 и до 65000(int), или еще лучше до 86400+ (long int).
Тут непонятные цифры, взятые, видимо, из воздуха.
----
Если нужна скорость - старайтесь не использовать 32битные переменные. А для подсчёта секунд вообще достаточно одной 8 битной переменной (а то и вообще удаётся устроить как рас 1 прерывание в секунду). Используйте прескаллеры таймеров и режим СТС.
имел ввиду - переполнению таймера.
по цифрам: 65000 сек - это почти 18 часов(почти максимальное значения для INT), 86400 - сутки(это уже LONG INT).
Суть вопроса:
Мне в программе нужно с полтора десятка таймеров(счетчиков времени) на разное время с шагом 1секунда.
По переполнению таймера высчитываю минимальную, нужную для меня единицу времени - 1 секунда.
Вот дальше у меня сомнения.
Что лучше:
- Заводить на каждый случай свой счетчик секунд (может быть несколько штук одновременно).
- Или, создать один счетчик и считать секунды по кругу от 0 до 43200(12 часов).
А в основном цикле, по необходимости, брать текущее значения счетчика приплюсовывать к нему нужный интервал и дальше ждать пока новое значение не совпадет со счетчиком.
AI_Disable писал(а):Разумеется, лучше сделать один счётчик. А ещё, если вам жестоко нужна скорость, можно хранить секунды, минуты и часы в разных переменных.
а зачем юзать счетчик ? а нельзя так -- в массив записываешь разность интервалов между соседними событиями
например нужно выдать 1
в 12 00
12 30
12 45
в массиве будет х(разница между текущим временем и 12 00), а далее уже подсадятся 30 мин и 15 минут
то есть таймер отработает до 12 00 и затем его нужно перенастроить на интервал в 30 мин
тут правда придется сортировать массив с датами
зато никаких счетчиков и вычитаний, просто установка значения таймера из памяти, или вы все про это и говорили ?
вместо спасибо лучше накиньте кармы,а что чакры запылились
Друзья, помогите пожалуйста новичку со схемой и прошивкой. Разрабатываю схему дист. сигнализации, есть 6 датчиков на вскрытие и 6 на пропадание потока (на схеме) и передачей по 2-х проводной линии в др. помещение с помощью UARTa с последующей индикацией. прошивку и схему родил сам, читая книги и задавая вопросы на форуме. Спаял - не работает. горят все диоды "на вскрытие" и на "авария потока". на подкл/откл. линии реакции никакой. Помогите прошивку исправить.
вопрос такой: хочу передавать на мк (mega8) миди сообщения, и обратно тоже было бы здорово. только я не совсем понимаю 2 пункта -
1. как, что и куда подключать? было бы совсем здорово с картинкой, на ней нарисован миди аут, этот проводок идет к Tx мк, этот к Rx...
2. как настраивать uart? в смысле, какие параметры задать, чтобы миди нормально работал?
гуглить я, видимо, не умею, ответы не нашел или же они для меня слишком сложные(
заранее спасибо.
добрый день.
в одной из книг по программированию AVR написано следующее:
Для старших моделей Mega со сложной структурой (например, ATmegal28)
64-х регистров ввода-вывода может оказаться недостаточно, поэтому в них для
дополнительных РВВ выделяется отдельное адресное пространство (от $60 до
максимально возможного в байтовой адресации значения $FF, итого таких регистров
может быть всего 160).
так как я только пытаюсь понять что из себя представляет микроконтролер , у меня возник вопрос, а с чем связано это ограничение общего количества регистров значением $FF? почему их не может быть больше?
Gmp писал(а):ограничение общего количества регистров значением $FF?
Контроллер 8-ми битный, а 0FFh это максимальное число для 8 бит...
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]