Ответы пользователя по тегу Микроконтроллеры
  • Как сделать простую многозадачность на Си?

    Ocelot
    @Ocelot
    Для ваших целей прекрасно подойдет FreeRTOS. Ее можно настроить и так, чтобы планировщик сам прерывал выполнения задач и переключался между ними, и так, чтобы задача сама отдавала управление планировщику, когда нужно. И еще всякие плюшки вроде FIFO, семафоров и т.д.
    Оно собирается под любую платформу: от AVR до x86.
    Ответ написан
    Комментировать
  • Библиотека freemodbus как отправить посылку?

    Ocelot
    @Ocelot
    Массив байт можно считывать через очереди или через файлы (команды Modbus 0x18 и 0x14). Ни то, ни другое freemodbus не умеет. Вижу два решения:
    1. Дописать поверх библиотеки расширение для FIFO.
    2. Передавать массив через функцию "Read Input Registers (0x04)"

    Какой предполагается размер массива и известен ли он в момент запроса?
    Ответ написан
  • Не могу настроить rx-tx порты, как завести клон Arduino?

    Ocelot
    @Ocelot
    1) Питание на контроллер подается? Не на плату, а на сам чип. Можно измерить непосредственно на ногах атмеги или на конденсаторах рядом.
    2) Если в атмегу не прошит загрузчик, через UART ничего залить не получится. Попробуйте подключиться через ISP (6-пиновый разъем).
    Ответ написан
    Комментировать
  • Где купить мощные процессоры для своих устройств?

    Ocelot
    @Ocelot
    Где купить просто тот же cortex-a7 ?
    Cortex A7 это ядро. А вам нужно выбрать конкретный чип на этом ядре. Поэтому открываете каталоги производителей микроэлектроники и ищете чип, который подойдет вам по параметрам.
    Допустим, нашли, выбрали. Теперь смотрим, у кого из поставщиков электронных компонентов он есть. Причем поштучно, а не партиями по 10 000.

    Как сложно его будет программировать?
    Зависит от вашего опыта. Обычно под мощные камни не пишется голое приложение-прошивка (хотя никто не запрещает). Берется какая-нибудь ОС, способная работать на этом процессоре, и приложение пишется под нее. Тут уж как повезет. Если вы просто скопируете с минимальными изменениями какую-то известную платформу, то сборка ОС под нее, скорее всего, есть. Пара ударов в бубен - и все заработает. А если железо у вас экзотическое, ОС придется дорабатывать основательно. Вы пробовали писать драйверы и функции ядра для работы с устройствами? Это очень увлекательно =)

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

    Как подключить к нему внешнее ОЗУ и т.п.
    Интрерфейсы обычно стандартные, описаны в даташитах. А дальше повторяется п.1, но уже для памяти: подбор нужного вам чипа по параметрам, поиск его в продаже и т.д.
    Когда все компоненты подобраны, нужно еще развести печатную плату под всё это. В случае Cortex A7 получится как минимум 4-слойка с BGA-монтажом и частотами под гигагерц со всеми вытекающими прелестями, вроде выравнивания длины дорожек. У вас есть опыт разработки таких плат?
    Ответ написан
    1 комментарий
  • Питание atmega328 от usb?

    Ocelot
    @Ocelot
    Не сгорит. Двухамперность блока питания говорит только о его максимальном токе. Если контроллер потребляет меньше, никто не будет в него насильно эти два ампера вкачивать.
    Ответ написан
    Комментировать
  • Как проверить исправность микроконтроллера?

    Ocelot
    @Ocelot
    Программа заведомо рабочая? На другом таком же кристалле все ок?
    Возможно, часть пинов просто неправильно сконфигурирована - не как GPIO, а как входы-выходы встроенной периферии: таймеров, USART и т.п. Вот этот зверинец вы и наблюдаете на выводах вместо своих единичек. При этом IAR будет честно показывать, что в регистрах все отлично.
    Ответ написан
  • Как достать провод reset после прошивки контроллера?

    Ocelot
    @Ocelot
    Ответ написан
    Комментировать
  • Какие каналы есть у таймеров/счетчиков микроконтроллеров 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 — еще в два раза выше.
    Ответ написан
    Комментировать
  • Прерываниями по таймерам 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 используй, юный падаван.
    Ответ написан
    Комментировать
  • Маркировка микроконтроллеров

    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
    > желательно ближе
    > цены адекватные
    > работали нормально

    Выберите любые два пункта :)
    Близко, удобно, но дорого — это Чип и Дейл Дип.
    Нормально работающие, с адекватными ценами, но далеко — это Элитан или Терраэлектроника. В плане компонентов для робототехники — ничего лучше ибея посоветовать не могу (это из того же разряда: удобно, дешево, но далеко).
    Дешево, близко, но работают неадекватно — подумайте, нужны ли вам такие вообще?
    Ответ написан
    Комментировать