реклама на сайте
подробности

 
 
> Вывод на LCD
Alf162
сообщение Jul 20 2009, 16:07
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 16-07-09
Пользователь №: 51 316



Переменная v - результат АЦП. Для вывода на LCD этого значения написано (CodeVision):

v = v*2560/1024;
lcd_putchar ( (v/1000)%10 + 0x30 );

Первая строчка понятна. Там включен внутренний ИОН на 2560 мВ. А вторая строчка - это вывод едениц вольт. А что означает +0x30 и для чего. В протеусе без этих 0x30 вообще ничего не выводится.
СУВ
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 24)
aaarrr
сообщение Jul 20 2009, 16:11
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



0x30 - ASCII код символа '0'.

P.S. Два деления на вывод одного символа - это, конечно, кошмар sad.gif
Go to the top of the page
 
+Quote Post
Vishv
сообщение Jul 20 2009, 16:17
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 310
Регистрация: 11-07-09
Из: Екатеринбург
Пользователь №: 51 154



Очень просто: 0х30 это смещение для цифо в кодовой таблице ASCII (кажется так) например код цифры 2 соответствуеь коду 0х32. Саму таблицу можно найти либо в книгах по программированию, либо в самом РС (например WORD->Втавка->Символ (латинская кодировка)).
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 20 2009, 16:18
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(aaarrr @ Jul 20 2009, 20:11) *
P.S. Два деления на вывод одного символа - это, конечно, кошмар sad.gif

И вообще, давно уже пора эту глупую десятичную систему упразднить...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 20 2009, 16:21
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(MrYuran @ Jul 20 2009, 20:18) *
И вообще, давно уже пора эту глупую десятичную систему упразднить...

Глупо не пользоваться десятичной системой, а делать это столь неэффективным способом. Увы, практически общепринятым.
Go to the top of the page
 
+Quote Post
Alf162
сообщение Jul 20 2009, 16:23
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 16-07-09
Пользователь №: 51 316



Цитата(Vishv @ Jul 20 2009, 20:17) *
Очень просто: 0х30 это смещение для цифо в кодовой таблице ASCII (кажется так) например код цифры 2 соответствуеь коду 0х32. Саму таблицу можно найти либо в книгах по программированию, либо в самом РС (например WORD->Втавка->Символ (латинская кодировка)).

0x30 - это ноль в ASCII, это я в word'е посмотрел. Только там на lcd ноль не выводится unsure.gif
Go to the top of the page
 
+Quote Post
Vishv
сообщение Jul 20 2009, 16:45
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 310
Регистрация: 11-07-09
Из: Екатеринбург
Пользователь №: 51 154



Так может быть у Вас вообще цифры не выводятся (не подключен соответствующий заголовочник) попробуйте прямой вывод -
например lcd_putchar ( 0x32 ); - должно вывестись "2"
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 20 2009, 16:52
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Vishv @ Jul 20 2009, 19:45) *
например lcd_putchar ( 0x32 ); - должно вывестись "2"

А так
lcd_putchar ( '2' );
слабо?
И причем тут "заголовочники" и что по Вашему можно сделать для "вообще цифры не выводятся"???
Цитата
P.S. Два деления на вывод одного символа - это, конечно, кошмар

Остаток от деления обычно еще кошмарней, да и умножение до кучи имеется sad.gif.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Vishv
сообщение Jul 20 2009, 16:54
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 310
Регистрация: 11-07-09
Из: Екатеринбург
Пользователь №: 51 154



Так может быть у Вас вообще цифры не выводятся (не подключен соответствующий заголовочник) попробуйте прямой вывод -
например lcd_putchar ( 0x32 ); - должно вывестись "2"
Go to the top of the page
 
+Quote Post
Alf162
сообщение Jul 20 2009, 17:04
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 16-07-09
Пользователь №: 51 316



Цитата(Vishv @ Jul 20 2009, 20:54) *
Так может быть у Вас вообще цифры не выводятся (не подключен соответствующий заголовочник) попробуйте прямой вывод -
например lcd_putchar ( 0x32 ); - должно вывестись "2"

Я так понял, что он просто прибавляет ноль к имеющемуся значению. Если я пишу +0х30, то выводится 1. А если пиши +0х31, то выводится 2.
Только не очень понимаю, зачем так сделано и почему если не написать этот самый плюс, то не выводится вообще ничего
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 20 2009, 17:16
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



+0x30 - это прибавление кода символа '0', т.е. 0+0x30 даст символ '0', 1+0x30 - '1' и т.д. Если ничего не прибавлять, будут выводиться символы с кодами 0, 1 и т.д., первые 8 из них у HD44780 - это программируемые пользователем символы, в железе без инициализации будет мусор, в симуляторе могут быть нули, т.е. ничего.

Что тут можно не понимать, не представляю.
Go to the top of the page
 
+Quote Post
Vishv
сообщение Jul 20 2009, 17:20
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 310
Регистрация: 11-07-09
Из: Екатеринбург
Пользователь №: 51 154



Цитата(zltigo @ Jul 20 2009, 22:52) *
А так
lcd_putchar ( '2' );
слабо?
И причем тут "заголовочники" и что по Вашему можно сделать для "вообще цифры не выводятся"???

Остаток от деления обычно еще кошмарней, да и умножение до кучи имеется sad.gif.

Ну в принципе можно и так.. это же не принципиально..
Go to the top of the page
 
+Quote Post
Alf162
сообщение Jul 20 2009, 17:26
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 16-07-09
Пользователь №: 51 316



Цитата(aaarrr @ Jul 20 2009, 21:16) *
+0x30 - это прибавление кода символа '0', т.е. 0+0x30 даст символ '0', 1+0x30 - '1' и т.д. Если ничего не прибавлять, будут выводиться символы с кодами 0, 1 и т.д., первые 8 из них у HD44780 - это программируемые пользователем символы, в железе без инициализации будет мусор, в симуляторе могут быть нули, т.е. ничего.

Что тут можно не понимать, не представляю.

Все понял, спасибо!
Go to the top of the page
 
+Quote Post
Vishv
сообщение Jul 20 2009, 17:27
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 310
Регистрация: 11-07-09
Из: Екатеринбург
Пользователь №: 51 154



Цитата(Alf162 @ Jul 20 2009, 23:04) *
Я так понял, что он просто прибавляет ноль к имеющемуся значению. Если я пишу +0х30, то выводится 1. А если пиши +0х31, то выводится 2.
Только не очень понимаю, зачем так сделано и почему если не написать этот самый плюс, то не выводится вообще ничего

Попробуйте посмотреть символ с кодом 0х00, апотом вывести символ с этим кодом, естественно ничего не получится- это непечатные символы.
А в случаея "я пишу +0х30, то выводится 1" - это означает, что предыдущее выражение =1, а если "+0х31, то выводится 2" - также означает, что предыдущее выражение =1.
Go to the top of the page
 
+Quote Post
Alf162
сообщение Jul 21 2009, 09:34
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 16-07-09
Пользователь №: 51 316



Подключил этот LCD к mega8 как в CodeVision написано. В протеусе все нормально работало, а в железе - ничего. Программа самая простая:
lcd_init(16);
lcd_putsf ( "Ura, tovarishi!");
p.s. Vss=GND,Vdd=+5В - правильно?
СУВ

Сообщение отредактировал Alf162 - Jul 21 2009, 09:37
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 21 2009, 10:11
Сообщение #16


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Alf162 @ Jul 21 2009, 12:34) *
а в железе - ничего.

p.s. Vss=GND,Vdd=+5В - правильно?
В железе при подаче питания (без контроллера) видите засвеченные черным первые 8 знакомест? Если да - то можно телепатически предположить, что контроллер у вас мега16, индикатор висит на порту C и вы забыли снять фуз JTAGEN. Если засветки нет - проверяйте напряжение на входе контраста (Vee). Для большинства современных дисплеев его достаточно заземлить, но возможно придется подобрать напряжение от +0.5в до отрицательного (-1.5в)


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Alf162
сообщение Jul 21 2009, 10:14
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 16-07-09
Пользователь №: 51 316



Не, нечего не засвечено. Контроллер точно mega8, фузы вообще не трогал. На контраст +5В подавал
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 21 2009, 10:16
Сообщение #18


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Сергей Борщ @ Jul 21 2009, 14:11) *
Для большинства современных дисплеев его достаточно заземлить, но возможно придется подобрать напряжение от +0.5в до отрицательного (-1.5в)

Первый мой экранчик DataVision (по-моему, так назывался) очень странный был.
В однострочном режиме всё было видно отлично, а в двухстрочном пришлось подавать минус на вход контрастности.
Пришлось на отдельной ноге развешивать инвертор напряжения


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Alf162
сообщение Jul 21 2009, 10:36
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 16-07-09
Пользователь №: 51 316



Все, разобрался. На контраст действительно нужно землю, а не плюс 5В
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 21 2009, 11:08
Сообщение #20


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(MrYuran @ Jul 21 2009, 13:16) *
В однострочном режиме всё было видно отлично, а в двухстрочном пришлось подавать минус на вход контрастности.
Что логично. Мультиплекс увеличивался с 8 до 16, напряжение нужно больше. Графическим при мультиплексе 64 вообще под 19в надо.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Alf162
сообщение Jul 21 2009, 13:48
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 16-07-09
Пользователь №: 51 316



Немного лучше стало. Теперь отображается первые 8 символов, а остальные - нет. Если написать lcd_gotoxy (9,0); то вообще ничего не отображается
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 21 2009, 13:53
Сообщение #22


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Alf162 @ Jul 21 2009, 16:48) *
Немного лучше стало. Теперь отображается первые 8 символов, а остальные - нет. Если написать lcd_gotoxy (9,0); то вообще ничего не отображается
Это вторая грабля, на которую традиционно наступают начинающие пользователи таких индикаторов biggrin.gif
Дело в том, что этот индикатор представляет из себя индикатор из двух строк по 8 символов, у которого строки "склеены". Таким образом производители обходятся без дополнительного контроллера столбцов. Попробуйте вместо 9 адрес начала второй строки - 0x40.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Alf162
сообщение Jul 21 2009, 14:03
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 16-07-09
Пользователь №: 51 316



Цитата(Сергей Борщ @ Jul 21 2009, 17:53) *
Это вторая грабля, на которую традиционно наступают начинающие пользователи таких индикаторов biggrin.gif
Дело в том, что этот индикатор представляет из себя индикатор из двух строк по 8 символов, у которого строки "склеены". Таким образом производители обходятся без дополнительного контроллера столбцов. Попробуйте вместо 9 адрес начала второй строки - 0x40.

Спасибо большое! Заработало!!! Так это получается сразу (без gotoxy) 16 символов вывести не получится?

Сообщение отредактировал Alf162 - Jul 21 2009, 14:04
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 21 2009, 14:22
Сообщение #24


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Alf162 @ Jul 21 2009, 17:03) *
Так это получается сразу (без gotoxy) 16 символов вывести не получится?
Ну почему? Можно после 8-го символа вывести 0x40-8 пробелов или любых других символов - курсор прибежит на девятое знакоместо. Но с gotoxy проще wink.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 21 2009, 15:09
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Сергей Борщ @ Jul 21 2009, 19:53) *
Это вторая грабля, на которую традиционно наступают начинающие пользователи таких индикаторов biggrin.gif
Угу. Нужно внимательно прочитать всего один лист в даташите. А еще лучше написать свою функцию вывода на LCD.
Прикрепленные изображения
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 12:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.0163 секунд с 7
ELECTRONIX ©2004-2016