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


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

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

Следующие 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)КомментироватьВ цитатник или сообщество
SoftLabirint

Сборник книг по электронике и схемотехнике 12 книг + CD (2008-2017) » SoftLabirint.Ru: Скачать бесплатно и без регистрации - Самые Популярные Новости Интернета

Пятница, 09 Июня 2017 г. 23:07 (ссылка)
softlabirint.ru/book/26376-...-2017.html


Сборник книг по электронике и схемотехнике 12 книг + CD (2008-2017)

Сборник книг по электронике и схемотехнике.



Список книг:

Черномырдин А. Семь шагов в электронику (+ CD - 2013)

Белов А.В. Микроконтроллеры AVR. От азов программирования до создания практических устройств - 2016.PDF

Ванюшин М. Занимательная электроника и электротехника для начинающих и не только - 2016.PDF

Гаврилов С.А. - Схемотехника. Мастер-класс - 2016.PDF

Гапоненко С.В Акустические системы своими руками - 2013.PDF

Занимательная электроника и электротехника - 2017.pdf

Корякин-Черняк С.Л. - Справочник по цветовой кодовой маркировке и взаимозаменяемости компонентов - 2010.PDF

Основы силовой электроники .pdf

Ревич Ю. В. Занимательная электроника 2017.PDF

Торопкин М.В., Андреев Д.А. Ламповый усилитель своими руками. Элементная база ХХI века 2016.pdf

Шмаков С.Б. Практическая энциклопедия радиолюбителя - 2016.PDF

Шустов М.А. Схемотехника. 500 устройств на аналоговых микросхемах - 2013.PDF

Яковлев В. Шпионские и антишпионские штучки - 2015.PDF



Название: Сборник книг по электронике и схемотехнике 12 книг + CD

Авторы: Разные

Год: 2008-2017

Количество книг: 12

Язык: Русский

Формат: pdf+CD

Размер: 1,8 Gb



Скачать: Сборник книг по электронике и схемотехнике 12 книг + CD (2008-2017)



Скачать | Download | TurboBit.net

http://turbobit.net/act34r2kbv0o/Elektronika.part1.rar.html

http://turbobit.net/cs6dm979qu5h/Elektronika.part2.rar.html



Скачать | Download | HitFile.net

http://www.hitfile.net/CpoJbGk/Elektronika.part1.rar.html

http://www.hitfile.net/a0zl5Wz/Elektronika.part2.rar.html



Скачать | Download | Файлообменник.рф

http://файлообменник.рф/xs2ydknp6pbo/Elektronika.part1.rar.html

http://файлообменник.рф/uf0suetf4nvx/Elektronika.part2.rar.html



Скачать | Download | UniBytes.com

http://www.unibytes.com/6S.t8NfwXOoLqw-Us4P3UgBB/Elektronika.part1.rar.html

http://www.unibytes.com/xyWwML4oc88Lqw-Us4P3UgBB/Elektronika.part2.rar.html



Скачать | Download | DepFile.com

http://kyc.pm/m6ilwzC0u/Elektronika.part1.rar

http://kyc.pm/JFngaNugu/Elektronika.part2.rar



 





Не пропустите








 

Метки:   Комментарии (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

Как мне нравится

Пятница, 22 Апреля 2017 г. 03:51 (ссылка)

всё же по аккуратности монтаж серьёзной электроники прошлого. Редкие и крайне дорогие девайсы из любовно выточенного алюминия, МГТФ, наша элементная база - на вид так совсем конфетка. Нарвался на постик http://dimon-w.livejournal.com/190344.html Устрою-ка я мирное соревнование 2х политических систем. Гы-гы. про ГДРовский и СССРовский оптические энкодеры (датчики углового перемещения), ну красота же.



А вот вытащенный то ли из корейского ксерокса, то ли из плоттера, канувший в лету оптический энкодер на 1000 шагов. Вернее, прорезей. На диске порядка 30...40 мм в диаметре расположены 1000 тончайших прорезей и два диода с приёмниками. Всё это счастье одето в чёрный светонепроницаемый кожух и сидело на валу обычного двигателя постоянного тока.


Энкодер на 1000 шагов (525x700, 46Kb)

Но, кроме как электроэрозионной обработкой я не представляю, как сделать подобные микронные прорези. Лазер дорого, ибо каждый врез и прорезь (1000 шт.) стоит огого, несмотря на дешевизну резки контуров как таковой (для сравнения: выходная цена небольшой гнутой детали, контур которой был отфрезерован и вырезан на лазере имела отношение 650 к 252 р). Лазер сравним с ножницами, где каждый врез есть сквозной пробой материала, канцелярскими ножницами тоже бумага травмируется, если резать не с краю, а дальше по контуру уже легче идёт, подплавляя и закаляя край.



Зачем мне энкодеры? Я всё же хочу прикрутить их к станку на валы шаговых двигателей для контроля пропуска шагов. Поскольку KCam4 хоть и имеет интерфейс для входа данных о текущем местоположении (!), данный функционал нереализуем на одном LPT-порту, и весь функционал вынесен на плату MaxStepper. Плата, разумеется, продаётся Kellyware за североамериканскую валюту с доставкой из-за океана, и поэтому является товаром почти подсанкционным. Люди делают клоны на ATMega16, побайтово разбирая протокол общения, и всё ради буфера в 40 команд-фреймов, аппаратную круговую интерполяцию и отсутствие тормозов LPT-порта. Но реализации подобных клонов MaxStepper, увы, заслуживают глубокой переработки, поскольку не содержат самого нужного - интерфейса пульта и входов энкодеров, да и делает всяк кулик для своего ЧПУ, посему это не наш путь. Mach3 с доступом ко второму LPT решает проблему нехватки пинов, но это уж тем более не наш путь.


Пошукав по интернетам тему контроля фактических шагов ШД и запланированных, пришёл к неутешительному выводу, что кустари либо оставляют ШД «as is» без контроля шагов, либо ставят сервоприводы (что тоже не вариант) либо совсем уж ушлые схемотехники меряют ток на обмотках чтобы отловить холостые шаги. Некоторые предлагают использовать лазер и камеру от мышек, чтобы та сама анализировала напечатанную на принтере чёрно-белую картинку и вычисляла перемещения «мыши». Самое экстремальное решение, предложенное форумчанами заключалось в том, чтобы повесить на торец вала стрелку, а параллельно этому валу поставить ещё один шаговый двигатель попроще, тоже со стрелкой, который бы повторял шаги синхронно (электрически распараллелить) с основным. Итогом подсчёта погрешности и пропуска шагов должно составить отклонение стрелок друг от друга. Однако видимый результат увидим только в устойчивом положении остановленных двигателей, когда уже заготовка запорота.


Один из вариантов контроля шагов мне показался привлекательнее всего - оптический энкодер даёт на выходе 4 состояния (00-01-11-10) , которые с лёгкой руки готового схемотехнического решения на базе элементов ЛА7 превращаются в показания вида STEP-DIR. Которые можно легко сравнить с показаниями на входе реального STEP-DIR контроллера ШД. Причём сравнить можно и без умного контроллера, лишь счётчиками импульсов типа ИЕ11. А затем результаты подсчёта шагов сравнить чем-то вроде элементов AND или XOR, и при несовпадении хотя бы одного из битов жать кнопку E-Stop (опускать соответствующий контакт в землю). Ведь пропуск 1 шага хоть и нечувствителен, но при пропуске 200 шагов мы имеем 1 потерянный оборот ШД.


Первым минусом данной схемы является неясность с дребезгом схемы на ЛА7, временные диаграммы появления импульсов, а также предельная частота отлова импульсов счётчиком, ибо наказанием будет остановка двигателя и исполнения G-кода. Однако, непроверенная схема.


Вторым моментом является физическая реализация - на аликспрессе доступны энкодеры на 200 прорезей за 150 рублей, с диодами и приёмниками, но чтобы к этому прийти, надо погасить внутреннего еврея✡.


​ШД станка без редуктора имеет разрешение 1,8°/шаг, то есть полный оборот вала достигается 200 шагами. Энкодер на 200 прорезей кажется избыточным, поскольку выходных линий фотоприемника 2 (4 состояния), т.е. 200 прорезей в теории дают 800 состояний, разрешение растет в 4 раза. А ведь входной поток импульсов от датчиков энкодера нужно считать и соотносить с шагами аппаратно. Посему для загрубления избыточной точности можно воспользоваться для первого раза дисками энкодеров из шариковой мышки, которая как раз имеет диски с 50 прорезями.


Другое дело, что всё это полезное изобретение не будет иметь с KCam связи и будет служить либо кнопке аварийного останова, либо просто людине за станком, уж графическое представление пропущенных шагов с кнопочкой обнуления я приделаю на дисплее от Nokia 1616.




Незаметно для себя я также реализовал функционал поиска абсолютного нуля в софтине на VB6 за счёт перемещений по осям и отлавливания нажатий концевых датчиков по состоянию &H379 LPT-порта, ведь даже 3D-принтер это делает сам перед печатью каждой модели.

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

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

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

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

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

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

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

Полная схемотехника активного ККМ и зарядного устройства для ИБП 3 кВт

Воскресенье, 06 Марта 2016 г. 18:36 (ссылка)

Часть 1 Часть 2 Часть 3 Часть 4.1 Часть 4.2 Часть 5 Часть 6 Как обычно небольшая лирика… Товарищи! Те, кто берут и публикуют мои статьи, материалы и прочие ништяки — указывайте пожалуйста настоящего автора и первоисточник: R4ABI.ru Думаю все прекрасно

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

Следующие 30  »

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

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

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