вівторок, 31 липня 2012 р.

Робота з EEPROM пам'яттю 24CXX -- Soft, AVR8

Відповідність пінів Ардуїно Mega2560 пінам
його контролера, ATmega2560.
  Клікабельно -- без того нічого не видно.
Взято з офіційного сайта, там же
таблиця відповідності.
В попередній нотатці працювалося із шиною I2C чисто програмно, але засобами Wiring -- бібліотек Ардуїно. Робити так не дуже елегантно і не дуже ефективно, хоча і просто.

На цей раз працюватимемо з I2C програмно, використовуючи безпосередньо засоби контролера (і трішки avr-libc, стандартної бібліотеки компілятора AVR-GCC).

неділю, 29 липня 2012 р.

Робота з EEPROM пам'яттю 24CXX -- Software, Arduino

А це ніжки, за які смикати ;-)
Мухоловка.
Щоб краще відчути "дух" I2C, реалізуємо його чисто програмно, самостійно смикаючи контролер за ніжки. Для початку, з використанням засобів Ардуіно ("мови" Wiring -- фактично С із "ардуїноспецифічними" бібліотеками).

В якій послідовності це слід робити, описано раніше: теорія та простенька практика.

суботу, 28 липня 2012 р.

Робота з EEPROM пам'яттю 24CXX -- Arduino Wire

Спробуємо скористатися описаною теорією та попрацювати з мікросхемками EEPROM пам'яті на практиці. Для простоти почнемо із бібліотеки Wire для Arduino, яка енкапсулює більшість технічних подробиць роботи із апаратурою. 

Працюватимемо із (єдиним наявним в мене :) Arduino Mega 2560 rev3. Суттєвих відмінностей для більш поширеного у нас Arduino Uno, крім як номерів пінів, до яких підключатися, немає.

Орієнтуватимемося на Arduino IDE 1 (1.0.1, якщо строго, але думаю це несуттєво). Надалі вважатиметься, що проблем з тим, щоб скачати оболонку, запустити її, під'єднати до комп'ютера Arduino, встановити відповідні драйвери, і заливати хоча б найпростіші прошивки, немає.

неділю, 22 липня 2012 р.

Робота з EEPROM пам'яттю 24CXX -- огляд

Виникла в мене короткотермінова потреба писати в EEPROM пам'ять (*0) серії мікросхем 24CXX на фоні довготермінової потреби освоїти роботу із мікроконтролерами. Хочу поділитися своїм досвідом. Нічого унікального в ньому немає -- все багато раз описано, але українською ще не бачив. Та й раптом комусь згодиться (хоча б мені, але пізніше :). 

суботу, 21 липня 2012 р.

Місяць - подивилися, можна і помацати

Посадочний апарат "Луна-9".
(с) НПО Лавочкіна.
Фотографії здалеку -- цікаво, але хотілося б глянути й зблизька. Тому задача м'якої посадки на Місяць постала дуже рано. Зокрема, американці на ранніх "Рейнджерах" встановлювали капсулу із сейсмометром, що мала вижити при майже-жорсткій посадці. Однак першими успіху досягнули радянські ракетники.  

3 лютого 1966 року станція "Луна-9" передала перші зображення поверхні Місяця та перші зображення поверхні іншого небесного тіла взагалі!

Як це виглядало -- спробую розповісти. 

пʼятницю, 20 липня 2012 р.

Робота з матрицями в С++ -- бібліотека eigen

(c) Eigen FAQ
Багато років я шукав зручну і швидку бібліотеку лінійної алгебри для використання з C++ (*1). Вимоги ніби скромні -- щоб вміла створювати, додавати, віднімати матриці, множити їх на скаляр, множити між собою, шукати обернені та детермінанти. Все. При чому, для зовсім маленьких матриць -- розміром до 8х8, а в основному взагалі 2х2. (*2) Ну, ще Open Source ліцензія була б бажаною. :-) Але ця вимога не критична.

Відволікаючись поки від теми продуктивності, С++ має всі засоби, щоб зробити роботу з матрицями зручною. Однак більшість авторів матричних бібліотек вдавалися в пояснення, чому писати: add_matrix(A,B) багато крутіше, ніж A+B. Завершилося все тим, що я, на базі простенької бібліотеки Slate, склепав свою матричну бібліотеку -- Slate2, зручну для моїх потреб, хоча й доволі повільну (*3). Подивитися на останню версію цього чуда можна тут (ніяким іншим чином не розповсюджував). Щастя наступило лише кілька років тому -- натрапив на eigen!

Виникла eigen всередині проекту KDE. Зараз вона надзвичайно зручна, швидка, та вміє доволі багато. Зокрема, використовує шаблонне метапрограмування, щоб обійти деякі проблеми матричних бібліотек в C++ (*4). Вміє самостійно векторизувати, використовуючи SIMD-інструкції, такі як SSE, AltiVec і ARM NEON. Eigen3 -- третя версія, векторизує навіть роботу з матрицями комплексних чисел. Працює із фіксованими, динамічними та розрідженими матрицями. В ролі елементів матриць можуть бути числа з плаваючою крапкою, комплексні числа, цілі числа, користувацькі типи. Що вміє робити над матрицями? Багато, перераховувати довго, див. краще сюди: 1, 2, 3. Надійна -- містить більше півтисячі власних тестів, проходить стандартні тести BLAS та LAPACK , використовується багатьма проектами.

З того часу, як я натрапив на eigen ситуація покращилася -- з'явилися Armadillo, MTL4 (її попередня версія, MTL2 -- якраз наглядний приклад згадуваного вище багатослівного підходу), тощо. Як на мене, вони безперечно вартують уваги, але поступаються eigen, хоча фахово не скажу -- багато тестів не писав, багато часу на ознайомлення з ними не витрачав. Щоб відобразити своє, хай не до кінця науково перевірене, ставлення до eigen, зацитую її розробників:

Some other libraries do satisfy very well certain specialized needs, but none is as versatile as Eigen, has such a nice API, etc.

*** skipped ***

The state of existing matrix libraries before Eigen is that:
 some are Free Software
 some are fast
 some have a decent API
 some handle fixed-size matrices, some handle dynamic-size dense matrices, some handle sparse matrices
 some provide linear algebra algorithms (LU, QR, ...)
 some provide a geometry framework (quaternions, rotations...)

However Eigen is the first library to satisfy all these criteria.

Ну і ліцензія хороша -- LGPL3+.

суботу, 14 липня 2012 р.

Місяць - "Що там, за горизонтом?", дубль 2

Копірайт пише, а взято тут.
Завоювавши своїм творцям пріоритет, фотографії "Луна-3" все ж були дуже низькоякісними. Спроби повторити її місію майже ідентичними станціями -- Луна-1960A i Луна-1960B, (серії Е-2Ф, потім перейменованих в Е-3 замість відміненого запуску атомної бомби на Місяць), завершилися аваріями. Перша ракета вимкнулася на 3 секунди раніше терміну -- недозаправили!,  друга розвалилася через секунду після старту, чудом нікого не вбивши -- див. спогади Чертока.

Тому, наступний раз побачити зворотню сторону вдалося лише через 6 років, при чому -- завдяки невдалій випадковості. "Зонд-3" мав бути напарником "Зонд-2" в марсіанському польоті. Однак, через якісь технічні неполадки, стартове вікно було впущене -- коли апарат був готовий, запускати на Марс його стало запізно.  Замість чекати два роки до наступного стартового вікна, було вирішено запустити його по тій же марсіанській траєкторії, як чисто інженерний тест, (Марса в точці перетину орбіти станції з його орбітою вже не було б), а по дорозі -- сфотографувати зворотну сторону Місяця. Зонд чудово відпрацював свою Місячну програму, і що найбільш сумно -- на відміну від "Зонд-2", дожив до моменту, коли він зустрівся би з Марсом, якщо б був запущений вчасно.

понеділок, 2 липня 2012 р.

Моделі теплоємності твердих тіл - вступ

Тепловий рух, (c) Wiki
Структуру роботи теоретика ми розглянули на дуже простому прикладі -- падінні тіл на Землю: 1, 2, 3. Подивимося тепер на більш реалістичні задачі, паралельно перемістившись у розвитку фізики на пару століть вперед.

Теплоємність. Чи більш ґрунтовна, але англійською: Heat capacity. Цитуючи Wiki, це: "фізична величина, яка визначається кількістю теплоти, яку потрібно надати тілу для підвищення його температури на один градус". Знаючи для конкретної речовини її питому теплоємність -- теплоємність на одиницю маси, і припускаючи, що вона слабо залежить від температури, (згадуємо роль моделей у фізиці), можна розраховувати, скільки енергії потрібно затратити, щоб нагріти тіло з цієї речовини від однієї температури до іншої, і навпаки -- скільки таке тіло може віддати тепла, охолоджуючись. Багато хто ще пам'ятає задачки із шкільного курсу фізики типу: "Скільки теплоти потрібно надати чайнику, щоб 1.5 літрів води нагрілися від кімнатної температури до кипіння?", які крутилися навколо формули: \[Q=c m (T_2-T_1).\]

Не зупиняючись на тому, чому теплоємність -- важливо, перейду безпосередньо до фізичного питання. Звідки можна взнати (питому) теплоємність? Можна з експерименту. Однак ця дорога нас поки мало цікавить. Вона не дасть розуміння, чому теплоємність саме така, звідки вона береться, і т.д. В цій серії нотаток подивимося, як теплоємність можна розрахувати.