kincajou: (Default)
Наконец-то поборол лень и выложил на AVRFreaks нечто полезное (в кои-то веки!).
Как я уже писал, мнение некоторых форумных гуру о том, что софтварный I2C написать "очень сложно" и такая реализация будет работать "очень медленно", вместе с необходимостью реализовать именно что софтварный I2C Slave для чипа, не обладающего соответствующим хардварным модулем,.. короче, вот:

Simple I2C Software Slave


берите, мне не жалко
kincajou: (Default)
(идёт процесс обсуждения причин возникновения помехи в одном дивайсе, попутно выдвигаются гипотезы о том, как помеху побороть):

- Может, подвесить по десятке пик на обе ноги*?
- Подвесь лучше даму пик за обе ноги!



*речь идёт о двух конденсаторах ёмкостью по 10 пикофарад, кои предполагается подключить к двум выводам некоей микросхемы.
kincajou: (Default)

просили? получайте
Expandкусок лога всего-то навсего батареечного контроллера )

Это запись того, как я подключался к маленькой батарейке, лог подключения к большой остался на ноуте. Код ещё сыроват и железо не полностью собрано, но основное "ядро" готово и со своими функциями вроде справляется.

"Resetting LTC6803 Config to default values" время от времени случается потому, что оный LTC6803 забывает все настройки после того, как у него сработает watchdog (таймаут порядка одной-двух секунд). Потому приходится перед началом очередной транзацкии его тормошить.

Завтра-послезавтра протестирую, как по CAN ходит телеметрия, и вопрос можно считать почти закрытым.
kincajou: (Default)
Пятница.
22:00.

Меня опять заперли на работе.

Нет худа без добра - заодно нашёл в своём коде старинную ошибку, на которую раньше не обращал даже внимания.
kincajou: (Default)
Коллега сидит и мучает новую электронику для мотора.
В кач-ве подопытного взят китайский моторчик, довольно сопливого дизайна (переделанный немного - заменены подшипники и некоторые детали корпуса, вместо датчиков Холла установлен бесконтактный магнитный энкодер).

Энкодер по паспорту может работать до 5000 об/мин.
Движок по паспорту даёт 4000 об/мин на 36В.
Щас его разогнали уже до 24 000 об/мин на 32В.

Перегрузка на краю выходного элемента (там на валу стоит некая магнитная муфта) примерно 11000 "жэ".

Есть предложение поднять напругу до 50В и посмотреть, откроется ли портал.

LTC6803

Mar. 30th, 2012 09:41 pm
kincajou: (Default)
Мозголомная микруха - из всех чипов, с какими я имел дело, у неё самый замороченный интерфейс.
Но я таки помигал светодиодом, подключенным к её GPIO.
Значит, и всё остальное заработает.
kincajou: (Default)
ОТЛАЖИВАНИЕ: прогр., букв. - избавление программ от лажи.


Нашёл глюк в функции, про которую думал, что я её уже давно отладил. Однако, в особых случаях она вела себя совсем не так... причём по симптомам косяк якобы совсем в другом месте сидел. Однако же, не однако.

Но нашёл.

sleep mode

Mar. 28th, 2012 01:49 am
kincajou: (Default)
И в самом деле, "сифонило" - если не выключать TWI (он же I2C), то после ухода в спящий режим состояние его ножек может оказаться немного не тем, каким оно должно быть, из-за чего по подтягивающим резисторам течёт совсем не нужный ток. И после выхода из сна первое же прерывание по TWI вводит проц в судороги, заканчивающиеся ступором (или ресетом, если включен WDT). Но чтобы этого не было, достаточно отключать оный модуль перед заходом в спящий режим - и потребление чудесным образом падает куда-то ниже 0.1 мА.

Addendum Плата простояла всю ночь, будучи запитана только от ионистора - нормально, когда я посмотрел uptime, он был 41919 секунд.
kincajou: (Default)
Да, вся магия заключалась в том, чтобы дождаться окончания переноса данных из "теневых" регистров в таймер. Я не стал мудрить и написал макрос-враппер, коий дожидается освобождения регистра, пишет данные, дожидается успешного завершения. Попутно выяснилось, что в режиме Clear-Timer-on-Compare (CTC) прерывание "Output Compare" срабатывает ДВАЖДЫ. Видимо, первый раз, когда таймер дощёлкал до переполнения, а второй раз, когда перевалил за него (плюс небольшой оверхед). Я сделал так, чтобы обработчик прерывания дожидался следующего щелчка (глядя во всё тот же регистр с флагами "асинхронной готовности"), и сразу всё наладилось.

Итого - плата работает, но потребляет всего 1.1 мА.

Всё равно много. Такого не должно быть. Дело в том, что часть схемы запитывается от дежурного источника, и именно за это потребление надо побороться; остальное запитывается от мощного понижатора и там уже можно не бояться. Вероятно, где-то между двумя доменами питания сидит резистивная подтяжка и через неё, похоже, "сифонит".

Впрочем, 1.1 мА это примерно на порядок меньше тока саморазряда Батарейки... можно и так оставить.
kincajou: (Default)
Есть две железяки, построенные очень схоже. В основе - AT90CAN128. Оба дивайса бОльшую часть времени проводят в спячке, время от времени просыпаясь, делая своё дело и снова засыпая. Так вот, в первом случае асинхронный таймер (от кварца 32768Гц) свои прерывания генерит вполне исправно, а во втором - не генерит. Точнее сказать, не генерит тогда, когда надо генерить: не пробуждает процессор. Хотя сам таймер работает, осциллом прекрасно видно колебания с нужной частотой.

У этих микроконтроллеров есть несколько рабочих режимов - обычный, когда ядро молотит программу на полной скорости; "холостой", когда ядро и флэш-память отключены, но работает вся периферия; "энергосберегающий" (когда работает только _асинхронная_ периферия, в т.ч. медленный таймер); "отключенный" (когда работает только асинхронная периферия, но БЕЗ медленного таймера) и режим "ожидания", когда всё то же самое, как и в "отключенном", только жрёт на 10 мА больше.

Я всегда использую "энергосберегающий" - не потому, что я весь из себя такой гринписный чувак, а потому что батарейки менять лучше всё-таки пореже. И до сих пор всё прекрасно работало - я инициализировал таймер, разрешал его прерывания, прописывал нужный режим сна и, собсно, давал команду SLEEP.

Но теперь всё то же самое не работает. Просто нету прерываний, и всё тут. Можно, конечно, использовать "холостой" режим - он тоже заметно снижает потребление по сравнению с обычным ходом, но мне не нужно 10..12 мА потребления, мне надо не более 3 мА. Почему всё вдруг поломалось, я не знаю и не могу понять.

Самое печальное, что отладчик рапортует бодро, мол, всё в порядке, вот прерывание"... Но прерывания реально НЕТ!

Неужели проц глючный?

Expandпроклятый кусок проклятого кода.. )

FPGA SDR

Mar. 11th, 2012 04:36 pm
kincajou: (Default)
Есть относительно свободное время и возможность вернуться к своему старому проекту SDR. Наконец-то!!! запустил аудиокодек - жужжит и гудит тестовым сигналом, и даже loopback с sideband injection работают. Запустил и "высокоскоростные" АЦП - 400 тыщ сэмплов в секунду, 12 бит, два синхронно работающих канала. ЦАП уже ранее проверил - он, канеш, лажовый (всего 50 тыщ сэмплов/с), но зато и копеечный. И такой же двухканальный. АЦП всё равно в режиме оверсэмплинга будет использоваться (дабы повысить эффективную разрядность до скольки получится), так что характеристики выходят примерно симметричные. Короче, идея вполне работоспособна, если работать на низкой ПЧ (как и подразумевалось): простым смесителем сбросить входной сигнал на zero-IF, потом двухканальным АЦП снять его I/Q компоненты и далее считать сугубо в цЫфре.

ЦАП: DAC7512
АЦП: ADC121S051

Ничего революционного, просто эксперимент.
kincajou: (Default)
пока есть время, вернулся к своему старому проекту - встраиваемый интерпретируемый язык для микроконтроллерных дивайсов. За основу взял то, что предлагает А.В.Костельцев в своей книжке и почти ничего не изобретаю, окромя дополнительных встроенных типов -- double-то мне практически не нужен, а вот битовые-байтовые-словные типа очень даже нужны. И булев тип. И примитивы для доступа к железу. И ещё что-то. И встроенный же доступ к моей собственной файловой системе, которая тоже встроена туда же, куда и всё :)

Это чтобы получить:
а) более-менее полноценную возможность писать скрипты для маленьких устройств, одновременно ещё и командную строку как бы нахаляву;
б) максимальную отвязку от "железной" части, одновременно с этим имея полный над ней контроль (т.е., например, не писать обработчик прерывания на приём байта по последовательному порту, а иметь в программе обработчик соответствующего СОБЫТИЯ);
в) ??????
г) скилл Крутизна +5.

Дабы экономить ресурсы (чтоб не терять драгоценные такты на интертрепацию), код сначала компилится в некий промежуточный байт-код, максимально компактный, и уже потом исполняется.

Конечно, определёная потеря в производительности есть, это неизбежно из-за оверхэда. На критических участках без нормального программирования не обойтись, но во многих иных случаях максимальная производительность не нужна, хватит и просто большой (а если какой-нибудь пользовательский интерфейс писать, так там вообще незаметно, чтоб что-то тормозило - человек всё равно медленнее).

Уже работают условные переходы, циклы, вызовы функций. Думаю вот, делать отдельно от "функций" ещё и "процедуры" (отличающиеся лишь отсутствием возвращаемого значения) или ну его нафиг.

P.S. попутно обнаружилось нечто странное: оказывается, 1 поделить на 2 будет не 0.5, а 0.500000001495465973, но если это умножить на 2, то снова получается 1. Нипанятна.
kincajou: (Default)
Вот есть фирма, изготавливающая (без шуток) аккумуляторные ячейки, лучшие из всего что я видел. Пусть у них "химия" покупная, зато производство где-то в Роисе-матушке. Причём акки получаются на заглядение - ячейку можно по живому протнуть гвоздём, но она не сдохнет, а продолжит исправно выдавать энергию куда надо. Ну, чуть потеряет в ёмкости. Деградирует через какое-то время. Но работать будет всё равно.

Так вот, фирма делает акки. Правда, с хреновой электроникой, но это дело поправимое - электронику мы и сами спроектируем (уже спроектировали, лично я).

Мы покупаем акки. Но сумма получается такая, что на неё можно приобресть пару-другую иномарок и годовой запас бензина. По закону, нужно провести тендер.

Без тендера нельзя. Но в тендере участвует один (ОДИН!) участник - собственно, производитель.

Больше всего меня удивил факт наличия отсутствия мгновенно возникающих посредников. Ведь это ж какой лакомый кусочек.. но - нету. Какая жаль! недополученные прибыли! удвоение ВВП!..

Закон - суровая дура.
kincajou: (Default)
Как-то раз я уже писал, что в нашей конторе появился новый отдел, призванный пресекать "коррупционную составляющую" заказов и договоров. Т.е. через этот отдел проходят все заявки, заказы, счета и проч., и специально нанятые сотрудники следят, чтобы цены были бы адекватными. Принцип определения "адекватности" мне неясен, но с результатами работы этих идиотов приходится сталкиваться довольно часто, когда вместо заказанной микросхемы АААА приходит АААБ. Да, она дешевле, но я заказывал _другую_ микросхему.

А теперь вот появились какие-то интересные подробности: из этого отдела пришёл .. хммм... творчески переосмысленный заказ на группу позиций, причём по некоторым цены оказались выше, чем в первоначальном заказе, а по иным позициям цены даже ниже, чем у производителя (?!). Внимание, вопрос: где можно взять чипы дешевле, чем их делает завод? Ответ: в помойке. Либо это подделка.

Ну и самое смешное: у той конторы, которую предлагает вышеупомянутый отдел, есть сайт. На сайте каталог и прайс-лист. И этих чудесато-низких цен в каталоге нет, не находятся они и через поисковики. Внимание, второй вопрос: КАК оный отдел узнал, что данная контора продаёт такую дешёвку?

Сдаётся мне, что оный противооткатный отдел сам крепенько сидит на откатах...
kincajou: (Default)
  • Наверное, внутри такого вертолёта сидеть страшновато

  • На мой аккаунт на тытрубе внезапно нобижала толпа каких-то заморских хомячков. Временно закрыл комменты, пусть побеснуются недельку

  • В наш многострадальный коллайдер моторчик, рассчитанный некогда на 2кВт, вкачали 4.6 кВт и... ничего не сломалось! Правда, на живучесть решили не тестировать, ибо в настоящее время он у нас один. А "мотористы" будут делать новые - побольше меди, поменьше зазор.

  • Нарисовал некую платку, предназначенную для отладки вполне определённого железа. На плате старый добрый AT90CAN128 и ПЛИСка из семейства Spartan-3 -- старьё, но зато они у меня есть в некотором количестве и они как бы не нужны. Плат будет сделано штук пять, но мне нужно всего две... в принципе, какое-то небольшое их количество может случайно исчезнуть.
kincajou: (Default)
Заходил Шеф.

Посмотрел на эскизный эскиз новой железяки, спросил - "когда?"
Описал ему сложности изготовления новых приборов в условиях ожесточённого сопротивления вместо ожидаемого содействия. Попутно обрисовал перспективы и возможности не-игрушечного дизайна. По-моему, Шеф проникся и заинтересовался бездействием конструкторов, две недели мусоливших сопли над готовой 3D-моделью: всего-то требовалось сделать из ней чертежи (банальная операция) и отдать в цех (ещё банальнее). Из наших это никто не может сделать по причине отсутствия полномочий грузить цех заданиями - это можно сделать только через конструкторов, а они чуть ли не саботируют работы: ничего не сделано, сидим всё у той же отправной точки.

Я закончил фигачить новый Супермощный Супердрайвер (ажно в трёх разных вариантах, каждый со своими достоинствами и недостатками -- кто из них лучше, покажет только сын ошибок трудных). Макетный вариант Ультрапродвинутого Гиперконтроллера так же близок к релизу.

Сроки нанесения главной атаки неясны - кто-то говорит "уже в марте" (хаха), кто-то всерьёз считает, что в сентябре сего года. Вне зависимости от этого, конструкторов надо тормошить, ибо.

Да, и ещё батарейки скоро поспеют. Масштабы задачи внушаютЪ: предохранители на 400А, соответствующих размеров шунты (так надо для схемы ограничения всплесков тока), могучие клеммы и солидные медные бруски. Сама батарейка в "козу" может отдать более трёх тысяч ампер, поэтому защитные меры насущно необходимы - инвалидностей от разлёта гаечных ключей в виде кипящих брызг нам тут не надо...
kincajou: (Default)
Теоретически я знал, а на практике никогда не проверял этот забавный эффект - как и предполагалось, мосфет можно включить коротким импульсом напряжения. Транзистор будет оставаться во включённом состоянии довольно долго, если источник управляющего воздействия физически оторвать от затвора - заряда, остающегося на ёмкости затор-исток, вполне достаточно.

...

И ведь кто бы мог подумать, что интриги против меня возводятся не кем-то там, а непосредственно начальством. Агентурная сеть донесла, что трщ начальник раздаёт указания моим коллегам "не принимать во внимение" или даже "оказывать противодействие" моим инициативам. Мол, "не давать свободы выбора" и всё такое. Нихуясе. Интересно, на кого он работает...
kincajou: (Default)
В пятницу зашёл к падаванам высокой науки. Добры молодцы, числом около трёх, сидят и пишут высокоуровневый софт, в будущем призванный управлять бортовой сетью нашего Большого. Ну, там, команды типа "заглубиться" и "всплыть" (особенно второе важно) чтоб были, а не "открыть вентиль №2 в балластном блоке №6 на 40.5 секунд". Так вот, пишут.

А основная железяка, к которой все вентили и датчики прикручены, сделана мной. Сделана, протестирована, предоставлена в полное распоряжение: вот вам схема, вот вам чертёж платы, вот вам полностью работоспособная (проверено на реальном стенде) тестовая прошивка с исходниками.

Падаваны же столкнулись с тем, что АЦП на плате "выдаёт мусор". И выдвинули гипотезу, что это какая-то одна ячейка памяти налезает на другую (?!), мол, из-за того, что I2C у меня софтварный. Ага, налезает. Драйвер softI2C написан года два назад и работает без нареканий уже, наверное, в сотне разных устройств. А тут вдруг "налезает"... эх.

Потом я огляделся и заметил, что у них намалёвано на доске. Есть эдакая у них доска, для Гениальных Идей - навроде школьной, только не тёмного цвета, а белая. И рисовать надо не мелом, а специальными фломастерами. У падаванов есть такая доска, у конструкторов есть такая доска, у начальства есть такая доска -- нам же не положено. Не доросли.

Так вот, у них там была намалёвана некая структура. Квадратики, стрелочки. По всей видимсоти, так они себе представляют вышеупомянутую высокороувневую систему. Так вот, в одном из квадратиков замечено магическое:
Expand? )


Что-то мне подсказывает, что заглубиться-то мы заглубимся...
kincajou: (Default)
Начальство удумало посмотреть в интернетах чуть глубже первой страницы гугла и натолкнулось на промышленные контроллеры бесколлекторных моторов.

Начальство оказалось безмерно удивлено брутальностью и размерами конструкции.

Ещё немного, и начальство перестанет уже смеяться над нашими конденсаторами ("такие большие! ахаха! зачем?!"). Потом оно заметит, что схема в мануале на тот контроллер удивительным образом схожа с нашей (только слегка тупее), и это при том, что наша рисовалась без оглядки на передовой мировой опыт. Мало того, наш ещё спроектирован с приличным запасом - и по току и напряжению - с теплоотводом не через тонкую (а поэтому - склонную к короблению) стенку, а через алюминиевую подошву корпуса. И обладает практически всеми теми функциями, что перечислены в рекламном буклете - и контроль тока, и слежение за напряжением на шине питания, и температурная защита, и плавный пуск, и т.п.... Пусть для начальства это станет поразительным открытием.

Уже скоро.

December 2016

S M T W T F S
    123
45678910
11121314151617
18192021222324
25 262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

Expand All Cut TagsCollapse All Cut Tags
Page generated Jul. 10th, 2025 11:33 pm
Powered by Dreamwidth Studios