Самодельный передатчик (часть 2)
Вадим, тебе имеет резон срисовать схему тренер\ученик с твоей аппы. Там достаточно интересно все реализовано. Передатчик включается при подсоединении шнура, Выключатель питания продублирован ключем и аппа отключается не тогда, когда ты тумблером щелкнул, а когда проц закончит запись в епром и в “спячку” ляжет.
К томуж и детали у тебя все есть. 😃 Ничего покупать не придется.
Кстати в отличии от аналоговой цифровая пытается работать (если так можно сказать) с PPM и IPPM.
От сервы это никак в данном случае не зависит 😃
Скомпилировал HEX-файл
Но в код похоже не заглядывали 😃.
В общем картина выглядит так: вначале происходит мигание светодиодами для их теста: зелёный, жёлтый, красный. Затем пауза когда светодиод не светится. Далее начинается сама инициализация:
Красный светодиод - определение полярности.
Жёлтый - подсчёт количества каналов на передатчике.
Дальше переключается на зелёный и начинает крутится. Если срабатывает FailSafe - светодиод меняет цвет на красный, по восстановлению связи вновь становится зелёным.
все работает замечательно с аналоговыми (Futaba S3003) сервами.
Это значит, что всё спаяно правильно и прошивка прошла успешно.
Но стоит подключить цифровую (E_sky EK2-0508) – мигает светодиод всеми цветами и серва несколько секунд «клацает» издает слабые счелчки как будто пытается вращаться и наэтом все и заканчивается.
Я могу утверждать только одно: от прошивки это не зависит(или по крайней мере не должно 😃). А что будет если подключить одну цифровую и несколько аналоговых? Если не работает только цифровая - нужно разбираться дальше. Если все и светодиод мигает всеми цветами, есть предположение, что цифровая серва шумит и возможно происходит сброс микроконтроллера. Думаю стоит попробовать уменьшить резистор между ногой сброса и питанием до 1К, питание выходов на сервы шунтировать керамикой на 0,1 мкф. А ещё можно попробовать взять конденсатор >= 6,3 В на n тыс. мкф, припаять к нему провод от дохлой сервы и воткнуть в неиспользуемый канал приёмника, для сглаживания резких просадок напряжения…
А подскажите по программе для проца в сообщении 2144. Чем компилировали? CodeVizor AVR v2.03.4 подойдёт?
В смысле? Мой CVAVR v2.03.4, во всяком случае, ругаться не стал. Сделал HEX объемом 4603 байта (чуть меньше 80% флеша) даже без варнингов.
“Не вижу препятствий!” (с) “Ва-банк 2”.
А подскажите по программе для проца в сообщении 2144. Чем компилировали? CodeVizor AVR v2.03.4 подойдёт?
У меня такой же, только Vision 😃. Им и компилил.
А ещё я забыл выложить фузы. Помню только что нужно сконфигурировать на внутренний RC-генератор 8 МГц. Могу позже попробовать посмотреть…
даже без варнингов.
Старался 😎.
У ATtiny2313 заводские установки CKSEL=0100 (=8MHz internal), да плюс CKDIV8 запрограммирован - итого 1МГц.
Для тактовой частоты 8МГц надо распрограммировать CKDIV8.
Купил дисплей от Nokia 3510. Надеялся, что они похожи на 3410. Увы, нет.
Может кто-нибудь знает, как его подключить и инициализировать?
Подскажите пожалуйста, чем грозит отключение кодера вовремя записи в eoprom!
И как можно реализовать правильное отключение кодера, вплоть до установки дополнительного елемента питания (например таблетки от компа).
Спасибо!
Тем, что в EEPROM будет записан “мусор”. И, возможно, обнаружится это только когда модель уже в воздухе. Ну, допустим, звезды так сложились, что у тебя на модели №3 перекосило микширование РВ с элеронами, и только в режиме посадки. А перед взлетом ты это не проверял. И взлетел, и летал, и потом пошел на посадку…
Но:
- Порче при таких раскладах подвержена обычно самая первая ячейка EEPROM. Что можно сделать, чтобы от этой порчи не пострадать написал, например, Nick_Shl вот здесь
- Можно (и полезно, и нужно) контролировать содержимое EEPROM подсчитывая код CRC. Как этого можно сделать написал Nick_Shl там же. Focus и MSV собирались сделать это в своих прошивках, но, по-моему, так и не сделали. И (по-моему же) в выложенных здесь прошивках это никто не сделал.
- За-ради сохранности EEPROM полезно быстро заканчивать переходные процессы выключения микроконтроллера. А для этого нужно ставить электролитические конденсаторы в фильтрах с емкостью не более 10 мкф. Об этом здесь уже писалось, но кто именно писал - не помню, сорри.
- Аппаратно (как здесь писал и уже не раз Aleksey Gorelikov, и один из разов писал он прямо на этой странице чуть выше) шунтировать выключатель питания аппы ключиком-мосфетом. Перед началом записи в память микроконтроллер включает шунт; если в этот момент ты выключишь питание - ничего не произойдет. А когда запись будет завершена, микроконтроллер отключает шунт, и если к этому времени выключатель питания разомкут - аппа выключится. Как вариант можно сделать включение аппы двумя кнопками (“Вкл”/“Выкл”) или нефиксирующимся тумблером на три положения - для включения двинул тумблер в сторону “Вкл”, подалось питание на контроллер, контроллер зашунтировал тумблер мосфетом, пискнул - можно тумблер отпускать. Работаем и периодически опрашиваем тумблер (как и любой другой выключатель). Если тумблер двинули в состояние “Выкл”, проверяем это состояние в течение нескольких секунд (как бы “антидребезг”, только более долгий) и если состояние устойчиво, то заканчиваем запись данных моделей в EEPROM, считаем CRC, записываем его в EEPROM и и отпускаем шунт. Аппа выключилась. Пищать с какого-то момента проверки устойчивости состояния тумблера “Выкл” (типа, сигнал получен; отпусти тумблер, если это по ошибке) и до момента отключения тревожно-художественно-особым писком - по желанию.
Таблетка от компа - от лукавого. Она может бекапить устройства с микропотреблением; микроконтроллер к таковым можно отнести весьма условно, и только в особых режимах. Впрочем, “Хозяин - барин”.
----------------------------------------------
А вот (может, кому будет интересно…) как встают кнопки SWT-1 в качестве триммеров на джойстики аппы Sanwa VG400. Конструкция всех 4-х площадок потенциометров абсолютно идентичная.
Клеились на эпоксидку “ЭДП” (на первом фото хорошо видны следы ее растекания по площадке, а мазалась площадка клеем аскетично, без излишеств; надеюсь, это признак сильного поверхностного натяжения - значит, и держаться должно крепко по идее); площадки в месте приклеивания кнопок предварительно обезжиривались антисиликоном и ацетоном, потом зачищались шкуркой (зерно примерно 600) до шероховатости. Бока кнопок обезжиривались, потом притирались к плоской поверхности на шкурке (зерно примерно 1000) - чтобы ничего наружу не торчало (верхняя металлическая пластинка, следы пресс-формы на корпусе кнопки) и было шероховатым.
Паять собираюсь легкоплавким припоем (ок.100 градусов; эпоксидка “ЭДП”, насколько я помню, выдерживает до 300 градусов) - иначе припаял бы провода до приклеивания
Кстати, имеются аналогичные по размерам кнопки SWT-10 под SMD-монтаж, но, КМК, применять их будет менее удобно - выводы у них короткие (легко залить эпоксидкой).
У меня при выключении портился EEPROM на первых порах, пока не включил boden. Причем портились случайные группы ячеек, вовсе не первые… И даже не в моменты записи… С тех пор как включил boden ни одного сбоя не замечал. Поэтому так и не дошли руки написать контроль целостности eeprom. Хотя конечно это надо бы на всякий сделать, работы минут на 10…
Лично у меня сложилось впечатление, что проблема нулевой ячейки- это качующий из форума в форум миф… Ну может и была когда проблемная партия мег с этим глюком, но ни одного официального документа на эту тему не попадалось… В моей версии нулевая ячейка eeprom- первый символ в названии первой модели. У кого нибудь она портилась?
Лично у меня сложилось впечатление, что проблема нулевой ячейки- это качующий из форума в форум миф… Ну может и была когда проблемная партия мег с этим глюком, но ни одного официального документа на эту тему не попадалось…
Да, вполне может быть, что это предание…
С тех пор как включил boden ни одного сбоя не замечал.
BOD-рулез. А уж встроенный-то грех не использовать.
В моей версии нулевая ячейка eeprom- первый символ в названии первой модели. У кого нибудь она портилась?
Да, у меня портилась. Но это случилось только при очень частом вкл/выкл передатчика (контакт по питанию фиговый был) Но там и не такое могло испортиться 😉
Ааааа…
Тогда с очевидностию вытекает следующий вопрос: портилась при этом ТОЛЬКО первая ячейка? Или и другие тоже?
Ну, как говориться, вопрос конечно интересный. Но ответа не знаю. То что первая буква в названии первой модели изменилась - это точно. Забито было “Manon”, а стало “первуюбуквунепомнюanon”. Помню, удивился. Ничего другого я не заметил, и на всякий случай все же обнулил еепром.
Лично у меня сложилось впечатление, что проблема нулевой ячейки- это качующий из форума в форум миф… Ну может и была когда проблемная партия мег с этим глюком, но ни одного официального документа на эту тему не попадалось…
Давным-давно у Атмела был такой AT90S2313, и для него:
AT90S2313 Rev. B/C Errata Sheet ( описание известных проблем ):
…
3. Reset During EEPROM Write
If reset is activated during EEPROM write, the result is not what should be expected. The EEPROM write cycle completes as normal, but the address registers reset to 0. The result is that both the address written and address 0 in the EEPROM can be corrupted.
Problem Fix/Workaround
Avoid using address 0 for storage, unless you can guarantee that you will not get a reset during EEPROM write.
По-русски: если EEPROM пишется и пришел сброс, то регистр адреса EEPROM будет сброшен в 0, и часть процесса записи ( до сброса ) будет в нужную ячейку, а часть ( после сброса ) - в 0-ю, в итоге обеим может поплохеть. И предлагается не хранить в 0-й ячейке ничего важного.
Но у этого процессора при сбросе обнулялся регистр адреса EEPROM, а потом для всех более новых ( включая меги ) это обнуление убрали. Хотя, например, при включении питания в этом регистре м.б. и 0 будет ( фирма не гарантирует, но все-таки… ), а если включение нечеткое ( плохой контакт и т.п. ) - процессор может взглючить и инициировать запись в EEPROM, и как раз в 0-ю ячейку.
Поэтому я на всякий случай после каждого чтения EEPROM ( и после записи, разумеется, дождавшись ее конца ) обнуляю регистр адреса. Понятно, это всего лишь уменьшает вероятность, но все-таки лишняя подпорка, которая м.б. когда-нибудь и удержит падающий забор ( или самолет ).
Хотя непонятно, почему они на период записи вообще аппаратно не блокируют запись в регистры EEPROM - наверняка это не сложно.
ОК, спасибо! Теперь понятно откуда ноги растут.
Все же надеюсь, что BOD справится со своей задачей и не даст МК творить что попало…
Вадим, тебе имеет резон срисовать схему тренер\ученик с твоей аппы. Там достаточно интересно все реализовано. Передатчик включается при подсоединении шнура, Выключатель питания продублирован ключем и аппа отключается не тогда, когда ты тумблером щелкнул, а когда проц закончит запись в епром и в “спячку” ляжет.
К томуж и детали у тебя все есть. 😃 Ничего покупать не придется.
2 Aleksey_Gorelikov, подскажите где посмотреть по какой схеме и как подключаетса выключатель питания, на дополнительном ключе!
ПС: ресую печатку под себя и хочу сразу добавить туда схему выключения!
Спасибо!
У меня при выключении портился EEPROM на первых порах, пока не включил boden. Причем портились случайные группы ячеек, вовсе не первые… И даже не в моменты записи… С тех пор как включил boden ни одного сбоя не замечал. Поэтому так и не дошли руки написать контроль целостности eeprom. Хотя конечно это надо бы на всякий сделать, работы минут на 10…
Ех, неумею я писать коды!
Поетому буду ждать и надеятса на Вас!
Спасибо!
Все же надеюсь, что BOD справится со своей задачей и не даст МК творить что попало…
Полусамодельная зарядка для аккумуляторов на ATmega32, коммерческая прошивка ( автор - Vadim Kushnir, aka Vad64 ), сделано прилично, так что, видимо, и все фьюзы записаны как надо. Недавно менял в ней индикатор, а у него габариты чуть больше, при завинчивании продавило изоляцию и входное питание замкнуло на землю ( с дребезгом, т.е. несколько раз ). В итоге - зарядка попросила перекалибровку, т.е., видимо, слетела EEPROM. После перекалибровки работает.
Хотя эксперимент не совсем чистый - я еще когда ее собирал, видимо, коротнул один из выводов порта куда-то, ему слегка поплохело, и м.б. не только ему, а еще чему-нибудь внутри процессора ( хотя вроде все работало ).
Да и, теоретически, при бросках питания может перекосоглючить что-то в самом аппаратном блоке, который запись EEPROM отрабатывает, и куда сигнал сброса по идее не подключен, т.к. запись в EEPROM продолжается и во время сброса.
Так что не знаю…
М.б. процессор от остального питания диодом отделять и емкость на X000 мкф вешать, чтобы не было резких бросков при любых включениях-выключениях ( в т.ч. при плохом контакте аккумуляторов и т.п. ), BOD срабатывал бы в комфортных условиях, и после его срабатывания - заряда емкости хватало бы еще и на окончание м.б. начатой записи в EEPROM. Ну и после сброса - в программе паузу ( 10 мс ? ) делать и потом еще проверять окончание записи в EEPROM до какой-либо работы с ее регистрами.
…Я своим киндерам сделал “бюджетатор” для контроля времени работы за компьютером. Дивайс определяет пользователя по таблетке Touch Memory (DS1990); пока таблетка в считывателе и если баланс положительный - разрешает включить блок питания компьютера и списывает время в балансе. Питается оно от дежурки компьютера, часики (DS1307) на бекапе CR2032.
Так вот, чтобы мое жулье не пыталось пороть остаток бюджета варварскими методами (выдергивая вилку компьютера из розетки) я внешний БОД (4,7В) повесил за входным фильтром, и отсюда же питается ЖКИ и прочая индикация. После этой точки идет шоттка, за ней - кондюк на 3000 мкф. И питается с этого кондюка один только контроллер. Внутренний БОД (4,2В) висит на питании контроллера. Сигнал с внешнего БОДа запускает внешнее прерывание. По этому прерыванию экстренно сохраняется EEPROM и запускается процедура выключения.
Пока не слетало…
Зачем EEPROM при наличии 1307 и CR2032 ? 😃
А где же на каждого бюджетируемого члена семьи хранить размер ежедневного бюджета, остаток бюджета “на сегодня”, штраф (за “аварийное” отключение компьютера), да и само понятие “сегодня”?
Можно было бы в таблетке, но у нашего домофона таблетки склеротичные (DS1990).