-ћузыка

Ќестандартные скорости 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 нет другого выхода.


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


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

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

ћетки:  

 ак мне нравитс€

ƒневник

ѕ€тница, 21 јпрел€ 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-принтер это делает сам перед печатью каждой модели.

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

ћетки:  

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

ƒневник

¬оскресенье, 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
–убрики:  этот удивительный мир вокруг нас

ћетки:  

„арлиплексирование и борьба с ним

ƒневник

¬оскресенье, 19 »юл€ 2015 г. 03:21 + в цитатник
ѕродолжаем серию схемотехнических решений дл€ усложнени€ схемы. —егодн€ речь пойдЄт про чарлиплексинг, вернее про ƒ≈чарлиплексирование. ќно зачастую оправдано экономически, но мы же не железа экономии ради городим все эти усложнени€ =)
√ода два назад мне досталс€ древний ксерокс Canon, который корейский сосед (да да, тот самый, отпизженный шесть лет назад) таки попыталс€ выбросить. Ѕыл безжалостно разобран и добыта комплектуха, в т.ч. семисегментный индикатор без вн€тной маркировки, дл€ индикации количества копий и зажЄва бумаги. ѕрозвон показал, что схема с 6 выводами управл€ет 9 сегментами-светодиодами. Ќепор€док - традиционно схема "7+точка" управл€етс€ с общим анодом максимум 9...10 выводами, где кажда€ ножка отвечает за свой сегмент. «десь же дело было €вно нечисто - нужна нека€ комбинаци€ напруг на входе, вычлененна€ в картинку:
7seg —емисегментник из корейского ксерокса (480x480, 147Kb)
“о есть три ноги дл€ питани€ и три дл€ выхода. Ќесложным матаном было вы€снено, что количество комбинаций дл€ отображени€ доступных воображению символов (0...F) должно быть минимум три - и это динамическа€ индикаци€, одно из гадчайших €влений в моЄм понимании, ибо его невозможно зафиксировать единым моментом и сложнее отлаживать. “ак сзать, неизбежное зло, эконом€щее провода и комплектуху.
ћетод управлени€ до безобрази€ прост: подключаем к контроллеру все 6 ног (через резисторы 100...200 ќм) и по очереди в коде кидаем на порт 3 числа в виде &B00111000 (всЄ питание и все выходы, два бита незадействованы) - загораютс€ нужные сегменты и можно подбирать комбинации. Ќо это же цикл! Ёто же лишние такты! “о же самое можно реализовать, подключив ради экономии ног контроллера сдвиговый регистр 74595 или 4094, но здесь нужна будет производительность ћ , чтобы "прогон" битов оставалс€ незаметным глазу, а после выведени€ байта (одного из трЄх) вставл€ть искусственные задержки "дл€ глаза". ’уйн€ получаетс€, реб€та. ћы должны посто€нно следить за тем, что выводитс€ пользователю за счЄт таймера и прерывани€. «ачем так отча€нно расходовать ресурсы ћ , если вдруг нам понадобитс€ критична€ по времени выполнени€ операци€?
ѕоскольку есть комплектуха, котора€ без дела пылитс€, можно использовать еЄ как дл€ усложнени€ схемы, так и дл€ упрощени€ кода ћ  - чтобы don't care about обновление индикатора.
7seg_kor_scheme (700x617, 133Kb)
—обстна, схема.
ѕринцип действи€ - раз используетс€ три комбинации (18 бит) дл€ одного символа (сложный случай, цифра "1" требует меньше), то придЄтс€ использовать три регистра 4094. »збыточно, но на два незадействованных бита можно повесить двухцветный светодиод и баловатьс€ €ркостью. “ри регистра будут заливатьс€ последовательно через DATA/CLOCK комбинации вида &B00011111; &B00100111 ; &B00100111, которые будут последовательно с дикой частотой выводитьс€ на индикатор посредством сигнала OE каждого из регистров и единой шины Q0...Q5. ѕереключение OE хотел первоначально повесить на любимую пару 74141+7404 (плюс счЄтчик  176»≈11), однако, это оказалось проблематичнее, и € использовал счЄтчик со встроенным дешифратором на позиционный код  176»≈8. ¬едь мне совсем неважна последовательность показа комбинаций. «аводим ногу четвЄртой комбинации на ресет счЄтчика, дабы он не работал вхолостую и не делал мерцание, а затем, убедившись в работоспособности данного решени€ (подава€ ручной импульс на ножку CLK), попробовал собрать генератор на "универсальной" микросхеме-таймере NE555 ( –1006¬»1). ƒаже получилось. Ќа номиналы не стоит пристально смотреть - € умудрилс€ вместо C1 воткнуть стабилитрон, посему сейчас схема работает с дикой производительностью, но и жрЄт наверное немало. ¬ыходные импульсы генератора 555 заводим на вход счЄта »≈8, с дикой частотой переключа€ OE регистров 4094. ѕолучилось =)
IMG_7598 (700x525, 144Kb)
—хема реализована на макетке. —коро реализую в железе ибо макетка всЄ же должна быть свободна и доступна дл€ новых экспериментов.

ѕлюсы: не заморачиваемс€ с прерывани€ми и обновлением сегментника в коде ћ , лишь послать 3 байта/символ в регистры. ќсвобождаем целый порт.
ћинусы: аналогова€ составл€юща€ в виде генератора вносит (по моему скромному мнению) элемент ненадЄжности и зависимости от фаз луны в схему. ј в целом минус в трЄх байтах вместо одного. ј три байта - это три байта, а не DWORD. Ќу и немного взрыв мозга с разбивкой комбинаций.

P.S.  стати говор€, прошла€ схема с клавиатурой приросла ещЄ одним 74245, цепл€ющим клавиатурные пины к шине данных ћ , поэтому дл€ включени€ клавиатуры читаем лишь тот же двусторонний порт данных, включаемый отдельным пином (OE 74245). ƒа ещЄ и работает!
code:

Function Iskeypressed() As Byte '¬ѕќЋЌ≈ —≈Ѕ≈ рабоча€ тема с клавой!!!!!!!!!!!
Dim Initialkey As Byte
Dim I As Byte
Ddra = &B11111000 '3 на вход, остальные на выход
'—канкоды 24 клавиш:
'210 226 194 | 234 202 242
'212 228 196 | 236 204 244
'213 229 197 | 237 205 245
'209 225 193 | 233 201 241
For I = &HC0 To &HF0 Step 8 'ѕодаЄм задающие коды, пропуска€ 8 сканкодов между ними
Porta = I
Waitus 100 '—тыд. Ќа 16ћ√ц кварце сканирование упираетс€ в остаточные €влени€
Initialkey = Pina
If Initialkey > I Then
While Pina = Initialkey '∆дЄм отпускани€ клавиши
Wend
Iskeypressed = Initialkey
Exit Function
End If
Next I
Iskeypressed = 0
End Function


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

ћетки:  

—егодн€ оп€ть

ƒневник

ѕонедельник, 22 »юн€ 2015 г. 23:33 + в цитатник
(цитатка: ј чтобы ограждени€ не ставить, будем хоронить вз€вшись за руки!)

пост дл€ любителей ебанистических схемотехнических решений. Ќа этот раз надругаемс€ над традиционным и проверенным методом опроса матричной клавиатуры добавлением пары корпусов (микросхем) традиционной 74 серии (или 155, 555 или даже кмоп к176).
ƒостались мне две тастатуры от телефонных аппаратов по 12 кнопок кажда€, структура матрица 3х4, и как-то две их р€дом положив, увидел, что дл€ опроса нужно 4 общих + 3 + 3 = 10 пинов. Ёто ж, едрить твою, больше одного порта. Ќехорошо получаетс€. „Є делать?
ѕоскель в исходной задаче не стоит вопрос об одновременном нажатии, как в игровых контроллерах и джойстиках, мы пренебрегаем программной составл€ющей, внимательный читатель сам выберет себе вариант. я везде пытаюсь впихнуть свою обожаемую пару корпусов 74141 и 7404 ( 155»ƒ1 +  155ЋЌ1, или оп€ть же  ћќѕы 176»ƒ1+176ЋЌ1) потому что их в избытке.
step1 (700x331, 116Kb)
»так, перва€ итераци€ пришла из мысли Ђа чойто € буду перебирать выходы контроллером, если могу слать бинарный код?ї. —тавим на выход пару дешифратор + инвертор. ћинусов в части Ђдвунажати€ї нет, две клавиши одновременно - да спокойно, просто посмотреть диоды, в пам€ти держать матрицу и свер€ть с паттернами (код). ќсновна€ фишка в масштабируемости столбцов. »того - 7 пинов на 24 кнопки.
step2 (700x378, 142Kb)
¬тора€ итераци€ сразу же сливает возможность двойного нажати€, однако уже зачатки разума просыпаютс€ у клавиатуры. ќна высылает бинарный код в контроллер (см.светодиоды) с помощью говошифратора из двух диодов и подт€жек к нулю. —разу оговорюсь, во всех итераци€х входную группу € сделал ручной - т.е. щЄлкаем DIP-переключател€ми взамен контроллера.  онечно, по уму здесь стоит примен€ть приоритетный шифратор 74148 или  155»¬1/ 155»¬3, однако за их отсутствием... ¬тора€ итераци€ реализована в железе. »того - 6 пинов на 24 кнопки.
step3 (700x369, 134Kb)
Ќа третьей итерации мен€ совсем заела жадность, поскель 6 бит это таки 63 кнопки, из которых используем лишь 24, и € перевернул схему в части COLS/ROWS. ≈стественно, никаких двойных нажатий. “еперь в три выходных бита укладываетс€ 6 кнопок, а не 4; а по входу лишь два бита - 4 значени€ по количеству р€дов. ƒиодов побольше, никаких тебе шифраторов.

ƒумаетс€, шифратор 74148 решил бы проблему двойных нажатий.
≈сть ещЄ один вариант опроса стандартной тастатуры на 12 кнопок. ¬ернее, на 10, ибо две кнопки таки отдельно надо опрашивать. Ёто -  ћ1008¬∆1. ¬дохновлЄн был статейкой про  –1008¬∆14 (WE9192B), где реализован импульсный номеронабиратель как импульсное вводное устройство дл€ цифр. Ќемного потрахавшись, получил схему на макетке дл€  –1008¬∆1, где работает и буфер на 24 нажати€, и зацикливани€ не получаетс€, и действительно он давал по второму пину сигнал завершени€ текущего ввода, и номиналы пор€дочные подобрал дл€ производительности. Ќо...
—читать контроллером импульсы до сигнала Ђбастаї дело неблагодарное. «ато два провода на 10 кнопок.
–убрики:  этот удивительный мир вокруг нас

ћетки:  

ѕаскуды...

ƒневник

—уббота, 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 микросхемы) только из-за роста сложности схемы.

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

ћетки:  

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