В недоумении. Простой проектик (CVAVR 3/12): значение АЦП отображается в первой строке (16 знакомест). По этой величине вычисляется другая и отображается во второй строке (16 знакомест). Зацикливаемся. При изменении напряжения на входе АЦП - на LCD меняются показания ТОЛЬКО во второй строке! Значение в первой строке стоит, как вкопанное. Если сделать сброс, оно обновится. Работает так, как в Протеусе, так и в железе. Сто раз лепил такое не задумываясь, - и никаких проблем... Насоветуйте, может, чего... Под спойлером фрагмент кода, во вложении - проект CVAVR и Протеус
Спойлер... #include <alcd.h>
// Declare your global variables here unsigned int v_in, dlit, dlit_max = 1000; char string_out[16];
...
while (1) { //lcd_clear(); // без этого сброса отображение работает некорректно! v_in=get_adc();
// вывести напряжение в 1 строке lcd_gotoxy(0,0); sprintf(string_out," input: %1u.%02u V ", v_in/100, (v_in-(v_in/100)*100)); lcd_puts(string_out);
// вычислить dlit по входному напряжению dlit = (unsigned long int)dlit_max*v_in/500;
Дык в Протеусе так же криво отображается. Так что вряд ли в дисплее дело. Ну попробовать-то можно. Может, с настройками проекта в CVAVR что-то не так? А то код я всяко уже вертел и - сплошной неадекват. Например, если выводить одну строку дважды по gotoxy(0,0) - она и во второй строке отобразится! И обе будут правильно ослеживать - показывать! Я и в string_out[32] обе объединял с одним выводом, - тоже криво, первая строка так же "замерзает" - не меняется. Весна, что ли действует?
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
сам с подозрением на эту строчку смотрел, но в моей практике подобные ошибки приводили не к "замерзанию" строки, а к выводу странного мусора на ЖКИ... потому и смолчал. а проект целиком смотреть не стал, ибо CVAVR не уважаю...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
массив-строку вы сделали из 16 позиций, как размер дисплея, так? а терминирующий ноль, обязательный для строк, куда писать? вот и начинаются чудеса на виражах...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Можно! Ну тады и Вам большое спасибо! Что-то это знание меня стороной обошло. Как только не наступил ни разу на эти грабли прежде, - вот где магия! Пойду-ка покопаюсь в старых проектах, прям любопытно очень... Спасибо всем, кто читал и думал!
У вас в sprintf используется формат с "фиксированным" числом разрядов и, как я понял, вы пробелами догоняете длину формата до 16 позиций. Но не забывайте, что sprintf плюет на ограничение числа разрядов, если выводимое число не умещается в заданное количество позиций! Если у вас перед точкой должно выводиться числ 10, оно и займет 2 позиции, хотя в формате выделена одна... и в этом случае итоговая длина строки будет не 16, а 17 позиций, что уже не поместится в буфер. а еще и нолик в конце...
со строками в Си надо очень осторожным быть...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
...пробелами догоняете длину формата до 16 позиций. Но не забывайте, что sprintf плюет на ограничение числа разрядов, если ...
Спасибо, это я помню. Заполняю 16 позиций здесь, чтобы, не очищая весь LCD, стереть предыдущий текст. По размерности здесь все прогнозируемо, пример очень простой. Оттого траблы совсем не ожидались. А нужен был источник условно одиночного импульса регулируемой длительности для тестирования другой схемы, что успешно проделал и с "кривой" индикацией. Собственно, 2-я строка и нужна была только. Индикацию делал для наглядности, так-то она нафиг не нужна. Нашел в литературе про 0х00 - необходимый символ конца строки. Не попадал на это до сих пор, так как обычно использовал строковые переменные большей, чем 16 длины для использования их в программе в разных целях, вот и хватало всегда для LCD.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения