Gtlab Forum
Тематический => Негитарная электроника => Тема начата: Viper от Ноября 11, 2012, 05:00:27 pm
-
всем доброго времени суток! давно тут не был, но есть проблема и не у кого спросить)
суть проблемы такова: Пытаюсь разобраться/реализовать SPI, с целью свзи двух МК (atmega8). Оно вроде как работает, но есть траблы. Собственно один микроконтроллер выполняет довольно затратные по времени вычисления, по их окончании по SPI отправляет на второй микроконтроллер байт данных-результат. Второй микроконтроллер должен отображать полученный байт на 3-х значном, семисегментном индикаторе. Используется динамическая индикация. Весь этот геммор нужен для того чтобы избежать мигания индикатора, при использовании одного МК. То есть, второй МК постоянно индицирует число на индикаторе, в момент получения байта сменяет значение и индицирует новое. Для реализации поставленных задач использовал простые примеры функций приведенных в даташите. Но в итоге имею проблему: мигание один хрен осталось. То есть, кмк, МК2 ждет пока МК1 освободится и передаст ему байт данных, в это время моя динамическая индикация на МК2 прекращается. Наверняка как то можно это решить прерываниями или еще как то. опыта не ма...
-
Т.е. на МК, который индицирует, у петле реализована всего лишь динамическая индикация и опрос SPI, и при этом глаз видит мигание? Странно это. Лишних delay точно нет? Просто атмеги вроде на таких частотах работают, что мигания не должны быть заметны.
Вопрос - а если убрать опрос SPI, не моргает?
-
То есть, кмк, МК2 ждет пока МК1 освободится и передаст ему байт данных, в это время моя динамическая индикация на МК2 прекращается. Наверняка как то можно это решить прерываниями или еще как то. опыта не ма...
Естественно, распараллелить задачи - прием байта повесить на SPI прерывания, а динамическую индикацию на таймерное.
А вообще, можно решить задачу и одним МК1, просто повесив динамическую индикацию на таймерное прерывание.
Ведь в нем нужно будет выполнить всего нескольно команд - в соответствии с индексом отображаемой цифры выкинуть сегменты из 3-х байтового буфера, подготовленного основными вычислениями, в порт меги, подключенный к сегментам, и включить соответствующий COMMON индикатора. после чего увеличить индекс (или сбросить в 0, если он послединий) и выйти из прерывания.
-
по поводу таймерного прерывания сегодня тоже подсказали. .. буду пробовать) спасибо за советы!
-
KMG+1
главное, держаться подальше от ардуин.
-
KMG+1
главное, держаться подальше от ардуин.
А что с ними не так? Не работают? :)
-
А что с ними не так? Не работают?
Аллергия у некоторых особо продвинутых пользователей.
Им наверно без малинки несварение желудков...
-
А что с ними не так? Не работают?
Вот когда нужно будет написать программу, поддерживающую несколько потоков обработки - интерфейсов, аналоговых измерений, цифровых эвентов, с выдерживанием критичных таймингов в каждом потоке, поймешь чем плоха ардуина.
PS Нормальный USB программатор решает проблему программирования на современных компах, избавляя от кривого резидента ардуины.
-
А что с ними не так? Не работают? :)
в задачке автора уже прослеживается ардуина, точнее, типичный метод программирования оной. Без таймеров, зато на программных задержках.
Ассоциирую с наличием коробки-автомата в авто, которая не освобождает от обязанности знать ПДД. В случае с пердуиной - МК.
Я не говорю, что фуфел, но без этих знаний из разряда говнокодеров в разряд быдлокодеров не перейти.
-
Вот когда нужно будет написать программу, поддерживающую несколько потоков обработки - интерфейсов, аналоговых измерений, цифровых эвентов, с выдерживанием критичных таймингов в каждом потоке, поймешь чем плоха ардуина.
А причём тут ардуина? Разве кто-то запрещает шить в неё ассемблерный код, а не прозябать на студенческом С?
Ардуенное железо является стандартным микропроцессором с полностью открытой архитектурой и не имеет ограничений относительно базового МП-комплекта.
PS Нормальный USB программатор решает проблему программирования на современных компах, избавляя от кривого резидента ардуины.
Никто не запрещает шить ардуень программатором, а кривизна резидента полностью определяется кривизной, заложенной в идею загрузчика разработчиками МП.
ХИНТ: штатное программирование ардуины производится стандартным программатором, входящим в базовый комплект ардуинского софта - там нет ничего специфического, всё из готовых компонентов, адаптированных для полнофункциональной сквозной системы.
ХИНТ: сама ардуень легко превращается в программатор - при помощи четырёх проводков, кидаемых на любой программируемый МП.
ХИНТ: я использую ардуень в минимальной конфигурации "кристалл МП + Rreset" без всяких проблем. То есть, буквально - один чип (без обвеса) и одно сопротивление на ноге ресета.
В общем, поводы для критики - абсолютно надуманы...
-
Никто не запрещает шить ардуень программатором
Тогда она теряет смысл, единственное ее достоинство (оно же скрытый недостаток) - это USB загрузчик, который висит в памяти, исключающий необходимость программатора.
А подвязанность на форм-фактор дроп-ин модуля я как раз считаю недостатком.
Вся прелесть AVR-ов (да и других МК) именно в широкой номенклатуре, в возможности выбора чипа под конкретную задачу - по памяти, периферии, количеству ног, необходимых для управления.
Под любую из мег плата легко делается даже ЛУТ-ом, не говоря уж о фоторезисте.
а кривизна резидента полностью определяется кривизной, заложенной в идею загрузчика разработчиками МП.
Не должно быть никакого загрузчика (только если это не специальный режим, boot-ROM, недоступный в нормальном режиме).
Мое мнение, в МК не должно быть НИКАКОГО лишнего кода, кроме программы, написанной собственно пользователем.
ХИНТ: штатное программирование ардуины производится стандартным программатором
Который не входит в комплект поставки (само железо программатора), есть только разъем для подключения ISP программатора.
-
Тогда она теряет смысл, единственное ее достоинство (оно же скрытый недостаток) - это USB загрузчик, который висит в памяти, исключающий необходимость программатора.
Для меня главное (но не единственное) достоинство ардуени - это стандартный формфактор в сочетании с огромным количеством прибамбасов.
Мое мнение, в МК не должно быть НИКАКОГО лишнего кода, кроме программы, написанной собственно пользователем.
;D ;D ;D
Который не входит в комплект поставки (само железо программатора), есть только разъем для подключения ISP программатора.
ISP - не единственный метод программирования, предлагаемый разработчиком. JTAG как бэ не лучше, но и бутовый загрузчик вполне себе метод.
В общем указаний на реальные недостатки так и не последовало...
-
Мне всегда казалось "хорошо" и "плохо" - это понятия характеризующие, насколько хорошо нечто справляется с поставленными задачами. Имхо, ардуины вполне хватит для задачи поставленной ТС. Можно и raspberry заточить, но надо ли.
-
Для меня главное (но не единственное) достоинство ардуени - это стандартный формфактор в сочетании с огромным количеством прибамбасов.
По моему мнению, нужно МК выбирать под задачу, а не задачу втискивать в ограничения какого-то конкретного модуля.
На фига например модуль, если можно использовать 8-ногую тиньку для переключения 3-х каналов с 3-х кнопок?
И. Т. Д....
Боле близкий тебе пример, ты же не используешь во всех своих разработках один и и тот же транзистор или операционник, а подбираешь наиболее подходящий в данном конкретном случае и по параметрам и по цене.
Мое мнение, в МК не должно быть НИКАКОГО лишнего кода, кроме программы, написанной собственно пользователем.
;D ;D ;D
Может не совсем точно выразился, я не имел ввиду проверенные библиотеки компилятора, а только неизвестный бинарник, болтающийся в памяти без исходных кодов и знания возможных побочных эффектов.
ISP - не единственный метод программирования, предлагаемый разработчиком. JTAG как бэ не лучше
JTAG "отъедает" ноги порта, которые в случае его использования нельзя ни на что другое применить.
но и бутовый загрузчик вполне себе метод.
Если самописный, то нормально. Или масочный boot ROM, предусмотренный производителем чипа (чего в AVR нет).
В общем указаний на реальные недостатки так и не последовало...
Главный указан выше - завязка на конкреный кристалл и форм-фактор.
-
по теме: попробовал сделать по совету KMG повесил индикатор на таймерное прерывание и оно работает (без SPI). но есть еще загвоздка. значение переменной, которая выводится на экран должно передаваться через USART по запросу. То есть, используется усарт прерывание для отправки ответа. И тут возникает проблема с согласованием двух прерываний. передача просто не работает. подозреваю потому что приоритет прерывания по переполнению счетчика выше, чем у усарта. может есть какой то очевидный косяк? подскажите, плз...
-
точнее не так... МК принимает байт по усарту, но походу не успевает отправить ответ, если такое возможно.
-
Что ж такое мега вычисляет, что не сможет индикацию обработать? Думаю Ваша задача вполне реализуема на одном МК. А так прерывания должны обрабатыватся в порядке очереди (теоретически). Скорее всего косяк в Вашей программе.
-
в меге есть приоритеты? не помню :)
Но знаю, что войдя в прерывание многие обработчики запрещают их до выхода из функции. По этому прерывание USART не может пролезть.
-
Приоритеты вроде есть. В этом случае прерывание по USART становится в очередь. Ведь прерывание от таймера не постоянно висит.
Правда зависит от настроек таймера и размера кода, засунутого в обработчик.