Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 3123»
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » pic16f876 и lcd wh1602
pic16f876 и lcd wh1602
tvset Дата: Чт, 25.11.2010, 09:52  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Новенький
Сообщений: 4
Репутация: 0   ±
Замечания:   ±
На сайте с 25.11.2010

Статус: Offline

День добрый. Помогите кто может :-(
Пытаюсь учиться программировать PICи по книге Чака Холибейка Программирование Рic-микроконтроллеров на PicBasicPro
и вот такая простая программа:
'my 1 programm
define lcd_dreg portb
define lcd_dbit 4
define lcd_rsreg portb
define lcd_rsbit 3
define lcd_ereg portb
define lcd_ebit 0
define lcd_bits 4
define lcd_lines 2
define lcd_commandus 2000
define lcd_dataus 50
trisc = 0 'весь порт на выход
pause 500 'инициализ lcd
LCDOUT $FE, 1, "Hello" ' Очистить экран и вывести “Hello”
symbol led = portc.4 'присвоим 15 выв led
main:
led = 1
pause 1000
led = 0
pause 300
goto main
end
работает частично,т. е. светодиод моргает а на lcd
на верхней строке все сегменты засвечены и все...
на выводе rs индикатора логический 0,на остальных-логическая 1.
в чем проблема не пойму(монтаж 100% верный)
ЯНДЕКС Дата: 25.11.2010
Matrix252005 Дата: Чт, 25.11.2010, 10:00  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 676
Репутация: 36   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Приятного времени суток. tvset, во первых: после "LCDOUT $FE, 1, "Hello"" поставьте "pause 500" пауза в 0,5сек, а лучше 1000 - 3000 (любую в этом диапазоне, просто чтобы Вы увидели). Во вторых: если Вы хотите, чтоб надпись "Hello" отображалась постоянно, переместите ее в тело программы, т.е. поставьте ее после "main: "

THE TRUTH IS OUT THERE.

С уважением, Николай.

Сообщение отредактировал Matrix252005 - Чт, 25.11.2010, 10:12
MiXaS Дата: Чт, 25.11.2010, 10:27  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Matrix252005 прав! После подачи питания на LCD, необходимо некоторое время перед отправлением данных, около 500 миллисекунд (pause 500). Далее строчку LCDOUT $FE, 1, "Hello" “Hello” нужно поместить в метку. В конце программы после goto main не обязательно ставить end, так как Вы зациклили программу с помощью goto

Успехов

Сообщение отредактировал MiXaS - Чт, 25.11.2010, 10:29
Matrix252005 Дата: Чт, 25.11.2010, 10:47  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 676
Репутация: 36   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Команда END.

Команда END останавливает выполнение программы и вводит микроконтроллер в режим малого энергопотребления (Sleep). При этом все выводы микроконтроллера (вход либо выход) остаются в их текущем состоянии. Команда END работает, выполняя команду SLEEP непрерывно в цикле.
Совет: в конце каждой программы должны быть помещены команды END, или STOP, или GOTO для того чтобы препятствовать засорению свободной памяти микроконтроллера.


THE TRUTH IS OUT THERE.

С уважением, Николай.

Сообщение отредактировал Matrix252005 - Чт, 25.11.2010, 10:47
MiXaS Дата: Чт, 25.11.2010, 10:54  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Согласен! Ну это же Hello world. Я думаю такой pic как pic16f876 не успеет засориться surprised
Matrix252005 Дата: Чт, 25.11.2010, 11:00  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 676
Репутация: 36   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Лучше привыкать к правильному с "детства" happy , а то потом тяжело....

THE TRUTH IS OUT THERE.

С уважением, Николай.
MiXaS Дата: Чт, 25.11.2010, 11:36  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Это факт!!! biggrin
ADMIN Дата: Чт, 25.11.2010, 12:13  |                                                                                                                Сообщение # 8
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1111
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Quote (tvset)
pause 500 'инициализ lcd
LCDOUT $FE, 1, "Hello" ' Очистить экран и вывести “Hello”
symbol led = portc.4 'присвоим 15 выв led

pause 500 - это вообще никакого отношения к инициализации LCD не имеет. Это просто задержка.
Здесь проблема не в паузах, или end'ах

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

MiXaS Дата: Чт, 25.11.2010, 12:33  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Quote (ADMIN)
я думаю, просто нужно убавить контрастность дисплея и все

У меня была подобная ситуация с контрастностью, но когда большая контростность засвечены все знакоместа, а у tvset только
Quote (tvset)
на верхней строке все сегменты засвечены и все...

Всё же думаю, что дисплей загружается дольше по времени, чем PIC. Пока загрузится LCD, PIC уже отправил слово. А так как

Quote (tvset)
LCDOUT $FE, 1, "Hello" ' Очистить экран и вывести “Hello”
находится не в main, то и на lcd ничего нет.

Был опыт подключения LCD к LPT, когда "контачил" один из проводов data, вывод символов прекращался пока не перезагрузишь программу (smartLCD)

Matrix252005 Дата: Чт, 25.11.2010, 12:51  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 676
Репутация: 36   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Мог ошибиться с распиновкой экрана... Либо сам экран не рабочий... У людей были такие проблемы... Грешили на все кроме экрана.

Добавлено (25.11.2010, 12.51.15)
---------------------------------------------
Все намного проще.... MCS не принимает:
define lcd_dreg portb
define lcd_dbit 4
define lcd_rsreg portb
define lcd_rsbit 3
define lcd_ereg portb
define lcd_ebit 0
define lcd_bits 4
define lcd_lines 2
точнее она принимает, но не работает... tvset, сделайте так: пропишите все что связано с "DEFINE" большими (заглавными) буквами. И все...

DEFINE LCD_DREG PORTB ' Задать порт PIC-микроконтроллера для передачи данных на ЖКИ
DEFINE LCD_DBIT 4 ' Задать первый вывод порта PORTB, который будет подключен к выводу DB4 ЖКИ
DEFINE LCD_RSREG PORTB ' Задать порт PIC-микроконтроллера, который будет выдавать сигнал RS на ЖКИ
DEFINE LCD_RSBIT 3 ' Задать вывод порта PORTB, с которого будет выдаваться сигнал RS на ЖКИ
DEFINE LCD_EREG PORTB ' Задать порт PIC-микроконтроллера, который будет выдавать сигнал E на ЖКИ
DEFINE LCD_EBIT 0 ' Задать вывод порта PORTB, с которого будет выдаваться сигнал E на ЖКИ
DEFINE LCD_BITS 4 ' Задать 4-битный режим обмена информацией для ЖКИ
DEFINE LCD_LINES 2


THE TRUTH IS OUT THERE.

С уважением, Николай.

Сообщение отредактировал Matrix252005 - Чт, 25.11.2010, 13:01
Matrix252005 Дата: Чт, 25.11.2010, 12:56  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 676
Репутация: 36   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

MiXaS, вот попробуйте сами. Разремте его часть и заремте мою. И Вы сами в этом убедитесь. Если "LCDOUT $FE, 1, "Hello"" - находится до основной программы, он просто будет отображать слово "Hello".
Прикрепления: Untitled.bas(1Kb)


THE TRUTH IS OUT THERE.

С уважением, Николай.
MiXaS Дата: Чт, 25.11.2010, 13:00  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Уважаемый Matrix252005, я бы с радостью, но железо дома, а я на работе, ща конференция, поэтому даже в шпротах не смогу. И еще, не много не понял, что Вы имели введу
Quote (Matrix252005)
MiXaS, вот попробуйте сами. Разремте его часть и заремте мою. И Вы сами в этом убедитесь. Если "LCDOUT $FE, 1, "Hello"" - находится до основной программы, он просто будет отображать слово "Hello".
Matrix252005 Дата: Чт, 25.11.2010, 13:06  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 676
Репутация: 36   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Я просто предложил Вам с эмитировать данную прогу в Протеусе и MCS. А

Quote
(Matrix252005)
MiXaS, вот попробуйте сами. Разремте его часть и заремте мою. И Вы сами в этом убедитесь. Если "LCDOUT $FE, 1, "Hello"" - находится до основной программы, он просто будет отображать слово "Hello".

Я имел ввиду отключите мою часть и включите его. (Просто говоря убрать "`" и поставить перед моими "DEFINE")


THE TRUTH IS OUT THERE.

С уважением, Николай.
MiXaS Дата: Чт, 25.11.2010, 13:11  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Я уже понял! Я в протеусе штопаю! Еще минутку
MiXaS Дата: Чт, 25.11.2010, 13:28  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 619
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Так, результат:
}
'DEFINE LCD_DREG PORTB ' Задать порт PIC-микроконтроллера для передачи данных на ЖКИ
'DEFINE LCD_DBIT 4 ' Задать первый вывод порта PORTB, который будет подключен к выводу DB4 ЖКИ
'DEFINE LCD_RSREG PORTB ' Задать порт PIC-микроконтроллера, который будет выдавать сигнал RS на ЖКИ
'DEFINE LCD_RSBIT 3 ' Задать вывод порта PORTB, с которого будет выдаваться сигнал RS на ЖКИ
'DEFINE LCD_EREG PORTB ' Задать порт PIC-микроконтроллера, который будет выдавать сигнал E на ЖКИ
'DEFINE LCD_EBIT 0 ' Задать вывод порта PORTB, с которого будет выдаваться сигнал E на ЖКИ
'DEFINE LCD_BITS 4 ' Задать 4-битный режим обмена информацией для ЖКИ
'DEFINE LCD_LINES 2

define lcd_dreg portb
define lcd_dbit 4
define lcd_rsreg portb
define lcd_rsbit 3
define lcd_ereg portb
define lcd_ebit 0
define lcd_bits 4
define lcd_lines 2

define lcd_commandus 2000
define lcd_dataus 50
trisc = 0 'весь порт на выход

pause 500 'инициализ lcd
LCDOUT $FE, 1, "Hello" ' Очистить экран и вывести “Hello”
LCDOUT $FE,1,$c0, 1, "Hello"
symbol led = portc.4 'присвоим 15 выв led

main:
led = 1
'pause 1000
pause 500
led = 0
pause 500
'pause 300
goto main
end
{

работает!!!

}
DEFINE LCD_DREG PORTB ' Задать порт PIC-микроконтроллера для передачи данных на ЖКИ
DEFINE LCD_DBIT 4 ' Задать первый вывод порта PORTB, который будет подключен к выводу DB4 ЖКИ
DEFINE LCD_RSREG PORTB ' Задать порт PIC-микроконтроллера, который будет выдавать сигнал RS на ЖКИ
DEFINE LCD_RSBIT 3 ' Задать вывод порта PORTB, с которого будет выдаваться сигнал RS на ЖКИ
DEFINE LCD_EREG PORTB ' Задать порт PIC-микроконтроллера, который будет выдавать сигнал E на ЖКИ
DEFINE LCD_EBIT 0 ' Задать вывод порта PORTB, с которого будет выдаваться сигнал E на ЖКИ
DEFINE LCD_BITS 4 ' Задать 4-битный режим обмена информацией для ЖКИ
DEFINE LCD_LINES 2

'define lcd_dreg portb
'define lcd_dbit 4
'define lcd_rsreg portb
'define lcd_rsbit 3
'define lcd_ereg portb
'define lcd_ebit 0
'define lcd_bits 4
'define lcd_lines 2

'define lcd_commandus 2000
'define lcd_dataus 50
trisc = 0 'весь порт на выход

pause 500 'инициализ lcd
LCDOUT $FE, 1, "Hello" ' Очистить экран и вывести “Hello”
LCDOUT $FE,1,$c0, 1, "Hello"
symbol led = portc.4 'присвоим 15 выв led

main:
led = 1
'pause 1000
pause 500
led = 0
pause 500
'pause 300
goto main
end

{

Тоже работает!!!
Протеус 7.7

Прикрепления: 4266839.jpg(203Kb)
Форум Picbasic.ru » Программирование МК » PicBasicPro » pic16f876 и lcd wh1602
Страница 1 из 3123»
Поиск: