BASCOM AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Сообщение aleksandr-zh »

правиль и сделали! это - самый надежный способ
Компилятор изменяется, а регистры - остаются ))
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Сообщение serg_svd »

С праздником всех!
Подскажите по следующему коду, почему не работает индикатор если пин R/W не подключен на массу, а управляется с порта МК. При этом порт установлен в лог. 0.
Это не прихоть. Дело в том, что приобрел китайскую отладочную плату, а на ней индикатор подключается именно к портам мк. Причем мк пришел прошитый, типа с китайским приветствием, и жк 100% работал и отображал нечто с иероглифами и даже сердечком :))

Код: Выделить всё

$regfile = "m16def.dat"
$crystal = 8000000

Config Porta.6 = Output
Reset Porta.6                                               ' R/W

'   ЖК       Board
' ------------------------
'  1 Vss
'  2 Vdd
'  3 V0
'  4 RS        PA5
'  5 R/W       PA6
'  6 E         PA7
'  7 DB0       PD0
'  8 DB1       PD1
'  9 DB2       PD2
' 10 DB3       PD3
' 11 DB4       PD4
' 12 DB5       PD5
' 13 DB6       PD6
' 14 DB7       PD7

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Porta.7 , Rs = Porta.5
Config Lcd = 16 * 2

Cls
Lcd "Hello World!"

Do

Loop

End
Протеус в данном случае тоже ничего не отображает, пока вывод R/W принудительно не посадить на массу.
В чем моя ошибка?
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Реклама
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Сообщение aleksandr-zh »

попробуйте не Reset, а просто PortX.Y=0

вот еще, давал когда-то:

Код: Выделить всё

$regfile = "m48DEF.dat"                                          ' >>> BASCOM <<<
$crystal = 8000000

Config Lcd = 16 * 2                                              'configure lcd screen
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.4 , Db6 = Portb.3 , Db7 = Portb.2 , E = Portb.1 , Rs = Portb.0


Config Portd = Output : Portd = 0                                ' _____________  Инициализация всей периферии  ____________
Config Portb = Output : Portb = 0
Config Portc = Input : Portc = 0


Cls                                                            'clear the LCD display

Rem Всем привет!
Rem Я - живой :)
Lcd "Bceј ѕpёіeї!"

Lowerline
Wait 1
Lcd "± - ¶ёіo№ :)"

Собутыльник Кота
Аватара пользователя
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Сообщение serg_svd »

aleksandr-zh писал(а):попробуйте не Reset, а просто PortX.Y=0
Это не влияет.
Нашел баг. Правда не понимаю в чем дело.

Код: Выделить всё

$regfile = "m16def.dat"
$crystal = 8000000

Config Porta.6 = Output
Reset Porta.6                                               ' R/W

'    ЖК       Board
' ------------------------
'  1 Vss
'  2 Vdd
'  3 V0
'  4 RS        PA5
'  5 R/W       PA6
'  6 E         PA7
'  7 DB0       PD0
'  8 DB1       PD1
'  9 DB2       PD2
' 10 DB3       PD3
' 11 DB4       PD4
' 12 DB5       PD5
' 13 DB6       PD6
' 14 DB7       PD7

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Porta.7 , Rs = Porta.5
Config Lcd = 16 * 2

Home Upper
Cursor Off Noblink
Cls
Lcd "0123456789ABCDEF"
Wait 1
Lowerline
Lcd "0123456789ABCDE"

End
Без команды Home Upper Выводится какой-то мусор. С этой командой все отлично пока что. Грабли наверное еще будут потом.
Причем ни командs CLS, ни LOCAE почему-то не помогают. Нужна именно Home Upper.
Подскажите! Я заблуждаюсь или это фича?
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Реклама
Эиком - электронные компоненты и радиодетали
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Сообщение aleksandr-zh »

я без Home Upper обхожусь
думаю, проблема конкретного ЖКИ
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Сообщение serg_svd »

aleksandr-zh писал(а):я без Home Upper обхожусь
думаю, проблема конкретного ЖКИ
подключал 3 разных ЖК.
1) Родной китайский, шел с платой
2) TM162AD двухстрочник с русским языком
3) Индикатор 16х1 Ampire
Везде тоже самое. Пока могу предполагать, что это не проблема дисплея, а, наверное, именно проблема подключения полностью на порты мк, а ен так как боычно подключают R/W сразу на массу. Иного объяснения не нахожу.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Реклама
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Сообщение aleksandr-zh »

попробуйте после установки ноги RW сделать паузу в 1 ms
Родился
Сообщения: 2
Зарегистрирован: Вс май 01, 2011 18:54:57
Откуда: Кировоград

Сообщение Valery__ »

Вечер добрый.
Я, правда, недавно начал осваивать Bascom AVR , но с подключением ЖК дисплея WH1602-NYG-CT проблем не возникло. Вот код программы:

Код: Выделить всё

   $regfile = "m8def.dat"
   $crystal = 1000000
   $lib "lcd4.lbx"

   Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
   Config Lcd = 16 * 2
Я подключил библиотеку cd4.lbx и данная конфигурация выводов прописана в ней. Изменить её можно, но я не пробовал.
Собутыльник Кота
Аватара пользователя
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Сообщение serg_svd »

Valery__ писал(а): Я подключил библиотеку cd4.lbx и данная конфигурация выводов прописана в ней. Изменить её можно, но я не пробовал.
Эта библиотека рассчитана на бодключение индикатора на PORTB. Вот и все. Штатных средств баскома вполне хватает на подключение индикатора к любым портам. Просто мне странно, чтоб всего 1 команда так влияла на работу индикатора и при этом пока с такой проблемой столкнулся только я. у остальных все рааботает и так
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Сообщение aleksandr-zh »

МК и индикатор запитаны от одного источника?
Попробуйте подключить к этой ноге МК (WR) светодиодик через резистор 470-1000 Ом и "помигайте в программе (1,пауза 100 ms, 0, пауза 100 ms, ... )
мигает?
Родился
Сообщения: 2
Зарегистрирован: Вс май 01, 2011 18:54:57
Откуда: Кировоград

Сообщение Valery__ »

serg_svd писал(а): Эта библиотека рассчитана на бодключение индикатора на PORTB. Вот и все. Штатных средств баскома вполне хватает на подключение индикатора к любым портам.
А можно по подробнее?
Я попробовал убрать строку с подключением библиотеки и программа перестала работать.

Код: Выделить всё

   
   $regfile = "m8def.dat"
   $crystal = 1000000
   '$lib "lcd4.lbx"
   'конфигурация подключения ЖК дисплея WH1602B-NYG-CT
   Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 =     Portb.6 , Db7 = Portb.7
   Config Lcd = 16 * 2
Дело в том, что из-за данной конфигурации я не могу подключить кварц.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 965
Зарегистрирован: Ср авг 26, 2009 08:24:50
Откуда: 1300км от Пупа

Сообщение kip96 »

serg_svd писал(а): и при этом пока с такой проблемой столкнулся только я. у остальных все рааботает и так
Проблемы встречаются. К примеру у меня, на МЕГЕ8, на макетке, заметил, что если отключить программатор( он висит на портеВ), индикация пропадает. Хотя RW через порт на земле. Так и не разбирался в чём проблемма.
Все делают ошибки, только мудрецы - новые, а дураки - старые.
Грызет канифоль
Аватара пользователя
Сообщения: 262
Зарегистрирован: Пт окт 30, 2009 22:33:56
Откуда: Санкт-Петербург

Сообщение Alex_Megavolt_79 »

Код: Выделить всё

'*******************************************************
'* Автор:              Megavolt                                                       *
'* Дата:               4/02/2011 г.                                                  *
'* Версия:             1.0                                                              *
'* Имя файла:          LCD.bas                                                    *
'* Имя проекта:        LCD                                                          *
'* Для AVR:            ATtiny2313                                                 *
'* Тактовая частота:   8 000 кГц (встроенный генератор)           *
'*******************************************************
'
' Выполняемые функции: Управление LCD
'


$regfile = "ATtiny2313.DAT"
$crystal = 8000000
$lib "lcd4busy.lbx"

Const _lcdport = Portb
Const _lcdddr = Ddrb
Const _lcdin = Pinb
Const _lcd_e = 2
Const _lcd_rw = 1
Const _lcd_rs = 0
Config Lcd = 16 * 2                                         'используем дисплей на 2 строчки по 16 знакомест в каждой
Cursor Off
Cls
Lcd "Hello word"
End                                                         'end program
serg_svd, а почему бы вот так не сделать. А в том варианте что Вы предлагали библиотека LCD не допускает дёрганий ногой R/W. И неподключенная нога R/W на массу воспринимается LCD как будто на этой ноге уровень лог.1. Что переводит LCD в режим чтения памяти, а не вывода информации. Поэтому Вы и не можете достучаться до LCD.
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Сообщение aleksandr-zh »

вы не правы - он самостоятельно управляет этим сигналом, так как он подключен к МК и имеется соответственная команда загрузки в регистр вывода нуля
Грызет канифоль
Аватара пользователя
Сообщения: 262
Зарегистрирован: Пт окт 30, 2009 22:33:56
Откуда: Санкт-Петербург

Сообщение Alex_Megavolt_79 »

aleksandr-zh с этого места пожалуйста поподробнее.
Сверлит текстолит когтями
Сообщения: 1278
Зарегистрирован: Пн июн 18, 2007 21:51:20

Сообщение aleksandr-zh »

смотрим его код:

Config Porta.6 = Output
Reset Porta.6 ' R/W
Грызет канифоль
Аватара пользователя
Сообщения: 262
Зарегистрирован: Пт окт 30, 2009 22:33:56
Откуда: Санкт-Петербург

Сообщение Alex_Megavolt_79 »

А смысл тогда подключения R/W к МК. Найти себе лишних проблем и стойко их решать?
Грызет канифоль
Аватара пользователя
Сообщения: 262
Зарегистрирован: Пт окт 30, 2009 22:33:56
Откуда: Санкт-Петербург

Сообщение Alex_Megavolt_79 »

Сейчас проверю сам на отладочной плате тот код.
Собутыльник Кота
Аватара пользователя
Сообщения: 2560
Зарегистрирован: Ср янв 16, 2008 08:34:04
Откуда: KMV

Сообщение serg_svd »

Alex_Megavolt_79 писал(а):А смысл тогда подключения R/W к МК. Найти себе лишних проблем и стойко их решать?
Вы не читали выше. Дело в том, что я приобрел отладочную плату китайскую. и там так индикатор разведен. Нельзя подключить вывод R/W напрямую на землю, так как он жестко сидит на PA.6 мк. Поэтому я и управляю режимом индикатора с порта микроконтроллера.
А насчет Вашего примера конечно попробую. Просто я сознательно не стал использовать различные дополнительные библиотеки.
И еще, поясните пожалуйста данные константы

Код: Выделить всё

Const _lcdport = Portb
Const _lcdddr = Ddrb
Const _lcdin = Pinb
Дело в том, что у меня на данной плате данные подключены на PORTD, а управление на PORTA

Код: Выделить всё

'    ЖК       Board
' ------------------------
'  1 Vss
'  2 Vdd
'  3 V0
'  4 RS        PA5
'  5 R/W       PA6
'  6 E         PA7
'  7 DB0       PD0
'  8 DB1       PD1
'  9 DB2       PD2
' 10 DB3       PD3
' 11 DB4       PD4
' 12 DB5       PD5
' 13 DB6       PD6
' 14 DB7       PD7
'Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Porta.7 , Rs = Porta.5
Последний раз редактировалось serg_svd Пн май 02, 2011 11:32:30, всего редактировалось 1 раз.
"Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли
Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Грызет канифоль
Аватара пользователя
Сообщения: 262
Зарегистрирован: Пт окт 30, 2009 22:33:56
Откуда: Санкт-Петербург

Сообщение Alex_Megavolt_79 »

Я попробовал Ваш код, только изменил все пины на порт B. Он заработал.
Ответить

Вернуться в «AVR»