Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Страница 164 из 201 ПерваяПервая ... 64114154161162163164165166167174 ... ПоследняяПоследняя
Показано с 1,631 по 1,640 из 2004

Тема: Синтезатор на SI5351 из доступных деталей

  1. #1631
    Аватар для vadim_d
    Регистрация
    29.10.2006
    Адрес
    Санкт-Петербург
    Сообщений
    14,744
    Цитата Сообщение от ur3ilf Посмотреть сообщение
    ведущий сам не понимает что передал последний байт ведомому
    Прерывание возникает, когда ушел последний байт из буфера, это нормальная организация с точки зрения архитектуры, поскольку софт может заполнять буфер, если надо что-то передавать, но поскольку сама передача по I2C занимает время, то переключать ключи на другой интерфейс еще рано, он работает. Подобное возникает и с UART, помню мой коллега еще на первой работе писал какой-то простенький тест и удивлялся: инициализирую UART, передаю по готовности несколько символов и деинициализирую - куда пропадают 1-2 последних символа?
    Вадим


  2. #1632
    Ни когда и ни каких проблем с i2c у меня не возникало. Сделано и написано много программ для разных девайсов. Все работают как часы и даже с тремя сишками. С умом можно всё. Я реально не догоняю в чём проблема чтоб перед обращением к ведомому сделать alias пину и всё. Это примитивнейшая задача но если она зарыта в какой то либе то может быть оказаться что вообще не решаема.

  3. #1633
    Цитата Сообщение от ur3ilf Посмотреть сообщение
    Может я что то не понимаю или на STM действительно какой то свой особый протокол передачи i2c придумали с такими сложностями что ведущий сам не понимает что передал последний байт ведомому,
    Проблема в том что из HAL_I2C_Master_Trans mit возврат происходит когда последний байт только передается. Т.е драйвер положил его в буфер передачи и управление вернулось сразу. На низком уровне ( если без HAL) то все тоже самое- положил данные в регистр, байт передается по I2C, а аппаратного признака конца передачи нет. При чтении этой проблемы не возникает- пока буфер не приймется полностью возврата управления не произойдет.
    Код:
    d[0] = addr;           d[1] = data;     
    
                         
    
                      if (HAL_I2C_Master_Transmit(&hi2c, (uint16_t)  SI5351_BUS_BASE_ADDR << 1, (uint8_t *) d, 2, I2CTIMEOUT) !=  HAL_OK)
    Александр

  4. #1634
    Теперь мне кажись понятно что на С++ не возможно сделать то что элементарно делается на ассемблере и даже баскоме! Как то имел беседу с одним программистом который не смог объяснить для чего обновлять полностью весь дисплей если на нём нужно сменить всего один пиксель! Начал объяснять про драйверы, памяти, прочее и что по другому очень сложно и не правильно. Вот так вот и с i2c.

    Я в дебри i2c как на с++ не заныривал, всего лишь уяснил что обмен идёт путём прижимания линий подтянутыми резисторами в низкий уровень, а также есть стартовые и стоповые посылки. Всё предельно просто на уровне математики начальной школы! И всё работает без конфликтов, захватов и прочего.

    PS: когда изучал детально i2c ориентировался на этот материал http://easyelectronics.ru/interface-bus-iic-i2c.html
    и имеющийся логический анализатор.

  5. #1635
    Цитата Сообщение от ur3ilf Посмотреть сообщение
    еперь мне кажись понятно что на С++ не возможно сделать то что элементарно делается на ассемблере и даже баскоме!
    С++ тут не причем- просто создатели I2C аппаратного примененного в STM32 первых серий не вывели в регистр состояние окончания передачи для мастера, только для слейва. Ну нету признака конца передачи, хоть ты тресни. И на ассмемблере будут те же грабли. Потом конечно поправили, но грянул вирус и микросхем новых серий стало не купить. А вылезло все это именно при применении SI5351 когда оказалось что ее версию в 20 ногом корпусе с ножкой выбора альтернативного адреса достать невозможно. А ожидать по таймауту при сканировании анализатора по диапазону- слишком долго для полутысячи точек.
    Был кстати вариант с аппаратным детектором стопа на внешнем логическом элементе, который ножку контроллера дергал.
    Поэтому спаслись этим регистром ( недокументированным) Си-шки
    0x0007[7:4],I2C_ADDR_CTRL,0,0x0
    Один раз его можно прописать и в режиме дрыгоножества или таймаута подождать. А потом замкнуть шину ключем и свободно работать с двумя микросхемами.
    Александр

  6. Спасибо от ur3ilf

  7. #1636
    Цитата Сообщение от khach Посмотреть сообщение
    просто создатели I2C аппаратного примененного в STM32 первых серий не вывели в регистр состояние окончания передачи для мастера
    Ах вот оно в чём дело - проблема с аппаратным интерфейсом. Я этого не знал так как на AVR с этим всё в порядке. Но с программным проблем быть не должно.
    С STM я не работаю. Хватает AVR и если честно мне совсем не понятно зачем там всё делают так громоздко с кучей либ для по сути простейших действий и обработок.

  8. #1637

    Регистрация
    15.02.2014
    Адрес
    Алексеевка (город на Тихой Сосне).
    Сообщений
    2,626
    Записей в дневнике
    1
    Позывной
    RC3ZQ (ex RA3ZQN)
    Цитата Сообщение от ur3ilf Посмотреть сообщение
    У меня в приёмнике дисплей- два цапа MCP4725 и сишка висят на одной шине i2c на AVR без DMA и прочего. Всё читается и пишется вообще без проблем.
    Замечательные ЦАПы mcp4725, но есть одно печальное ограничение -только можно назначить им два адреса по i2c шине, что ограничивает использования больше двух штук на одной шине i2c.
    Была задача сделать на них балансировки смесителя для квадратурного маламута , что успешно было проделано.

  9. #1638

    Регистрация
    12.09.2006
    Адрес
    Болгария, Силистра, KN34PC
    Сообщений
    1,420
    Позывной
    LZ2WSG
    Цитата Сообщение от RC3ZQ Посмотреть сообщение
    ... но есть одно печальное ограничение -только можно назначить им два адреса по i2c шине, что ограничивает использования больше двух штук на одной шине i2c..
    OFFTOP: Подключите их через I2C switch (напр. TCA9548A: 8-channel I2C-bus switch) и добавьте столько, сколько нужно.
    A для минимизировать нагрузку (и возможные помехи), у некоторых (TCA9545A) есть INT.

  10. #1639

    Регистрация
    15.02.2014
    Адрес
    Алексеевка (город на Тихой Сосне).
    Сообщений
    2,626
    Записей в дневнике
    1
    Позывной
    RC3ZQ (ex RA3ZQN)
    veso74,
    Это свитч нужно предусмотреть в программе. я кроме визуального программирования ничего не умею. Это flprog.


  11. #1640

Страница 164 из 201 ПерваяПервая ... 64114154161162163164165166167174 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Малогабаритный 9 Band синтезатор с САТ из доступных деталей
    от ur3ilf в разделе Конструкции на микроконтроллерах для радиолюбителей
    Ответов: 2301
    Последнее сообщение: 22.03.2024, 05:39
  2. Маркировка деталей
    от в разделе Для начинающих
    Ответов: 45
    Последнее сообщение: 12.11.2022, 00:15
  3. КВ-передатчик из Б/У деталей
    от RX6DL в разделе Непроверенные идеи
    Ответов: 32
    Последнее сообщение: 14.05.2015, 08:24
  4. Многофункциональный частотомер из доступных деталей до 4ГГц
    от Eddy71 в разделе Конструкции на микроконтроллерах для радиолюбителей
    Ответов: 10
    Последнее сообщение: 28.04.2013, 10:59

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •