Не могу запустить код для 16x2 LCD работать на PIC 18F252 (на PIC16 все работало)

Prikupets

Был у меня проверенный и в муках рожденный (кстати!) код для вывода на LCD 16s2d. В принципе, там ничего оригинального, но просто тогда я не нашел готового решения и написал сам. Вообщем, этот код не хочет работать на PIC 18F252 (DIP28). Частота 4 MHz, пробывал подключать LCD к порту A и B и C, отключил ADC, пробывал писать и в PORTx регистры и в LATx регистры, запускал тест который мигал всеми портами - все порты нормально управляются. Поставил даже кондер 0.1 по питанию индикатора, хотя все питается от 5V от батареи. Задержки все увеличил в десятки раз - не помогало.

LCD работает в 4 bit режиме - 6 линий (A0 (command/data), E (strob), D4, D5, D6, D7). Тестовая программа занимается тем, что выводит счетчик во второй строке раз в несколько секунд. То есть издается два блока команд - позиционирование в начало второй строки и вывод символов числа. На экран выводится сивол “е” в первой позиции первой строки, подчеркивание в конце первой строки и “?” в конце второй строки.

😃 Интересно, что если переключить старшие линии (D6, D7) на землю, то числа начинают вылезать, но без позиционирования (новые числа лепятся к старым, как в режиме телетайпа). Если подключить только одну из двух линий, такого не происходит.

Тот же индикатор работает в другой схеме нормально, но там PIC 16F688.

Start1.zip

SGordon

а можно любопытства ради схемку подключения, собственно непонятно подключение вывода R/W чтение запись …

Prikupets
SGordon:

а можно любопытства ради схемку подключения, собственно непонятно подключение вывода R/W чтение запись …

Схемки щас прямо нет (извините), но на словах так: R/W прямо на плате дисплея запаян в положение “Запись”. То есть я только пишу. На процессоре подключены только MCLR через диод на питание (чтобы программировать можно было не отключая его), кварцевый генератор со встроенными кондерами (ZTT 4.0 MHz). Дисплей подключен так как это описано в комментариях в исходнике:

#define LCD_A0 LA0 // LCD-4 - PIC-2
#define LCD_E LA1 // LCD-6 - PIC-3
#define LCD_D4 LA2 // LCD-11 - PIC-4
#define LCD_D5 LA3 // LCD-12 - PIC-5
#define LCD_D6 LB0 // LCD-13 - PIC-21
#define LCD_D7 LB1 // LCD-14 - PIC-22

Рядом с контроллером кондер 0.1 по питанию. Обе земли контроллера соединены (пробывал и без этого соединения).

Psw

А я тока со словарём си пере вариваю, по этой причине не смог быстро сравнить алгоритмы.

Prikupets:

и в муках рожденный (кстати!) код для вывода на LCD 16s2d

Но в таких же муках когда-то родил работающий ЛЦД на асме для пик-18. Уже и не помню, в чём были затыки - но они были однозначно, и задержки не всегда помогали судя по моим же каментам. У меня есть опрос занятости, но сути это не меняет - если синхронно записывать пару килобайт/сек - то занятость можно и не глядеть. Я мерял производительность своего ЛЦД забавы ради, более 2000 то ли строк то ли символов/секунду - даже это не помню.
Зато Опера прикольно асм вываливает, смотрицца простенько и со вкусом: psw.ru/radio/18_LCD_Drv.asm

не нашел готового решения и написал сам.

Надеюсь про дурацкий Microchip Application Maestro Software 1.0.0 ну и Application Maestro Modules 1.0.3 видели/слышали ? Его порождение на Си прилагаю для забавы:XLCD.ZIP
P.S.
Будет прикольно, если в неработоспособности ЛЦД окажется вместо проги виноват ошибочный или некачественный монтаж типа перепутанных/оборванных линий данных.

SGordon

да врядли так будет, в протезе дисплей тоже не засветился …
А деф к важему исходнику можно посмотреть?

Nick_Shl
Prikupets:

Был у меня проверенный и в муках рожденный (кстати!) код для вывода на LCD 16s2d.

А что тут мучатся? Идем сюда, потом скачиваем это и это
P.S. Сам подключал LCD к компу через USB с помошью чипа от FTDI в 4bit режиме.

Prikupets
Nick_Shl:

А что тут мучатся? Идем сюда, потом скачиваем

О, спасибо, это недавно появилось… Я с ними пару лет назад переписывался и они мне помогли все это запустить на PIC16, рассказав про одну тонкую особенность их дисплея: www.melt.com.ru/work/newforum/post204

SGordon
Psw:

psw.ru/radio/18_Lcd_Defs.inc
psw.ru/radio/Pic18_M.INC
А зачем, что полезного в них можно увидеть ? Там почти только мой чрез мерный камент, ничего полезного.

Да, запустить действительно не получилось, на 4331 модели нет в протеусе Ж-(((

Prikupets

Уважаемые, спасибо за исходники и советы, но все это не отвечает на вопрос, почему это работало на PIC16 при 4 и 8 MHz, а на PIC18 не работает даже при 4.

2 months later
avalanch

Скорее всего проблема в компиляторе, точнее в оптимизации и задержках. Полагаю что компилятор под PIC18 так их соптимизировал что возможно задержек как таковых и нет. Посмотрите осциилографом сигналы строба записи. Чтобы длительности правильные были и время между записью (насколько помню оно достаточно большое, то ли 2мс то ли 50).