Случайны выбор дневника Раскрыть/свернуть полный список возможностей


Найдено 96 сообщений
Cообщения с меткой

atmega - Самое интересное в блогах

Следующие 30  »
SoXiE

Нестандартные скорости UART MSCOMM32

Воскресенье, 18 Июня 2017 г. 17:06 (ссылка)

Удалось связаться с AVR по UART через MSCOMM32.OCX на скорости 250000 бод. Частота кварца избыточная - 16 МГц. Действительно и для Arduino. Как? Подсказка на VBForums, используем Win32 API SetCommState и GetCommState из Kernel32. Немного костылей в выборе менюшки скоростей, т.е. для галочки открываем порт на допустимой стандартной скорости 115200, а затем уже задаём любую, вплоть до 2МБит.


AVR software uart 250000 baud (452x115, 5Kb)
MSComm 250000baud (206x172, 13Kb)

Сразу оговорюсь, что UART со стороны AVR программный, поэтому скорость такая низкая. Схемотехнически у меня программный RX/TX висит на свободных ногах ATMega328P, потому как аппаратный занят шиной данных с NAND флешкой.



Итак, управляющая программа на VB6 использует компонент MSComm и разрешает из коробки подключаться только на следующих скоростях (бит/с, бод): 110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200, 128000, 256000. Успехом увенчалась попытка подключения на 128000, а 256000 уже не приводила к желанному результату увидеть ответ устройства по UART. Возможно, дело в том, что если для аппаратного приёмопередатчика UART можно запросто подобрать скорость UART в зависимоти от частоты задающего генератора, то для программного, который зависит от кучи прерываний и лагов обработчика, высокие частоты упираются уже не в последнюю милю кабеля и разводку с экранировкой, а в специфику работы программного UART. Боюсь предположить, но аппаратный UART на AVR в теории может давать бодрейт до 2 МБит/с, т.е. 2000000. Разумеется, со стороны компьютера я ловлю его не через родной COM-порт материнки, а через преобразователь CH340G, который стоит в каждой ардуине, и его предел аппаратных возможностей с подобающей обвязкой по даташиту заканчивается как раз таки на 2 Mbps. Это ограничение уже упирается в физическую реализацию последней мили - длину проводов USB, разводку на плате, конденсаторы и качество кабеля.



Что я получил на скоростях 250 КБит/с? Чтение блока с флешки (135168 байт) за 6,16 секунд. Запись, правда, до сих пор ограничивается скоростью в 135168 байт за 35,9 сек, что обусловлено моей осторожностью и программными задержками при записи в NAND flash. Однако мой любимый дисплейчик ❤️️ LCD 160x128 16 битного цвета заполняется из флешки полностью картинкой за 215 мс, то есть можно глядеть кино с FPS ~5 кадров/сек., что я считаю пределом для 16 МГц, софтварном SPI через дрыганье ногами и попутном чтении с флешки, то смею предположить, что видеобуфер (ОЗУ дисплея) составляет 40 960 байт, и по UART напрямую при скорости 250 КБит заполнится за 2 секунды. Всё равно медленно, чтение флешки размером в 1 ГБ (NAND flash K9K8G08U0M-PIB0) займёт 14 часов.


Однако команда CLS, оформленная AVR-ASM просто дёрганьем CLK дисплея при постоянной единице на шине DATA очищает 160х128 за 0,105 сек, то есть за 105 мс., что как бы намекает на непредельность скорости. То есть используя полупрограммный-полуаппаратный SPI из-за того, что 9-й бит приходится дёргать вручную, остальные 8 будет слать аппаратный SPI, при быстром ОЗУ контроллера я бы смог добиться скорости вывода одного экрана (не пустого) за 105 мс при скорости UART в 1,5...2 МБит. Без промежуточной флешки, а картинку бы формировал на стороне компьютера. Тогда и кино в 10 FPS можно было бы крутить.


AVR Parallel output for Nokia 1616 LCD (700x451, 108Kb)

А самым забавным решением было бы применение внешнего аппаратного SPI, который из параллельной шины делает последовательную, и клок дёргать вручную. Однако это то же самое, что и полупрограммный SPI, потому как совсем блокируется возможность передавать данные в обратную сторону от дисплея (читать ОЗУ дисплея, SPFD54124B это позволяет). Но это уже больная фантазия.

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
SoXiE

Успеть сохранить в EEPROM при сбросе питания

Воскресенье, 04 Июня 2017 г. 23:56 (ссылка)

Дело и предыстория такая: решил я таки перебрать счётчик Микрон СЭО-1.10.1 на базе AD7755 и прикрутить к нему цветастый TFT LCD дисплей, чтобы видеть как денежка утекает в пустоту🤑 и отражается на цене изделия, выскакивающего из-под станка.


Микрон СЭО-1.10.1 AD7755 и ATMega8 (700x525, 95Kb)

Поскольку станок потребляет множество разных напряжений по разным проводам, от +3,3В до +50В, единственным разумным решением считаю прикрутить счётчик на 220В переменного тока возле входа в розетку. По сути, у счётчика есть импульсный выход, который даже на колодку выведен, 2 клеммы, которые нормально разомкнуты, однако импульс инверсный, и размыкаются они только при прохождении импульса от AD7755. Таким образом, как и в проводной сигнализации, злоумышленник не сможет оборвать сигнальную цепь. Оборвав её, он обречёт вечно повисший импульс в нуле застрять в глубинах централизованной считалки в подвале, что сразу же будет обнаружено. Клемма безопасная - размыкание происходит через оптрон, поэтому я мог и не разбирать счётчик, а лишь подключиться к этим контактам. Но рука чесалась, и я встроил в корпус счётчика USB-зарядку с Aliexpress за 49₽, которая даёт +5В, достаточных для запитки моей платы микроконтроллера с цветным дисплеем.



Однако тем и хороша логика работы механического счётчика, что импульс дёргает катушку счётчика и передвигает колесо при каждом импульсе, при отключении питания «данные», показания уже сохранены физически. Электрически же мы можем держать их в ОЗУ до момента сброса питания, или записывать каждый импульс в EEPROM. Однако ресурс EEPROM сильно ограничен - лишь 100 000 циклов перезаписи. Если счётчик выдаёт 4000 импульсов на 1 кВт, то для одного байта EEPROM ресурс исчерпается за 25 кВт. Это меньше месячного потребления, а чтобы сохранять хотя бы годовые показания, нужен DWORD (32 бита, 4 байта). Но даже если устроить некоторый TRIM, как у SSD для ячеек EEPROM, распределять износ, всего объёма EEPROM (512 байт у ATMega8, по 4 байта на 1 показание) хватит лишь на ((512/4)*100 000)/4000=3 200 кВт⋅ч. Это лишь год и контроллер можно выпаивать и выбрасывать. Тут ещё умные мужики на хабрах пишут, что мол EEPROM внутри ATMega имеет не побайтную адресацию, а тоже WORD или DWORD -
тоже можно было бы учесть, чтоб не перезаписывать лишний раз, но это уже крохоборство будет .


Как сэкономить ресурс энергонезависимой памяти EEPROM при условии непредсказуемого пропадания питания? Чтобы не запоминать каждый импульс? Как не износить ресурс EEPROM AVR?


У устройств с батарейным питанием момент сохранения состояния реализован проще - опрос напряжения батареи/АКБ с помощью АЦП, и при падении до минималки 3,7В мы просто сохраняем и уходим в глухой сон, отключаем периферию, компараторы и не реагируем на внешние прерывания. При этом у схемы вполне хватает сил и энергии сохранить в EEPROM ещё вагон информации.


Но при непредсказуемом питании на помощь также придёт встроенный АЦП. Просто воспользуемся вредным советом отделить шину питания контроллера диодом от основной шины питания, которую через делитель (R1, R2) заведём на АЦП (PC0). Для демонстрации можно понавешать светодиодов на обе шины питания🎄.



Сохранить EEPROM при сбросе питания (640x323, 19Kb)

Итак, на всю схему приходит +5В от зарядки с Aliexpress, которая встроена в счётчик (и тоже учитывается), они же через делитель приходят на АЦП, а сам контроллер запитан чуть более низким напряжением +4,2В из-за падения на диоде. Ничего страшного. Я взял первый попавшийся диод 2Д106А, и он заработал. После диода ставим конские конденсаторы 2 шт. по 1000 мкФ, можно больше, однако смотрите, чтобы блок питания выдержал при пуске и потребление контроллера, и зарядку конденсаторов. Ну и конечно, не забываем об обвязке-фильтрах для АЦП (AVCC, AREF).


Что происходит при отключении питания 220В? Напруга пропадает до диода моментально (светодиод тухнет сразу же), потому что в Aliexpress USB-зарядке конденсаторов кот наплакал, а вот после диода напруга снижается постепенно в течение 1,5...2 секунд. Этого времени более, чем достаточно, чтобы АЦП понял, что напруга упала и быстро записать 4 байта в EEPROM. Разумеется, все вышеприведённые цифры и номиналы подобраны на глаз экспериментально, у меня до диода ещё стоит CH340G USB-UART, а будет ещё подсветка дисплея. Питание дисплея будет висеть на шине питания контроллера. Вообще по логике работы целесообразно диод ампера на полтора поставить, чтобы всё, что напрямую подключено к контроллеру отключалось вместе с ним и не происходило подпитки схемы через ножки портов, что может спалить AVR.


В данном решении нашёл единственный косяк: пока работаю без Watchdog'а🐶, возможно, он снимет проблему кратковременного пропадания питания, когда контроллер уже ушёл в сон, но на конденсаторах ещё остался заряд в +1...2В, и при возвращении питания (AC back, DC back) не происходит RESET, контроллер не тактируется благодаря оператору END. А также одна неприятная мастырка - пин RESET не равнозначен сбросу питания СхЭ.


А теперь немного кода на скорую руку (BASCOM-AVR):





Config Pind.6 = Input ' Пока без прерываний, опрашиваем импульсный вход в цикле
Config Adc = Single , Prescaler = 16 , Reference = Internal 'Референс внутренний
' для перестраховки
Dim Currentcounts As Dword , Checkcounts As Dword , Emptydword As Dword
Dim Megacounts As Byte
Dim Eepromaddress As Byte ' Даём 256 байт (64 метки) от &H00 до &HFF адрес в ЕЕПРОМе
Dim Voltage As Word 'Отлов показания АЦП, падения напруги

Emptydword = &HFFFFFFFF 'Не умеет писать константу в ЕЕПРОМ!!!!!11
' Показания счётчика будут измеряться 32 битами (DWORD) (по адресам а также байтом
' по адресу &H104, который является началом следующего разряда после DWORD. Типа
' продолжение разрядности Megacounts

Readeeprom Megacounts , &H104
If Megacounts = &HFF Then 'Первый запуск, в ЕПРОМе пусто
Megacounts = 0
Writeeeprom Megacounts , &H104
Elseif Megacounts = &HFE Then
Print "Counter locked!" ' Иди беги за новым счётчиком!
End
' Блокируем счётчик при 4 294 967 295 * 255 импульсах = 1 095 216 660 225, что в
' киловаттах 274 877 906. Хватит на десятилетия промышленного и столетия бытового
' использования.
End If
' Теперь технология выравнивания износа для EEPROM (TRIM :)
' Найти крайнее нулевое значение в еепроме
' Сюда б добавить проверку нынешнего и последнего значения в EEPROM, чтобы не писать
' в две ячейки одно и то же значение.
For Eepromaddress = 0 To &HFF Step 4
Readeeprom Currentcounts , Eepromaddress
If Currentcounts = &HFFFFFFFF Then
Eepromaddress = Eepromaddress - 4
Readeeprom Currentcounts , Eepromaddress
Eepromaddress = Eepromaddress + 4
Exit For 'Нашёлся крайняя пустая ячейка
End If
Next Eepromaddress
' Если крайний адрес был последним, счётчик Eepromaddress скинулся в &H00, значит
' можно засейвить показания в ОЗУ и вытереть весь EEPROM. Операция ДЛИТЕЛЬНАЯ!
If Eepromaddress = &H00 Then
If Currentcounts <> &HFFFFFFFF Then
Print "Erasing EEPROM..."
For Eepromaddress = 0 To &HFF Step 4
Writeeeprom Emptydword , Eepromaddress
Next Eepromaddress
End If
End If
Print "Null place:" ; Hex(eepromaddress) ' Отладочная строка, что мол писать будем сюда
Print "Previous counts:" ; Hex(megacounts) ; " " ; Hex(currentcounts) 'И то, что
' было считано из предыдущей ячейки

Start Adc 'Начинаем слушать и быть начеку пропадания питания
Do
Voltage = Getadc(0) ' Да, тупо проверка в цикле. Надо бы прерываниями, но впадлу
' без платы, на макетке
If Pind.6 = 0 Then 'Отлавливаем сам импульс
While Pind.6 = 0 : Wend 'Ждём конца импульса. Неправильно с точки зрения
' вмешательства злоумышленника на длине проводов в 5 см =)
If Currentcounts = &HFFFFFFFF Then 'Пока невнятно, при первом же включении
' разряд будет увеличен. Но никто не мешает насильственно при прошивке и первом
' запуске в ЕЕПРОМ &H00 прописать четыре нуля!
Incr Megacounts
Writeeeprom Megacounts , &H100
Currentcounts = 0
Else
Incr Currentcounts ' Одна четырёхтысячная киловатта израсходована: 0,25Вт
End If
Print Hex(megacounts) ; " " ; Currentcounts ' Пока print, но буду здесь процедуру
' вывода на дисплей всовывать при каждом импульсе. Или нет.
End If
If Voltage < 450 Then 'Алярм! Падение напруги! Магическое число 450
' экспериментальное. Чтоб не случалось ложных срабатываний при просадке -0,5В.
Stop Adc 'Отключаем всю периферию в т.ч. дисплей и т.д. и т.п.
Disable Interrupts ' Которых ЕЩЁ нет
Repeatwrite: ' А вот это тупой кусок кода! Запись с перепроверкой ЕЕПРОМа
Writeeeprom Currentcounts , Eepromaddress
Readeeprom Checkcounts , Eepromaddress
If Currentcounts <> Checkcounts Then Goto Repeatwrite 'Интересно, как я буду
' уверен в том, что содержимое ОЗУ Checkcounts и Currentcounts не повредила
' деменция ввиду падения напруги???
Print "Saved " ; Hex(currentcounts) ' Надпись, которую никто не увидит при
' отключённой подсветке дисплея. Лучше маложрущий светодиод поставить, который
' скажет об успешной записи.
End ' Останавливаем тактирование.
End If
Loop
End ' До сюда обработчик не доберётся никогда.



В заключение, раз уж речь зашла о питании. Я тут недавно попал на 6 т.₽. тупо из-за того, что маляха заряжала эйфон через зарядку для люмии ширпотреба на Android. Сказать, что был зол - ничего не сказать, ибо был без волшебной бaрбитуpы и эмоциональная реакция как в игре от третьего лица, уплощена🙃. Вроде бы все зарядки одинаковые, все Travel форм-фактора зарядки, но оригинал Apple зарядка почему-то стоит почти 1 т.₽. и весит грамм 50, а просто microUSB под любой ширпотреб можно купить за 49₽ на Aliexpress. При всём этом iPhone 4S оказался куда более всеядным - он с удовольствием кушал любое питание, а iPhone 7 Plus требователен к питанию и напряжению. Для индексации оставлю эту фразу, чтобы население не подтирало дупу инструкцией, где русским по белому написано использовать только оригинальные аксессуары Apple Inc. При использовании левой зарядки через два месяца у айфона вылетает контроллер заряда U2, BGA-микросхема, замена которой стоит вот эти 6 т.₽., причём стоит справедливо. Я заканючил, сгримасничал, поставил крестик на этой микре чтобы её именно заменили, а не просто прогрели или сделали реболлинг, с этим может справиться и К. на своей инфракрасной паяльной станции. И действительно, из ремонта вернули ту самую отпаянную помеченную крестом микросхему U2 в скотче. Короче, это такой индексируемый аттеншн: ‼️iPhone ломается при зарядке от Android.‼️ 🔴Не заряжайте Apple левыми зарядками🔴 Кстати, вскрытие зарядок показало, что мало того, что андройдова зарядка даёт безумные пульсации, так ещё и напряжение +5,5В (компьютерный USB тоже не хорош) вместо положенных +5В, которые даёт родная эплова зарядка. После этого случая я даже в компе не оставляю телефон дольше, чем нужно для сброса фоток.

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
SoXiE

Прошлые

Суббота, 07 Мая 2017 г. 03:42 (ссылка)

выхи посвятил очень насыщенной социалочке, так что эти дни хочется посвятить производству и задротству с паяльником, программатором и шпинделем. Поскольку я к электронным игрушкам подхожу довольно олдскульно - с программатором типа STK200 (пять проводков из LPT) и все Arduino-подобные упрощалки мне чужды, потому моя ардуина отладочная плата для AVR, NAND-флешки на 1ГБ и дисплея от Nokia 1616 LCD выглядит следующим образом:


PCB_LCD_Nokia_1616_NAND_FLASH (654x700, 233Kb)

Уже в заделе, чтобы можно было внедрить в 5.25" отсек компьютера и выводить на дисплей всяческую моддерскую ересь модными BITMAP-шрифтами (что там моддеры выводят? Температуры, загрузку ЦП, ОЗУ, ну то, что ни разу в жизни знать не полезно). Также есть две кнопки, у которых схема подключения настолько несовершенна, что лучше про них забыть. Они ввиду нехватки свободных пинов ATMega328 подключены параллельно к линиям #WE и ALE флешки. Для индексации, на плате есть:


• ATMega328 в DIP-исполнении
• MCP42010 - переменный резистор/потенциометр с SPI-управлением для регулировки яркости
• CH340G - мост USB-UART, который я искренне полюбил, однажды доставшись мне от одного конченного наркомана, я заказал ещё 25 штук и сую куда ни попади теперь.
• SAMSUNG K9K8G08U0B PIB0 - NAND-флеш память на 1ГБ, изъятая то ли из плеера, то ли откуда ещё.
• К142ЕН3Б - винрарный ☭ стабилизатор в золоте, на 3,3В для флешки.

Такая вот геттообразная ардуино отладочная плата. Она умеет общаться по программному SPI с дисплеем от Nokia 1616 (рекомендую всем паялам, в Art-GSM стоит копейки, лярвочка привезла 10 штук и я их распихиваю по устройствам), код вывода оптимизирован на ассемблер так, что инверсия бита порта CLK происходит в 1 такт, а значит заливка белым или чёрным экрана это не посылка двух байт на пиксел, а лишь ~16...20 тактов (+циклы с 8-битными счётчиками), что означает LCD CLS менее, чем за 400 мс при кварце 16 МГц. Плата также умеет выводить картинку прямо из UART (тот самый USB дисплей, но быстрее всего получается выводить картинку на LCD из флеш-памяти NAND. Заранее оптимизированная картинка о двух байтах на пиксел (RGB 5-6-5) залита постранично на флешку, остаётся только дёргать #RE (2 раз) и CLK (16 раз) и преобразовывать параллельную шину флешки в последовательную DATA дисплея. Никаких SD-карт! А также на этой плате можно вылизать методы низкоуровневого доступа к TSSOP-чипам памяти, алгоритмы шифрования, контрольные суммы и файловую систему для AVR.


И разумеется, после смены компа мне стало острейше не хватать LPT-порта на Winbond-чипе, не PCI-LPT, который с Win7x64 не то, что через InpOut, и DLPortIO плохо работает через CVAVR. Приходилось для заливки прошивки пользовать старую машину по RDP, а это лишний шум и геморрой. Вот тут бы и обратиться к идеологии прошивки по USB Arduino, только без дикой для белого человека Arduino IDE. А чтобы в нормальном таком ассемблероподобном BASCOM-AVR от MCS Electronics.


Написано много слов в интернетах, что BASCOM-AVR умеет программировать как через STK200, также как и через USB ASP (руки дойдут однажды:)), так и через их AVR USB-загрузчик MCS Bootloader. Но вот же в чём беда, что по схеме аппаратная UART пара RX-TX висит у меня на шине данных к NAND флешке, и общение ATMega с CH340G происходит через Software UART, а загрузчик для компактности написан под аппаратный UART. Ну, MCS приложили исходник загрузчика BootLoader_m328.bas, который нагуглить та ещё проблема.


Как выяснилось из чтения мануалов и форумов, загрузчик ни что иное, как кусок кода, который при использовании метауказаний компилятору $loader $loadersize размещается в конце области памяти контроллера по дальним адресам типа $3c00, $3800, $3f00, $3e00 (для ATMega328) и при помощи фьюзов BOOTRST, BOOTSZ0...BOOTSZ1 выставляется первичное действие контроллера (адрес прыжка) к этому загрузчику, который, например, ожидает по UART байт 123 или иной другой, чтобы начать запись прошивки, побайтно SPM-LPM командами принимая её из UART. Если же байт 123 или иной другой не приходит, прыгаем на адрес $0000, где по идее лежит основная программа. Размер основной программы, при наличии загрузчика в контроллере, ограничивается 30КБ, на 2КБ меньше.


Мой модифицированный загрузчик MCS для ATMega328 занял порядка 1024 слова (2 КБ), это много по меркам памяти контроллера, однако что поделать (жертвы), посему шить его надо по адресу $3c00, соответсвенно ему и выставляем фьюзы в CVAVR.


Бац, и ниxyя не работает. Ну, загрузчик прошивается в конец, даже работает, соединяется с BASCOM на скорости 115200, пишет отладочное приветствие "LDR", происходит запись принятой прошивки (основная программа на BASCOM-AVR или AVR-ASM, где метадирективой $loadersize=1024 указывается размер загрузчика, который не затереть бы...), прошивка стартует, выполняется цикл (общение по UART с прогой на ПК), но... Жмём RESET, и нет приветствия "LDR", что говорит о том, что загрузчик не запустился повторно с $3c00, а происходит запуск основного куска кода с $0000.


Фьюзы загрузчика в CVAVR, которые не влияют на результат по неведомым причинам

Проебшись 4 месяца набегами, перебрав все возможные комбинации фьюзов, таки наступил прогресс: сначала нажав кнопку Program All, зашил через CVAVR какие-то ещё ЗАПОВЕДНЫЕ БАЙТЫ, о которых в диалоговом окне ни слова, и загрузчик перестал шить SPM-ом вообще, и это были не LOCK-биты, а какая-то неведомая хepь. Хотя визуально всё оставалось на местах (зашитые фьюзы читались и чекбоксы ставились), это не был глюк CVAVR или битый чип Atmel. Просто фьюзы не зашивались, и на адресе $0000 были значения FFFF, которые пропускались как NOP контроллером и в итоге первый раз всегда запускался загрузчик, когда счётчик команд доходил до $3c00.


Корректные фьюзы в BASCOM-AVR

И только прочитав, что иногда PonyProg шьёт неверно фьюзы, я решил попробовать шить фьюзы не CVAVR, а STK200 BASCOM-AVR. И вуаля, вот оно счастье! CodeVision AVR тоже в помойку, как и PonyProg, за неправильные фьюзы! Надо выставлять в BASCOM-AVR следующие биты:


• Fusebit High DE 01:Bootsize 1024 words
• Fusebit F 0:Select BOOT vector

Ну, умный разберётся, дурак не полезет, короче из всех программаторов наибольшую верность заслуживает BASCOM-AVR.


Также была реализована следующая фича: любой Arduino просит жать RESET чтобы войти в загрузчик ручками, хотя люди с AVRProject пишут, что можно сигнал квитирования DTR (который COM-мыши пользовали для питания) подключить к ноге RESET контроллера, и перезагружать контроллер без участия кнопки. Проверено - RESET via DTR работает и штатно поддерживается MCS Bootloader / Programmer даже через мост CH340G.


Днём и ночью Nokia 1616 (640x621, 105Kb)

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


Из минусов прошивки по USB/UART:


- нет возможности шить фьюзы и локбиты, что ограничивает манипуляции с частотами и делителями частот, watchdog и т.д., но и нет возможности сделать контроллер кирпичём.


- вероятность сбоя ввиду бросков питания и наводок на линии UART повышаются. То есть случайность может передать "123" контроллеру, он войдёт в режим прошивки, а вместо байтов прошивки на ножку UART будет прилетать эфирный мусор, и контроллер зашьёт его. А вы думали, как так может быть, чтобы в телефонах и иных устройствах от падения слетает прошивка? Да очень просто: BGA-шарик перестаёт контачить или замыкается в 0 с дребезгом, что приводит устройство в неработоспосоность.




А теперь несколько мыслей около.


Раз уж AVR на гарвардской архитектуре, обладает малым объёмом ОЗУ, и приниципиально не хочет выполнять код, взятый из ОЗУ, а люди иссохшишь по свободе 8085 и Z80 изгаляются, вляпывая в эти немощные контроллеры интерпретатор бейсика TinyBasic и вообще Linux запускают, то почему бы свой вариант изврата не предложить?


Да, все эти интерпретаторы недоязыков это здорово, но сразу же встаёт вопрос аппаратной платформы, терминала, ввода-вывода, а это уже ограничение возможностей вплоть до превращения многоногого ATMega в интерпретатор ему-же-подобного ассемблера... GW-BASIC. Это не наш путь. Так вот, волшебная штука этот ваш SPM - LDM, самопрограммирование AVR открывает широчайшие возможности по кастомизации кода во флеше, разве что вместо ОЗУ будет использоваться ФЛЕШ (ага, с его ограниченным ресурсом в 10000 циклов перезаписи). Для начала рисуем ОС, операционку в виде менюшки с возможностью выбора программы для заливки. Эту ОС запихиваем во внешний SPI Flash (3...4 ноги), как BIOS, затем рисуем загрузчик размером в 1024 слова, который при включении контроллера сначала шьёт в контроллер программу менюшки из SPI Flash, а уже менюшка может обращаться куда угодно, в т.ч. и к внешней памяти, SD-карте, UART и т.д., откуда можно взять прошивку любой кастомной программы, тетрис и иные утилитки, и уже вот эта менюшка шьёт на своё место или даёт указание загрузчику через EEPROM или состоянием физического переключателя зашить не себя (менюшку), а вот эту кастомную прогу. Опять же, кастомный переключатель, отвечающий за то, чтобы в контроллере не поселилась навсегда игрушка вместо менюшки, должен быть аппаратным, как кнопка RESET на персональных компьютерах эпохи IBM PC XT, ибо из DIGGER и ALLEY CAT нет другого выхода.


А ещё загрузчиком можно реализовать ликвидацию как прошивки в контроллере для защиты от вскрытия устройства, так и самого устройства, подав питание через умножитель напряжения...


Да вообще полезная возможность.

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
SoXiE

Недосигнализация

Вторник, 17 Мая 2016 г. 21:43 (ссылка)

Me, the great, ^_^ proudly presents. Девайс чтобы следить за приходами уходами мадам лярвуазье. Молилась ли ты на ночь дыздымона. Во сколько ты говоришь молилась??
_MG_1892_post (514x700, 382Kb)
_MG_1909_post (498x700, 244Kb)
Такой подленький спецдевайс, как вневедомственная, не оповещающий о записи в лог события.
Так, а теперь для индексации. Сигналиазция на AVR, герконная сигнализация с записью, журнал открытия дверей с автономным питанием, управление через дисплей Nokia 1616 LCD SPFD54124B.
Суть - девайс на ATMega328, питается от 900мА аккумулятора (годного), заряжается от 5В USB, с компом не общается ибо незачем, опрашивает два герконовых датчика, работает порядка 18 часов от полного заряда, защита PIN-кодом от сброса журнала, перестановки времени. Управляется двумя кнопками, шрифт от чёрно-белых Nokia (исключительно фирменности ради), даже покрыт стеклом не по размеру от Nokia 8800 Arte =) Всё в корпусе Hammond, наружу разъём ODU Minisnap с пинаутом +5V, GND, DOOR1, DOOR2. И всего-то. Внутри Atmel, MAX1811 и... 142ЕН3Б!!!
Плата сигнализации (304x700, 150Kb)
реальность
Это вид без доработок=) Конечно же повсюду навесные резисторы и иные ёмкости. А еврей и скопидом во мне берёт верх, и даже уже не делаю отверстия для резюков напротык - ставлю как SMD лишь бы сверло не насиловать лишний раз)) Так-то совсем страх, зато если мне удастся схему воспроизвести в приемлемом виде, а не как в голове кашей, то считай я отработал несколько замечательных и нужных фишек в карманном приборостроении DIY.
Например, посторение менюшек и двукнопочная идеология управления устройством, заряд с помощью MAX1811 и контроль подачи питания, мониторинг уровня напруги аккумулятора с помощью АЦП, ускоренный вывод кастомных шрифтов на LCD Nokia по soft SPI, задание подсветки и питания дисплея через ключ. То есть по большей части платформенные фишки для экономии энергии, ибо на прошлых девайсах я регулировал аналоговые величины через MCP42010, а это лишняя микра с высокой вероятностью вылетания.
В схеме остались мистические моменты!!! Неясно, но работает и не жрёт, также есть промах конский - стабилизатор напруги 142ЕН3Б, куда интереснее было ставить 2989IM3.3, у него падение меньше, зато BODLEVEL из-за снижения после стабилизатора не даёт упасть напруге на АКБ ниже 3,9В, а поскольку мне приходится только лишь опрашивать датчики и дисплей и другого общения с микросхемами не предвиделось, согласование уровней не нужно, то я могу хоть на 1,8В работать. Мониторинг подачи питания и заряда батареи мне нужен не только чтобы значок рисовать, как подумали банальные и стереотипные читатели, а чтобы понять, что общий автомат 220В включили, и само собой, событие протоколируется. Ну а так получается, что 18 часов вполне хватает для отсутствия дома, в остальное время зарядка.
Такой вот полезный DIY-наколеночный колхоз. Тетрис бы ещё туда запилить, чисто размять мозг. А фикспрайз хорош тем, что отпускает такие интересные штуки порой, за которые западло платить больше, чем есть на поездку - моторчики, кучка белых светодиодов, герконовый датчик в корпусе и с магнитиком.

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Аноним

Среда, 01 Декабря 1970 г. 03:00 (ссылка)

Комментарии ()КомментироватьВ цитатник или сообщество
SoXiE

Отключатор программатора

Воскресенье, 03 Августа 2015 г. 01:07 (ссылка)

В предыдущем посте была дана схема дечарлиплексора, нынче реализовал в железе:
дечарлиплексор
3 шт. HEF4094, таймер 555 КР1006ВИ1 и волшебный счётчик К176ИЕ8.

Сегодня речь пойдёт о казалось бы банальной, но приятной схемке отключатора программатора ISP.
Когда прошиваем и отлаживаем ATMEL, используются в большинстве контроллеров пины SPI и reset, подключенные к LPT-порту ПК (не UART в ардуинах, не путать, только хардкор). То есть делается отдельный разъём 4...6 контактов в зависимости от реализации программатора "5 проводков". Но пины эти используются также аппаратным SPI, который подведён к другим устройствам, в моём случае к дисплею Nokia 1616 и переменному резистору MCP42010, и т.д., а непредсказуемые состояния пинов от компьютера мешают нормальному функционированию устройств.
Когда прошивалка CVAVR не запущена, весь порт LPT находится в состоянии логического нуля, в т.ч. RESET, что не даёт постоянно держать проводок воткнутым в устройство. То есть мало того, что по пинам идёт паразитное питание в отсутствие основного, так ещё и RESET в LOW не даёт запуститься устройству. Это бэд, что приходится постоянно после каждой итерации прошивки FLASH-а дёргать несчастный разъём.
Решение - использовать буферную микросхему 74245, но есть микросхема попроще 74125 (тоже выдернута с материнских 80286 плат) - управляемый однонаправленный буфер. Заводим в него пины RESET SCK MOSI в прямом направлении, а MISO в обратном, объёдиняем сигналы управления и думаем как управлять.
Управлять, конечно же, с кнопки.
И сигнализировать светодиодом двухцветным.
Схему рисовать лень, может, станет частью общей схемы:
scheme_isp_buffer (700x555, 227Kb)

Три разъёма - вход и выход ISP, а также общий - GND, питание, пин 1 кнопки, пин 2 кнопки - он же земля, а также красный и зелёный к диоду.
Инвертор КМ155ЛН2 (155ЛН2, он же 7404) используется наполовину и стоит ради обращения сигнала "можно программировать" и диодной индикации. В него заведен сигнал управления и размножен/развёрнут чтобы управлять базами транзисторов.
Кнопка заведена через аппаратный дребезгодав (см.записи ранее) - подтяжка к питанию и конденсатор на землю, к триггеру К176ТМ1, который нехитрым образом превращён в выключатель. В принципе, можно было использовать JK-триггер 74109, но хотелось чтобы всё кондово на DIP-ах =)
Да к тому же куда я ещё запихну микросхему, которой 40 лет в обед?))
Итого: при включении устройства его можно прошивать, горит красный диод, жмём удобнейшую кнопку на панели, включается зёленый диод и пины ISP отключаются от схемы. Вуаля. Можно также убрать один из каскадов инвертора, и будет по умолчанию нельзя прошивать ATMEL.

IMG_7609 (700x525, 149Kb) реализация отключатора программатора

Страсть к DIP-ам и железным корпусам логики, а не компактными плисинами и CPLD обоснована на люрке:

Бывает вариант наоборот — вместо одного микроконтроллера некоторые личности предпочитают платы огромного размера, с каким-нибудь древним микропроцессором вроде КР580ВМ80, набитые десятками простых логических микрух, в запущенных случаях 155-й серии в коричневой пластмассе или аналогичным совковым говном. И похуй, что изделие габаритное и жрет сотни ампер тока. Зато схема сложная, а следовательно ЧСВ — на высоте. Также это может быть симптомом поцреотизма. [...] Встречаются и совсем «интересные» личности, использующие IBM PC для мигания светодиодом или управлением светом сортира через эти ваши интернеты.


И да, раньше я считал сё, что не включает в себя x86 говнищем, неспособным запустить винду.
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
Аноним

Среда, 01 Декабря 1970 г. 03:00 (ссылка)

Комментарии ()КомментироватьВ цитатник или сообщество
Аноним

Среда, 01 Декабря 1970 г. 03:00 (ссылка)

Комментарии ()КомментироватьВ цитатник или сообщество
Аноним

Среда, 01 Декабря 1970 г. 03:00 (ссылка)

Комментарии ()КомментироватьВ цитатник или сообщество

Следующие 30  »

<atmega - Самое интересное в блогах

Страницы: [1] 2 3 ..
.. 10

LiveInternet.Ru Ссылки: на главную|почта|знакомства|одноклассники|фото|открытки|тесты|чат
О проекте: помощь|контакты|разместить рекламу|версия для pda