Перейти к содержанию

pvg_79

Members
  • Постов

    15
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Temruk

Электроника

  • Стаж в электронике
    Более 20 лет
  • Сфера радиоэлектроники
    Микропроцессоры, программирование
  • Оборудование
    Вольтметр В76-78/1, осциллограф Hantek DCO1202B, мультиметр FLUKE 17B+, Ц4354, АКИП-6107

Достижения pvg_79

Новичок

Новичок (1/14)

  • 10 постов на форуме
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. А то я не догадался посмотреть схемы на УНЧ. Все схемы которые мне попались и близко не похожи на мою, почти у всех блокировки сделаны через ОУ, а у меня их нет поэтому и обратился на форум, а здесь.... Я вообще такой усилитель не нахожу старый уж очень, раньше хоть картинки попадались, а сейчас и их нет. Есть схемы на подобные... скинь или дай ссылку? может есть какой-то архив со схемами??? А про конденсаторы я уже начал разбираться, что и зачем СПАСИБО.
  2. Значит это защита от перенапряжения, хорошо. А где искать защиту от понижения напряжения к примеру ниже 10-8В отключается ШИМ, если есть такая конечно??? Куда дальше копать, а конденсаторы нормальные или нет На 18В стабилитрона нет зато есть на 24В попробовал в защиту не уходит, буду заказывать на 18В.
  3. Это не стабилитрон, я ставил туда стабилитрон 4.5В, 7.6В, 12В при включении усилитель уходит в защиту. Старую детальку поставить не могу, ремонт затянулся..... деталька пропала найти не могу.
  4. Осциллограммы я проверил сразу, сигнал чистый без помех. Заменил транзисторы и диоды перед силовыми транзисторами схема вот такая: Не помогло, далее на всякий случай заменил TL494 и начал потихоньку перерисовывать схему и разбираться. Схема REM работает нормально при отключении, напряжение падает до 0.5В и затем потихоньку до 0В. Далее наткнулся на схему блокировки вот: По идее она должна как-то отключать TL494 при понижении напряжении, Я выпаял ДИОД Д1, как оказалось это не диод, на плате значок нарисован такой-же, как я нарисовал на схеме. Наверное это ограничитель напряжения?????? У кого ни будь есть такая схема, что это за элемент и какой номинал??? Да насчет конденсаторов я их проверил два конденсатора на 1uF ESR/EPS показало: последовательное 6,3 Ом параллельное 4,3 кОм
  5. Гугл знает про RLC и ESR, а про "ЕСР" я сразу не понял что написано на русском.
  6. Горят силовые транзисторы в преобразователе напряжения при выключении (снятии напряжения с rem) усилитель GoldMaster model: ANF-917. Усилитель работает нормально, если REM отключать вместе с питанием 12В ничего не сгорает, стоит отключить REM сгорает одно плечО рандомно, да там 2 трансформатора на каждом по 2 плеча. Сразу скажу схемы нет, найти не удалось. может у кого есть схема поделитесь пожалуйста или ссылку дайте. Преобразователь собран на TL494 транзисторы IRFZ44N по 3 штуки в плечо.
  7. pvg_79

    I2c Slave

    Я использую библиотеку HAL функция HAL_I2C_Slave_Seq_Receive_DMA(&hi2c1, receiveI2C, 7, I2C_FIRST_FRAME), здесь я указал число 7 это и есть максимальный размер приемного буфера и данная функция это число записывает в регистр CNDTR, а вот как считать это значение после приема данных, в этой библиотеке я не нашел. Отсюда и число 7, отнимаю (7-CNDTR = 0) Вот и мучаюсь уже почти 3 недели, не могу получить количество принятых байт. Никто не может подсказать как это значение получить, так сказать рабочую строчку выложить. Это моя первая программа на STM.
  8. pvg_79

    I2c Slave

    Все равно иногда получается 0.
  9. pvg_79

    I2c Slave

    Нет не перепутано, но почему так я не знаю? Разобрался почему не работало, я считывал значение из регистра CNDTR сразу после функции, и сразу отнимал "7 - CNDTR" и получал 0 т.к. в регистре было реально значение 7. в отладчике показывало что значение 4 и я стал считывать значение после while т.е. с задержкой. Вод рабочий код: if (transferAdres == 1) { switch (transferDirection) { case I2C_DIRECTION_TRANSMIT: if (HAL_I2C_Slave_Seq_Receive_DMA(&hi2c1, receiveI2C, 7, I2C_FIRST_FRAME) != HAL_OK) //I2C_FIRST_FRAME I2C_FIRST_AND_LAST_FRAME { //Error } while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_LISTEN); //HAL_I2C_STATE_LISTEN //HAL_I2C_STATE_BUSY_RX_LISTEN sst = (uint32_t)7 -(uint32_t) hi2c1.hdmarx->Instance->CNDTR; break; case I2C_DIRECTION_RECEIVE: if (HAL_I2C_Slave_Seq_Transmit_DMA(&hi2c1, transmitI2C, 12, I2C_LAST_FRAME) != HAL_OK) { // Error here!!! (HAL_BUSY) //Error; } while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY); //HAL_I2C_STATE_READY //HAL_I2C_STATE_BUSY_TX_LISTEN break; } transferAdres = 0; }
  10. pvg_79

    I2c Slave

    Вот почему здесь hi2c, потому, что это в функции HAL_StatusTypeDef HAL_I2C_Slave_Seq_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size, uint32_t XferOptions) { ... hi2c->XfreeSize = hi2c->hdmarx->Instance->CNDTR; ... } А здесь потому, что в главном цикле ( Main ... while(1)) То что это не связано с I2C понятно, это что-то с синтаксисом. Вот кусок кода из цикла WHILE: I2C_HandleTypeDef hi2c1; if (transferAdres == 1) { switch (transferDirection) { case I2C_DIRECTION_TRANSMIT: if (HAL_I2C_Slave_Seq_Receive_DMA(&hi2c1, receiveI2C, 7, I2C_FIRST_FRAME) != HAL_OK) //I2C_FIRST_FRAME I2C_FIRST_AND_LAST_FRAME { //Error; } //sst = (uint32_t)7 - (uint32_t)(hi2c1.XfreeSize); sst = (uint32_t)7 - (uint32_t)hi2c1.hdmarx->Instance->CNDTR; while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_LISTEN); //HAL_I2C_STATE_LISTEN //HAL_I2C_STATE_BUSY_RX_LISTEN break; case I2C_DIRECTION_RECEIVE: if (HAL_I2C_Slave_Seq_Transmit_DMA(&hi2c1, transmitI2C, 12, I2C_LAST_FRAME) != HAL_OK) { // Error here!!! (HAL_BUSY) //Error; } while (HAL_I2C_GetState(&hi2c1) != HAL_I2C_STATE_READY); //HAL_I2C_STATE_READY //HAL_I2C_STATE_BUSY_TX_LISTEN break; } transferAdres = 0; } uint32_t sst = 0; переменная объявлена до цикла и нигде не используется.
  11. pvg_79

    I2c Slave

    Спасибо, кнопки благодарности почему-то я не нахожу. Подскажи, в дебрях функции HAL_I2C_Slave_Seq_Receive_DMA() я добавил строчку кода "hi2c->XfreeSize = hi2c->hdmarx->Instance->CNDTR;" и затем обращаюсь к переменной так "sst = (uint32_t)7 - (uint32_t)(hi2c1.XfreeSize);" и получаю число принятых байт. А если напрямую обращаюсь "sst = (uint32_t)7 - (uint32_t)hi2c1.hdmarx->Instance->CNDTR;" то значение 0, хоть и в отладчике показывает значение 7 - 4 а результат 0. Я с такими конструкциями ни когда не работал, можно оставить первый вариант и результат правильный но при генерации кода из CubeMX исчезают мои изменения.
  12. pvg_79

    I2c Slave

    Конечно речь идет о слейве, как узнать количество байт принятых слейвом?
  13. pvg_79

    I2c Slave

    Люди, АУУ, кто ни будь делал, что ни буди подобное, ПОМОГИТЕ.
  14. pvg_79

    I2c Slave

    uint8_t transmitI2C[12]; uint8_t receiveI2C[7]; void HAL_I2C_ListenCpltCallback(I2C_HandleTypeDef *hi2c) { if(HAL_I2C_EnableListen_IT(hi2c) != HAL_OK) { //Error } } void HAL_I2C_AddrCallback(I2C_HandleTypeDef *hi2c, uint8_t TransferDirection, uint16_t AddrMatchCode) { UNUSED(AddrMatchCode); if(hi2c->Instance == I2C1) { switch (TransferDirection) { case I2C_DIRECTION_TRANSMIT: if (HAL_I2C_Slave_Seq_Receive_DMA(hi2c, receiveI2C, 7, I2C_FIRST_AND_LAST_FRAME) != HAL_OK) //I2C_FIRST_FRAME { //Error; } while (HAL_I2C_GetState(hi2c) != HAL_I2C_STATE_BUSY_RX_LISTEN); //HAL_I2C_STATE_LISTEN //HAL_I2C_STATE_BUSY_RX_LISTEN break; case I2C_DIRECTION_RECEIVE: if (HAL_I2C_Slave_Seq_Transmit_DMA(hi2c, transmitI2C, 12, I2C_LAST_FRAME) != HAL_OK) { // Error here!!! (HAL_BUSY) //Error; } while (HAL_I2C_GetState(hi2c) != HAL_I2C_STATE_BUSY_TX_LISTEN); //HAL_I2C_STATE_READY //HAL_I2C_STATE_BUSY_TX_LISTEN break; } } } Доброго всем вечера. Помогите с программированием I2C на stm32f373cc, а именно не могу получить количество полученных байт, я использую библиотеку HAL. Вопрос заключается в следующем, при передачи МАСТЕРОМ данных СЛЕЙВ их принимает через функцию HAL_I2C_Slave_Seq_Receive_DMA, Слейв перестает принимать после обнаружения СТОП бита, а вот количество переданных байт МАСТЕРОМ неизвестно, как узнать количество переданных байт. Данные попадают в массив receiveI2C. Мой код:
×
×
  • Создать...