• Существует ли схема поиска максимума в массиве кадра за один такт?

    @Emil2014
    Зачем создавать массив, если уничтожается ближайшая? Всё равно массив в "железе" создается не за один такт и через кадр данные станут не актуальными. Уже на этапе поступления данных кадра(конечно, если кадр конечен - напр. обзор на 360грд) отбирать самый ближайшую муху. Я так понимаю, если действительно -"кадр" - то кадры будут поступать непрерывно(обзор ведется). А если серьезно, то вероятно, надо вести слежение за опасными объектом, а не за ближайшими. Т.е. если "муха" приближается с бОльшей скоростью, чем остальные, то на определённой дистанции она становится целью.
    Кстати, подобные задания ставились на codingame. И решались, вероятно.
    Ответ написан
  • Полевые транзисторы для управления от ардуино?

    @Emil2014
    На всякий случай посмотрите заряд затвора полевика, если напрямую будете ШИМить с ардуино не удивляйтесь нагреву транзистора.
    Ответ написан
  • Существуют ли микроконтроллеры с частотой 600 Мгц -- 1 Ггц?

    @Emil2014
    Наверно, STM32F4 еще можно называть микро. Но далеко еще до 600МГц!
    At 180 MHz, the STM32F469 and STM32F479 deliver 225 DMIPS/608 CoreMark performance executing from Flash memory, with 0-wait states thanks to ST’s ART Accelerator™. The DSP instructions and the floating-point unit enlarge the range of addressable applications.
    Ответ написан
    Комментировать
  • Почему блок памяти превращается в набор регистров?

    @Emil2014
    Если проект не заточен на переносимость - то можно явно инстанциировать блочную память из библиотек типовых элементов Altera EP4CE10.
    Ответ написан
  • Нужна совместить работу фоторезистора и потенциометра. Кто поможет?

    @Emil2014
    А как узнать когда Вы хотите перейти на управление от потенциометра и наоборот?
    Сейчас у Вас: у кого абс. значение больше - тот и победил.
    Возможно, если нужно немного и ненадолго "поправлять" мозги автомату, то можно запоминать значение потенциометра и каждый опрос сравнивать с текущим. Если изменилось - то перешли на ручное управление. Через Н сек бездействия вернуть управление фоторезистору, а плавность перехода управления придумается.
    Ответ написан
    Комментировать
  • Инициализация регистра. Побочные эффекты?

    @Emil2014
    Оба варианта синтезируемы. Вариант 1:
    Прошили (вкл. питание) - регистр установился "100", изменили как-то, захотели вернуться к исходному состоянию - а нет сигнала установки! Будет до отключения питания хранить последнее измененное значение.
    Вариант 2:
    Прошили (вкл. питание) - регистр установился "100", изменили как-то, захотели вернуться к исходному состоянию - дернули rst!
    В синтезе даст разные конструкции - вариант 1, возможно будет быстрее и меньше по ресурсам, чем вариант 2.
    Кстати, в ISE Xilinx симуляторе вариант 2 даст неопределенное состояние по запуску до явной подачи rst = 1. В VHDL я совмещаю оба варианта в начале определяю регистр с исходным значением, а в процессе использую сигнал сброса(установки).
    Ответ написан
    3 комментария
  • С чего начать или где найти информацию по схемотехние?

    @Emil2014
    Может изучить инфу с Altium. Книга Cабунина А.Е. "Altium Designer" по-моему свободно гуглится. Если знаешь английский, то прямо на ютубе лежат различные видео по разводке плат, вплоть до разводки DDR3. И кстати, не только по Алтиуму.
    Впрочем, надо сначала пройтись по этапам: разработка принципиальной схемы, а затем разводка.
    Ответ написан
    Комментировать
  • Какой есть гироскоп с выводом угла а не угловой скорости?

    @Emil2014
    Угол наклона получать именно с акселерометра. Измерять появление ускорения на горизонтальных проекциях (с учетом контролируемого набора горизонтальной скорости). Если появилась проекция по Y то тангаж, если по Х - крен.
    Гироскоп нужен только для борьбы с неконтролируемым вращением по определенным осям.
    Ответ написан
    Комментировать
  • Как организовать передачу данных с ADC через Ethernet PHY?

    @Emil2014
    А что-нибудь справится? 80 Мвыб/сек * (2 * 8) бит = 1280 Мбит/сек в чистых данных!
    Я перенес часть алгоритма в ПЛИС рядом с АЦП. Передаю по RS485 на 1Мбит/сек.
    Ответ написан
  • Как выбрать бит вектора?

    @Emil2014
    conversion Function использовать...
    Или в лоб
    case (ind) is 
          when "00000" =>
             arr(0) <= '0';
          when "00001" =>
              arr(1) <= '0';
          when "00010" =>
             <statement>;
          when "00011" =>
             <statement>;
          when others =>
             <statement>;
       end case;
    Ответ написан
  • Материнские платы и операционные системы для самодельных коммутаторов?

    @Emil2014
    Carambola 2 Bundle - $43.00
    8devices Carambola 2 is a member of Carambola wireless modules family and is based on Qualcomm/Atheros AR9331 SoC. Carambola 2 is a surface mountable, single sided, Wi-Fi enabled Linux module, featuring the lowest power consumption in the industry. Module comes bundled with an open source development board for a quick start of your new Internet of Things era project.
    www.8devices.com/carambola-2
    Ответ написан
    Комментировать
  • Как реализовать систему навигации мобильного робота?

    @Emil2014
    Предлагаю схему со своей системой маяков. Вдоль двух перпендикулярных стен проложить провода- антенны. На каждый провод свой генератор со своейчастотой. Двумя амплитудными детекторами определять наведенное напряжение в приемной антенне. По мощности каждой амплитуды высчитывать удаление.
    Или решить обратную задачу. Камера сверху снимает всех роботов и передает ( ИК, радио, звук) пакет с координатами всех роботов.
    Ответ написан
  • Студент и Низкоуровневое программирование?

    @Emil2014
    Не перспективно. Железячники в разработческих фирмах расходный материал. Не имеет значения как много МК, ПЛИС знаешь, не имеет значения опыт. Из-за зарплаты (в среднем 30 -50 т.р. максимум) переток инженеров в другие отрасли громаден. Отношение соответствующее "Не нравиться- увольняйся!", при несоизмеримой ответственности (по сравнению с программистами). После разработки первого прибора разраб больше фирме не нужен, дальше торгаши и манагеры.

    Беги, парень беги!
    Ответ написан
  • Где можно заказать разработку fpga платы для перебора хэшей определенного алгоритма в России и не только?

    @Emil2014
    Привет.
    Если чип уже известен(т.е. заказчик знает что он хочет), то разработка платы не будет дороже 30-60 т.р.(тысяч рублей).
    Если заказчик хочет еще алгоритм "положить" в чип, то зависит от времени. Зарплата разработчика/схемотехника FPGA в РФ не превышает 42 т.р.(тысяч рублей) в месяц - соответственно время * зарплату.
    Ответ написан
    Комментировать
  • Работа с АЦП cygnal c8051f320?

    @Emil2014
    Насколько я помню, у Silаbs есть визард -программа которая выдает заготовки на С. То есть хотите АЦП - ставьте галочку, надо в прерывании - ставьте галочку, хотите внешнюю опору- ставьте галочку и т.д. В конце программа выдаст заготовку Вашей программы.
    Ответ написан
    1 комментарий
  • FPGA: с чего начать?

    @Emil2014
    Привет.
    До 200 евро можно купить очень хорошие платы. Сейчас лучше ориентироваться на SoC - типа Altera Cyclon V и Zync70XX. Или Altera MAX10.
    Смотрите на произведения ф. Terasic - цены вменяемые, и ф. Myirtech.
    Есть очень доходчивые книги товарища Pong P. Chu. Естественно, на английском. Можно скачать Altera книгу типа "Золотые рецепты создания чего-там...".
    Ответ написан
    Комментировать
  • C# com-порт получение информации, обработка старт-бита, стоп-бита?

    @Emil2014
    Я писал на С#,делал на BackgroungWorker. Грубо вырезанный кусок кода....
    private void TransferWorker_DoWork(object sender, DoWorkEventArgs e)
            {
                // переменная для снятия из очереди
                Packet pkt;
                // массив для передачи
                byte[] wr_buf = new byte[6];
                // массив для приема
                byte[] rd_buf = new byte[6];
                // цикл до отмены работы или опустошения очереди запросов
                /// TODO теперь не выходит по завершению очереди - уменьшить на переключение контекста задач
                while ((_TransferWorker.CancellationPending == false))// && (_toTransfer.Count != 0))
                {
    
    
    case Mode_transfer.Read_ADC:// Чтение данных
                                Массив data = pkt.obj as Массив;
                                // читаем АЦП
                                wr_buf[0] = Convert.ToByte('A');
                                wr_buf[1] = (byte)0;
                                // Пишем отправляеммый пакет
                                _Serial.Write(wr_buf, 0, 2);
                                // ждем пока весь пакет уйдет или запросят отбой
                                while ((_TransferWorker.CancellationPending == false) && (_Serial.BytesToWrite != 0)) ;
                                // попытка поймать заголовок
                                try
                                {
                                    int dummy = 0, lenghtReadingPacket;
                                    bool end = false;
                                    int counter =0;
                                    while (end != true){
                                        dummy = _Serial.BytesToRead;
                                        if (dummy <= 3)
                                        {
                                            System.Threading.Thread.Sleep(1);
                                            if (counter++ > _Serial.ReadTimeout)
                                            {
                                                _dataLostArgs.ErrorPreambulaLen++;
                                                throw new TimeoutException("Preambula not full!");
                                            }
                                        }
                                        else end = true;
                                    }
                                    dummy = _Serial.Read(rd_buf, 0, 3);
                                    var dummy2 = dummy;
                                    if ((dummy != 3))
                                    {
                                        _dataLostArgs.ErrorPreambulaLen++;
                                        throw new TimeoutException("Preambula not full!");
                                    }
                                    if (rd_buf[(int)ADC_Packet.Name] != 'D'){
                                        _dataLostArgs.PreambulaLost ++;   
                                        throw new TimeoutException("Data preambula lost!");
                                    }
                                    // длина пакета в словах
                                    lenghtReadingPacket = rd_buf[(int)ADC_Packet.LenghtOfPacket];
                                    byte[] rd_buf_ADC = new byte[lenghtReadingPacket * 2 + 1];
                                    end = false;
                                    counter = 0;
                                    while (end != true){
                                        dummy = _Serial.BytesToRead;
                                        if (dummy < (lenghtReadingPacket * 2 + 1))
                                        {
                                            System.Threading.Thread.Sleep(1);
                                            if (counter++ > _Serial.ReadTimeout + 100)
                                            {
                                                var dummy3 = _Serial.Read(rd_buf_ADC, 0, lenghtReadingPacket * 2 + 1);
                                                _dataLostArgs.PoorPacket++;
                                                throw new TimeoutException();
                                            }
                                        }
                                        else end = true;
                                    }
    
                                    dummy = _Serial.Read(rd_buf_ADC, 0, lenghtReadingPacket * 2 + 1);
                                    if (dummy == (lenghtReadingPacket * 2 + 1))
                                        for (Int32 i = 0; i < lenghtReadingPacket * 2 ; i += 2)
                                        {
                                            int a = rd_buf_ADC[i];
                                            int b = rd_buf_ADC[i + 1];
                                            if (a != 0 || b != 0) data.Add(rd_buf_ADC[i] * 256 + rd_buf_ADC[i + 1]);
                                        }
                                    else {
                                        _dataLostArgs.PoorPacket++;
                                        throw new TimeoutException("Not all bytes received!");
                                    }
                                }
                                catch (TimeoutException)
                                {
                                    /// TODO ПОдумать при зависании считывания АЦП 
                                    OnADCDataLost(this, _dataLostArgs);
                                }
                                finally
                                {
                                    // Чистим за собой
                                    _Serial.DiscardInBuffer();
                                    _Serial.DiscardOutBuffer();
                                }
                                break;

    Работало на пределе из-за скорости 510416 Бод на RS485. Код довольно грязный... Но смысл был в том что, первое чтение возвращало не весь пакет. Надо ВСЕГДА проверять возвращаемые значения функций чтения. И что-то делать если пакет приходит не весь и кусками. И с задержкой, ставить timeout Exception что бы не провалится в Read навсегда.
    Ответ написан
    1 комментарий
  • Есть ли способ переслать сообщение из приложения на Android в ПК через USB?

    @Emil2014
    Android имеет в основе Linux. Возможно, если получить доступ к к системным usb/tty из приложения в Android то можно будет выводить. Лишь бы он определился на ПК как CDC - устройство.
    Ответ написан