Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Не корректный вывод информации на экран LCD 1602

Ср мар 03, 2021 23:40:13

Не корректно выводит информацию на экран LCD 1602
Ребята поясните пожалуйста в чем может быть проблема.
Решил сделать таймер на мега 8, для электро двигателя с выводом информации на экран.
На экран выводится
Верхняя строка
1)напряжение аккумулятора.заряд-разряд.
2)напряжение солнечной батареи. подзарядка акума.
3)ток потребления эл.двигателем.
4)Направление вращения,стрелочки << или >> реверсивное вращение.
Нижняя строка.
1)заданное время работы.
2)время работы с отсчетом времени от нуля до заданного времени.
3)номер режима.
4)скорость вращения.
5)знаки пуск >>>, стоп |||
Писал программу (как мог, я только учусь) писал все блоками сначала одно, потом другое и проверял в работе тоже по одиночке.
По одиночке все работает, как все соединил в одну кучу вот здесь и началось.
Вот сам вопрос:
Выводимая инфа работает через раз, то нормально, то местами лезет друг на друга, вместо должных циферок выводит что попало.
Как должно быть.
Изображение
Если поиграть кнопками стоп, реверс, пуск выскакивают не понятно какие цифры. Начинает жить своей жизнью.
Бывает высвечивает вообще черти что!
Изображение
Перезапуск помогает, бывает цикл отрабатывает нормально, на следующий запуск опять срывает.А бывает с самого начала начинает фальшивить.
Все координаты указаны и проверенны досконально, ни где не пересекаются.
Заметил это явление в протеусе, грешил на него, думал может не справляется. Собрал в железе, проявилось тоже самое.
Ребята может кто подскажет в чем может быть проблема?
Все сырое не доделанное, как по мне нужно решить эту проблему ну а потом продолжать дальше.
Вложения
Радио кот.rar
(44.13 KiB) Скачиваний: 303

Re: Не корректный вывод информации на экран LCD 1602

Чт мар 04, 2021 12:51:00

Код:
interrupt [EXT_INT0] void ext_int0_isr(void)//
 {

     lcd_gotoxy(14,0);//
     lcd_putsf(">>");
     delay_ms(100);

     .........
     .........
 }


interrupt [EXT_INT1] void ext_int1_isr(void)
   {
     .........
    delay_ms(100);    // Время звучания бип кнопки
     .........

     lcd_gotoxy(0,1);  // Выводим ВРЕМЯ РАБОТЫ В минутАХ
     lcd_putsf("0");
     lcd_gotoxy(7,1);  // РЕЖИМ ИЗ ИПРОМ
     lcd_putsf("0");

     .........
     .........

 }
Дальше даже смотреть не стал :facepalm:

Акма писал(а):для электро двигателя
Очень надеюсь, что эта конструкция будет безопасной для людей :cry:

Re: Не корректный вывод информации на экран LCD 1602

Чт мар 04, 2021 12:56:04

Создайте 2 массива по 16 элементов, каждый для своей строки.
Напрямую на экран значение не выводите, изменяйте значение в массиве и выводите целиком строку.

Можете завести таймер для обновления дисплея из массива, скажем, каждые 500 мс.
Все изменения в этом массиве будут сами по себе отображаться без вашего участия.

P.S. И, как выше заметили, никаких задержек в прерывании быть не должно.

Re: Не корректный вывод информации на экран LCD 1602

Чт мар 04, 2021 14:15:26

Код:
interrupt [EXT_INT0] void ext_int0_isr(void)//
 {

     lcd_gotoxy(14,0);//
     lcd_putsf(">>");
     delay_ms(100);

     .........
     .........
 }


interrupt [EXT_INT1] void ext_int1_isr(void)
   {
     .........
    delay_ms(100);    // Время звучания бип кнопки
     .........

     lcd_gotoxy(0,1);  // Выводим ВРЕМЯ РАБОТЫ В минутАХ
     lcd_putsf("0");
     lcd_gotoxy(7,1);  // РЕЖИМ ИЗ ИПРОМ
     lcd_putsf("0");

     .........
     .........

 }
Дальше даже смотреть не стал :facepalm:

Акма писал(а):для электро двигателя
Очень надеюсь, что эта конструкция будет безопасной для людей :cry:

Вы видно не внимательно прочли!
Писал программу (как мог, я только учусь)

Re: Не корректный вывод информации на экран LCD 1602

Чт мар 04, 2021 16:59:08

Вариант который предложил Zhuk72 является универсальным, можно на одни и те же выводы подключить индикатор, кнопки и ещё что-нибудь.
Мои наработки по работе с подобным экраном выложены здесь
https://ru.files.fm/u/x9d293sku#/list/

Re: Не корректный вывод информации на экран LCD 1602

Чт мар 04, 2021 20:31:50

Вариант который предложил Zhuk72 является универсальным, можно на одни и те же выводы подключить индикатор, кнопки и ещё что-нибудь.
Мои наработки по работе с подобным экраном выложены здесь
https://ru.files.fm/u/x9d293sku#/list/

Спасибо сейчас посмотрю!

Re: Не корректный вывод информации на экран LCD 1602

Чт мар 04, 2021 22:13:32

Вы видно не внимательно прочли!
Писал программу (как мог, я только учусь)
Тогда Вам пару простых советов :
1. Почитайте про прерывания. Как они работают, зачем нужны, что они из себя представляют, и т.д...
2. Почитайте про разделяемые ресурсы.
И не просто прочитал по-диагонали и всё. А прочитал, понял и дошло в чём ошибка.
Ну, и в дополнение :
3. Принять к сведению совет Жука про буфер.
4. Не принимать всерьёз пост от Техника. Полезности для Вас в нём - ноль целых и пару сотых.

Re: Не корректный вывод информации на экран LCD 1602

Сб мар 06, 2021 10:09:13

Вы видно не внимательно прочли!
Писал программу (как мог, я только учусь)
Тогда Вам пару простых советов :
1. Почитайте про прерывания. Как они работают, зачем нужны, что они из себя представляют, и т.д...
2. Почитайте про разделяемые ресурсы.
И не просто прочитал по-диагонали и всё. А прочитал, понял и дошло в чём ошибка.
Ну, и в дополнение :
3. Принять к сведению совет Жука про буфер.
4. Не принимать всерьёз пост от Техника. Полезности для Вас в нём - ноль целых и пару сотых.

Спасибо!!
Я просил совет, то что подсказать некому! А увидел от вас: Дальше даже смотреть не стал :facepalm:
и
Очень надеюсь, что эта конструкция будет безопасной для людей :cry:
Эту конструкцию пытаюсь построить для своих целей, но не в коммерческих.
В общих чертах кое что прояснилось!
Но и былбы благодарен за более глубокие пояснения.

Re: Не корректный вывод информации на экран LCD 1602

Сб мар 06, 2021 10:30:56

Акма писал(а):Но и былбы благодарен за более глубокие пояснения.
Всё очень просто.
Все функции, для работы с дисплеем, которые Вы используете, не являются реентерабельными. А Вы их используете в своей программе, как минимум, в трёх разных потоках. Отсюда и проблемы, которые Вы описали в первом посте.
Я не зря выделил именно эти куски кода в своём ответе. Это была подсказка, а не насмешка над отсутствием опыта :roll:
Ещё раз повторюсь :
1. Почитайте про прерывания. Как они работают, зачем нужны, что они из себя представляют, и т.д...
2. Почитайте про разделяемые ресурсы.


Добавлено after 1 minute 2 seconds:
PS: Не цитируйте полностью сообщения. Смотрится некрасиво :?
Если нажать кнопку "Редактор", то там можно выделять отдельные части сообщений для цитирования.

Re: Не корректный вывод информации на экран LCD 1602

Вс мар 07, 2021 11:05:53

Заголовок: Не корректный вывод информации на экран LCD 1602

Акма писал(а):...
Но и былбы благодарен за более глубокие пояснения.


Для "более глубоких пояснений" нужно быть хорошо ознакомленным как со схемой устройства, так и с самой задумкой ("хотелками") относительно интерфейса.
Стыковка ранее отлаженных модулей в новой обобщающей прожке бывает иной раз полностью переделывать прототипы заставляет (это ежли прототип изначально как библиотека не был выполнен).
К сожалению под Си только с адуринкой помочь могу.
:beer:

Re: Не корректный вывод информации на экран LCD 1602

Ср мар 10, 2021 12:33:26

У абдурины есть ордна проблема, всё наковырено на один delay, если его сдвинуть, то нифига не работает.
Перед тем как изучать абдурину, извольте женится на програмисте или выучить нормальный си, только тогда абдурина станет хоть чемто понятным.
Возможно её придумали програмисты плохо владеющие разводкой плат, но учителя они вообще никакие

Re: Не корректный вывод информации на экран LCD 1602

Ср мар 10, 2021 12:41:48

Абсолютно неверное представление об АДУРИНЬЕ.
Штука весьма интересная и мощная, но ессно со своей спецификой и ограничениями для простого/продвинутого пользователя.
(варианты "школярства" при абсолютном копипасте не рассматривается).
Разводка плат там также разная, однако более специализирована для применения последовательного обмена с внешними устройствами, имеющими некоторые "мозги".
8)
Ответить