Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 347
Зарегистрирован: Сб фев 07, 2009 19:21:25

Сообщение БАТАРЕЙКУС »

СПАСИБО
Мечтатель - не тот, кто сидит на диване и думает о несбыточном, а тот, кто всеми силами стремится воплотить несбыточное в реальность.
Реклама
aam
Собутыльник Кота
Аватара пользователя
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Сообщение aam »

А в какой последовательности в Тиньках прерывания обрабатываются, напомните плиз?
Допустим, у меня идут прерывания от таймера 0 (динамическая индикация и т. д.), а еще прерывания от ноги INT1. На ногу INT1 я подаю 50 Гц из розетки (через оптрон естественно). Одно другому мешать не будет?
Реклама
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Прерывания инициируются аппаратными флагами, которые устанавливаются независимо. Если в момент обработки одного прерывания сработает другое - его флаг останется висеть, и как только обработка первого завершится (флаг I глобальных прерываний опять установится), программа уйдёт сразу на обработку этого прерывания.

Но если случится, что за время обработки первого второе возникнет два или более раз, все остальные случаи потеряются (флаг-то у него один, как стоял так и будет стоять), соответственно и отработает оно только один раз.
Поэтому и говорят, что в прерываниях нельзя долго задерживаться.
aam
Собутыльник Кота
Аватара пользователя
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Сообщение aam »

Кароче, у меня на прерывании от таймера висит динамическая индикация (2 мс/цифра) и точный подсчет временных интервалов (программный делитель с 500 Гц до 1 Гц). А на внешнюю ногу INT1 хочу подавать внешний сигнал, который имеет изначальный формат 220 В и для упрощения схемы эти 50 Гц будут генерить прерывание, которое будет сбрасывать там какую-нибудь переменную и т. п. Но смысл один - считать состояние "есть внешний сигнал 220 В" или "нет" (это сигнал с выключателя света в сортире, который запускает таймер отключения вентилятора после выключения света)
В общем, я так понял, все будет норм. Внешнее прерывание минимальной длины, а вот в прерывании от таймера у меня почти вся прога висит
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3961
Зарегистрирован: Пн июл 13, 2009 14:37:39
Откуда: Московская область, наукоград.....

Сообщение Meteor »

Задайте переменную flag в которой присваивайте значение по срабатыванию прерыания таймера.
Обработку переменной делайте в основном цикле.
Это сократит время пребывания в прерывании и хоть както заполнит бесконечный цикл
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Контактная информация:
Реклама
aam
Собутыльник Кота
Аватара пользователя
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Сообщение aam »

А может проще тогда тестировать флаг прерывания программно?
Реклама
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Но смысл один - считать состояние "есть внешний сигнал 220 В" или "нет" (это сигнал с выключателя света в сортире, который запускает таймер отключения вентилятора после выключения света)
Если расписание похода в сортир не расписано у вас по микросекундам, тогда прерывание для этого не нужно. Нужно просто поставить интегрирующую RC-цепочку на пин, и при появлении 220В получится устойчивый логический уровень на нём через несколько периодов.

В основном цикле просто анализируем состояние ноги и принимаем решение.
aam
Собутыльник Кота
Аватара пользователя
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Сообщение aam »

ploop писал(а):Нужно просто поставить интегрирующую RC-цепочку на пин, и при появлении 220В получится устойчивый логический уровень на нём через несколько периодов.
Да я так и хотел сделать, но когда стал моделировать, оказалось, что керамическим СМД кондером не обойтись - нужно минимум 10 мкФ. Да и зачем ставить лишние детали, когда можно все сделать программно? Детали=место на плате и деньги, программа=халява.
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Тогда в прерывании INT1 ставьте флаг и всё. При обработке - сбрасывайте.
aam
Собутыльник Кота
Аватара пользователя
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Сообщение aam »

А почему в прерывания не хорошо много всего пихать? Только потому, что за время его выполнения могут сработать 2 других? У меня задействовано всего одно прерывание от таймера 0. (ну еще стандартно прерывание по сбросу с переходом на метку reset:). От внешнего пина хотел еще добавить для упрощения аппаратной части.
Я почему не хочу делать индикацию вне прерывания, когда я делал часы на той же Тини2313, у меня таймеры были заюзаны под отсчет времени (1-й) и под генерацию сигнала будильника (0-й). И у меня индикатор иногда вдруг мигает: вдруг ни с того, ни с сего на доли секунды (0,1-0,3с) встает динамическая индикация (светится ярко какая-нибудь одна из цифр или вообще не светится). Причем время при этом не отстает, т. е. кварцевый генератор и таймеры не сбиваются. Сначала у меня был включен делитель на 8 (кварц 4 МГц) Время этого "стояния" было больше. Замена тиньки проблему не решила. Как будто проц вдруг останавливается, а потом дальше работает.
В девайсе, который делаю щас, генератор использую внутренний на 4 МГц, но я так понял, дело не в генераторе.
Вот с тех пор я и боюсь в ТИНИ2313 делать индикацию вне прерывания... Что с часами я так и не понял (это был мой первый девайс на МК)
Вдруг, вынесу из прерывания и те же глюки начнутся.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб

Сообщение AI_Disable »

aam писал(а):А почему в прерывания не хорошо много всего пихать? Только потому, что за время его выполнения могут сработать 2 других?
Не только других. Это же самое прерывание может сработать до того, как успеет обработаться. И если это или другие прерывания успеют произойти больше одного раза, во время обработки первого, то они будут потеряны. Плюс "тяжёлые" обработчики сильно тормозят работу основного кода.
Контактная информация:
aam
Собутыльник Кота
Аватара пользователя
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Сообщение aam »

Ну основной код у меня весь в прерывании был, так что тормозить нечего. В общем, я так понял, писать тяжелые прерывания - это не по-пацански :) Исправил. Сделал флаг в регистре, в прерывании ставлю, а в бесконечном цикле все время его тестирую. Если флаг не установлен, просто кручу цикл, иначе тут же сбрасываю флаг и идет код. Правильно?

И что за глюки с часами у меня были? :shock: Я так и не понял, может просветите?
Родился
Сообщения: 3
Зарегистрирован: Сб янв 07, 2012 11:26:08

Сообщение Миккон »

А микроконтроллеры можно программировать только на ассемблере или на других языках программирования тоже можно???(Например на Бэйсике)
С уважением, Миккон!
Друг Кота
Аватара пользователя
Сообщения: 7360
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Сами микроконтроллеры программируются исполнительным кодом. А из чего исполнительный код сделан - дело десятое и зависит только от наличия таких средств. Ко многим микроконтроллерам есть компилятор Васика.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Chettuser

Сообщение Chettuser »

[quote="Миккон"][/quote]
Вот это по моему на PICBasic'е сделано.
Встал на лапы
Аватара пользователя
Сообщения: 110
Зарегистрирован: Сб янв 08, 2011 12:56:03
Откуда: Москва

Сообщение канифоль »

Товарищи, хочу научится программировать контроллеры (авр) тобиш свои программы писать, мой хвост :)) пал на язык асемблер"а, но чет ни как подходящего материала не могу найти для самообучения :write: либо все слишком сложно и о очень много слов и нечего в итоге не ясно. обучалку читал сложно :oops: :facepalm: :oops: с чего начать самое самое простое? и написанное самым простым языком)) и в итоге получить хоть бы 1 мигающий светодиод на контроллере за месяц)) программатор есть, аврстудио4 есть юнипроф естьесть макетная плата но нет пока откладочной. паяльник и контроллеры тоже есть:))) что еще нужно ? я имею в виду программы.
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

канифоль писал(а):хочу научится программировать контроллеры (авр)
А если вот так: https://sunduk.radiokot.ru/loadfile/?load_id=1316073060
В котосундуке ещё много чего есть..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Друг Кота
Аватара пользователя
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Сообщение Gudd-Head »

МитяРа писал(а):А если вот так: https://sunduk.radiokot.ru/loadfile/?load_id=1316073060
Или вот так: http://radiokot.ru/start/mcu_fpga/avr/
или вот так: http://easyelectronics.ru/tag/assembler
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 193
Зарегистрирован: Вт ноя 08, 2011 18:36:47
Откуда: Днепр

Сообщение Кот Павел »

Здравствуйте! Решил освоить язык Assembler. Работаю в MASM32v10. Написал первую программу по примеру из учебника. Она должна выводить букву А на экран. Текст программы сохранил с расширением .asm, после компиляции создался файл .obj. Но моя програмка не работает потому что нет файла .exe. :( Сам он не создается. Подскажите, пожалуйста, откуда он должен браться?
Или, может, все это нужно делать другим способом или работать в другой программе?
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

Кот Павел писал(а):Подскажите, пожалуйста, откуда он должен браться?
Для получения ехе-файла надо запустить ещё программу-линковщик..
Ищи, там-же где и асм должна лежать..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Ответить

Вернуться в «Разные вопросы по МК»