pic16f876 и lcd wh1602
|
|
tvset |
Дата: Чт, 25.11.2010, 09:52 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
4
Замечания:
±
На сайте с 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% верный)
|
|
|
|
Matrix252005 |
Дата: Чт, 25.11.2010, 10:00 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Согласен! Ну это же Hello world. Я думаю такой pic как pic16f876 не успеет засориться
|
|
|
|
Matrix252005 |
Дата: Чт, 25.11.2010, 11:00 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Лучше привыкать к правильному с "детства" , а то потом тяжело....
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
MiXaS |
Дата: Чт, 25.11.2010, 11:36 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Это факт!!!
|
|
|
|
ADMIN |
Дата: Чт, 25.11.2010, 12:13 | Сообщение # 8 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
MiXaS, вот попробуйте сами. Разремте его часть и заремте мою. И Вы сами в этом убедитесь. Если "LCDOUT $FE, 1, "Hello"" - находится до основной программы, он просто будет отображать слово "Hello".
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
MiXaS |
Дата: Чт, 25.11.2010, 13:00 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Уважаемый Matrix252005, я бы с радостью, но железо дома, а я на работе, ща конференция, поэтому даже в шпротах не смогу. И еще, не много не понял, что Вы имели введу Quote (Matrix252005) MiXaS, вот попробуйте сами. Разремте его часть и заремте мою. И Вы сами в этом убедитесь. Если "LCDOUT $FE, 1, "Hello"" - находится до основной программы, он просто будет отображать слово "Hello".
|
|
|
|
Matrix252005 |
Дата: Чт, 25.11.2010, 13:06 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 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 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Я уже понял! Я в протеусе штопаю! Еще минутку
|
|
|
|
MiXaS |
Дата: Чт, 25.11.2010, 13:28 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 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
|
|
|
|