Jump to content

    

khlenar

Свой
  • Content Count

    1702
  • Joined

  • Last visited

Community Reputation

0 Обычный

About khlenar

  • Rank
    Профессионал
  • Birthday 09/06/1965

Контакты

  • Сайт
    http://

Информация

  • Город
    г.Набережные Челны

Recent Profile Visitors

4916 profile views
  1. Проще применить CPLD + SRAM, а потом МК.
  2. Почему ужасно? Для терморезисторов фиксируешь значения в 2 точках температуры и запускаешь калибровку. Контроллер автоматом вычисляет таблицу коэффициентов и сохраняет во флешь. А для термопары обнуляешь, скажем пр 0 гр. и корректируешь коэффициент усиления при 100 гр.
  3. О, огромное спасибо! Вопрос по DEBUG, вернее по его окнам. Когда захожу в дебаг, раскрываю например регистр I2C1 SR1. Когда выхожу, перекомпилирую , захожу обратно, то окно SFR возвращается в исходное положение. Как можно заставить запоминать мои действия?
  4. Первым делом я все просмотрел и пропаял. Я сначало думал, что они в воздухе висят, SCL. 2 раза их пропаял
  5. Короче. Поменял контроллер и стало все норм. Он мне сразу не понравился. Не помню на чем, он подозрительно себя вел)). Я даже осциллографом не смог тактовые импульсы посмотреть (I2C), а сейчас норм
  6. Интересно, резисторы к 5в. подтягивать можно?. Вроде ничего крименального.
  7. Контроллер STM32F103C8T6
  8. Что еще интересно. Щупом осциллографа если смотрю SCL, то совсем не работает. Такое впечатление, что влияет емкость щупа. Проскакивает 1 импульс и все. Подтяжка 4.7к
  9. Здравствуйте все. Есть задача по вводу/выводу данных через микросхему расширений PCA9555 с интерфейсом I2C. Не могу считать данные. Пошагово считывает, а при запуске затыкается.. uint8_t I2CRead(uint8_t addres, uint8_t comand, uint8_t *data1, uint8_t *data2) { I2C1->CR1 |= I2C_CR1_START; while (!LL_I2C_IsActiveFlag_MSL(I2C1)); (void)I2C1->SR1; I2C1->DR = addres; while (!(I2C1->SR1 & I2C_SR1_ADDR)); (void)I2C1->SR1; (void)I2C1->SR2; LL_I2C_TransmitData8(I2C1, comand); while (!LL_I2C_IsActiveFlag_BTF(I2C1)); I2C1->CR1 |= I2C_CR1_START; while (!LL_I2C_IsActiveFlag_MSL(I2C1)); // (void)I2C1->SR1; I2C1->DR = addres+1; while (!(I2C1->SR1 & I2C_SR1_ADDR)); ВОТ ЗДЕСЬ ЗАТЫКАЕТСЯ. ПОШАГОВО ЗДЕСЬ БИТ ADDR УСТАНАВЛИВАЕТСЯ. И ФЛАГИ BTF (void)I2C1->SR1; (void)I2C1->SR2; // ожидаем окончания приема данных while (!(I2C1->SR1 & I2C_SR1_RXNE)) { } // cчитываем приянтое значение *data1 = I2C1->DR; // ожидаем окончания приема данных while (!(I2C1->SR1 & I2C_SR1_RXNE)) { } // cчитываем приянтое значение *data2 = I2C1->DR; LL_I2C_GenerateStopCondition(I2C1); // LL_I2C_AcknowledgeNextData(I2C1, LL_I2C_NACK); return I2C_OK; } В этой функции с начало пишу команду(считывание) потом посылаю адрес с битом чтения и все, затык. А пошагово проходит и считывает. Правда пошагово я проверяю флаг BTF, иначе не успевает проверить ADDR. Микросхема сконфигурирована на вход. В чем может быть дело?
  10. Пока сделал массив коэффициентов. Можно по двум точкам сопротивлений например при 25 и 100 гр.С. и заполнить массив с помощью формулы с каким то шагом. Это потом...
  11. Здравствуйте все. При наборе в редакторе какой то переменной ранее обьявленной, в Keil появляется окошко с возможными похожими именами, что ускоряет набор. Есть ли в Atollic такая фишка?
  12. На PICах тоже. 10 интервалов, а лучше меньше- это за тем, что бы оперативно можно было корректировать на самом контроллере, сохранять во флешь и цеплять разные терморезисторы. Но при большем интервале от точки до точки путем линейной интерполяции получается большая погрешность. При большом количестве интервалов, замучаешься ловить и корректировать. А так, памяти у контроллера хватает. И есть онлайны калькуляторы для заполнения таблиц с различным шагом.
  13. Схему не понял. Как это ? Там же тоже же вроде делитель получается, или как?