Самодельный передатчик (часть 2)

Aleksey_Gorelikov

Николай, посмотри в сторону ДХ5. 40 баксов за корпус с модулем и антеной - весьма неполохо. Места в нем достаточно (у дх6 корпус практически такой же), сносные джойстики и готовые кнопки триммеров.

Networx:

2 Aleksey_Gorelikov, подскажите где посмотреть по какой схеме и как подключаетса выключатель питания, на дополнительном ключе!

Обсуждали тут, наверное еще год-2 года назад, вместе с Женей (fokus)

EagleB3

Или, как здесь уже советовалось, пристально посмотреть на Тургнигу-“тушку”. Единственный вопрос, который нуждается в прояснении - что там за дисплей. Думаю, что ребята из той ветки не откажутся ответить…

Я разъемчиками закупился для кодера (взял из серии MW/MU, ключеванные с защелками, шаг 2мм, и высота маленькая). Так примерно $15 одни разъемы встали. (Хобби, блин… “Охота пуще неволи”…)Там же вся тушка $70.

P.S. Но ить пока что получается так, что душа поет. 😃 Сегодня пачку булавок купил - крепления дисплея делать. Позже фото выложу.

P.P.S. +$3 за пачку булавок… 😃

Aleksey_Gorelikov

Про дисплейчик надо не в той ветке искать, а где-то тут, в самодельной аппе (там паралельная шина на дисплее, лень искать тип контроллера). Месяц-2 назад назад выяснили, что за дисплей в ней стоит (была тут отдельная ветка типа “что за дисплей в турниджи”). Лень смотреть. Только проц там мега64. Надо будет в корне графику перерабатывать. С тем подходом как у фокуса\мсв - экранный буфер много ОЗУ съедает.

Texnik
EagleB3:

Кто хочет помоделировать в протеусе - велкам.
Джойстики расставил по привычной мне “Моде 2”. От увиденного при калибровке окосел… 😵
Не менял: если кто-то так сделал - значит это кому-нибудь нужно?

Все как живое - пищщалкой пищщит, по менюшкам ходит, свитчи видит, потенциометры при калибровке - тоже. Калибровку не проходит - прошуршал джойстиками, дополнительным каналом, кнопаю “вправо” - получаю “not correct”.
Наверное что-то в методологии у меня не так.

И PPM не PPMит (вернее, синхроимпульс идет, но управления не видно). Из-за косой калибровки?

P.S. Ах, да! Вот еще что… Почему-то сразу после изготовления проекта модель дисплея не запустилась - экран оставался мертвым. Потребовалось отдельно запустить распаковать и запустить модель из поста #2119, после чего все волшебным образом заработало. Впрочем, с протеусом и не такое бывает… 😉

Калибровка работает нормально. Необходимо на второй странице в схеме Proteus привести каналы в соответствии с реальной схемой. Или править программу в соответствии с Вашей схемой.

PS У себя исправил.

VRV

Николай, спасибо за ответ по меню. Интересна была прежде всего реализация динамического легко маштабируемого меню. Т.к ответ пришел чуть позже:) успел набросать свою версию. Прежде всего не стал использовать структуры с указателями, а использовал статическую таблицу переходов(на мой взгляд получилоссь достаточно наглядно) которая дает представление об иерархии всего меню.
Если будет интересно- скину куски.
А основная идея управления пульта- отказ от кнопок и использование энкодера.
В качестве такового используется колесо мыши:).
Пока отлаживаю в протеусе- жду VG400 за 10 евро:)
По поводу проверки еепром в сообщения выше- реализовал проверку срс при загрузке соотв модели(в структуру модели при записи пишется вычисленное значение).
Также планируется использование програмного отключения передатчика, что позволит однократно читать модель при включении, внесенные изменения держать в рам и записывать еепром при выключении или через меню.
В общем идей масса- посмотрим как реализуется в железе.
( отдельное спс родоначальникам данной ветки, т. к. многие вещи были использованы методом контрол+с) 😃

msv

А основная идея управления пульта- отказ от кнопок и использование энкодера.

Энкодер- это здорово! Сделал возможность менять параметры резистором доп. аналогового канала. Очень удобно кажется. Чуть позже выложу обновление, где в тч. контроль CRC EPROM сделан, ну и еще кое-что, по мелочи…

msv

Люди добрые, помогите… Уж очень хочется нормально отлаживаться в протеусе (7.5 SP3), а он, зараза, не хочет адресовать больше 256 байт епрома. Уж и бинарник размером 4К ему подкладывал и ручками пытался MODDATA править, один фиг страшие разряды адреса игнорирует… Это конкретный косяк модели или как-то лечится??

EagleB3
msv:

Энкодер-это здорово! Сделал возможность менять параметры резистором доп. аналогового канала. Очень удобно кажется.

Это бы весьма кстати… А то у меня никак кнопки меню в конструктив не вписываются так, чтобы нравилось. Пока на плате спроектировал контактные площадки для установки платы кнопок меню “бутербродом”, ну и разъем менюшный тоже оставил (потому как еще есть мысль поставить джойстик от мобильника).

А вот так у меня дисплей встал в корпус. Стекло (из “нулевой” коробочки от CD просто вложено; сверху к нему две пружинки из булавок прижимают плату с дисплеем TIC154). Так что даже если по дисплею что-то пнет (с умеренной силой и не очень резко) дисплей целым (надеюсь…) останется.
На плате оставлены места для впайки в цепь питания подсветки корпуса 0805, 1206 и SMB в параллель - яркость регулировать. Что-нибудь точно подберется. И еще на плате есть местечко, так что можно двухуровневую по яркости подсветку замастрячить, типа “день-вечер”.

VRV
msv:

Люди добрые, помогите… Уж очень хочется нормально отлаживаться в протеусе (7.5 SP3), а он, зараза, не хочет адресовать больше 256 байт епрома. Уж и бинарник размером 4К ему подкладывал и ручками пытался MODDATA править, один фиг страшие разряды адреса игнорирует… Это конкретный косяк модели или как-то лечится??

Похожая проблема и у меня. Модели представлені массивом структур в еепром. Так вот при симуляции структура пишется всегда по нулевому адресу. Тож думал косяк в программе, но в студио еепром заполняется без ошибок. И еще- в протеусе файл служит для начальной инициализации еепром. При последующей симуляции данные еепром сохраняются во вспомогательном файле симуляции. Могут быть сброшены через меню дебаг.

ЗЫ: хотел отправить архив с моделю в протеусе но стоит ограничение на тип файлов(только графика)\справку читал:)\

msv

Хочу уточнить, изменение параметров резистором доп. ан. каналом- не будет полноценная замена кнопок “вверх-вниз”. Просто при изменении параметра от-100 до +100 это гораздо удобнее сделать одним движением пота. И Хотя почти всё (ключ. слово - “почти”) можно сделать без этих кнопок, но отазываться совсем от них наверное не стоит…
Ох… погорячился я минутами на реализацию проверки CRC EEPROM… Уже второй вечер пытаюсь понять, почему после “больший” изменений, CRC получается правильной только на второй раз…
А вот код для проверки eeprom в протеусе:

#define SIZEOF_EEPROM 4*1024
void testeeprom(void)
{
unsigned int i;
eeprom unsigned char *p;
p=0;
for(i=0; i<SIZEOF_EEPROM; i++, p++)
{
*p=0xaa;
}
}

После этой функции помотреть дамп eeprom в протеусе…

DD

VRV, а не подскажете где VG400 за 10 евро продают

VRV

Все тотже EBay. Причем именно его немецкая версия(ebay.de). Очень много лотов выставляется Graupner. Зайдите-посмотрите цены:P(правда в 10 евро нужно попасть на удачный лот (вг-устаревшая модель)). Единственная трудность с оплатой - немцы не жалуют пайпал, а предпочитают перевод:)(около 300грн для одной транзакции:)). Поэтому нужно отбирать еще и по способу оплаты.(или заводить друга в Германии:)). Кстати на английском(co.uk) тоже попадаются неплохие варианты - но там нужно уговаривать для отправки в страны СНГ.😃 Кстати тамже (.com)заказывал два дисплея нокиа 7110 по ~3 доллара.

ЗЫ:А для кого летать первостепенно и есть хотябы 100 убитых енотов - то на хоббисити есть 9 каналка за 70 + (20-30 модуль)$.

DD
VRV:

ЗЫ:А для кого летать первостепенно и есть хотябы 100 убитых енотов - то на хоббисити есть 9 каналка за 70 + (20-30 модуль)$.

Это то понятно, просто хочется найти дешевую аппу именно под переделку, чтобы конструктив, так сказать полностью устраивал. Надо чтобы места в ней было много, напрмер большинство апп которые идут без дисплея какие то урезанные по вертикали. Хотелось чтобы джои нормальные были, а то я переделывал валькеру, джои там авно полное. Хотелось чтобы триммеры было просто переделывать, я вот на свою валькеру достал джои от футабы, теперь опять проблемы с триммерами.
Еще я так понял вы пишете новую прошивку, у меня есть пару предложений:

  1. Может использовать АРМ
  2. Может можно попробовать использовать микрочиповскую графическую библиотеку, она с открытыми кодами, правда под 16битные процы, но я код просмотрел, вроде переделывается легко, зато там по умолчанию поддерживаются многие дисплеи и еще много полезной фигни😁

PS: я к чему про АРМ то, я тут не так давно ковырялся в санвовском ПСМ, и вообще в ПСМ, так вот мне кажется что АВР тут маловато будет, хотя как писать. Иногда напишешь что нибудь которое по времени не должно работать, а оно работает, а иногда наоборот😁

VRV

Ecли вы не предполагаете декодирование видео, то АВР вполне достаточен для задач ру. Простая прикидка - пачка сигнала ппм=20мс. При частоте 12 мгц =12/50=600 000 машинных циклов для обновления данных о каналах. При этом само обновление - по прерыванию простой записю в регистр из массива вычисленных значений. Если не использовать операций деления(заменять сдвигом) и не вычислять значений неизменных каналов, то вся математика займет пару десятку процентов. Касаемо затрат по обновлению дисплея- тоже копейки если не рисовать элипсы и смнусоиды:) При этом само обновление в главном экране 1 раз в сек(для таймера), а в остальных меню по факту изменений(или также 1 раз за сек).
Касаемо PCM - насколько я понимаю в данном случае вместо таймера задействуется модуль uart для передачи данных о состоянии каналов, однако стандарт передачи для каждого производителя отличается.
Как я гоаворил прошивка не новая, просто не смог разобратся в выложенных:) и вставлял из них куски а кое что дописывал, т.к хотел изменить способ ввода и сделать легко изменяемое меню. До структуры меню Николая конечно далеко, но вроде в своем пока не запутался:).
Для меня данный проект интересен не конечной реализацией(хотя и она интерена:)), а самим процессом, дабы не утерять а иногда и приумножить:) знания мк и с. Я думаю если ктото заинтересуется изучением АРМ, то перенести данный проект на другую платформу не составит труда, т.к даже графика написана на с. В этом плане микрочип к примеру склоняется больше к ассеблеру(из свободных проектов и AN).
Использование 16 и более разрядных мк повысит точность при том же быстродействии, но нужна ли она?
При ходе стика в 60 градусов и высоте 2 -3 см вы имеете порядка 3 см линейного перемещения. Даже операции с 8 разрядами при полной шкале отцифровки дадут разрешение 0,15 мм. Кстати именно для этого хочу ставить нормировщики на оу.( руки пока не дошли до аппаратной реализации)

ps: кстати как кинуть атач с моделю? принимает только графику.
pps: да и запись данных в лсд их памяти тоже по прерыванию(без ожидания флага внутри программы), а это примерно по 60 циклов на каждое обращение к spi (вот сегодня этим как раз и займусь:))

DD

я про графическую библиотеку от микрочипа (на си, с открытым кодом) в которой прорисованы все элементы управлнения и отображения, а так же определено их поведение. Библиотека достаточно итересная поддерживает много устройств вывода и ввода (даже тачскрин). Минус это то что она изначально предназначена для контроллеров от 16бит и выше, но это сделано как я понял искуственно. Мне кажется что есть смыс использовать подобную библиотеку с какой нибудь ос. Просто текущие прошивки так реализованы что изменять их сложно.(например у msv задержка канала, помоему связана с ппм, тоесть просто так изменить протокол сложно). Больше подобных библиотек я не нашел. А ведь по большому счету задача кодера как раз это взаимодействие с пользователем. По поводу АРМ: я считаю что его стоит применить, так сказать на будущее, тем более что цена не особо дороже, а плюшек много получается не только от железа, так еще и от софта.
ПСМ, по крайней мере санвовский генерировать уартом точно не получится.
Но это все моё ИМХО, советовать то все умеют, и я тоже

VRV

На сегодня последняя фраза и спать:)
Качать не стал, но глянул видео - интересная штука с больними возможностями.
Но повторюсь- для чб дисплея с макс разрешением 100Х100 сие счасте не обязательно. Тем более что хорошая библиотека меню написана Николлаем. Могу кинуть свою(попроще).
Я ток за арм, тем более сам хотел с ним поработать, да руки не доходят. Но лично у меня ни аппаратных ни програмных инструментов под него нет.
На будущее вижу его ток как основу OSD для полетов по камере, но помойму его также реализовали на меге:)
Кстати набросал перегрузку буфера через прерывания- освободилось еще немного времени проца:)
Да кстати если есть прямая ссылка на сей страшный протокол pcm- кинте, интересно глянуть с чем не сможет справится уарт(а на чем идут последние санвы кстати тоже любопытно?)

EagleB3
VRV:

кстати как кинуть атач с моделю?

Сюда - никак. Файл надо заложить в какое-нибудь файлохранилище (что-то типа depositfiles.com) или слепить сайтик (например, на narod.ru; чисто номинальный - но дадут место под хранение/раздачу файлов) и положить файл туда, а здесь выложить ссылку на файл.

Nick_Shl
Aleksey_Gorelikov:

Николай, посмотри в сторону ДХ5. 40 баксов за корпус с модулем и антеной - весьма неполохо.

Смотрел - нет экрана, а это много слесарщины. Не хочу. Да и не сменные модули тоже не гуд - вдруг когда захочется ещё что-нибуль и на тему радиоканала замутить - по крайней мере с электроникой у меня дела идут лучше, чем моделями 😃.

EagleB3:

Или, как здесь уже советовалось, пристально посмотреть на Тургнигу-“тушку”. … Там же вся тушка $70.

Тоже интересный вариант. Но ещё за доставку почти 30$. Итого 100$. Сейчас у меня такой возможности нет. И ломать работающую вещь будет жалко, а дохлую - нет.

А вообще это был такой тонкий намёк 😃. Если кто может презентовать/продать за символическую сумму дохлый Optic 6 был бы очень признателен…

Aleksey_Gorelikov:

С тем подходом как у фокуса\мсв - экранный буфер много ОЗУ съедает.

Экранный буфер получается 128x64 точек = 8192 бит. Итого 1 kB. Меньше никак. Только если вообще без буфера, но тогда возможно мерцание экрана при отрисовках.

VRV:

Николай, спасибо за ответ по меню. Интересна была прежде всего реализация динамического легко маштабируемого меню. Т.к ответ пришел чуть позже:) успел набросать свою версию.

Просто поздно заметил 😃.

VRV:

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

Интересно, потому что смысла сказанного я не понимаю 😃. Сами пункты у меня тоже статические и хранятся в памяти программы. Динамическая только структура описатель меню и то только для того, что бы реализовать простое задание значений по умолчанию(шрифты и т.д.).

VRV:

А основная идея управления пульта- отказ от кнопок и использование энкодера.

На счёт этого не знаю. Думаю кнопок + ручек более чем достаточно для управления. А энкодерам место для управления триммерами. Я раньше такую мысль высказывал, а потом оказалось что это не моё ноу-хау - у старших моделей футаб именно так и сделано 😃. Вот только реализовать в железе 4-ре энкодера для управления триммерами не тривиальная задачка…

DD:
  1. Может использовать АРМ

Можно. LPC не плохие. Вот только шаг у них поменьше - боюсь ЛУТ-ом тяжело будет сделать. Нужно либо осваивать фоторезист - это сложно, да и плёночный мне достать сложно, либо заказывать на стороне - а это дорого.

VRV:

До структуры меню Николая конечно далеко, но вроде в своем пока не запутался:).

Хоть кто-то оценил. Приятно однако 😁.

VRV:

Использование 16 и более разрядных мк повысит точность при том же быстродействии, но нужна ли она?
При ходе стика в 60 градусов и высоте 2 -3 см вы имеете порядка 3 см линейного перемещения. Даже операции с 8 разрядами при полной шкале отцифровки дадут разрешение 0,15 мм. Кстати именно для этого хочу ставить нормировщики на оу.( руки пока не дошли до аппаратной реализации)

Не тоит забывать про нормализацию кривые и микшеры. Тут может потеряться точность…

VRV:

Кстати набросал перегрузку буфера через прерывания- освободилось еще немного времени проца:)

У меня наоборот - обновление экрана без прерываний. На главном экране 10 раз в секунду - таймер с сотыми секунды 😎. Обновление всего экрана занимает приблизительно 16 мс - тестировал на железе. Генерация импульсов идёт в прерывании. Все остальные задачи сидят на другом таймере. Для них предусмотрена разрешение прерываний что бы генерация импульсов шла без проблем и не реентерабельность, что бы не подвесить пульт.

Про симуляцию: Нафиг! У меня с ней были постоянные проблемы. Отлаживатся на железе нужно. Я использовал STK500 совместимый бутлоадер(могу выложить) + вывод отладочной информации в UART. Для связи использовал USB шнурок от старого телефона с конвертером USB-UART внутри.

DD

VRV
Вот и у меня тоже руки не как не дойдут с АРМ заняться😁
Прямой ссылки на ПСМ нет, я смотрел в исходниках рсджой и смарт пропо плюс,
усарт не справится потому что у него жестко задана структура передачи старт бит данные стоп бит, а вот например в санва ПСМ2 на канал передается 20бит, а за ними еще столько же для второго и тд. Если надо могу выложить свои эксперименты с ПСМ, я санва ПСМ2 съэмулировал на аврке, на этом дело и закончилось😁, я почему то решил что на данный день ПСМ не актуальна и заказал себе корону, вот жду когда приедет

Nick_Shl
Не подскажете какой самый большой шаг у ЛПС, по ЛУТ получает делать платы для FT232R, а у нее шаг 0,65, да и мне кажется что с помощью ЛУТ можно делать платы еще с меньшим шагом, главное терпение.
И можно поподробнее как вы отлаживаете и если есть что выложить - выкладываейте. заранее спасибо

VRV
Nick_Shl:

Интересно, потому что смысла сказанного я не понимаю 😃. Сами пункты у меня тоже статические и хранятся в памяти программы. Динамическая только структура описатель меню и то только для того, что бы реализовать простое задание значений по умолчанию(шрифты и т.д.).

У меня наоборот - обновление экрана без прерываний. На главном экране 10 раз в секунду - таймер с сотыми секунды 😎. Обновление всего экрана занимает приблизительно 16 мс - тестировал на железе. Генерация импульсов идёт в прерывании. Все остальные задачи сидят на другом таймере. Для них предусмотрена разрешение прерываний что бы генерация импульсов шла без проблем и не реентерабельность, что бы не подвесить пульт.

Про симуляцию: Нафиг! У меня с ней были постоянные проблемы. Отлаживатся на железе нужно. Я использовал STK500 совместимый бутлоадер(могу выложить) + вывод отладочной информации в UART. Для связи использовал USB шнурок от старого телефона с конвертером USB-UART внутри.

Дело в том что я меню реализовал как статическую таблицу переходов, где хранятся не адреса а номера функций отрисовки экрана(структуры не всегда корректно отображаются в протеусе):



 void InitDisp(void);
  void ShowDisp(void);
  void ShowMainDisp(void );
  void ShowStdMenuDisp(void );
  void ShowSelectModelDisp (void );
  void ShowCopyModelDisp (void );
.......................................................................

#define MainDisp                                    0
       #define MainMenuDisp                         1
                #define ModelMenuDisp               2
                        #define SelectModelDisp     3
                        #define SaveModelDisp       4
                        #define ModelNameDisp       5
                        #define SetTransDisp        6
                #define ControlsMenuDisp            7
                        #define MixerDisp           8
                        #define CurveDisp           9
..............................................................................



flash unsigned char  *MenuTxt[] =
{
  "MENU\0",
    "MAIN\0",
       "Model\0",
       "Select\0",
       "Save\0",
       "Name\0",
       "Trns.\0",
     "Controls\0",
       "Mixers\0",
       "Curve\0",
   .....................................................


flash unsigned char MenuTable[MenuMaxItems][MenuMaxStruct] =
{
//-----------NameMenuDisp-----------|---- ExitDisp-----------|-ExitItem---|--Items--|-IsEndDisp --|----------------- ItemsDisp=MenuMaxDeep-10-------------------------------|
        { MainDisp,                          _NONE_ ,              0,           0  ,       1,            _NONE_,_NONE_ ,_NONE_ ,_NONE_ ,_NONE_},
        {  MainMenuDisp,                     MainDisp,             0,           4,         0,            ModelMenuDisp,ControlsMenuDisp,OptionMenuDisp, SaveMenuDisp,_NONE_ },
        {     ModelMenuDisp,                 MainMenuDisp,         0,           4,         0,            SelectModelDisp,SaveModelDisp, ModelNameDisp,SetTransDisp ,_NONE_},
        {       SelectModelDisp,             ModelMenuDisp,        0,      MAX_MODELS,     1,             _NONE_ ,_NONE_ ,_NONE_ ,_NONE_ ,_NONE_},
        {       SaveModelDisp,               ModelMenuDisp,        1,      MAX_MODELS,     1,            _NONE_ ,_NONE_ ,_NONE_ ,_NONE_ ,_NONE_},
        {       ModelNameDisp,               ModelMenuDisp,        2, MAX_MODELS_NAME+1,   1,            _NONE_ ,_NONE_ ,_NONE_ ,_NONE_ ,_NONE_},
        {       SetTransDisp,                ModelMenuDisp,        3,           0,         1,            _NONE_ ,_NONE_ ,_NONE_ ,_NONE_ ,_NONE_},
        {     ControlsMenuDisp,              MainMenuDisp,         1,           4,         0,            MixerDisp,CurveDisp,ChanelDisp, AdvanceCtrDisp ,_NONE_},
        {       MixerDisp,                   ControlsMenuDisp,      0, MaxControlsNames+1, 1,            _NONE_ ,_NONE_ ,_NONE_ ,_NONE_ ,_NONE_},
        {       CurveDisp,                   ControlsMenuDisp,      1,   CURVE_NODES+1,    1,            _NONE_ ,_NONE_ ,_NONE_ ,_NONE_ ,_NONE_},
        {       ChanelDisp ,                 ControlsMenuDisp,      2,           4,        1,            _NONE_ ,_NONE_ ,_NONE_ ,_NONE_ ,_NONE_},
        {       AdvanceCtrDisp,              ControlsMenuDisp,      3,           4,        1,            _NONE_ ,_NONE_ ,_NONE_ ,_NONE_ ,_NONE_},
        {     OptionMenuDisp,                MainMenuDisp,          2,           3,        0,            TimerMenuDisp,BatareyDisp,MonitorDisp ,_NONE_ ,_NONE_},
        {        TimerMenuDisp,              OptionMenuDisp,        0,           0,        1,            _NONE_ ,_NONE_ ,_NONE_ ,_NONE_ ,_NONE_},
        {        BatareyDisp,                OptionMenuDisp,        1,           0 ,       1,            _NONE_ ,_NONE_ ,_NONE_ ,_NONE_ ,_NONE_},
        {        MonitorDisp,                OptionMenuDisp,        2,           0 ,       1,            _NONE_ ,_NONE_ ,_NONE_ ,_NONE_ ,_NONE_},
        {     SaveMenuDisp,                  MainMenuDisp,          3,           3 ,       0,           SaveAllDisp,CopyModDisp ,CopyCtrDisp  ,_NONE_ ,_NONE_},
        {        SaveAllDisp ,               SaveMenuDisp,          0,           1 ,       1,            _NONE_ ,_NONE_ ,_NONE_ ,_NONE_ ,_NONE_},
        {        CopyModDisp,                SaveMenuDisp,          1,           1 ,       1,            _NONE_ ,_NONE_ ,_NONE_ ,_NONE_ ,_NONE_},
        {        CopyCtrDisp,                SaveMenuDisp,          2,           3 ,       1,            _NONE_ ,_NONE_ ,_NONE_ ,_NONE_ ,_NONE_}



};//end menutable

собственно само переключение :



 JoyMenuSelect(); \\ реакция на енкодер

 switch(CurDispState.CurDisp)


      {
      case MainDisp : ShowMainDisp();
      break;
         case MainMenuDisp: ShowStdMenuDisp();
         break;
              case ModelMenuDisp: ShowStdMenuDisp();
              break;
              case SelectModelDisp : ShowSelectModelDisp();
              break;
              case SaveModelDisp: ShowSaveModelDisp();
              break;
              case ModelNameDisp: ShowModelNameDisp();
              break;
         case ControlsMenuDisp: ShowStdMenuDisp();
         break;
........................................................................

По прерываниям spi- по даташиту сосетуют использовать прерывания при высоких значениях предделителя от 64 и выше. Обидно терять циклы для ожидания готовности spi.

На счет железа согласен(пример глюки протеуса при записи еепром), однако мое железо бедет корректироватся в зависимости от реализации программы, а возится с макеткой лень:)

Кстати случайно наткнулся на такой проектик www.smartpropoplus.com/dnn/Home/…/Default.aspx
Правда насколько я понял используется декдирование с помощю аудиокарты.