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

    AlanDrakes
    @AlanDrakes
    Можно подключиться к малинке через ssh и довольно нагло запустить на ней minicom на нужную консоль. Скорее всего будет /dev/ttyAMA0
    ttyAMA0 - единнственная консоль, которая доступна на пинах. К сожалению, в неё обычно очень активно сыплет информацию ядро. Потому, Вам пригодится так же эта статья.
    Ответ написан
    Комментировать
  • Как симулировать микроконтроллер STM32 и электрическую схему?

    AlanDrakes
    @AlanDrakes
    Насколько я помню, ни одна из широкодоступных программ проектирования печатных плат (в частности, тот же Proteus) не умеет симулировать 32-битные ядра. Шутка ли 4 GiB внутреннего адресного пространства, где даже чтение адреса может что-то сделать с переферией.
    Это сложно симулировать.
    Потому - только реальные платы, или же внутренняя симуляция в IDE с большим количеством ограничений (отсутствие внешней схемы, в частности).
    Ответ написан
  • Можете привести примеры микроконтрллеров?

    AlanDrakes
    @AlanDrakes
    Микроконтроллеры?
    В последнее время - приличная часть бытовой техники - всевозможные пароварки, мультиварки, микроволновые печи (те, что с кнопками, а не механическими ручками), в некоторых случаях даже лампы (те, что по Bluetooth управляются, да), вероятно даже стиральные машины.
    Про телевизоры даже не говорим, некоторые хвастаются "Двухядерным процессором"(!) (интонация рекламщика)
    Далее... Даже домашние телефоны - и те могут оснащаться микроконтроллерами (с экраном, естественно; радиотрубки, если я правильно помню - в подавляющем большинстве случаев содержат МК).
    На сладкое: Электронные часы. Формально, даже простые вида Montana (ретро) и те содержат МК. Заточеный под одну конкретную функцию, и не перепрограммируемый, но всё же.
    А относительно недавние Sony SmartWatch (что 1, что 2) - так вообще на базе STM32 построены.
    Pebble, кстати, так же работают на микроконтроллере.
    Подозреваю, что и AppleWatch, но там скорее всего, более "толстый" процессор может быть.
    Сейчас куда не посмотри, все устройства, умнее калькулятора, но глупее смартфона, будут содержать микроконтроллер.
    Ответ написан
    Комментировать
  • Почему в половинном прерывании DMA на HAL STM32 кольцевой буфер со значениями АЦП заполнен уже полностью?

    AlanDrakes
    @AlanDrakes
    1. Попробуйте уменьшить скорость выборки данных.
    2. Попробуйте увеличить количество выборок в буфере, так как можете просто не успеть среагировать на прерывание при малом размере буфера. Точнее, обработчик запустится, но может уже настать момент прерывания по заполнению буфера.
    3. Прерывание дейсвтительно будет генерироваться, когда буфер заполнен на половину.
    Попробуйте ещё быстрый вывод в консоль - тогда будет точно понятно, что где произошло.

    upd:
    Кстати, а точно срабатывают прерывания по половине передачи и полной? Есть подозрение..
    Ответ написан
    1 комментарий
  • Правильно ли я понял временную диаграмму сигналов?

    AlanDrakes
    @AlanDrakes
    Не так.
    Данные загружаются в регистр сдвига поблочно по переднему фронту тактового сигнала.
    Грубо говоря, подключите DI к MOSI (SPI), CLK к SCK (SPI), загрузите какое-то число байт (я бы предположил, что это будет либо (384/3 = 128 бит), либо (384 / 6 = 64 бит). То есть, 16 или 8 байт. Можете загрузить и 16, лишние будут вытолкнуты из регистра. Советую грузить значение 0x55 - так будут видны пиксели через один.
    Затем подать строб LATCH (дёрнуть его вниз) на произвольное время (достаточно поставить рядом команды сброса и установки пина).
    Подать команду выбора на соответствующие ключи - STB1~STB6 на заданное время.
    Протянуть бумагу.
    Посмореть на результат.

    Похоже, здесь вашу головку уже препарировали.
    Ответ написан
    6 комментариев
  • Существует ли микросхема - диктофон с записью на microSD?

    AlanDrakes
    @AlanDrakes
    Возьмите любой подходящий ARM контроллер, который справится с задачей.
    Например, STM32F4xx должно хватить и под достаточно качественный захват аудио (для диктовона, конечно) - 12 бит будет лучше, чем "телефонная линия", а скорость захвата можно выбирать вплоть до 1Msps. По идее, должен успевать кодировать и в MP3, но тут уже зависит от настроек качества. Алгоритм как-никак достаточно сложный. А вот в WAV писать вполне может и F1xx, гораздо менее мощный.
    Если хотите что-то более качественное - то уже внешний АЦП (например, ADS1202IPWT) от 20ksps, но лучше брать несколько больше, 16 бит. Одного канала будет достаточно.
    Ответ написан
    Комментировать
  • PCM1781 Что за зверь, смогу ли я его использовать как цап для блока питания с целью регулировки Блока питания?

    AlanDrakes
    @AlanDrakes
    Кажется мне, что автор хочет поставить ЦАП на месте регулирующего элемента, рядом с ШИМ-ом для ограничения напряжения/тока нагрузки.
    Ну чтож... технически - реализуемо, но это действительно получится... забавный велосипед из костылей.
    Если хотите что-то достаточно дешёвое - можно использовать линейку 74HC595 (сдвиговые регистры) + ЦАП из резисторов (R-2R матрица, хорошо ищется поисковиками). Битность можно задать по желанию.
    Количество каналов будет зависеть только от желания (линейка может быть одна, а каналов - много, просто данные будут "проталкиваться").
    Далее. Я бы так же не рекомендовал подобное решение. Во-первых, сразу ЗА ЦАП-ом потребуется буфферный ОУ. Для каждого канала. Ну и опять же, стабилизация получится достаточно шумной, как мне кажется.
    Ответ написан
  • Stm32 SPL или Регистры?

    AlanDrakes
    @AlanDrakes
    Сам пишу на какой-то дикой смеси из вырезок из HAL и самописных регистровых обращений. Вторые преобладают.
    В некоторых местах архитектура самого HAL достаточно странная и ставит буквально в тупик. Например, ETH_HAL_ReceivePacket так и не удалось заставить работать по причине того, что он просто плохо описан.
    Пришлось ваять свои шустрые велосипеды.
    С отправкой было легче, но тоже перехожу на более легковесные свои функции.
    Ответ написан
    Комментировать
  • Как помигать диодиком на stm32l152 DISCO под Linux?

    AlanDrakes
    @AlanDrakes
    Поставьте хотя бы демо-версию Keil'а. Ограничения в 32kB кода для начала будет болчее чем достаточно.
    Готовые примеры так же можно найти в сети.
    Минимальный - настройка GPIO, и через таймер менять состояние пина.
    Например, вот так:
    int main(void) {
    	RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
    	GPIOA->MODER |= 1;	// GPIOA.0.MODE -> out mode
    	GPIOA->OSPEEDR |= 3;	// GPIOA.0.SPEED -> MAX SPEED
    	while(1) {
    		for (uint32_t i=0;i<1000000;i++) {};		// Пауза
    		GPIOA->ODR ^= 1;	// Toggle GPIOA.0
    	};
    };

    Вот этот код будет мигать пином PA0.
    Ответ написан
  • Есть ли книга где описываются все интерфейсы через которые МК может общаться с периферией?

    AlanDrakes
    @AlanDrakes
    Точно так же, рекомендую обратиться в начале, к DataSheet'у выбранного контроллера, а затем уже к Википедии (лучше - англоязычной), где описаны интересные Вам интерфейсы.
    На самом деле, интерфейсов очень много и литературы, где именно они бы были подробно описаны, я не встречал. Так что, google в помощь, как говорится.
    А вообще, только минимальное количество интерфейсов, которые вообще могут быть на микроконтроллерах:
    ADC/DAC (фомрально, интерфейс)
    SPI, I2C (IIC), IIS(I2S) UART (USART будет относительно близок к SPI), i8080 (интерфейсы шины данных), CAN (высоко/низко скоростная шина данных), OneWire (не встречал аппаратного интерфейса в широкораспространённых чипах пока что, все эмулировались), USB, PHY, MII/RMII (уменьшенный интерфейс MII).
    Из более редко встречающихся внешних интерфейсов - как правило, это видео-интерфейсы вплоть до RGB-24/компонентное видео/HDMI/MIPI интерфейс, беспроводные интерфейсы в специализированных чипах.
    Боюсь, с ходу больше ничего не вспомню.
    Так что, опять же, поисковик в руки, руки в плечи, и искать! =)
    Ответ написан
    Комментировать
  • Как реализовать передачу данных с одного МК на другой через Интернет?

    AlanDrakes
    @AlanDrakes
    Про более изящные решения Вам уже посоветовали. В общем же, присоединяюсь к mortal.
    Так же, очень правильный вопрос задал Fixid - какой ширины поток планируете передавать между коптером и пультом.
    Собственно, GPRS - это минимальная задержка от 50мс и выше.
    Сеть 2G в режиме GPRS не очень производительна. Вики говорит о скорости до 171,2 кбит/c (в теории). Так что...
    WiFi канал - наиболее оптимальный вариант. В зависимости от протокола, может работать от 1-2Мбит/с до 150+Мбит/с. И, в зависимости от контроллера, который будет работать уже за WiFi чипом.
    Как вариант проще - с односторонним управлением, можете использовать приёмопередатчики на 315/433МГц, но этого лучше не делать и использовать более высокочастотные диапазоны, например, 914МГц.
    Для двусторонней связи, лучше остановиться на WiFi.
    Да замучатьт тот же ESPxx/nRF24.
    Ответ написан
  • Есть ли такие устройства?

    AlanDrakes
    @AlanDrakes
    1. Wiznet W5100 и выше. Я бы лично себе взял W5200/W5500. В идеале - последний. Вплоть до 30МБит можно выжать, если постараться. Собирается работающий проект на ENC28J60. С багами и медленной скоростью соединения (ограничение самого чипа в 10МБит/с). Подобных навалом, единственное, что чаще они НЕ-AT, а нужен драйвер (хотя и для AT он потребуется).
    2. Любой сдвиговый регистр Parallel to Serial на 4/8/16 и далее входов. Скорее всего, потребует 3 линии - Строб записи (зашёлка), тактирование и данные. С натяжкой можно повесить на SPI, но тогда уже 4 - строб записи (должен срабатывать перед nCS), OutputEnable (если инверсный - подключается к "своему" nCS), тактирование (SCK) и данные (MISO).
    Ответ написан
    Комментировать
  • Как работает логический конвертер 5v - 3.3v?

    AlanDrakes
    @AlanDrakes
    Забавная схема.
    В общих чертах:
    Предполагаем, что порт HV1 работает на приём и уровень "Плавает" (HiZ), и не подтягивается портом к 5V. Таким образом, единственная подтяжка - резистор к 3.3V.
    Когда на низковольтной части будет "1", на высоковольтной (с позволения так сказать), так же будет "1", т.к. транзисторный ключ закрыт.
    В случае "0" на низковольтной части, транзистор открывается и ток стекает с "верхнего" плеча (справа) с высоковольтной цепи в низковольтную (предполагается, что справа будет режим "вход", иначе можно таки пожечь 3.3V часть).
    Теперь предполагаем, что читает данные LV1 и вход плавает (подтянут резистором к 3.3V)
    Аналогично и обратное - когда на высоковольтной части "1", транзистор будет закрыт и не вносит изменений. 0 на высоковольтной части заставит открыться внутренний диод в транзисторе и ток будет стекать в порт HV1 (2 резистора по 10кОм и возможно, другие нагрузки "слева").
    Довольно простая схема. Подошёл бы любой P-MOSFET (да тот же IRLML2402).

    > поясните как правильно будет из 5V(logic) Arduino сделать 3.3V для ESP8266.
    Arduino:
    5V -> HV
    TX -> HV1
    RX -> HV2

    ESP8266:
    3.3V -> LV
    RX -> LV1
    TX -> LV2
    Ответ написан
    Комментировать
  • Как реализовать до 40 ШИМ выходов с микроконтроллера?

    AlanDrakes
    @AlanDrakes
    Попробуйте почитать про Binary Angle Modulation - по сути, тот же ШИМ, но программный и не слишком требовательный к ресурсам.
    easyelectronics.ru/upravlenie-bolshim-kolichestvom...
    chipmk.ru/index.php/10-raznoe/10-programmnaya-real...
    Ответ написан
    Комментировать
  • Возможно ли подключить дисплей от iphone 4 к stm32?

    AlanDrakes
    @AlanDrakes
    Нет. Сам искал мануалы, в итоге:
    Дисплей использует 2 линии LVDS (сложность #1) и протокол MIPI DPI/DSI достаточно сложен для контроллеров (сложность #2). Ну и на сладкое... подсветка состоит из 6 светодиодов и требует 18V (да, нужен будет либо импульсник, либо зарядовая помпа, либо что-то ещё) (сложность #3).
    Это если сможете найти ответную часть на разъём шлейфа..

    Лично я эту идею забросил.
    Ответ написан
    Комментировать
  • Как затактировать stm32 от внешнего кварца?

    AlanDrakes
    @AlanDrakes
    Странно. У меня запускался нормально.
    Попробуйте перенести настройку Flash памяти ДО смены основного тактового генератора.
    Помнится, на высокой рабочей частоте данные просто не смогут выбраться.
    В остальном в коде, похоже, всё в порядке.

    Если работаете в отладчике - можете прямо в процессе выполнения идти по инструкциям где-то после:
    RCC->CR |= RCC_CR_PLLON; // Запустить PLL
    И точно увидите, где возникает проблема.

    Кстати, либо можете перенести строки
    RCC->CFGR &= ~RCC_CFGR_SW; // Очистить биты SW0, SW1
    RCC->CFGR |= RCC_CFGR_SW_PLL; // Тактирование с выхода PLL
    while((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_1); // Ожидание переключения на PLL
    непосредственно после flash->acr
    Ответ написан
    Комментировать