-ћузыка

Ќестандартные скорости 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 это позвол€ет). Ќо это уже больна€ фантази€.

–убрики:  этот удивительный мир вокруг нас

ћетки:  

”спеть сохранить в 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¬, которые даЄт родна€ эплова зар€дка. ѕосле этого случа€ € даже в компе не оставл€ю телефон дольше, чем нужно дл€ сброса фоток.

–убрики:  этот удивительный мир вокруг нас

ћетки:  

ѕрошлые

ƒневник

—уббота, 06 ћа€ 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 нет другого выхода.


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


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

–убрики:  этот удивительный мир вокруг нас

ћетки:  

Ќедосигнализаци€

ƒневник

¬торник, 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-наколеночный колхоз. “етрис бы ещЄ туда запилить, чисто разм€ть мозг. ј фикспрайз хорош тем, что отпускает такие интересные штуки порой, за которые западло платить больше, чем есть на поездку - моторчики, кучка белых светодиодов, герконовый датчик в корпусе и с магнитиком.
–убрики:  этот удивительный мир вокруг нас

ћетки:  

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

ƒневник

¬оскресенье, 02 јвгуста 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 говнищем, неспособным запустить винду.
¬ колонках играет - My last cameo
–убрики:  этот удивительный мир вокруг нас

ћетки:  

ѕаскуды...

ƒневник

—уббота, 06 ƒекабр€ 2014 г. 00:53 + в цитатник
Ќа волне борьбы с защитой от пиратства в сфере электроники (истори€ про чипы FTDI) € тут охуел мал€сь, столкнувшись вживую с подобным беспределом. —ухарик мен€ предупреждал, что PROTEUS (ISIS) начинает говнитьс€ рандомными ошибками в глубине откомпиленных бинарников и хер ты выловишь кос€к, но чтоб в —хЁ мен€ть всЄ Ч это уже верх наглости.
»так, кусок уже отлаженной схемы из четвЄртого примера усложнени€ схемотехники:
¬ерно сто€щие диоды
ЅерЄм, выдел€ем всЄ, жмЄм правый клик и Copy to clipboard (буквально, сука, по движени€м). ќткрываем какой-нить сложный проект, например, тот самый, куда € интегрировал кусок нужной схемы (и с превеликим трудом отыскал кос€к, перелопатив и софт тоже).
complex_project (700x559, 374Kb)
Ќа свободное место вставл€ем тот самый кусок, ничегошеньки не подозрева€:
pasting (700x533, 332Kb)
» тут еблысь, и все диоды аккуратненько перевЄрнуты машиной. —укины дети, просто.
sons_of_a_bitch (700x181, 111Kb)
ƒл€ тех, кто не в теме: диод така€ штука, котора€ пропускает ток только в одном направлении, следовательно, схема работать как_надо не будет просто потому что. »нтересно, чего ещЄ можно ожидать от затейников?
–убрики:  этот удивительный мир вокруг нас
доставл€ют)

ћетки:  

Ќа безрыбье и жопа соловей

ƒневник

„етверг, 04 ƒекабр€ 2014 г. 23:13 + в цитатник
ѕродолжаем ебатьс€ вприс€дку. “ак получилось, что дл€ доступа к внешней SRAM € использовал в двух Ђпроектахї регистры CD4094, что съедало 8 (шина) + 2 (DATA и CLOCK 4094) + 2 (OE и WE чипа SRAM) = 12 ног контролЄра , что давало на два сдвиговых регистра 16 бит, соответственно, адресацию пам€ти до 64  при применении двух чипов пам€ти по 32K и одиночного инвертора (дл€ более полного использовани€ инвертора инвертил также OE и WE). » даже платка работает, но вполовину :( Ќе хватило уже энтузиазма отлаживать вторую половину 64 Ѕайт. —хему приводить не буду ввиду не полной работоспособности и чтобы не сбивать читател€ с толку. „то мы имеем вытоге? 12 ног и минимум 16 тактов дл€ доступа к байту, что дл€ ATMega8 жирно очень. Ёто всЄ в корне неверно и дикие костыли ибо подобна€ производительность сильно расстраивает мен€.
AVR_external_SRAM по-науке
ѕо науке есть проверенна€ схема, котора€ православно рекомендована даже производител€ми BASCOM и Atmel через защЄлку 74573, как у всех пор€дочных Ё¬ћ (8086) с мультиплицированной шиной адреса и пинами ALE (алЄ). ј что самое сладкое Ч у старших моделей атмег (ATMega64, 128) есть штатный интерфейс пам€ти, который по этой схеме и реализуетс€ чуть ли не двум€ строчками кода и размещением переменных в т.н. XRAM (external).
» да, € согласен использовать все ноги дл€ штатного интерфейса пам€ти (к тому же никто не мешает при ненужности доступа к SRAM их ещЄ и мультиплицировать на внешние микросхемы согласно даташиту, ну UART там и т.д.), но что делать, если под рукой нет защЄлки 74573? ¬от тут-то и € и присаживаюсь.
74573 из рассыпухи
ѕредлагаю вариант замены штатной защЄлки (котора€ даже в магазинах продаетс€, но ни разу не попадалась в руки из готовых девайсов) на защЄлку из рассыпухи D-триггеров 7474 и инверторов 7404. ѕросто у мен€ есть 7474 и даже ☭ 564“ћ2 в золотом корпусе. ѕока что схемка дл€ мигани€ светодиодами, однако добавив множественное »Ћ» и саму пам€ть (двухчиповую) по схеме от MCS Electronics, получим действительно 64  пам€ти по штатному интерфейсу.
 онечно, гигантска€ плата получаетс€, зато на безрыбье.
¬от тут мужики даже делают 512KB SRAM-шильды дл€ дуньки из двух микрух, однако там тоже вприс€дку: расширение шины адреса на +3 бита, банкирование пам€ти и т.д., а как только мы делаем банкирование (сегментирование 512  по 64 ), сразу же назревает вопрос об использовании встроенного механизма доступа от BASCOM, и лишние процедуры никак не в€жутс€ с философией €зыка BASIC, в который хочетс€ играть как ребЄнку в кубики, как в QuickBASIC, беспечно не следить за типизацией переменных и распределению пам€ти (ах счастливые мои 10 лет ).
Ќо однозначно, пригождаетс€ скилл делать сложное из простого, опуска€сь на уровень абстракции чуть глубже.
¬ колонках играет - –ыночные отношени€
–убрики:  здесь и сейчас
этот удивительный мир вокруг нас

ћетки:  

–одилась мысль найти оправдание

ƒневник

„етверг, 20 Ќо€бр€ 2014 г. 01:42 + в цитатник

тем sdelat_pizdato (70x379, 32Kb) схемотехническим решени€м, про которые прин€том говорить в моЄм контексте ЂЄбл€ вприс€дкуї. ¬ современном мире даже DIY, которое в совке было неотъемлемой частью жизни, становитс€ коммерческим, даже в исконно инженерных отрасл€х по€вл€ютс€ упрощалки жизни (а дл€ кого-то выгодное предпри€тие), да вплоть до визуального программировани€. Ќемудрено что некоторые уЄбки дожили (удивительно) почти до 30 и не умеют па€ть, а электролиты выпаивают открытым огнЄм турбозажигалки. Ќу так вот, сегодн€шний разговор относитс€ вовсе не к моей нелюбви к макеткам и иным ардуинам как готовому решению, а скорее к подходу. Ёкономически целесообразнее в больших парти€х стремитьс€ к кнопке Ђсделать заебисьї, уменьшить геморрой и затраты, и делать девайсы как можно проще и неремонтопригоднее дл€ ускорени€ жизненного цикла получени€ сверхприбылей ради. ¬ DIY на первом месте стоит отсатисфачивание собственного самолюби€, это помимо получени€ бесценного опыта, а также кайфа от процесса. Ќу и конечно, чтобы результат полностью изводил недостатки существующих на рынке дешЄвых (по сравнению с DIY) решений, и оп€ть же Ѕќ√ ¬ ƒ≈“јЋя’.



≈сли по делу конкретно в схемотехнике: в конторе естественно пытаетс€ господствовать подход экономических оправдашек, посему дл€ реализации какого-либо устройства выбираетс€ наиболее подход€ща€ аппаратна€ платформа, т.е. помимо части €дра (чаще всего аналогова€ обв€зка + ѕЋ»— и что-нибудь специфическое, типа излучател€ психотронного оружи€ или концентратора эктоплазмы дл€ машины времени ). ѕо своей части работки над девайсом мне куда важнее юзабилити и экстерьер, Ђкак лежит в рукеї и иные попискивани€ при нажати€х, а также наличие на цифровой клавиатуре на цифре 5 пипок дл€ почитателей Ѕрайл€ (зацепки на клавишах F, J и 5). » здесь схемотехнически примен€етс€ чаще всего проверенное решение Ч отдельна€ цифрова€ плата с обв€зкой (как-то контроллЄр/процессор), котора€ св€зываетс€ по какому-либо интерфейсу SPI/I2C/UART с €дром. ѕроцессор в свою очередь управл€ет этими всеми клавиатурами, диспле€ми и иными звуковыми пищалками, вибросигналами и USB, зар€дками и иными погремушками, которые в последнее врем€ не удостаиваютс€ должного внимани€ со стороны схемотехников. Ќо это всЄ промышленное примененье. ¬ DIY мой синдром ебли вприс€дку даже классифицирован и удостоен люркиной цитаты: Ђ» похуй, что изделие габаритное и жрет сотни ампер тока. «ато схема сложна€, а следовательно „—¬ Ч на высотеї. —уть Ч дл€ всего и вс€ теперь €кобы хватает одного процессора с интегрированной периферией, что расстраивает, ибо в DIY-доступности чаще всего наход€тс€ микроконтроллЄры без нативных usb, радиомодемов и как правило с малым объЄмом флеш-пам€ти под код, что тратить драгоценные байты и циклы кажетс€ просто немыслимым. ќтсюда рождаетс€ иде€ уменьшить вли€ние софта в тех част€х схемы, где можно реально обойтись аппартной реализацией, ведь за полсотни лет с момента изобретени€ полупроводников была придумана тьма решений.




—амый простой и пожалуй банальный пример є1 Ч тактовые кнопки и их дребезг.  то хоть раз сталкивалс€ с этим поймЄт, насколь это поганое €вление, случись оно в мышке (колЄсико) или ином устройстве ввода.  ак вообще ввод€тс€ данные в ћ ? ЅерЄм кнопку, одним концом к минусу, другим подт€гиваем к питанию резистором, и этим же концом приводим в микроконтроллЄр. ѕросто? ѕроще некуда. —офтом же начинаем отлавливать нажатие, ставим цикл (как € делал в 14 лет на QBASIC отлавлива€ мышиные нажати€), в котором провер€ем по€вление нул€ на ножке.
ƒрагоценные байты, проверка состо€ни€, выставление задержки Ч это ли не софтовый путь? —пасает от дребезга проверка кнопки раз в 50мс, скорость реакции человека. Ќо мы же не любим лЄгкий путь, ищем пути подавлени€ дребезга аппаратным путЄм: здесь на рисунке 258 б) представлен прекрасно работающий (проверенный на 176 серии счЄтчиков) аппаратный дребезгодав. — его помощью удаЄтс€ избавитьс€ от миллисекунд задержки при проверке состо€ни€ кнопки, но как уйти от цикла? ѕросто использовать дл€ кнопки ножку с внешним прерыванием, т.о. мы при нажатии кнопки возбуждаем прерывание в контроллЄре и уже в подпрограмме отрабатываем нужную реакцию софтом. Ќикаких проверок и циклов, вуал€. Ќужно подключить много кнопок? “огда дл€ каждой рисуем дребезгодав, выходные линии раздваиваем так, чтобы они прилетали кажда€ в свою ножку, а вторые концы заводим в »Ћ» (»Ћ»-Ќ≈) с множеством входов, например, 74133, или в каскадированную микросхему »Ћ» (7402), они сто€т килограмм за п€так, ну а дл€ самых нищебродов существует монтажное »Ћ» на диодах. Ћогика софта будет такой, что проверка и вы€снение звен€щей ножки (кнопки) будет инициироватьс€ только по срабатыванию прерывани€.
«десь можно найти первый плюс этого подхода Ч пара Ђлишнихї элементов повышает „—¬ автора, усложн€ет —хЁ, а реально убирает посто€нную проверку состо€ний кнопок, предоставл€€ кучу свободных циклов дл€ более нужных задач, например, генераци€ звука нужной частоты идЄт без регул€рных проглатываний из-за отвлечени€ процессора.




¬тора€ находка, которую довольно долго искал Ч энкодер/валкодер и обработка. ¬се люб€т приводить в пример простое подключение к контроллЄру энкодера через подт€жку и давлю дребезга конденсаторами на землю.

Ќе уверен, что работает с низкокачественными энкодерами, но если и работает, к чему нас об€зывает подобна€ схема?   циклу, временным задержкам и т.д., а ещЄ анализу запаздывани€ импульсов на второй ножке относительно первой. ’уйн€ же. » вот дл€ усложнени€ схемы и упрощени€ кода была наконец найдено аппаратное решение, которое работало вживую (на дорогущей 564Ћј7 в золотом корпусе):
энкодер2 (647x347, 36Kb)
— помощью магии простой логики на элементах »-Ќ≈ можно эти запоздашки конвертировать в двуногий интерфейс, в котором на одной ноге шаги, на другой направление. —амое то чтобы завести шаги на... прерывание (куда же ещЄ) и провер€ть направление по какой-нибудь другой ноге лишь в подпрограмме обработки прерывани€.  стати, этот интерфейс напр€мую можно подключить к следующему примеру (интрига).




“ретье. ”правление унипол€рным шаговым двигателем. ѕосколь увлечени€ должны быть бесплатными, вместо сервоприводов € юзаю унипол€рные Ўƒ из дисководов, которые зачастую имеют 5 или 6 пинов (на 4 пина - бипол€рные), два или один из которых общий, остальные 4 Ч обмотки. „тобы двигатель двигалс€, в простом варианте нужно последовательно подавать на каждую из обмоток напругу (12¬), в ту или иную сторону будет происходить 4 смены состо€ни€ и вращение. „то придумали ардуинщики? —пецдрайвер в кожухе по размеру шильда, с конфигуратором и т.д., использующий всего две ноги Ч направление и шаг (STEP/DIR). ¬нимательному читателю должно напомнить предыдущий пример, где использовались выходы с аналогичными функци€ми, их можно соедин€ть напр€мую, и получим на выходе без микроконтроллЄра крутилку, котора€ будет синхронно вращать моторчик, отзыва€сь на наше вращение ручки. Ќо это всЄ покупные варианты, дл€ простоты же зачастую используетс€ схема управлени€ Ўƒ напр€мую, через силовые ключи. «десь параллельный порт смело замен€ем на ноги контроллЄра (диоды нужны ибо нагрузка индуктивна€).
image001 (337x226, 12Kb)
≈сть также замечательна€ микросхема ULN2003, сборка из 7 транзисторов ƒарлингтона с защитными диодами как раз под индуктивную нагрузку, выдерживают напругу до 50¬, так что питать можно хоть от ноутбучного Ѕѕ, т.е. сам по себе непосредственно драйвер.
stepmotor2 (422x298, 4Kb)
» если бы € заказал еЄ годом ранее, мне не пришлось бы сочин€ть драйвер дл€ портального станка с подключением к LPT из трЄх (!) плат 5,25" дисководов. ¬от этот бессмысленный бутерброд из трЄх дисководов ради контроллЄра STEP/DIR в каждом. ¬сЄ обусловливаетс€ количеством выходных пинов на LPT, которых не хватает чтобы обслуживать 12 обмоток на трЄх двигател€х, поэтому STEP/DIR необходим.
IMG_7121 (640x480, 316Kb)
“ак, step/dir функционально конвертирует два входа в четыре выхода, и дл€ Ўƒ вещь просто необходима€, из минусов могу отметить только отсутствие знани€ со стороны контроллЄра о том, кака€ именно обмотка в данный момент активна, но оно редко нужно, если только у нас нет желани€ делать что-то, что при сбросе питани€ будет восстанавливать движените ровно с того же места, без возвата в нуль (~станок, который выключили, восстановит работу с того же места, если предварительно Ђзапомнилї обмотку котора€ была активна). ≈щЄ управление самими обмотками бывает полезно, если мы хотим хаотично их переключать и не добиватьс€ движени€, что бессмысленно =)
Ѕудем значит запиливать Ђконтроллер STEP/DIRї на логике и драйвере.
step-dir (700x373, 80Kb)
Ћогика работы такова, что сигналы STEP/DIR завод€тс€ на ноги счЄтчика 561»≈11 (–≈¬≈–—, —„®“), из него выходит 4-х битный код (0...15), который идЄт на дешифратор 74141 ( 561»ƒ1, до 10 выходов дл€ цифр газоразр€дных индикаторов), затем с помощью инвертора 7406 сигналы обращаютс€ дл€ подачи на входы драйвера ULN2003. ¬с€ соль в том, что от счЄтчика »≈11 на 74141 приходит всего два проводника (0...3), и дальше не считает, т.е. при импульсах —„®“ (STEP) мы последние два бита числа мен€ем в ту или иную сторону, не гл€д€ на старшие два бита, следовательно, нет разницы, находитс€ в регистрах »≈11 число 0 (0000) или 4 (0100) или 8 (1000) или 12 (1100), главное что меж них мен€етс€ права€ часть бинарника, и следом за ним 74141 переключает 0...1...2...3 и в обратную сторону (–≈¬≈–—). »нвертирование 7406 важно чтобы напруга была только на одной из обмоток, а не на других трЄх.
ѕолучивша€с€ платка
¬от тебе очередна€ экономи€ кода, использовать аппаратный счЄтчик вместо переменной и двух ног вместо четырЄх. Ќа базе этого счЄтчика и на волне заделывани€ периферии € решил заделать мультипрограмматор, удобства ради чтобы не переставл€ть Ђ4 проводкаї в каждый чип, а чтобы они штатно висели на шлейфе и € бы лишь кнопочкой последовательно переключал выходы с подсказкой на индикаторе.
IMG_7426 (640x460, 140Kb)
IMG_7425 (640x431, 241Kb)
multi_prog (700x483, 127Kb)
ƒа ещЄ и добавив 74244 или 74245 на вход € получил буфер сигналов, который выравнивает заваленные фронты, упавшие на длине LPT-кабел€ к компу. —чЄтчик »≈11 по предыдущей логике переключает выходы 74141, на которые зав€заны твердотельные реле, включающие линии MOSI/MISO/SCK/RESET из каждого чипа во входную линию. ѕока п€ти выходов хватает за глаза, но дл€ расширени€ € добавил разъЄм, в который можно запихнуть ещЄ плату-расширитель с 5 выходами. “акже на плате есть триггер, который по кнопке отключает 74245 ввиду мало ли, из некоторых девайсов нужно вынимать программатор чтобы он работал.  стати, три кнопки, все зав€заны по схеме с конденсатором, описанной в первом примере, дребезг довольно редко проскакивает. P.S.  ажетс€, всЄ это дело можно было проще запилить на мультиплексорах, а не реле, но исходим из того, что есть в наличии :).



„етвертый пример. —хема ещЄ не реализована в железе, однако основна€ мысль уже прогл€дываетс€. ÷ель Ч считывать 3 байта из аппаратных переключателей. Ќу, прикиньте, 24 ноги контроллЄра, которые используютс€ 1 раз во всей работе, при инициализации например. Ќерационально и глупо, надо выдумывать что-то вроде:
считывалка джамперов через 3 провода (700x406, 117Kb)
ƒл€ задани€ одного из 16,5 млн состо€ний (можно зашифровать всЄ, что угодно), удобно использовать DIP-переключатели. ƒумаю, любую конфигурацию можно уложить в эти 24 бита, хоть ключ шифровани€!
dipsw24 (300x300, 11Kb)
Ћогика схемы следующа€: код программы увеличиваетс€, но количество ног контроллЄра всего 3, одна на вход, две это DATA/CLOCK задающего сдвигового регистра (4094). »з регистра биты идут в адресную шину мультиплексоров 74153 (3 шт.), на входах которых и установлены DIP-переключатели с кучей подт€жек. —пецифика такова, что 8 бит хватает на 3 мультиплексора, и каждые два лишних бита (каскадирование 4094) даст ещЄ один байт, если не усложн€ть схему дешифратором. “ут всЄ по-простому, адресна€ шина дл€ 74153 это ј и Ѕ (2 бита, выборка из четырЄх входов) а поскель каждый мультиплексор сдвоенный, есть ещЄ два пина (1E, 2E) можно выбирать, какой из пары будет включен (поскольку они все выход€т в один провод, это важно). “.е. 4 бита на 8 входов это много, но чтобы не усложн€ть, пусть пока будет так :). ¬ коде нужно сделать 24 прохода забивки в регистр 8-битного адреса в специфичном формате (ј,Ѕ,1≈,2≈,3≈,4≈,5≈,6≈) и на каждом проходе считывать провер€ть входную ногу.
“акую схемку, если вместо DIPsw поставить бинарные датчики (открыти€ двери, оптроны, герконы - да что угодно), и подумать над падени€ми напр€жений на рассто€ни€х проводов (5¬ далеко не ходит), можно использовать как сигналку, каждые 50...500мс сканировать и логгировать событи€.


Ќо как-то € полез уже в другую сторону Ч экономию ног и использование имеющейс€ элементной базы, сн€той со старых девайсов, а тут фантази€ безгранична. ѕосему дл€ первого просветительского поста хватит нагл€дности. Ётот пост лишь демонстраци€ полезности простой логики и аппаратных решений в угоду чему-либо, € же не подталкиваю использовать Z80 или 8085 с ”‘ ѕ«” вместо микроконтроллЄров, или генерировать VGA-сигнал на простой логике (¬идеокарта мазохиста, 32 микросхемы) только из-за роста сложности схемы.

–убрики:  здесь и сейчас
этот удивительный мир вокруг нас

ћетки:  

ѕервое полезное применение

ƒневник

¬торник, 18 Ќо€бр€ 2014 г. 02:03 + в цитатник
годового опыта погружени€ в среду риэл технарей. я сделал внутренний блок видеодомофона.
ƒомофон
¬» »Ќ√. Ўильдик от промышленной мебели, люблю € это дело Ч шильды клеить:)
—обстна, зачем так? ƒа хот€ бы чтобы потренироватьс€ не-на-кошечках, а на реальном применении того вороха железа, который лежит у мну в кабинете. ƒаже несмотр€ на то, что на авито любой старый и не старый Commax стоит в районе тыщи двух рублей. »з недоделанного, но ввиду скорейшего желани€ наконец прилепить его, можно отметить уже зал€панный корпус, а также не работающий аудиоканал ввиду отсутстви€ у автора достойного опыта аналогового радиолюбительства в детстве.

ƒалее следует глубоко задротска€ тема и схема, полна€ л€пов и несовершенств, одним словом забиваем гвозди микроскопом. ѕри большом желании кому нужно тот разберЄтс€. —оединение по четырЄхпроводному интерфейсу с панелькой ћ¬ -325, аудио-видео-земл€-питание, которые и контролируютс€ домовым блоком.

 ос€к по аудиоканалу кроетс€ в моей доверчивости к усилителю микрофона на TDA7050, где € конечно же не учЄл, что достойное усиление достигаетс€ только совокупное, но никак не одной микросхемой и на динамик и микрофон. Ќо это поправимо со временем, надо пару ночей над макеткой поколдовать, а пока пущай молчит. “акже не получилось тактировать от кварца 128  √ц чтобы уменьшить жор из-за того, что не предусмотрел емкостей (исправимо) на лини€х XTAL.
«десь atmega8 даже излишн€, хватило бы attiny2313, и ног хватило бы, однако у мну в запасе была только мега 8L.  онтроллер, простыми словами, моргает светодиодами и щЄлкает релюхами в зависимости от нажатых кнопок и соблюдает все эти событи€ по таймеру. –елюхи отвечают за питание матрицы, включение аудиоканала, звон звонка на 220¬ (привычка - втора€ натура), а также (если уж быть фриказойдом, то до конца) Ч при нажатии кнопки за панельке вместо нежной мелодии звон€щий услышит оглушительный Gummibär из детской игрушки, при этом камера включитс€, и € буду иметь счастье наблюдать шок и подпрыгивание звон€щего от неожиданности и охуевани€ ѕри этом € услышу лишь привычный звонок.
ќтладка
¬есь перформанс будет длитьс€ минуту, а также если € внезапно забуду выключить камеру после Ђразговораї, то домофон перейдЄт в режим ожидани€ через столько же времени. ¬сЄ сделано не только с целью ненасили€ над камерой (посто€нное питание), но также в сложности обработки кнопки звонка, вот € и решил св€ть это устройство.
“акже, поскель соседи заинтересовались, € также решил поделитьс€ с ними видеоканалом, но с их питанием, ибо энергоресурс и умелое управление им. ƒл€ оного € сделаю коробочки, в которых будут отдельные Ѕѕ с выключателем, релюхой, отключающей видеоканал от телевизоров Ђабонентовї (сигнал тухнет если посто€нно его держать подключЄнным), а также таймером на NE555, который больше минуты смотреть не даст ввиду людской забывчивости.
 оммутатор на 4 абонента
≈бакваки скажут - а почему бы не питать посто€нно и не поиметь с этого профит, собира€ абонентскую плату? ƒа если бы суперантивандальна€ кнопка звонка была бы отдельными лини€ми, просто подвЄл бы к ней звонок и дело с концом. Ќо когда даЄтс€ питание на камеру, кнопку звонка сложнее отследить (аудио замыкаетс€ на землю через 100 ќм). ѕосему дл€ моего устройства в режиме ожидани€ нужно давать малую напругу на аудиолинию и следить за еЄ падением в ноль без подачи питани€ на камеру.  огда же абстрактный сосед будет посто€нно подавать питание на камеру, уже не отследишь и кнопка тер€ет функционал. ѕоэтому пришлось усложнить алгоритм стороннего использовани€ камеры: пользователю звон€т в его дверь, он включает телевизор, переключает на RCA-видеовход, щЄлкает выключателем на моей коробке, и вуал€ Ч минуту можно смотреть. «атем чтобы он, выключив телевизор, не забыл сн€ть питание с камеры (чтобы мне доходили звонки), таймер будет отключать линии питани€ и видео от камеры, и зажигать противный красный сверх€ркий диод, кагбэ говор€щий Ђвыключи мен€ї, при этом камера уже не питаетс€. ѕри этом € тоже не в обиде Ч когда на камеру прилетело питание со стороны, оно также полетит и мне на матрицу, и € смогу лицезреть происход€щее за дверью даже если принесло кого-то не ко мне (без звонка, естественно, просто экран включитс€, своеобразна€ консьержка). ¬от такие дела. Ќу и ещЄ один аспект, почему всЄ так сложно Ч € по уходе из дома выключаю свет и розетки и физически не могу питать камеру
–убрики:  здесь и сейчас

ћетки:  

 —траницы: [1]