Раніше (1, 2) ми обґрунтували і продемонстрували можливість існування
просторового індексу, що володіє всіма плюсами звичайного B-Tree — індексу та
не поступається по продуктивності індексу на основі R-Tree.
Під катом узагальнення алгоритму на тривимірний простір, оптимізації та бенчмарки.

Читати далі →

Підключення Xmega до FRAM по SPI

В одному з приладів, виникла необхідність повного відновлення попереднього режиму роботи у разі будь-якого збою живлення або короткочасного відключення. Можна було звичайно закласти джерело резервного живлення, але його використання було обмежене, так скажемо, конструктивними особливостями приладу. Як результат, було вирішено записувати ряд необхідних для відновлення значень в пам'ять. Так як оновлювати значення для відновлення я збирався часто, у зв'язку з обмеженою кількістю циклів запису, використання Flash EEPROM навіть не розглядалося.

На мій погляд, в даний момент саме оптимальне рішення для таких випадків, це FRAM пам'ять. Можна було б записувати необхідні дані циклічно в Flash, постійно инкрементируя адреса для нових значень, але в даному випадку виникала необхідність десь зберігати вказівник на самі останні значення, або повністю зчитувати Flash і потім вже витягувати «найсвіжіші дані.

У Lapis Semiconductor є три лінійки FRAM мікросхем, які обмінюються з провідним пристроєм за I2C або SPI, або по паралельному інтерфейсу. Переваги послідовних інтерфейсів перед паралельним очевидні. Що ж стосується I2C і SPI, то швидкість передачі даних по SPI в 4 рази вище ніж по I2C, але і споживання у зв'язку з цим вище майже в 16 разів.

Мені ж вибирати не доводилося, в наявності була тільки MR45V256 c 32 Кб пам'яті і інтерфейсом SPI. 32 Кб для моїх потреб більш ніж достатньо, тому залишилася пам'ять я використовував для запису всієї необхідної технічної інформації і логування команд отриманих від оператора.

Робота з FRAM пам'яттю дуже проста. Будь-яка операція починається з перекладу лінії вибору веденого пристрою CS# в низький стан. Потім відправляється одна з команд операцій, їх всього 6:

— Читання(READ)
— Запис даних(WRITE)
— Запис в регістр статусу FRAM(WRSR)
— Читання з регістра статусу FRAM(RDSR)
— Установка захисту даних від перезапису(WRDI)
— Зняття захисту даних від перезапису(WREN)

Читати далі →

Просторовий індекс для PostgreSQL на основі Z-order (vs R-tree), продовження


минулий раз ми прийшли до висновку, що для ефективної роботи просторового індексу на основі Z-order необхідно зробити 2 речі:
  • ефективний алгоритм отримання подинтервалов
  • низькорівневу роботу з B-деревом
Ось саме цим ми і займемося під катом.
Читати далі →

Про Z-оrder і R-дерево

image
Індекс на основі Z-order кривої в порівнянні з R-деревом має масу переваг, він:
  • реалізований як звичайне B-дерево, а ми знаємо що
  • сторінки B-дерева мають кращу заповнюваність, крім того,
  • Z-ключі самі по собі більш компактні
  • B-дерево має природний порядок обходу, на відміну від R-дерева
  • B-дерево швидше будується
  • B-дерево краще збалансовано
  • B-дерево зрозуміліше, не залежить від евристики поділу/злиття сторінок
  • B-дерево не деградує при постійних змінах
  • ...
Втім, у індексів на основі Z-order є і недолік — порівняно низька продуктивність :). Під катом ми спробуємо розібратися з чим пов'язаний цей недолік і чи можна щось з цим зробити.

Читати далі →

CH341A, USB-UART-конвертер і I2C/SPI-програматор за $5

Колись давним-давно я писав пару статей про широко відомому у вузьких колах чіпі FTDI FT232H і різних його застосуваннях. Всім хороший був FT232H для DIY, але і у нього знайшлося кілька недоліків — відносно неприємний для ручної пайки корпус LQFP48 (для справжніх любителів хардкору є ще варіант в QFN48, паяй — не хочу, DIHALT не дасть збрехати), ціна за оригінальний чіп від 250 рублів, ймовірність проблем з драйверами на підроблених чіпах і деяка функціональна надмірність, наприклад, підтримка JTAG потрібна далеко не всім.

Рішення, як звичайно, прийшов з Піднебесної, в якій після декількох років тупого передирания творчої адаптації чужих чіпів нарешті випустили свій власний чіп USB-TTL — WinChipHead CH341A в корпусі SOP-28 (не DIP, але теж паяется без проблем).

Виробництво чіпа році було розпочато приблизно у 2006 році, але в полі мого зору він потрапив тільки в 2014, коли I2C/SPI-програматори на цьому чіпі наповнили європейський EBAY, причому продавці пропонували ціну від 3,5 євро разом з доставкою, що при середній вартості хорошого китайського зразок програматора MiniPro TL886a в 50 євро виявилося настільки привабливою пропозицією, що встояти не вийшло.

Якщо вам все ще цікаво, що вміє цей китайський чіп за 1$, і чи варто платити більше, якщо не видно різниці — прошу під кат.

Читати далі →

Проект інфо-панелі оповіщення про аварії (Частина 3)

Вітаю всіх.
Ось вже третя частина досить сильно тривалої історії (раз, два).
Пристрій ще не завершено, хоча майже всі основні блоки зараз зібрані:
— Індикатори (2);
— Процесорний модуль (цієї частини);
— Блок живлення (імпульсний перетворювач 48V -> 5V до 6А) (в процесі, пауза через остаточно сломавщихся щупів до осцилографу (кЕтай));

План дій:
[+] SD-Card-Sector
[+] FAT-FS
[+>] OneWire async
[-] Slave firmware
[part] Ethernet
[-] Протокол обміну між процесорами
[-] Bootloader

Обережно, фото.

Читати далі →

Підключаємо новенький чип від WIZnet: W5500. IP для маленьких речей. Частина 1

    Схоже, що Etherent і TCP / IP — все ще самий поширених спосіб зв'язку самих різних пристроїв. Хоча WiFi останнім часом потихеньку витісняє провідний «мідний» Etherent, тим не менше, знайти порт і «встромлятися в локалку» — досі найпростіший спосіб підключення. Така доступність Ethernet не обійшла стороною і найменші залізяки: контролери, датчики, лічильники споживання і т.д. які нині називаються модним маркетинговим словом " Інтернет речей * " (Internet Of Things, IoT) (А де тематичний хаб, до речі?).
 
І тут нам можуть здорово допомогти корейські мікросхеми від WIZnet. Компанія WIZnet — це досить бадьорий прозводітеля чіпів класу IOcP (Internet Offload co-Processor). Що це? Говорячи людською мовою — це такий чіп, який: з одного боку має Etherent, всередині містить власний крихітний процесор для обробки TCP / IP, а з іншого боку — простий інтерфейс для зв'язку з нашою маленькою залізякою.
 
Читати далі →

Повільна робота SD карток - хто винен і що робити?

Давно думав написати статтю на Хабре, але все як то не наважувався. Хоча і здається, що є думки, які були б небезінтересни спільноті, але зупиняє припущення, що це «здається» виникає від завищеної самооцінки. Проте спробую. Оскільки я професійно займаюся електронікою, зокрема, програмуванням мікроконтролерів, досить-таки тривалий час (як я підозрюю, довше, ніж живе велика а може навіть і більша частина читачів Хабра), то за цей час накопичилося чимало цікавих випадків. Представляю на суд спільноти розповідь про одного з них.
 
Отже, в одній розробці мені було потрібно зберігати значні обсяги інформації з метою подальшої передачі через мережу в обробний центр. Оскільки отримане устрій передбачав серійне виробництво, був обраний варіант із застосуванням відносно недорогих компонентів, і, зокрема, мікроконтролера як центрального елемента системи. Оскільки в той момент (середина 2012 року) пропозиція мікроконтролерів з Ethernet PHY на борту не відрізнялося різноманітністю (та й зараз становище не набагато краще), був обраний МК фірми TI сімейства Stellaris, конкретно LM3S8962, тим більше що отладочная плата для нього у мене вже малася. МК на той момент відносно новий, активно просувний фірмою TI (це в кінці 2013 року вона РАПТОМ перевела всю серію в розряд NRND), і що володіє цілком достатніми для вирішення даної задачі параметрами. Для зберігання информациии був обраний варіант з SD карткою, в першу чергу із за їх доступності і дешевизни, а також тому, що на отладочной платі була наявна контактний пристрій для них, а на постачався з платою налагодження CD були численні приклади, в тому числі і для SD карт. Інтерфейс до картки був реалізований найпростіший — SPI, запропоновані приклади відразу заробили, прийняте рішення дозволяло обробляти отримані дані до написання інтерфейсу за допомогою елементарного перенесення картки з пристрою в кард-рідер ПК, так що первісна налагодження алгоритмів взаємодії з об'єктом управління проблем не викликало, по Принаймні в цій частині проекту. Як всі розуміють, проблеми виникли дещо пізніше…
 
Читати далі →