Задать вопрос
  • Какие каналы есть у таймеров/счетчиков микроконтроллеров AVR?

    Ocelot
    @Ocelot
    Таймер имеет два регистра совпадения OCR1A и OCR1B - по одному на канал. Когда значение таймера достигает значения OCR1A - срабатывает первый канал, когда OCR1B - второй.
    Каждый канал можно настроить независимо от другого на генерацию прерываний, управление выводами ШИМ и т.п.

    А еще пусть вас не вводят в заблуждение имена конфигурационных регистров TCCR1A и TCCR1B (еще TCCR1C иногда бывает), они никак не связаны с каналами, это просто один большой регистр, разбитый на несколько 8-битных кусков.
    Ответ написан
    Комментировать
  • Как микроконтроллером выводить звук через ШИМ и таймеры?

    Ocelot
    @Ocelot
    Допустим, нужно сгенерировать какой-нибудь семпл — кусок звуковой волны. Неважно, что это будет: синус или что посложнее.

    1) Делим этот семпл на отсчеты. Каждый отсчет представляет собой мгновенное значение уровня сигнала (напряжение на обмотке динамика). Частота следования отсчетов — частота дискретизации — должна быть как мининум вдвое выше максимальной частоты воспроизводимого звука. Нужен голос (диапазон от 300 до 3800 Гц) — берем частоту дискретизации 7,6 кГц. Нужна музыка — еще выше.
    Значения отсчетов можно хранить в виде массивов или генерировать на лету.

    2) Каждому отсчету соответствует своя скважность ШИМ. Соотв., при частоте дискретизации 7,6 кГц нужно 7600 раз в секунду задавать новую скважность.

    3) Какая нужна частота ШИМ? Между соседними отсчетами должно укладываться несколько периодов несущей. Больше — лучше. Сколько именно — зависит от требуемого уровня шума, аналоговых фильтров на выходе и т.д. (там довольно суровый матан). Для простоты возьмем частоту ШИМ в 10 раз выше частоты дискретизации — 76 кГц.

    4) Какая должна быть разрядность ШИМ? Зависит от требуемого динамического диапазона. 8-битный ШИМ даст отношение самого громкого и самого тихого сигнала 256:1 (~24 дБ). 16-битный — 65536:1 (~48 дБ).

    5) Какая в итоге нужна тактовая частота? F = (частота ШИМ) * 2(разрядность ШИМ). Для нашего случая с 8-битным ШИМом — почти 20 МГц. Если нужен phase-correct PWM — еще в два раза выше.
    Ответ написан
    Комментировать
  • Выделение основных тонов в изображении

    Ocelot
    @Ocelot
    Можно строить гистограмму распределения Hue и искать на ней локальные максимумы. Требуется один проход по изображению (O(n)) и обработка гистограммы, сложность которой не зависит от размера картинки (O(1)).
    Ответ написан
    2 комментария
  • Хочу сам собрать батарею для BT-колонки

    Ocelot
    @Ocelot
    Напряжение батареи 7,2В, емкость 2000мАч. Шесть элементов последовательно, на каждом 1,2В — значит, это NiCd или NiMH (они взаимозаменяемы). Собрать можно из пальчиковых аккумуляторов.
    Можно было бы воткнуть Li-Ion, 2 банки (тоже получится 7,2В), но штатная зарядка не сможет его нормально заряжать, есть почти 100% шанс убить так батарею.

    PS: А может, дело не в аккумуляторах, а в зарядке? Может, они просто недозаряжаются?
    Ответ написан
    2 комментария
  • Примеры использования драйвера DS18B20 от CooCox для STM32 (несколько датчиков на линии)

    Ocelot
    @Ocelot
    1. Что возвращает DS18B20Reset()? Устройства на линии вообще отвечают на импульс сброса?

    2. С тактированием ничего не напутали? Контроллер работает именно на той частоте, которая нужна? Если тайминги будут неправильными, 1-wire работать не будет.

    Идеально было бы взять осциллограф и посмотреть, что именно творится на линии. Будет хоть ясно, то ли лыжи не едут... то ли проблема в опросе датчика, то ли в интерпретации результата.
    Ответ написан
    Комментировать
  • Идентифицировать микросхему?

    Ocelot
    @Ocelot
    Это контроллер литиевой батареи. Корпус TSSOP-8. Попробуйте поискать такие микросхемы в разных каталогах и посмотреть, какая похожа на вашу по рабочим параметрам (тип батареи, напряжение, ток), распиновке и обвязке.

    Может быть, это что-то из fortune`овских микросхем: FS8820, FS3332 или DW01MC (http://www.ic-fortune.com/eng/new_product1_1.asp)
    Насколько разглядел, по распиновке подходят: 1 и 2 пины — земля, 3 и 4 вместе, 6 и 7 тоже вместе.
    Ответ написан
    Комментировать
  • Простейшее устройство передачи данных по силовой сети?

    Ocelot
    @Ocelot
    X10 заточен под «один передатчик — много приемников», а у вас ситуация протовоположная: «много передатчиков — один приемник».
    Если не применять двустороннюю связь, избежать коллизий будет довольно сложно. Можно использовать псевдослучайные интервалы времени между посылками.

    В качестве физического уровня можете посмотреть на м/с КР1446ХК1, LM567, TDA5051, ST7538/ST7540. Готовые PLC-модемы вряд ли отвечают условию «максимально дешево».
    www.soel.ru/cms/f/?/376853.pdf
    kazus.ru/forums/showthread.php?s=e39bbb45ec79fe3141debff570162db2&t=17551
    Ответ написан
    1 комментарий
  • Как создать опрос?

    Ocelot
    @Ocelot
    habrahabr.ru/topic/add/
    Внизу ссылка «Добавить опрос».
    Ответ написан
    1 комментарий
  • Возможно ли отредактировать пост, оформив его как перевод?

    Ocelot
    @Ocelot
    Увы, нет. Только опубликовать заново, потреряв все комментарии и рейтинг.
    Ответ написан
    2 комментария
  • Влияние потока нейтронов на светодиоды?

    Ocelot
    @Ocelot
    Светодиоды будут деградировать. Хотя широкозонные п/п (SiC, InP, InGaN) из которых делают яркие светодиоды, ведут себя при облучении в среднем лучше, чем Si и Ge, они будут деградировать все равно. Нельзя также исключать деградации люминофора белых светодиодов.

    Как вариант, можно попробовать оптоволоконную подсветку: вынести источник за пределы канала и передавать свет по световодам.
    Ответ написан
    Комментировать
  • Датчики 1-wire и Raspberry Pi

    Ocelot
    @Ocelot
    С точки зрения датчика, работающего по 1-wire, нет разницы, как реализован Master: на Arduino, RPi или еще как — стандарт на то и стандарт. Так что можно подключать любые. Другое дело, что датчик влажности сам по себе довольно дорогая железяка.
    Ответ написан
  • Подключение нескольких датчиков 1w к Raspberry Pi

    Ocelot
    @Ocelot
    w1 -> 1w (1 wire)?
    Если да, то можно и даже нужно, протокол 1w явно предусматривает подключение нескольких устройств на одну шину.

    Все датчики включаются параллельно. Обращение к нужному датчику ведется по уникальному адресу, все остальные в это время не мешают. Перед началом работы необходимо провести процедуру поиска устройств, чтобы узнать адреса. Ключевая фраза для гугления: 1-wire search rom.
    Ответ написан
    Комментировать
  • Прерываниями по таймерам Arduino MEGA?

    Ocelot
    @Ocelot
    void setup()
    {
    //------ Timer0 ----------
    TCCR0A = (1<<WGM01);   // Режим CTC (сброс по совпадению)
    TCCR0B = (1<<CS00);    // Тактирование от CLK.
                           // Если нужен предделитель :
    // TCCR0B = (1<<CS01);           // CLK/8
    // TCCR0B = (1<<CS00)|(1<<CS01); // CLK/64
    // TCCR0B = (1<<CS02);           // CLK/256
    // TCCR0B = (1<<CS00)|(1<<CS02); // CLK/1024
    
    OCR0A = 123;            // Верхняя граница счета. Диапазон от 0 до 255.
                            // Частота прерываний будет = Fclk/(N*(1+OCR0A)) 
                            // где N - коэф. предделителя (1, 8, 64, 256 или 1024)
    TIMSK0 = (1<<OCIE0A);   // Разрешить прерывание по совпадению
    
    //------ Timer1 ----------
    TCCR1B = (1<<WGM12);    // Режим CTC (сброс по совпадению)
    TCCR1B |= (1<<CS10);    // Тактирование от CLK.
                            // Если нужен предделитель :
    // TCCR1B |= (1<<CS11);           // CLK/8
    // TCCR1B |= (1<<CS10)|(1<<CS11); // CLK/64
    // TCCR1B |= (1<<CS12);           // CLK/256
    // TCCR1B |= (1<<CS10)|(1<<CS12); // CLK/1024
    
    OCR1A = 2678;           // Верхняя граница счета. Диапазон от 0 до 65535.
                            // Частота прерываний будет = Fclk/(N*(1+OCR1A)) 
                            // где N - коэф. предделителя (1, 8, 64, 256 или 1024)
    TIMSK1 = (1<<OCIE1A);   // Разрешить прерывание по совпадению
    
    //------ Timer2 ----------
    TCCR2A = (1<<WGM21);    // Режим CTC (сброс по совпадению)
    TCCR2B = (1<<CS20);     // Тактирование от CLK.
                            // Если нужен предделитель :
    // TCCR2B = (1<<CS21);                     // CLK/8
    // TCCR2B = (1<<CS20)|(1<<CS21);           // CLK/32
    // TCCR2B = (1<<CS22);                     // CLK/64
    // TCCR2B = (1<<CS20)|(1<<CS22);           // CLK/128
    // TCCR2B = (1<<CS21)|(1<<CS22);           // CLK/256
    // TCCR2B = (1<<CS20)|(1<<CS21)|(1<<CS22); // CLK/1024
    
    OCR2A = 234;            // Верхняя граница счета. Диапазон от 0 до 255.
                            // Частота прерываний будет = Fclk/(N*(1+OCR2A)) 
                            // где N - коэф. предделителя (1, 8, 32, 64, 128, 256 или 1024)
    TIMSK2 = (1<<OCIE2A);   // Разрешить прерывание по совпадению
    
    sei ();                 // Глобально разрешить прерывания
    }
    
    ISR (TIMER0_COMPA_vect)
    {
        // Обработчик прерывания таймера 0
    }
    
    ISR (TIMER1_COMPA_vect)
    {
        // Обработчик прерывания таймера 1
    }
    
    ISR (TIMER2_COMPA_vect)
    {
        // Обработчик прерывания таймера 2
    }
    


    Вместо тега CODE тег SOURCE используй, юный падаван.
    Ответ написан
    Комментировать
  • Чем проклеить экструдер 3D-принтера?

    Ocelot
    @Ocelot
    Спросите в автомагазине высокотемпературный герметик.
    Ответ написан
    Комментировать
  • Маркировка микроконтроллеров

    Ocelot
    @Ocelot
    ATMEGA88PA-AU 1016
    AT — код производителя (Atmel)
    MEGA — серия контроллеров
    88 — модель. Первая восьмерка — объем флеш-памяти, есть еще 48, 168, 328
    P — технология picoPower (сниженное энергопотребление)
    A — расширенная периферия (по сравнению с версией без буквы A) добавлены каналы ШИМ, режимы таймеров, еще по мелочи. Mega88A обратно совместима с mega88.
    A — код корпуса (TQFP)
    U — выводы луженые (бывает еще MH — покрытие «никель-палладий-золото»)
    QFP32 — человеческое название корпуса

    Последние 4 цифры — номер партии. Теоретически, по нему можно узнать ревизию контроллера (см. секцию Errata в даташите).

    ATMEGA88-20AU 0634
    20 — максимальная тактовая частота. Есть еще mega88L-10 — частота ниже, но шире диапазон питающих напряжений. Для новых контроллеров (mega88A) такая маркировка не применяется, они все работают в полном диапазоне напряжений, у них нет деления на speed grades (-/L/V)
    Ответ написан
    2 комментария
  • Как в Android получить данные с микроконтроллера?

    Ocelot
    @Ocelot
    Если ttyUSB никак не захочет работать, а подключение требуется непременно через USB, можно заставить контроллер прикинуться HID-устройством (клавиатурой).
    Ответ написан
  • Чем измерить скорость света

    Ocelot
    @Ocelot
    Напрямую (по временным задержкам) измерять скорость света — не самое лучшее решение. Используйте интерферометрию или хотя бы схему Физо.

    Если уж хочется измерять «в лоб», то отсчитать 1мкс с точностью 10нс не слишком сложно. Источник света — полупроводниковый лазер, приемник — быстродействующий фотодиод (например, из тех, что стоят в оптоволоконных приемниках). Драйверы излучателя и приемника тоже можно взять оптоволоконные.
    В качестве таймера можно собрать счетчик на «быстрой» логике (семейств 74AHC/AHCT/AS/F) или на FPGA. Можно просто смотреть задержку по осциллографу.
    Ответ написан
    Комментировать