Перейти к содержанию
    

esaulenka

Свой
  • Постов

    1 462
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Сообщения, опубликованные esaulenka


  1. Вставить #pragma pack(n) или указать транслятору -fpack-struct=n cо значением n отличным от 1.

     

    Раз тут пошли "страшные истории"...

    pragma pack(n) надо обязательно закрывать pragma pack()

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

     

    Пример для наглядности:

    a.h: 
    #pragma pack (1)
    
    b.h
    typedef struct .... b_struct;
    
    a.c
    #include "a.h"
    #include "b.h"
    b_struct A;
    
    b.h
    #include "b.h"
    b_struct B;

     

    Так вот, A и B получились РАЗНЫЕ, хотя этого вряд-ли кто-то добивался :-)

    Короче, плохая это прагма, не ленитесь писать атрибуты для каждой структуры.

  2. Да, у меня тоже довольно давно RDI не работает.

    В какой-то версии даже пункта меню такого не было :-)

     

    Если что, могу поделиться DLL'кой из какого-то старого дистрибутива (дата файла - 9-й год).

  3. ЭТО или это и там же

     

    Это как, простите?

    Явно ж не схемы зарядки, а схемы защиты.

    Зарядка на такой ток должна обладать катушкой индуктивности или, на крайний случай, здоровым радиатором.

  4. К слову. При работе с современными (да и не современными тоже) м/с импульсных блоков питания надо хорошо представлять себе, что там унутре и как оно работает.

    При тупом повторении аппноута могут возникнуть грабли, но как их решать, ни в даташите, ни в аппноуте не пишут.

    Проверено на собственном опыте. Зато теперь я примерно представляю, как посчитать корректирующие цепочки в цепи обратной связи :-)

     

    Ну и да, эти китайцы врут с емкостью как минимум в два раза. Пользуйтесь правильными китайцами :-)

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

  5. Хм. смотрю в дижикее:

    LP2981IM5 - $0.73 /100pcs

    MCP1702 - $0.36/100pcs.

    В своё оправдание могу сказать только, что у LP падение напряжения меньше - мне это актуально, т.к. питание батарейное и может заметно просаживаться.

    Но на самом деле майкрочип в тот момент просто не смотрел, спасибо за подсказку.

     

     

    PS а MCP этот куда лучше ложиться на задачу "запитать RTC (макс. 3.3 вольта) от свинцового аккумулятора (6 вольт)" - я туда цепочку из резистора и стабилитрона ставил. Проект помер, но надо будет запомнить...

  6. 5->3.3 это совсем не low drop по нынешним временам :-)

     

    Я для low drop поставил LP2981. Когда, наконец, доберётся до серии, в требование "меньше 10 руб" влезет со свистом.

  7. LEXIS, не мучайте технологов, поставьте везде зазоры 0.2, у Вас места - вагон.

     

    И поясок на центральном отверстии ф7 маловат, на мой взгляд. Его можно сделать типа mounting hole и убрать галку plated, если вам не нужна там металлизация.

     

    PS У Вас ошибка: у LM1117 корпус надо бы подключать к средней ноге.

  8. Так а Вы, все-таки, разберитесь с условиями задачи, потом - с вопросами выходите.

    То у батареи только два вывода, то можно и средний вывести...

     

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

    Microwatt, берите пример с Alexashka, он сразу меня понял :-)

     

     

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

     

     

    Господа, ещё вопрос, раз тут такая обширная дискуссия вокруг входа enable.

    Схему монитора напряжения посоветуйте, пожалуйста. Что-то не хочется городить источник опорного + компаратор. Супервизор с настройкой порога поискать?..

     

  9. Господа, а кто-нибудь пользовался режимом мониторинга I2C в новых контроллерах?

     

    На шине только три устройства - мастер, слейв, и монитор.

    Пока передаёт мастер, автомат состояний монитора в режиме slave receiver, данные видно хорошо.

    Когда передаёт слейв, автомат монитора переходит в состояние slave transmitter, и из регистра данных можно прочитать только ноль.

     

    Под регистром данных подразумеваются и data register, и data buffer register - разницы нету.

     

    Прерываний в программе никаких нету - тупой цикл, который считывает байтики из I2C, пишет их в FIFO, а оттуда перекладывает в UART.

  10. Это не так. От частоты сопротивление ключей не меняется.

    Зато очень сильно меняется эквивалентное сопротивление конденсатора, вокруг которого всё построено.

    Хотя... да, я не прав - видимо типичные 55 Ом - это сопротивление ключей (плюс десяток Ом от конденсатора 10мкФ).

     

    Самое простое - поставьте на выходе зарядника два резистора с допуском в 1%, делителем.

    В условиях задачи сказано, что разъем под зарядку менять не хочется, а контактов в нём только два.

     

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

    А вот тут ничего не понял. Поясните, пожалуйста. Или статью какую порекомендуйте...

  11. Стартер говорит, что среднего вывода от батареи нет.

    Наружу - нет. Но разобрать, а потом аккуратно собрать - можно, благо корпус у неё - из термоусадки :-)

     

    так она же вроде вообще до 5вольт питания.

    Особенность схемы в том, что питается преобразователь от одного аккумулятора, а ко второму он подключается только выходом - 5 вольт вполне должно хватить.

     

    LM2661 - в активном вообще единицы мА жрет

    Миллиамперы жалко, т.к. вручную управлять shutdown-ом неинтересно, а как это сделать "изнутри", я не знаю.

    И на сайте у техаса она не находится, только даташиты в "левых" архивах.

    Надо будет на этой 7660 перемычку boost предусмотреть - она частоту увеличивает (а значит, и сопротивление заметно снижает).

  12. Такая задачка.

     

    Есть у меня в личном пользовании девайс, у которого внутри пара последовательно соединённых Li-Ion банок (емкость каждой - около 4 Ач, по заверениям китайцев).

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

     

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

     

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

     

    Нашёл хитрое включение инвертирующего преобразователя на конденсаторах: ICL7660, рис.2.

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

    Прикинул: емкость аккумулятора 4Ач, неидентичность двух аккумуляторов - ну, пусть 2%. Итого нам надо перекачать 80мАч. При выходном сопротивлении этого преобразователя в 50 Ом и разнице на аккумуляторах 0,1В получаем 40 часов.

    Двое суток, вполне нормально - у меня типичный цикл заряд/разряд - неделя.

     

    Вопрос: почему эти штуки никто не делает, и где я ошибаюсь? :-)

  13. У меня при включенной оптимизации компилятор выдавал те ещё конструкции! Вот после такого у меня ничего не работало!

    Нет, это из серии "понятия не имею о познаниях ТС".

    Тут уже пошла серия совсем не про топикстартера. Это серия про шаманские танцы.

     

     

    Собственно, я в первом посте писал, что в начале так и было и тоже не очень стабильно работало :)

    Странно это. Либо было не так, либо я чего-то не понимаю. С основной проблемой - чтение регистра пина сразу после записи мой вариант успешно справляется. Ну да, неоптимально, с потенциальными граблями при многопоточности, но работать должно.

     

     

    Но я таки полагаю, что Petka прав.

    С этим полностью согласен.

  14. Проще всего, разумеется, ничего не читать вообще

    Универсальный совет :-D

     

    Самая простая и тупая доработка:

    // было
    LPC_GPIO1->FIOPIN |= (1<<14 | 1<<15);
    LPC_GPIO1->FIOPIN &= ~(1<<16 | 1<<17);
    
    // стало
    int tmp;
    tmp = LPC_GPIO1->FIOPIN;
    tmp |= (1<<14 | 1<<15);
    tmp &= ~(1<<16 | 1<<17);
    LPC_GPIO1->FIOPIN = tmp;

    При желании (в ущерб удобочитаемости) можно переписать в одну строку.

     

    Ну и поддержу более правильные советы - использовать регистры SET / CLR.

  15. IRAM1 и IRAM2 будут разными регионами, даже если они вплотную примыкают друг к другу

    Проблема как раз в том, что между двумя областями памяти расположена "дырка".

    Если б её не было, можно было б объявить память одним регионом и спокойно использовать целиком. То, что физически эти два банка сидят на разных шинах, ни компилятору, ни программисту не видно. Спасибо фон Нейману :)

     

    Кстати, вопрос в тему. Если я не пользуюсь DMA, с точки зрения производительности есть разница, в какой именно области памяти лежат данные?

     

    Вопрос именно по LPC17xx с его хитрый структурой шин - основной банк памяти подключен к ядру шинами D-bus, I-bus, "периферийные" (название - из "описательной" части даташита) - по шине system bus, на которой вдобавок вся периферия (через соотв. мосты).

  16. Вот такой кондёр: TAJ Standard Tantalum

    Какой у них ток утечки? что-то не нахожу.

    Есть там всё. Вот любопытный документ (гугл - наше всё!). Пролистал, вроде б ток утечки со временем даже слегка падает, т.е. на цифру максимума можно не с такой опаской смотреть.

     

     

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

     

  17. Т.е. до "неприемлего уровня" считаем вот так 0.240А / (0.000001А + (0.00002с * 0.002А )) = 230769 часов ?

    Грубо говоря, да.

    Надо только учитывать, что емкость слегка зависит от потребляемого тока - чем больше ток, тем меньше емкость. Вероятно, это связано с внутренними потерями.

    GP, в частности, приводит графики: эффект будет сказываться при нагрузках порядка 1..10 кОм.

     

     

    По птанию стоит элетролит 100mkF и кучка керамики 100nF.

    Советик: посмотрите токи утечки этого электролита. Есть вероятность, что он будет потреблять больше, чем всё остальное.

  18. сам классический SPI в его первоначальном виде

    Ищутся желающие, чтобы подать в суд на производителей SPI-флешек.

    Они незаконно написали в даташите, что их устройства работают по протоколу SPI !

  19. С программными ошибками я погорячился.

     

    Тут всплыла следующая... особенность контроллера: при переходе сигнала на входе из 1 в 0 необходимо "высосать" из ножки 0.65 мА тока. Если источник сигнала такой ток не обеспечивает, ножка подвисает "промежуточном" состоянии с уровнем 2 вольта.

    Это чудо официально документировано - Logical 1-to-0 transition current (Ports 1..4) max -650uA

    Дальше в статическом режиме всё работает нормально, нужно всего 50 мкА.

     

    Привык уже к CMOS, у которых входные токи сильно меньше 1 мкА.

    И, видимо, не только я привык... :-)

     

     

    Будем разбираться, как приделать туда какой-нибудь триггер шмидта...

  20. Спасибо.

     

    Оба варианта, Первый управляет конкретным битом, второй всем портом.

    Вопрос был в другом - существуют ли третий (четвёртый и т.д.) варианты? Чтобы поискать в софте..

    Первые два варианта подозрений не вызывают - их в исходниках банально нет :-)

     

     

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

    Схемы нет, но в табличке уровней выходных напряжений это явно прописано.

     

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

     

     

    PS если кому-то интересно, документация.

  21. Свалилась тут такая задачка.

     

    Есть у нас изделие на w78e516. Продаётся оно уже лет 5, а автор года три как работает в совсем другом месте.

     

    Есть у этой штуки датчик, подключенный напрямую на P2.7 контроллера: низкий уровень - нормальная работа, высокий - ошибка.

    Недавно датчики поменялись, и выход у них стал очень слабый.

     

    И вылезла крайне неприятная особенность - после срабатывания датчика 0 -> 1 -> 0 на ноге контроллера появляется подтяжка (?!).

    Раньше датчик успешно её "перетягивал", всё было хорошо. Теперь его просто не хватает, чтобы установить на ноге устойчивый ноль.

    Токи не померял, теперь только в понедельник...

     

     

    Вопросы:

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

    Я правильно понимаю, что у него есть только один регистр управления (даташит об этом умалчивает, подразумевая, что порт - стадартный для семейства) ?

    - в даташите есть опечатка - Source current для P2 упоминается дважды - как для push-pull (до 20 мА), так и как для открытого коллектора с подтяжкой (до 0.25 мА). Кто прав?

    - как переключается этот вывод? Только setb p2.7 и mov p2 .. ? Чтобы понять, что искать в исходниках.

    - и вообще, возможно ли включение-выключение этой подтяжки в принципе? На практике я её видел, а вот почитал теорию, и начал сомневаться...

     

     

    PS за вопросы прошу не пинать. Железяка эта существовала по принципу "работает - не трогай", и представление о её внутренностях у меня ещё вчера было весьма смутным. Более того, я с 51-м ядром и не работал никогда...

  22. При нажатии клавиши может отобразиться много цифр на индикаторе.

    Ну так надо ждать, пока пользователь отпустит клавишу. Или, по-хорошему, вводить алгоритм подавления дребезга.

     

    И в третий раз говорю, что в той строчке есть ошибка.

     

     

    А каким образом?

    Сейчас ввод цифр производится в основном цикле, а математика - в прерывании. Может, не стоит их разносить?

     

    Программа чучуть изменилась.

    Надо не чучуть. По-хорошему, это надо переделывать, ни разу не пользуясь буфером обмена.

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

  23. Вот зачем, интересно, мы тут кучу советов надавали?..

    И ещё раз...

     

    // определяю адрес первого индикатора HL1 0x03, как переменную ADDR_HL1

    Во-первых, терминология неверная.

    Во-вторых, комментарии "масло масляное по той причине, что оно масляное" э-э... несколько мешают восприятию.

     

     

    char i,n;

    Глобальные переменные так называть НЕЛЬЗЯ. Для глобальной переменной из её названия должно быть очевидно, что там внутри находится.

    Для локальной это не так критично, хотя тоже некрасиво.

     

    if (PORTBbits.RB0==0) SIMVOL=4; //проверяю 0 на строке 1 (восемь)

    else if (PORTBbits.RB1==0) SIMVOL=5; //проверяю 0 на строке 2 (пять)

    else if (PORTBbits.RB2==0) SIMVOL=6; //проверяю 0 на строке 3 (два)

    Ну вот откуда очевидно, что SIMVOL=4 - это восемь, а SIMVOL=6 - это два?! Это явное место для применения дефайнов (или, что лучше, enum'а).

     

     

    for (i==0; i<10000; i++); //длительность задержки опрделяется величиной i

    Как уже говорили, длительность ЭТОЙ задержки определяется погодой на Марсе. Кроме того, непонятна необходимость этой задержки в принципе.

     

    Могу ли я из элементов массива (к примеру [0],[5],[8],[9],[7],[1]) создать число 58971 записью

    sprintf (a, "%06d", buf);

    Нет, конечно. Посмотрите на типы аргументов у sprintf. Для этой задачи подойдёт sscanf, но в данном случае проще вычислять значение прямо при вводе.

  24. что работа в диапазоне 450 мгц не глушится

     

    Диапазон в окрестностях 450 принадлежит нашей доблестной мили.. полиции.

    Технически его заглушить не сложнее, чем какой-то другой. Но вот юридически... что работать, что просто "шуметь" там... Не надо этого.

     

    Впрочем, если тут обсуждается подсматривающее устройство, юридические проблемы авторов явно не волнуют :-)

     

    Ответы на вопросы в топике:

    - передавать картинку, разумеется, можно, законы физики не препятствуют.

    - готового оборудования нет (точнее, мне оно неизвестно)

    - gsm телефон в подслушивающее устройство переделать нельзя.

×
×
  • Создать...