Archive for the ‘Hints & Tips’ Category.

Потокове редагування

Редактори (програми редагування текстів, а не редактори новинних сайтів ;-)) стають все «вмілішими» та «грамотнішими», ними все зручніше робити доволі складні речі. Особливо — проблемно-орієнтованими редакторами, на зразок Eclipse для програмістів чи Frescobaldi для набору нот мовою розмітки LilyPond.

Та іноді трапляються речі, які зручніше і швидше зробити старим добрим потоковим редагуванням, яке дійшло до нас з тих часів, коли з комп’ютером спілкувалися через телетайп і для того, щоб глянути на якийсь рядок тексту, його треба було надрукувати. По роздруківці тексту формувався пакет команд редагування і згодовувася програмі, яка брала порядко́во вхідний потік тексту, виконувала команди і записувала результат роботи у вихідний потік.
»»» Ось приклад:

Димовловлювач

Вже з пів року, як я став вдома більше паяти. Тобто тепер не раз на місяць міняю при налагодженні резистор чи конденсатор, а таки сам збираю невеликі плати. Відразу захотілося мати фільтр-димовловлювач. Але навіть простенький AOYUE-486 зараз тягне під 900 грн, а цим грошам можна знайти і краще використання (майже на quick-clot+CAT вистачить, наприклад).

Отже, треба робити самому. Тим більше, що вентилятор є, старий «комп’ютерний». Фільтр люб’язно вкладають до коробки з паперовими пакетами для пилососа. У коробку з «універсальними» — велика картонка, розрахована на обрізку під потрібний розмір, — і фільтр вкладають великий. Залишилося купити вентиляційну решітку.

Кілька шматочків дерева, щоб решітку та вентилятор докупи з’єнати, трохи «шікри старого дермантина» для ущільнення, сіточку у решітці замінити фільтром, зробити ніжки-екрани з листового платсику — і димовловлювач готовий:


Димовловлювач для паяння

Досить непогано тягне «дим» із зони паяння, рекомендую.

Quartus, USB-blaster та Ubuntu 13.04

Років десять тому була задумка з підручних матеріалів (мікросхем, які однак завжди є у шафці) зробити спеціалізоване «щось схоже на логаналізатор» — запис з мітками часу прийнятого з двох каналів UART, кількох цифрових входів з дискретністю в десяток мікросекунд та пари аналогових входів з дискретністю в сотню мікросекунд.

На платі ATmega64, FT245, мікросхема статичної пам’яті 512Kx8 та між ними мостом EPM240. Ця альтеринка повинна була сама писати у буферну пам’ять цифрові входи при зміні їх стану, а також супроводжувати міткою часу записи від мікроконтролера (UART-и та аналогові входи) а також бути «DMA-каналом» для FT245.
Але змінилися задачі, змінилася робота, … Через кілька років по виготовленні плат парочку навіть було запаяно, але далі справа не пішла.

Заманулося таки хоч якось запустити цю стару плату, хоча б для тестування змін у scmRTOS 🙂

Знайшов у себе в завалах якийсь Квартус 9.1 (free-шна версія для Linux). Поставив. Поруч в архівах лежали рекомендовані для роботи з USB-blaster файли 51-usbblaster.rules (записувати у каталог /etc/udev/rules.d)

# USB-Blaster
#
SUBSYSTEM=="usb", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001|6002|6003",\
OWNER="root", GROUP="root", MODE="0666", SYMLINK+="usbblaster"

та рядки, що їх треба додати до файлу /etc/rc.local

# For Altera USB Blaster
mount --bind /dev/bus /proc/bus
ln -s /sys/kernel/debug/usb/devices /proc/bus/usb/devices
#

«Вмикаю — не працює». На деякий час програматор квартуса задумався, потім сказав, що не знайшов нічого, що його могло б зацікавити. Пробую cat /sys/kernel/debug/usb/devices, а воно мене не пускає. О, дивлюся далі.

$ ls -l /sys/kernel | grep debug
drwx------  22 root root    0 лис 19 08:58 debug

При тому, що

$ sudo ls -l /sys/kernel/debug | grep usb
drwxr-xr-x  3 root root 0 лис 19 08:58 usb

Тобто доступ на читання до підкаталогу usb є, так само до всіх інших у debug, поруч лежать файли з правами 444.
Отже, все, що лежить у debug — дозволено читати всім. Тому не став гаяти часу, зробив просто

$ sudo chmod 755 /sys/kernel/debug

Програматор квартуса побачив мій усб-бластер, тепер, може, щось і зроблю.

Різні версії WinAVR поруч

Коли виходять нові версії компіляторів, у більшості випадків варто спершу спробувати нову версію в роботі, не відмовляючись остаточно від старої. Лише після перевірки перейти на нову версію, можливо навіть попроектно. Бажано залишити можливість повернення до попередньої.
Для цього необхідно встановити поруч кілька версій:

avr-gcc folders

Але ж треба якось вказати своїй системі програмування, яку саме версію використовувати. Звісно, при необхідності замінити версію витирати з кореня диску каталог C:\WinAVR та копіювати у нього один з каталогів компіляторів це «дещо незручно».
»»» Прочитати, як це можна зробити зручніше…

Розвернути біти

Так чи інакше, а ця задачка вилазить.

В моєму випадкові потреба виникла тому, що Altera FPGA при завантаженні по SPI вимагає потік молодшим бітом вперед, а порт SSP мікроконтролерів LPC17 працює лише старшим бітом вперед. Якраз нещодавно на форумі хтось обурювався, що у STM8 USART в режимі SPI працює лише молодшим бітом вперед: «і кому такий SPI потрібен?». Та от, мені…

Як я вже писав у публікації Двійкові дані та програма мікроконтролера (це що, я так довго не повертався до цієї роботи?), можна було б зробити власну програму обробки конфігураційного масиву FPGA, в якій врахувати також і порядок бітів. Але пристрій може отримувати прошивки програмованої логіки ззовні, тому хотілося б приймати файли в такому вигляді, в якому їх видає Quartus. Менше буде плутанини.

На щастя, Cortex-M3 має спеціальну команду розвороту бітів. Ця команда … » » »

OpenOCD, LPC17xx та srec_cat

Boot-loader в мікроконтролерах LPC17xx очікує 32-бітну контрольну суму перших семи слів прошивки (вміст вказівника стеку, та перших шести векторів) на місці не використовуваного вектора по адресі 0x1C. В це слово записується мінус-сума перших семи слів. Схожим чином перевіряє наявність програми і бутлоадер LPC2000.
OpenOCD вміє «на льоту» генерувати таку контрольну суму при програмуванні мікроконтролера, потрібно лишень в команді flash вказати аргумент calc_checksum (ця команда є у файлі target/lpc17xx.cfg пакету).
Але чомусь він не генерує її для звірки вмісту (верифікації). Причому сам він знає, що мені буде незручно, раніше навіть писав щось таке:

Warn : Verification will fail since checksum in image (0x00000000) to be written
    to flash is different from calculated vector checksum (0xeffee33a).
Warn : To remove this warning modify build tools on developer PC to inject
    correct LPC vector checksum.

Тобто якщо йому дати для верифікації той же файл, що йому було дано для прошивки, то він видасть помилку в тих чотирьох байтах. Ось нещодавно я в черговий раз підятягнув з репозиторію оновлення, зібрав та встановив свіжісіньку версію, однак маю:
»»» Подивитися повідомлення про помилку верифікації та боротьбу з нею

Панелька для кварца

Знадобилося поекспериментувати з avreal-ом та atmega64 на різних тактових частотах під різними операційними системами. Бо таки ж щось незрозуміле робиться у Win7/64. Але в тих платах, що під рукою, запаяні ATmega64L-8. Вище, ніж на 8 мегагерцах їх і некоректно перевіряти.
Знайшлася плата з ATmega64-16, але без кварца. Тобто навіть без місця під кварц, бо в тому виробі планувалася робота на внутрішньому RC з калібруванням по годинниковому кварцові. А плата завалялася того, що в неї помилково запаяли «-16», хоча там теж мала бути «L-8».

Шматочки цангових панельок я для заміни кварцових резонаторів на експериментальних платах використовую давно, але тут же і місця нема. Клеїти десь збоку не хотілося. Довелося викручуватися.

Поблизу потрібної сторони мікроконтролера знайшовся «земляний» перехідний отвір, його і вирішив використати для кріплення панельки.

У шматочка на три виводи центральний залишив прямим, а два крайні, що для кварца, відігнув. Прямо на виводи напаяв конденсатори 18 пФ. Конденсатори розмістилися так, що не торкаються поверхні, в яку упиратимуться зігнуті виводи:


Панелька для кварца з напаяними конденсаторами.

Подивитися інші фото, прочитати опис… » » »

Двійкові дані та програма мікроконтролера

Досить часто виникає потреба додати двійкові дані до «прошивки» мікроконтролера. Це може бути знакогенератор для графічного дисплея чи принтера, закодована певним чином музика чи якась інша інформація, отримана у «двійковому» (тобто не-текстовому) вигляді від якоїсь «сторонньої» відносно компілятора для мікроконтролера програми.

У моєму випадку це теж прошивка, але для програмованої логіки (FPGA). Цю прошивку можна отримати у вигляді файлу .ttf (tabular text file, а не true type font :-)), у якому знаходяться десяткові числа, розділені комами.
Колись давно, ще «десь між i87c51FA та AT89C55» я з такого файлу для EPF8282 генерував asm-файл. Програмою sed додавав до та після масиву чисел потрібні заголовки з мітками, на початку кожного рядка директиву .DB і тому подібне. Асемблерний файл згодом компілювався в об’єктний та прилінковувався до програми.
Для ATmega162 та EP1K10 користувався власноруч написаною програмою — основна її робота була стиснути прошивку для альтерини простим, але ефективним алгоритмом, а вже видати назовні C-масив то була проста робота.
Тепер у мене LPC1766 та EP1C3. Циклони вже мають в собі декомпресор і квартус може стискати прошивки. Він це робить гірше, ніж алгоритм від Ivan Mak, але він це робить сам і розпаковує теж без мене. Тому я, принаймні зараз, повертаюся до простого перетворення стороннього файлу прошивки в об’єктний файл з масивом.

Зараз для таких робіт зазвичай пропонують вже готові програми на зразок bin2c для генерації C-шного масиву. До речі, на мою думку, однією з найкращих програм на тему все2всюди є пакет srecord.
Але при роботі з компіляторами gcc (точніше, з набором програм GNU binutils, яким користується і gcc) можна обійтися без додаткових програм, »»» прочитати — яким саме штатним інструментом з пакету та як…

Перехідник зі шлейфа на макетну плату.

Знадобилося мені якось терміново підключити до плати з ATmega64 макетку, на якій перевірити один задум. Вільні лінії мікроконтролера було виведено на 16-контактні штирі, залишалося підключити шлейф до макетної плати. А сама макетка — куплена в Імраді SOLDERLESS BREADBOARD EIC-406 фірми E-CALL (куплялися в Імраді, «там їх є»). Тобто не підпаятися (для того і бралося ж), потрібен перехідник.

Звичайно, можна було б використати з’єднувач DIP на шлейф. Та треба було «бігом», поки думка ворушиться, а до Нью-Паріса їхати зараз неблизько. Тому було знайдено шматочки макетки та штирі і мені швиденько запаяли ось такі перехідники:

Перехідник, макетка та штирі.

Все, що потрібно, було перевірено і на деякий час я про це забув. Аж тут раптом виявився потрібним аналогічний перехідник на шість контактів, під варіант 6-pin AVR ISP шлейфа програматора. Причому вдома — а паяти самому ліньки 🙂
Лінощі — двигун прогресу. Дуже швидко в голові промайнули … (подивитися, що саме)

Як встановити дві версії libftd2xx

Як вже писалося, 64-бітні бібліотеки libftd2xx.so версії 1.0.0 та новіші не сумісні по розміру змінних зі старішими бібліотеками, останньою з яких була версія 0.4.16. З 32-бітними бібліотеками такої проблеми нема.
Для роботи 64-бітної версії avreal/Linux необхідно встановити стару версію libftd2xx, яку можна взяти на сторінці download.
Може виникнути необхідність на одному комп’ютері встановити обидві версії бібліотеки. Для цього avreal, починаючи з версії 1.28r6, завантажує бібліотеку по імені libftd2xx.so.0, а не libftd2xx.so.
Розглянемо рекомендований процес встановлення бібліотеки.

Continue reading ‘Як встановити дві версії libftd2xx’ »

[flagcounter image]