2:18 с глюками и аппаратными проблемами с шиной i2c на камнях stm32f103 я первый раз столкнулся в 2019 году и сначала подумал что это косяк микроконтроллера и всю партию из 50 чипов я забраковал и отложил в сторонку. На тот момент я не нашёл информации в интернете как это лечить. Тогда я несколько дней провозился с логическим анализатором и отладкой. В итоге я пришёл к такому решению - параллельно подтягивающему резистору линии SDA припаиваем конденсатор 22пФ. Всё!!! Как бабки отшептали. Дальше я эти глюки встречал только когда на старых платах забывал параллельно резистору припаять конденсатор. В новых платах по умолчанию рисую для кондёра место.
Олег, спасибо за ваши уроки, прохожу каждый укров шаг за шагом. Все интересно и понятно! Но есть один вопрос: на 19:19 вы начинаете побитово считать секунды. Я не понял зачем вы туда 48 секунд побитово вбили? Что это дало? я понял,что первые 4 бита отвичают за секнды от 0-9 и 2ые 4 бита отвичают за минуты от 0 до 59, но почему вы туда 48 в битовом формате забили?
Как я понял к нам приходит пакет данных с датчика времени в бинармном формате скажем 0100 1000, где первый 4 бита несут в себе 0,1,2,3,4,5, а вторые 4 бита 0-9 секунды. Соответственно вы умножаете на 10 первое значение и суммируете секунды со вторых 4 битов. Вроде просто, но пришлось "переспать" с этой мыслью, чтобы понять)
По usb тоже будет. В будущем планирую по-фану рассмотреть протоколы от тех же джойстиков денди и сделать переходник на usb. На счет МК: как повезет) мой первый мк с китая был подделкой. Поэтому я и купил один мк в чип и дип, чтоб перепаять) я про него еще в уроке #00 говорил)
Мне тоже интересно, если честно 😀поэтому я в ступоре тогда долго был. Я в своей группе в вк описывал эту проблему. Даже видео выкладывал туда. Там была куча догадок, но так и не пришли к общему решению.
Вместе с принтф вы скорее всего добавляли какую-нибудь строчную константу. Константа идет в секцию данных и компилятор с компоновщиком устраивают там немного другое распределение, в результате которого после вашего двухбайтного буфера не оказывается ничего критичного - штук 5 неиспользуемых байт вполне достаточно.
Апаратный глюк есть в 103 серии и только на определенном I2c уже не помню каком, лично нарывался на него, проще было взять другой I2c чем костылить проблемный. Ушел на 303 камни.
@@Solderingironspb И более фаршированные , правда с тем же I2C немного по другому работа идет и не только с ним, хотя в HAL наверное тоже самое, я просто пользую LL .
С компьютера на DS321 отправляются данные актуальной даты и времени? А если STM32 не будет подключен к компьютеру? В ручном режиме как то можно поправить время и дату? При отключенном STM32 от компьютера. Как вообще регистры в DS321 работают? Может достаточно в эти регистры записать актуальные данные даты и времени? А инкрементация даты и времени в этих регистрах происходит автоматически?
С компьютера по usart можно отправить настройки, в ручном режиме конечно же тоже можно, если меню сделаете или еще что на мк. Вам и нужно просто в регистры залить данные, а потом они уже сами инкрементироваться будут.
@@Solderingironspb С помощью функции HAL_I2C_Mem_Write я записал значение в регистр секунд, минут итп. Теперь непонятно что делает HAL_I2C_Master_Transmit Вы ведь не посылаете данные о времени на компьютере. Что записывается тогда в регистры при применении HAL_I2C_Master_Transmit?
@@Solderingironspb Я написал такой же код как у вас, но получаю не дату и время из компьютера. HAL_I2C_Master_Transmit не служит для записи значения по адресу. Для записи значения по выбранному адресу служит функция HAL_I2C_Mem_Write. Идея вообще первоначально какая? Пишешь HAL_I2C_Master_Transmit с адресом 0х00 и заполняешь все регистры DS3231 автоматически? Отлично, но во первых вы этого не говорили, а во вторых не думаю, что это так происходит. Может вы каким то другим способом уже записывали точные значения даты и времени в DS3231 и эти значения каким то образом там хранились?
Очень и очень крутое объяснение и обучающий урок (тьфу-тьфу не сглазить). Спокойный, нормальный голос и пояснения. Огромная благодарность Вам.
2:18 с глюками и аппаратными проблемами с шиной i2c на камнях stm32f103 я первый раз столкнулся в 2019 году и сначала подумал что это косяк микроконтроллера и всю партию из 50 чипов я забраковал и отложил в сторонку. На тот момент я не нашёл информации в интернете как это лечить. Тогда я несколько дней провозился с логическим анализатором и отладкой. В итоге я пришёл к такому решению - параллельно подтягивающему резистору линии SDA припаиваем конденсатор 22пФ. Всё!!! Как бабки отшептали. Дальше я эти глюки встречал только когда на старых платах забывал параллельно резистору припаять конденсатор. В новых платах по умолчанию рисую для кондёра место.
а емкость кондера зависела от номинала резистора?
Отличные обучающие уроки. Вот ещё бы по nrf24l01 уроки увидеть. В ардуино часто передача происходит по таким модулям
В будущем может рассмотрю его)
Олег, спасибо за ваши уроки, прохожу каждый укров шаг за шагом. Все интересно и понятно! Но есть один вопрос: на 19:19 вы начинаете побитово считать секунды. Я не понял зачем вы туда 48 секунд побитово вбили? Что это дало? я понял,что первые 4 бита отвичают за секнды от 0-9 и 2ые 4 бита отвичают за минуты от 0 до 59, но почему вы туда 48 в битовом формате забили?
Как я понял к нам приходит пакет данных с датчика времени в бинармном формате скажем 0100 1000,
где первый 4 бита несут в себе 0,1,2,3,4,5, а вторые 4 бита 0-9 секунды.
Соответственно вы умножаете на 10 первое значение и суммируете секунды со вторых 4 битов. Вроде просто, но пришлось "переспать" с этой мыслью, чтобы понять)
@@diyarkhamzin205 совершенно верно)
Спасибо,хорошие примеры.Надеюсь когда нибудь увидеть примеры по работе с usb .Купленные в Китае и чипдипе ,есть разница?
По usb тоже будет. В будущем планирую по-фану рассмотреть протоколы от тех же джойстиков денди и сделать переходник на usb. На счет МК: как повезет) мой первый мк с китая был подделкой. Поэтому я и купил один мк в чип и дип, чтоб перепаять) я про него еще в уроке #00 говорил)
@Student Programmer да при любой работе с данными, будь то вывод текста или принятие чего-то в буфер, если помещать большее в меньшее, то все виснет.
Мне тоже интересно, если честно 😀поэтому я в ступоре тогда долго был. Я в своей группе в вк описывал эту проблему. Даже видео выкладывал туда. Там была куча догадок, но так и не пришли к общему решению.
Вместе с принтф вы скорее всего добавляли какую-нибудь строчную константу. Константа идет в секцию данных и компилятор с компоновщиком устраивают там немного другое распределение, в результате которого после вашего двухбайтного буфера не оказывается ничего критичного - штук 5 неиспользуемых байт вполне достаточно.
@@vasyivanov5724 вполне может быть) я уж, если честно, и не вспомню. Столько воды уже утекло с того времени))
Про радио RDA5807M было бы интересно посмотреть.
Апаратный глюк есть в 103 серии и только на определенном I2c уже не помню каком, лично нарывался на него, проще было взять другой I2c чем костылить проблемный.
Ушел на 303 камни.
Я сейчас тоже закупил f3 серию, а именно stm32f302cbct6. Отличная замена f103, которого сейчас днем с огнем в магазинах не найдешь))
@@Solderingironspb И более фаршированные , правда с тем же I2C немного по другому работа идет и не только с ним, хотя в HAL наверное тоже самое, я просто пользую LL .
В HAL точно так же)
С компьютера на DS321 отправляются данные актуальной даты и времени?
А если STM32 не будет подключен к компьютеру?
В ручном режиме как то можно поправить время и дату?
При отключенном STM32 от компьютера.
Как вообще регистры в DS321 работают?
Может достаточно в эти регистры записать актуальные данные даты и времени?
А инкрементация даты и времени в этих регистрах происходит автоматически?
С компьютера по usart можно отправить настройки, в ручном режиме конечно же тоже можно, если меню сделаете или еще что на мк. Вам и нужно просто в регистры залить данные, а потом они уже сами инкрементироваться будут.
@@Solderingironspb
С помощью функции HAL_I2C_Mem_Write я записал значение в регистр секунд, минут итп.
Теперь непонятно что делает HAL_I2C_Master_Transmit
Вы ведь не посылаете данные о времени на компьютере.
Что записывается тогда в регистры при применении HAL_I2C_Master_Transmit?
@@Solderingironspb
Я написал такой же код как у вас, но получаю не дату и время из компьютера.
HAL_I2C_Master_Transmit не служит для записи значения по адресу.
Для записи значения по выбранному адресу служит функция HAL_I2C_Mem_Write.
Идея вообще первоначально какая?
Пишешь HAL_I2C_Master_Transmit с адресом 0х00 и заполняешь все регистры DS3231 автоматически?
Отлично, но во первых вы этого не говорили, а во вторых не думаю, что это так происходит.
Может вы каким то другим способом уже записывали точные значения даты и времени в DS3231 и эти значения каким то образом там хранились?
Судя по отсутствию дизлайков - кря-тины (это такая порода гусей) сюда не заходят.