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

esaulenka

Свой
  • Постов

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

  • Посещение

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

    2

Весь контент esaulenka


  1. У меня знакомые пользуются парой дешёвых радиостанций (Midland'ы, кажется) диапазона 433 МГц. На одной настраивается VOX (есть уже почти в каждой китайской поделке), вторая вешается маме на шею. "Анализом спектра определённого диапазона частот" мама занимается самостоятельно. Работает очень хорошо. Хотя... может это ребёнок такой догадливый: хочешь что-то - кричи! :-) Почему такие штуки не продаются в каждом "Детском мире" - для меня загадка.
  2. За return должно следовать выражение того же типа, которое должна возвращать функция. В данном случае объявлена функция, которая ничего не возвращает, и писать после return ничего нельзя. Про скобки - это такая рекомендация для удобочитаемости. Необязательная, и лично я пишу без скобок. Знак <<1 означает сдвиг влево на один разряд. Результат этого действия - значение умножается на 2. Подобная методика умножения используется в "мелких" контроллерах, которые не имеют аппаратного умножителя вовсе (или этот умножитель работает очень медленно). Аналогично можно делить (аппаратное деление - штука вообще редкая). Выяснить, что получается при сдвиге на 8 разрядов, предлагаю самостоятельно. Также самостоятельно предлагаю разобраться, как АЦП раскладывает результаты своей работы по регистрам ADRESL и ADRESH, и что надо сделать, чтобы собрать его в одну переменную. Если вкратце, читать, читать и ещё раз читать.
  3. Слесарь, ну не надо вредительства! Схема защиты от сильного перезаряда/переразряда не является нормальным зарядным устройством. Вероятность того, что "рванёт", она снижает, но долговечность этой конструкции оставляет желать лучшего.
  4. Нарисуйте, пожалуйста, схему, как такая конструкция в принципе работает. С указанием направления токов и значениями напряжений в каждой точке. Ну хоть примерно, умозрительно. UPDATE. Пардон, сообразил. Если самому додумать, что один светодиод зелёный ("неправильный"), второй красный, то логика какая-то прослеживается. Я с чего-то решил, что они одинаковые.
  5. и о ЦАПах, которые на самом деле очень даже АЦП Ну и ладно. Эти входы являются опциональными, о чём написано на второй же станице даташита в разделе АЦП. По умолчанию опорными являются AVDD и AVSS. Точности в сотую вольта, с таким подходом добиться будет сложно (какая там у Вас точность опорного? 2%? а мерять-то хочется с точностью в 10 раз больше!) , ну да не с профессиональными же вольтметрами конкурировать :) Ну это явная ошибка разработчика. Если я правильно помню микрочиповские даташиты (крайний раз работал с пиками в студенчестве), где-то была специальная схема "какие ноги минимально необходимо соединить". В их число входят ВСЕ ноги питания, т.е. в данном случае по 4 ноги VSS / VDD, а также AVSS/AVDD. Вопрос привычки. При наличии нормальной паяльной станции (надо разводить на деньги начальство! хотя бы на 100$, потом очень пригодится) работы на пару минут вместе с подбором тоненькой проволочки, нагревом паяльника и протиркой результатов спиртом :)
  6. Маленький совет: при написании комментариев забыть про буфер обмена. Вообще совсем. Тогда вот это #define ADDR_HL1 0x3 // определяю адрес первого индикатора HL1 0x03, как переменную ADDR_HL1 #define ADDR_HL2 0x4 // определяю адрес второго индикатора HL2 0x04, как переменную ADDR_HL2 пишется как // определяю адреса индикаторов #define ADDR_HL1 0x3 // первый индикатор #define ADDR_HL2 0x4 // второй индикатор Пожалейте глаза того, кто это читать будет - полезной информации в первом примере куда меньше половины. И также присоединяюсь к предложению почитать книжки. Классика жанра - Керниган-Ричи, но можно и полистать более "упрощённый" вариант с упором в микроконтроллеры.
  7. Когда на нашем микроскопе сдохла лампа, наш умелец выпилил кусок текстолита по форме лампы и напаял туда штук 20 светодиодов. Светит очень хорошо, моментально включается, не моргает и не ломается. Рекомендую. Тем более тут не надо извращаться с выпиливанием круглого куска текстолита (у нас настоящая безтеневая подсветка - одна лампа окружает рабочую зону со всех сторон. Ну и блок питания, разумеется, пришлось поменять.
  8. Ну а что б ему не греться-то? Там на каждом диоде по 0.8В падает... Если верить графику из даташита, при резистивной нагрузке 1А этот мостик будет греться на 40 градусов. Это очень даже ощутимо.
  9. Единицы килогерц от источника питания - это с бааальшим запасом. А сотни кГц - это отпаять один конец дросселя в импульснике, и заглянуть, какой ток бегает через него. Я любопытен :) Спасибо, загляну. Хочется сделать универсальный инструмент. К тому же нехорошо землю рвать: земля устройства связана с заземляющим контактом сетевой вилки (напрямую, авторами китайского сетевого адаптера). Также земля связана с компьютером (кабелем RS232 или USB). Какие там токи бегают при включении шунта - не очень очевидно. Лучше чуток подумать, чем напрягать людей запросами "а закажи мне вооон ту экзотику". Техасовские операционники в Компеле (пардон, Терре) лежат, могут продать хоть одну штуку. А вот Аналог (из тех что я искал) - только под заказ. Ну и зачем месяц ждать?
  10. (соседней темой навеяло) Периодически очень хочется посмотреть форму и значение тока, потребляемое нашими устройствами. Причём хочется мерять и постоянный, и переменный ток (потребление меняется с частотой единицы кГц, но в идеале хочется заглянуть в импульсные преобразователи - там уже сотни кГц). Значения токов - от десятков-сотен мА до 5 А, напряжения - до 30 вольт. Заглядывал в гугл, народ собирает трансформаторы тока (простейший). В связи с тем, что у меня почти всегда есть постоянная составляющая, зато нет нужды в гальванической развязке, хочу попробовать обычный шунт. Более того, я уже пробовал - резистор 0.2 Ом в разрыв минуса питания (где-то далеко связан с землёй осциллографа), с него два щупа осциллографа. Шумит оооочень хорошо. Операционник воткнуть? А какой (попроще - подоступней)? Хочется, всё-таки, довольно большие напряжения и полосу побольше... У токоизмерительных TI (Burr-Brown, точнее) как-то с полосой не густо, на мой дилетантский взгляд; Analog'овских current sense amplifiers к нам не возят (а с заказом 5 штук мало кто возиться будет). Не выпендриваться и взять что-то общего применения?
  11. Самое простое - ввести понятие логического канала и отделить промежуточной функцией этот логический канал от физических пинов. Как-то так: void Channel_Set (char ch) { switch (ch) { 1: PORTB.4 = 1; break; 2: PORTB.7 = 1; break; 3: PORTC.1 = 1; break; } } void Channel_Clr (char ch) { // тут аналогично } Тогда в эту вашу zamer() надо передавать не номер пина, а номер канала.
  12. Вопрос не в тему: а с чем связано такое желание? Это оптимизация под 8-бит арифметику, чтобы индексы поменьше были?
  13. Написать 256 раз #define 0b00001111 0x0F В стандарте Си "бинарного вида" не предусмотрено. А вообще, это либо пишется как 0x0F, и конвертируется в голове, либо как #define BIT(n) (1UL<<(n)) data = BIT(3) | BIT(2) | BIT(1) | BIT(0);
  14. Там формула для "среднего по больнице" напряжения БЕЗ использования сглаживающего конденсатора. Что будет, если повесить 1000 мкФ, нарисовано чуть ниже. Формулы готовой нет, но по картинке всё предельно понятно - конденсатор заряжается практически до значения "пиков" синусоиды.
  15. Конденсатор зарядится до амплитудного напряжения, т.е. 24.6 * sqrt(2), а вольтметр показывает (должен, во всяком случае) действующее. Только ещё падение на диодах надо б учесть. Короче говоря, вольтметру теорию опровергнуть не удалось - расхождение в вольт-полтора будем считать его погрешностью.
  16. SPI на ARM

    Нарыл пример от NXP. Да, что-то они замороченное написали, для демонстрации всего-всего. На самом деле, всё крайне просто: void SPI_Init(void) { LPC_SSP0->CR1 = 0x0000; // Запрет работы SPI0 // SPI_SCR + 1 = Дополнительное (после SSP0CLKDIV и после SSP0CPSR) деление частоты = 1, // Режим SPI = 0 (CPHA = 0, CPOL = 0), Формат кадра SPI, Кадр = 8 бит LPC_SSP0->CR0 = 0x0007; // Clock prescale, even values: 2..254 LPC_SSP0->CPSR = 0x0002; // Минимальное значение; 18 МГц при частоте контроллера 36 МГц LPC_SSP0->IMSC = 0x0000; // Запрет все возможных источников прерывания от SPI0 // Включаем SPI0 LPC_SSP0->CR1 = 0x0002; // Очистка FIFO while( LPC_SSP0->SR & BIT(2) ) // Receive FIFO Not Empty LPC_SSP0->DR; // На всякий случай сбросим м/с памяти ACTIVE_SPI(); DEACTIVE_SPI(); return; } // Передает и в это же время принимает байт uint8_t SendByteSPI (uint8_t data) { LPC_SSP0->DR = data; while( LPC_SSP0->SR & BIT(4) ) // SPI0 busy ; return LPC_SSP0->DR; } Это писано под LPC1111, но модуль SSP у него точно такой же - тут просто коллега комментариев красиво понаписал :-)
  17. SPI на ARM

    мысли: - поменять осциллограф (что это? USB-приставка?) или замедлить всё происходящее на порядок, а то и на два, снизив частоту SPI. Как заработает, можно потихоньку возвращать всё назад. - в целях отладки удобнее отправлять не непонятный *text, а какие-то заранее известные значения, чтобы было понятно, что ждать на осциллографе. - поддержу идею посмотреть примеры. SPI_Send обычно пишется с одним while'ом, но при этом с вычитыванием принятого (чтобы не найти граблей при работе SPI_Receive). - прерывания для этого модуля совершенно необязательны. У меня всё прекрасно работает без них, более того, с прерываниями лично я написал бы гораздо медленнее и запутаннее (так, прикидки на пальцах).
  18. Микро-советик. Делал программатор для LPC1111, тоже было лень разбирать, что за эхо валится. Послал команду отключения эха, и несколько дней разбирался, что за хрень происходит. Почему-то чтение прошивки (для проверки) при отключенном эхе работало совершенно некорректно. Помучался-помучался и включил эхо обратно. Не так и сложно его отрабатывать (во всяком случае, если оно себя "штатно" ведёт). Не исключаю, конечно, что у меня руки кривые, но на идеальность NXP'шного загрузчика теперь не расчитываю :-) Посмотрел: побайтово эхо сравнивать я поленился, но длина "что послали" и "что отразилось" совпадает. Все отправляемые строки заканчиваются /r/n, если что.
  19. Маленький советик: не надо этим злоупотреблять. Проблемы вида "я сохранил переменную в буфер, вызвал совершенно постороннюю функцию, которая для своих целей попользовалась тем же буфером, а потом в первой функции продолжил работать со своей переменной" могут попортить много нервов. В вышеописанной ситуации всё просто и понятно, но когда код чужой, уровней вложенности - штуки 3, а переменная портится далеко не всегда... Самое забавное - это костыли вида "тут я сохраню переменную из буфера в локальную копию, вызову функцию, а потом восстановлю буфер". Т.е. автор о проблеме знал, но ничего с ней не сделал.
  20. Ну неправда ведь! Прямо в документации написано - чем меньше у слота прерывания (VICVectAddrN, VICVectCtrlN) номер, тем больше у него приоритет. Это я ещё про FIQ не вспомнил... В общем, рекомендую читать документацию ;-) Можно начать с user manual, раздел VIC, подраздел Description. С великими гуру, которые, не зная задачи, могут утверждать "это надо, а это не надо", спорить не хочется.
  21. Не, ну можно, конечно, обойтись без деления. Например, вот так: номер знакоместа = (значение * 85) >> 8 Только зачем этот геморрой? На скорости это не должно сильно сказаться - экран чаще 10-20 раз в секунду смысла обновлять нет. Объем программы разве что...
  22. там вот эта ссылка была вставлена (слегка криво) однако вопрос я даже с картинкой не понял
  23. Почитайте ещё и вот эти рассуждения, довольно любопытно.
  24. Хочется всё-таки заметить, что слова "студент" и "разгильдяй" синонимами не являются. Я вот надеюсь, что в бытность первым, вторым был в пределах нормы :) При написании диплома очень, просто ОЧЕНЬ не хватало советов грамотных специалистов. Они у нас на кафедре были (и, надеюсь, ещё есть! долгие лета!) но, к сожалению, уровень знаний 20-30 летней давности... А помоложе кто - так и не знали нифига... :( Любой вопрос сводился к какой-то пустой демагогии :(
  25. R35 - это обычные контактные площадки, а DNP - это "do not place" ;)
×
×
  • Создать...