|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 38)
|
Dec 21 2009, 13:57
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383

|
У меня уже имеется готовый вычисленный результат с АЦП, но на ЖКИ его вывести нельзя, т.к. нужно определенным образом преобразовать в "понятный" ЖКИ, вот я и спрашиваю, как это лучше сделать?
Причина редактирования: Избыточное цитирование
|
|
|
|
|
Dec 21 2009, 14:03
|

Участник

Группа:
Сообщений: 19
Регистрация: 19-12-09
Из: Питер
Пользователь №: 54 358

|
Вы задали вопрос, так укажите ссылку на ЖКИ 160203В. похоже это экзотика.
--------------------
Париться надо в бане.
|
|
|
|
|
Dec 21 2009, 14:21
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Беглый осмотр гугля показал, что оно построено на Seico M1632, а он, в свою очередь - аналог 44780, так что никакой экзотики. Хотя могу ошибаться, конечно, изучать вопрос детально лень.
Впрочем, да, вопрос чЮдный. Подозреваю, топикстартер пользуется ассемблером, т.к. я ещё не видел ни одной книжки про си, в которой не упоминался бы printf ;-)
Сообщение отредактировал esaulenka - Dec 21 2009, 14:23
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Dec 21 2009, 14:37
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383

|
Цитата(7_on_off @ Dec 21 2009, 17:03)  Вы задали вопрос, так укажите ссылку на ЖКИ 160203В. похоже это экзотика. пожалуйста http://www.arihav.com/Products/DataSheet/L...-%20Catalog.pdf  Цитата(esaulenka @ Dec 21 2009, 17:21)  Беглый осмотр гугля показал, что оно построено на Seico M1632, а он, в свою очередь - аналог 44780, так что никакой экзотики. Хотя могу ошибаться, конечно, изучать вопрос детально лень.
Впрочем, да, вопрос чЮдный. Подозреваю, топикстартер пользуется ассемблером, т.к. я ещё не видел ни одной книжки про си, в которой не упоминался бы printf ;-) нет-нет, printf ни при чем, нужно как-то преобразовать результат с АЦП в шестнадцатиричный, либо в двоичный, который можно вывести на ЖКИ
|
|
|
|
|
Dec 21 2009, 14:42
|

Участник

Группа:
Сообщений: 19
Регистрация: 19-12-09
Из: Питер
Пользователь №: 54 358

|
ЖКИ состоит из 16 сегментов. По моему его лучше использовать как барграф. Разбить динамический диапазон АЦП на 16 частей и выводить результат посегментно.
--------------------
Париться надо в бане.
|
|
|
|
|
Dec 21 2009, 14:42
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383

|
если точнее то преобразовать в тип unsigned char
|
|
|
|
|
Dec 21 2009, 14:53
|

Участник

Группа:
Сообщений: 19
Регистрация: 19-12-09
Из: Питер
Пользователь №: 54 358

|
Смотря что вы собираетесь отображать на дисплее, какой процесс и с какой точностью.
--------------------
Париться надо в бане.
|
|
|
|
|
Dec 21 2009, 15:26
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383

|
Цитата(7_on_off @ Dec 21 2009, 18:53)  Смотря что вы собираетесь отображать на дисплее, какой процесс и с какой точностью. мне нужно отображать непрерывное измерение температуры, с точностью ну где-то до 4-го знака!
|
|
|
|
|
Dec 22 2009, 09:55
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383

|
Цитата(rezident @ Dec 21 2009, 23:28)  Не ленитесь пользоваться поиском! Тема двоично-десятичного преобразования (BCD - Binary-Coded Decimal) мусолится на форуме постоянно. мне нужно преобразовать в строку то-есть в char пробую так Код temperaturefin = (temperature-41857)/154;//это вычисление температуры sprintf(buf,"%d",temperaturefin); в окне просмотра показывает нормальную температуру, а на ЖКИ высвечивается 01, непонятно
Сообщение отредактировал rezident - Dec 22 2009, 12:12
Причина редактирования: Излишнее цитирование.
|
|
|
|
|
Dec 22 2009, 10:49
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(goodking @ Dec 22 2009, 13:55)  непонятно  Непонятно, чего Вы веселитесь, вместо того, чтобы помочь желающим помочь Вам. Какие типы переменных? Какая переменная правильно видна в окне отладки? Какие их значения? temperature? temperaturefin? buf?
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Dec 22 2009, 10:57
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383

|
Цитата(Dog Pawlowa @ Dec 22 2009, 14:49)  Какие типы переменных? Какая переменная правильно видна в окне отладки? в окне отладки ставится по умолчанию, предположительно int а вот интересно, Вы спросили про значение buf в окне, я посмотрел, высветило следующее- 0x2a "0", хотя temperaturefin=14(т.е. правильно)
Сообщение отредактировал rezident - Dec 22 2009, 12:13
Причина редактирования: Нарушение п.3.4 Правил форума.
|
|
|
|
|
Dec 22 2009, 11:38
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383

|
извините, temperaturefin-long
все типы переменных-long
|
|
|
|
|
Dec 22 2009, 12:54
|

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

|
Цитата(goodking @ Dec 22 2009, 14:38)  извините, temperaturefin-long все типы переменных-long buf должен быть не лонг, а указатель на char[] Попробуйте char buf[10] (ну или 20, 30 - сколько надо символов) Цитата(rezident @ Dec 22 2009, 15:10)  В языке Си имеются и готовые функции для преобразования чисел в строку символов. Почитайте какой-нибудь "букварь" по языку Си наконец. Дык эта... sprintf вроде как раз это и делает. Только ему указатель на правильный буфер надо подсунуть Цитата sprintf(buf,"%d",temperaturefin);
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Dec 22 2009, 13:10
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383

|
Цитата(MrYuran @ Dec 22 2009, 16:54)  buf должен быть не лонг, а указатель на char[] Попробуйте char buf[10] (ну или 20, 30 - сколько надо символов)
Дык эта... sprintf вроде как раз это и делает. Только ему указатель на правильный буфер надо подсунуть нет, buf у меня как раз обьявлен char buf[10]; но все -равно на выходе какая-то ерунда выходит, 0x10 "0l"
|
|
|
|
|
Dec 22 2009, 13:35
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383

|
Цитата(MrYuran @ Dec 22 2009, 17:26)  а "HelloWorld" выводит? если константой забить, причём прямо в буфер Выводит!
|
|
|
|
|
Dec 22 2009, 15:47
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(demiurg_spb @ Dec 22 2009, 19:40)  А причём тут BCD, простите? А что по-вашему делает sprintf при указании формата %d, как не BCD + конвертация в ASCII? Цитата(demiurg_spb @ Dec 22 2009, 19:40)  Ему надо просто коды АЦП пересчитать в температуру, а её отобразить в виде строки на дисплее. Ну да. Загвоздка была как раз в отображении. Цитата(goodking @ Dec 22 2009, 20:29)  Все, разобрался, всем большое спасибо!  Разобрались - хорошо. Только нужно огласить причину, чтобы у отвечающих не пропало желание в следующий раз вновь помогать вам.
|
|
|
|
|
Dec 22 2009, 16:06
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383

|
Цитата(rezident @ Dec 22 2009, 18:47)  А что по-вашему делает sprintf при указании формата %d, как не BCD + конвертация в ASCII? Ну да. Загвоздка была как раз в отображении. Разобрались - хорошо. Только нужно огласить причину, чтобы у отвечающих не пропало желание в следующий раз вновь помогать вам. причина была в неверном присвоении типов используемых переменных!
|
|
|
|
|
Dec 23 2009, 07:34
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383

|
Цитата(rezident @ Dec 23 2009, 09:53)  Как раз начинать нужно с основ языка, типовых алгоритмов и примитивов. В следующий раз ему понадобиться float на дисплей выводить и sprintf начнет требовать такой размер ОЗУ для стека, которого просто нет в кристалле. Что вы предложите: взять кристалл "пожирнее" или самостоятельно написать простой алгоритм вывода float на индикацию? А что в таком случае надо сделать??
|
|
|
|
|
Dec 23 2009, 09:29
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(goodking @ Dec 23 2009, 10:34)  А что в таком случае надо сделать?? Застрелиться. Цитата(rezident @ Dec 23 2009, 08:53)  Как раз начинать нужно с основ языка, типовых алгоритмов и примитивов. В следующий раз ему понадобиться float на дисплей выводить и sprintf начнет требовать такой размер ОЗУ для стека, которого просто нет в кристалле. Что вы предложите: взять кристалл "пожирнее" или самостоятельно написать простой алгоритм вывода float на индикацию? Вариантов достаточно. Ну если так пойти то начинать надо было с архитектуры MCU, понятиях стек, способы адресации, способы передачи аргументов. Изучить ассемблер хотя бы одного самого примитивного семейства. А уже потом браться за Си  Ну а ещё раньше системы исчисления, форматы чисел, булеву алгебру и т.д. и т.п. Спорить дпльше не вижу смысла. Главное не загубить в человеке желания учиться и саморазвиваться! Остальное приложится!
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Dec 23 2009, 09:33
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383

|
Цитата(demiurg_spb @ Dec 23 2009, 13:29)  Застрелится. Что сделать с программой, а не с собой?
|
|
|
|
|
Dec 23 2009, 10:28
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383

|
Цитата(demiurg_spb @ Dec 23 2009, 12:46)  Нет, тут Вы не правы, с программой можно больше ничего пока не делать. А вот собой заняться стоит! Купить пару умных книжек по Си и изучить их внимательно, как вам уже здесь советовали. Хорошо, спасибо
|
|
|
|
|
Dec 24 2009, 08:46
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383

|
Читаю книжку по МК, там есть пример с выводом результата на LCD, в программе указана следующая таблица Код code byte LCDCODE[132] = {0xdb,0xd1,0xdc,0xd9,0x41,0xA0,0x42,0xa1, 0xe0,0x45,0xA3,0xA4,0xa5,0xa6,0x4b,0xa7, 0x4d,0x48,0x4f,0xa8,0x50,0x43,0x54,0xa9, 0xaa,0x58,0xe1,0xab,0xac,0xe2,0xad,0xae, 0x62,0xaf,0xb0,0xb1,0x61,0xb2,0xb3,0xb4, 0xe3,0x65,0xb6,0xb7,0xb8,0xb9,0xba,0xbb, 0xbc,0xbd,0x6f,0xbe,0x70,0x63,0xbf,0x79, 0xe4,0x78,0xe5,0xc0,0xc1,0xe6,0xc2,0xc3, 0xc4,0xc5,0xc6,0xc7}; я не совсем понимаю, для чего эта подпрограмма, и как она используется, обьясните пожалуйста!
|
|
|
|
|
Dec 24 2009, 12:20
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 21-12-09
Пользователь №: 54 383

|
То-есть таблица служит для перевода символов, которые не поддерживает ЖКИ?
|
|
|
|
|
Dec 24 2009, 12:24
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(DpInRock @ Dec 24 2009, 14:54)  Таким образом, чтобы перекодировать один байт в любой другой байт нужна таблица размером в 256 байт. Точнее 128, так как младшая половина обычно совпадает. Если брать конкретно HD44780 и выводить в формате WIN (1251), то выглядит так: Код const uint8_t __flash TabWin[] = { 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, // псевдографика 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, // псевдографика 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, // псевдографика 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, // псевдографика 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, // псевдографика 0xa2, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, // Ё псевдографика 0xfe, 0xff, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, // псевдографика 0xb5, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xfd, 0xff, // ё псевдографика 0x41, 0xa0, 0x42, 0xa1, 0xe0, 0x45, 0xa3, 0xa4, // АБВГДЕЖЗ 0xa5, 0xa6, 0x4b, 0xa7, 0x4d, 0x48, 0x4f, 0xa8, // ИЙКЛМНОП 0x50, 0x43, 0x54, 0xa9, 0xaa, 0x58, 0xe1, 0xab, // РСТУФХЦЧ 0xac, 0xe2, 0xad, 0xae, 0x62, 0xaf, 0xb0, 0xb1, // ШЩЪЫЬЭЮЯ 0x61, 0xb2, 0xb3, 0xb4, 0xe3, 0x65, 0xb6, 0xb7, // абвгдежз 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0x6f, 0xbe, // ийклмноп 0x70, 0x63, 0xbf, 0x79, 0xe4, 0x78, 0xe5, 0xc0, // рстуфхцч 0xc1, 0xe6, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, // шщъыьэюя }; Начало п/п вывода примерно так Код if(c>=0x80) { // Если символ не латинский, то c -= 0x80; // Уменьшить таблицу c = TabWin[c]; // Перекодировать }
|
|
|
|
|
Dec 24 2009, 15:13
|

Чайник, 1 литр
   
Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168

|
Отображающуюся на экране букву следует воспринимать как два компонента: графическое изображение символа, и код символа. Код символа - первичные данные, а изображение символа - функция от кода символа. Функция эта основана на кодировке - таблице соответствий кодов их графическим изображениям. Суть в том, что в разных кодировках одинаково изображаемые символы имеют разный код, или одинаковый код символа отображается в разные графические изображения в разных кодировках. То что в одной кодировке выглядит как "Абвгд", в другой выглядит как "бВЧЗД", но при этом в виде кодов символов оно одинаково. Т.о., если вы хотите чтобы набранная строка "Превед" в исходнике вашей программы на компьютере, в кодировке DOS (как предлагают авторы вашей книжки), осталась выглядеть как "Превед" и на LCD-экранчике вашего устройства, у которого своя специальная кодировка, то необходимо преобразовывать коды символов этой строки таким образом, чтобы совпали графические изображения символов. Преобразовывать на основе двух кодовых страниц. // Ваш К.О.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|