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

 
 
> Дисплей МЭЛТ MT-16S2D, проблема с чтением информации
svamoscow
сообщение Jan 26 2009, 19:32
Сообщение #1





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



Вобщем ситуация такая, записываю я по адресу $00 какой то символ (число) в DDRAM, он появляется на дисплее, работает как следует вобщем; затем я устанавливаю курсор по этому адресу $00 считываю в регистр temp с помощью "rcall Read" и записываю в DDRAM по другому адресу $01. В итоге всех этих замысловатых манипуляций получаю крокозябру (вывел в порт регистр temp посмотреть, увидел что в нём всегда независимо от выводимого в DDRAM символа (числа) всегда 0b0000111, посмотрел по таблице знакогенератора, этому соответствует x, то есть не задействовано, понятно откуда крокозябра. Только вот остаётся непонятным почему считывать не хочет правильные значения... Я заморочился вставил в те места где "rcall Delay4us" задержку по кнопочке, то есть пока я не нажму на кнопку атмега в этом месте зацикливается, сделал две кнопочки для каждой половины байта, и мультиметром измерил на выходах напряжения. Получилось напряжения правильные (нули и единички), то есть они соответствуют записанному в DDRAM дисплея числу, то есть модуль дисплея выдаёт правильные значения, микроконтроллер не хочет их понять. И вот у меня совсем уже ступор, непонятно почему атмега считывает непонятно что с выходов DB4..DB7. Вобщем нужна ваша помощь.

Вот кусок кода, используемый для чтения
в DB7_PIN адрес DB7 пина дисплея (соответственно в DB6_PIN - 6го и т.д.)
в DB7_BN номер бита куда подключен дисплей, так же и для остальных DB
(в Delay4us используется другой регистр temp1)
CODE
ReadC:
sbi E_PORT,E_BN
rcall Delay4us
clr temp
sbic DB7_PIN,DB7_BN
sbr temp,7
sbic DB6_PIN,DB6_BN
sbr temp,6
sbic DB5_PIN,DB5_BN
sbr temp,5
sbic DB4_PIN,DB4_BN
sbr temp,4
cbi E_PORT,E_BN
nop

sbi E_PORT,E_BN
rcall Delay4us
sbic DB7_PIN,DB7_BN
sbr temp,3
sbic DB6_PIN,DB6_BN
sbr temp,2
sbic DB5_PIN,DB5_BN
sbr temp,1
sbic DB4_PIN,DB4_BN
sbr temp,0
cbi E_PORT,E_BN
ret

;Чтение данных из активной области
Read:
;Пины дисплея - входы Z-состояние
cbi DB4_DDR,DB4_BN
cbi DB5_DDR,DB5_BN
cbi DB6_DDR,DB6_BN
cbi DB7_DDR,DB7_BN
cbi DB4_PORT,DB4_BN
cbi DB5_PORT,DB5_BN
cbi DB6_PORT,DB6_BN
cbi DB7_PORT,DB7_BN

;Переводим дисплей в режим чтения данных
;из активной области
sbi A0_PORT,A0_BN
sbi RW_PORT,RW_BN

rcall ReadC

;Переводим дисплей в режим записи команды
cbi A0_PORT,A0_BN
cbi RW_PORT,RW_BN

;Пины дисплея - выходы, на них еденицы
sbi DB4_DDR,DB4_BN
sbi DB5_DDR,DB5_BN
sbi DB6_DDR,DB6_BN
sbi DB7_DDR,DB7_BN
sbi DB4_PORT,DB4_BN
sbi DB5_PORT,DB5_BN
sbi DB6_PORT,DB6_BN
sbi DB7_PORT,DB7_BN

rcall Delay40us
ret
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
smac
сообщение Jan 26 2009, 20:26
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003



Цитата(svamoscow @ Jan 26 2009, 22:32) *
Вобщем ситуация такая, записываю я по адресу $00 какой то символ (число) в DDRAM, он появляется на дисплее, работает как следует вобщем; ...

А каков глубинный смысл конструкции sbic DB7_PIN,DB7_BN? если предположить что DB7_PIN == 7,DB7_BN==7, то вы проверяете значение седьмого бита в SFR регистре с номером 7. Т. е. на месте DB7_PIN, по идее должен быть адрес порта ввода-вывода, к которому подключен индикатор, также во всех остальных подобных конструкциях. Т. е. sbic DB6_PIN,DB6_BN, sbic DB5_PIN,DB5_BN и т. д.
нужно заменить на sbic PINx, PINxn, где x- буква порта, к которому подключен индикатор (скорее всего общая для всех sbic, sbi и т. п.), n-номер пина, к которому подключен соответствующий вывод индикатора.
А вообще интересный способ считывания, не легче ли
Код
in rd, PINx
, а далее в rd (d - 16...31) биты переставить если надо?
Go to the top of the page
 
+Quote Post
svamoscow
сообщение Jan 27 2009, 07:10
Сообщение #3





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



Цитата(smac @ Jan 26 2009, 23:26) *
А каков глубинный смысл конструкции sbic DB7_PIN,DB7_BN? ...

Задумывалось для универсальности, чтобы можно было быстро поменять пины к которым подключен дисплей + есть возможность подключать к разным портам.
Go to the top of the page
 
+Quote Post
svamoscow
сообщение Jan 27 2009, 10:53
Сообщение #4





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



Прошу прощения, я тупанул в sbr нужно указывать совсем не номер пина. Тему можно закрывать.
Go to the top of the page
 
+Quote Post

Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:00
Рейтинг@Mail.ru


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