Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Работа с графическими ЖКИ на контроллере KS0108 и аналогах

Сб май 12, 2007 09:15:56

Тут на сайте я нашел интересную статью о подключении графического LCD дисплея WG12864A и захотел тоже попробать .Для начала я взял самую простейшию програму .

#include <iom8v>
#include <macros>
#include <stdlib>

#define SetBit(x,y) (x|=y)
#define ClrBit(x,y) (x&=~y)
#define TestBit(x,y) (x&y)

#define LCD_RST 0b00000001
#define LCD_E 0b00000010
#define LCD_RW 0b00000100
#define LCD_RS 0b00001000
#define LCD_CS2 0b00010000
#define LCD_CS1 0b00100000

#define LCD_DB PORTD
#define LCD_COM PORTC

#include "delay.h"
#include "ks0108.h"

void main()
{
DDRC=0xFF;
DDRD=0xFF;
init_lcd();
Delay_ms(10);
clear();
Delay_ms(1);

WriteXY(6,2,LCD_CS1);
Delay_ms(1);
WriteData(0b01000100,LCD_CS1);
WriteData(0b01001000,LCD_CS1);
WriteData(0b11110000,LCD_CS1);
WriteData(0b00001000,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b01100010,LCD_CS1);
WriteData(0b01100001,LCD_CS1);
WriteData(0b00000010,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b00001000,LCD_CS1);
WriteData(0b10010000,LCD_CS1);
WriteData(0b01010000,LCD_CS1);
WriteData(0b10010000,LCD_CS1);
WriteData(0b00001000,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b01100010,LCD_CS1);
WriteData(0b01100001,LCD_CS1);
WriteData(0b00000010,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b00001000,LCD_CS1);
WriteData(0b11110000,LCD_CS1);
WriteData(0b01001000,LCD_CS1);
WriteData(0b01000100,LCD_CS1);

WriteXY(6,3,LCD_CS1);
WriteData(0b00001000,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b00000011,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b00001000,LCD_CS1);
WriteData(0b00010000,LCD_CS1);
WriteData(0b00100000,LCD_CS1);
WriteData(0b01000100,LCD_CS1);
WriteData(0b10001000,LCD_CS1);
WriteData(0b10010000,LCD_CS1);
WriteData(0b10010101,LCD_CS1);
WriteData(0b10010010,LCD_CS1);
WriteData(0b10010101,LCD_CS1);
WriteData(0b10010000,LCD_CS1);
WriteData(0b10001000,LCD_CS1);
WriteData(0b01000100,LCD_CS1);
WriteData(0b00100000,LCD_CS1);
WriteData(0b00010000,LCD_CS1);
WriteData(0b00001000,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b00000011,LCD_CS1);
WriteData(0b00000100,LCD_CS1);
WriteData(0b00001000,LCD_CS1);

while(1);
}
Нувот я еёвставил в компилятор CVAVR и он мне выдал вот 3 ошибки
Смотрите ниже скришоты

Сб май 12, 2007 09:17:03

Ошибка
Вложения
ошибка.GIF
(1.9 KiB) Скачиваний: 3632

Сб май 12, 2007 09:17:54

и еше компилятор выдал
Вложения
ошибка2.GIF
(1.94 KiB) Скачиваний: 2426

Сб май 12, 2007 09:50:30

Нет.

Я полагаю что исходник у вас под компилятор imagecraft.com - узнайте там где вы его взяли.

Пн май 14, 2007 16:33:59

Иван.паяльшик виноват, что не оперативно ответил, дела замотали. Моя статья. Начнём по порядку #include <iom8v> выдаёт ошибку по тому что видимо у вашего компилятора другое название заголовочного файла для кристалла какое именно надо уточнить в документации на компилятор собственно поэтому ругается на DDRD, про init_lsd не знаю пока, возможно после устранения первых двух ошибок остальное нормализуется. Компилятор ICC for AVR могу скинуть вместе с лекарством и описанием на русском для этого надо написать мне в личку или аську. tych ярый поклонник вашего компилятора пусть напишет какие праильные названия заголовков для кристаллов. Кстати функции putc и puts немного уточнены символы 10 и 13 отображаются , и . Могу выложить. Скажу честно у меня претензий к работе не было, активно пользую фукции текста. С курсором пока не работал, только пока статью писал функцию сделал думал пригодиться.

У вас в компиляторе надо объявить вместо <iom8v> <mega8> если не поможет скачайте файл который прикреплён и положите его в папку с кодом, тогда надо объявить <m8_128>
Вложения
m8_128.h
(54 KiB) Скачиваний: 1974

Пн май 14, 2007 16:50:08

именно с .h

Пн май 14, 2007 16:51:45

tych прав с .h я так и писал тока отображается без него, просьба адм. принять меры.

Пн май 14, 2007 17:38:30

Ну я сделал все возможное и вложил Файл который мне выложили в папку INC менял имя и нечего как выдавало 2 ошибки так и выдает:))
У меня в компиляторе в паке INC есть файл MEGA8 как я понел это и есть заголовочный файл , я попробал также написать и в програме
#include <MEGA8>
#include <macros>
#include <stdlib>
И он мне выдает ошибки
Вложения
ошибка.GIF
(4.95 KiB) Скачиваний: 2039

Пн май 14, 2007 17:52:32

Файл должен лежать в той же папке где код программы и файл ks0108.h тоже поэтому я подозреваю init_lcd ругает, объявляете правильно надо так
#include <полное название файла>
Если совсем ничего не помогает создайте пустой проект мастером кода по контроллер mega8 и посмотрите какие мастер делает заголовки для этого контроллера.

Попробуйте сначала просто сделать какой нибудь простенький проект чтоб разобраться с компилятором
Вложения
iom8v.h
Вот заголовочный файл моего компилятора
(11.12 KiB) Скачиваний: 1566
delay.h
Вот файл задержек они правда под 16МГц, но меня это ничуть не смущает в данном коде это не критично
(446 байт) Скачиваний: 1709

Вт май 15, 2007 11:09:03

А что мы делаем вот этими двумя командами
#include <macros>
#include <stdlib>
что ими открываем и у меня компилятор ругается на файл файл ks0108.h у меня его тоже нет!!!

Вт май 15, 2007 11:19:45

Ну вот я закинул эти два файла которые вы мне дали и теперь компилятор выдает вот такую ошибку
Вложения
Ошибочка.GIF
(14.65 KiB) Скачиваний: 1956

Вт май 15, 2007 16:21:37

Я понимаю что вы ещё начинающий но учитесь думать сами, код написан под другой компилятор соответственно при переносе надо смотреть чтоб соответстволи команды. Си тоже знать надо хотя бы азы. Вы похоже сразу схватились за куш, не разобравших в азах тем не менее объясняю оператор #include включает указанный файл в код программы, это делается для того чтоб не захлямлять основной код. При этом файл должен находится в той же директории что исполняемый файл, т.е. тот в котором мы включаем, исключения составляют служебные файлы с функциями они находятся в специально отведённой директории как правило include, в настройках можно его изменить, но не стоит. системные файлы включаются в знаки <>, обычные которые повторюсь должны лежать в той же дирректории или вложенной папке (тогда надо указать полный путь) пишутся в кавычках
#include <macros>
это объявление специфичное для данного компилятора необходимое для того чтоб работали Си макросы т.е. #define
#include <stdlib>
включает строковые и часть символьных функций, является типовым для языка Си в целом, возможно спецефичен для вашего компилятора
NOP();
это пустая команда в вашем компиляторе она может быть отличной
в асемблере она так и обозначается
nop
Файл ks0108.h должен обязательно быть в дирректории с файлом ks.c(или какой у вас исполняемый) без него ничего работать никогда не будет т.к. функции для работы с индикатором я включил туда для удобства пользования см. статью.
Разберитесь со своим компилятором. Почитайте докуметацию

Ср июн 13, 2007 11:56:49

Помогите компилятор выдает вот такие ошибки

C:\iccv7avr\bin\imakew -f LCD.mak
iccavr -c -e -D__ICC_VERSION="7.03C" -DATMega8 -l -g -Mavr_enhanced_small -Wa-W C:\iccv7avr\LCD\ks_c.c
!W C:\iccv7avr\LCD\ks0108.h(129):[warning] calling function without prototype may cause errors
!E C:\iccv7avr\LCD\ks0108.h(142): undeclared identifier `LCD_IO'
!E C:\iccv7avr\LCD\ks0108.h(151): undeclared identifier `LCD_DBI'
C:\iccv7avr\bin\imakew.exe: Error code 1
Done: there are error(s). Exit code: 1
что надо делать?
делал проэкт в ImageCraft Development Tools

Вс окт 28, 2007 09:06:03

Здравствуйте, переписал ваш пример под winavr, появилось много вопросов, из Даташита, ks0108 имеет инвертированный reset на приведенной вами картинке с "котом" rst - имеет высокий уровень, в коде не обнаружил никаких ссылок на это.

не могли-б вы вы выложить рабочий hex файл?

Вс окт 28, 2007 09:12:18

На индикаторе reset снабжён системмой сброса кондёр-резистор. поэтому я его вообще не подключаю. когда писалась статья про это я не знал и чесно уже не помню, что там и как в той версии. Прошивку сегодня выложу в течении дня. Тока мне надо знать под железку компилировать или под Протеус есть разница про которую писал в статье

Чт дек 13, 2007 16:56:51

Hарод драсте если вместо WG12864A с контроллером ks0108 взять НBG128128AGPL с контроллером LC7981 особые изменения кроме того что он 128*128 прийдется делать?

Чт дек 13, 2007 17:08:34

Придеться конечно, контроллеры то разные и команды у них разные....
По поводу 0108 дла cvavr я писал под мт-12864 в нем, написал статью для кота но пока видимо у админов нету время(сам админ знаю)...
Если надо пиши в личку, скину. У меня там несколько по другому нежели в представленной статье:во первых с опросом статуса во вторых с графикой быстрой

Чт дек 13, 2007 17:44:04

lexmulya
С бысторой графикой это как?
быстрее чем ks0108 читает все равно не получится :) Я вроде под максимум писал с небольшим запасом.
А про статус я тоже сначало было заморочился, но вспомнил про принцип разумной достаточности. Работал с данным ЖК много. пока нареканий не выявленно, тока библиотеки немного обновил :)
на LC7981 где то дока была ... могу поискать если надо. Он вроде даже в протеусе есть.

Пт дек 14, 2007 23:40:47

lexmulya писал(а):Придеться конечно, контроллеры то разные и команды у них разные....
По поводу 0108 дла cvavr я писал под мт-12864 в нем, написал статью для кота но пока видимо у админов нету время(сам админ знаю)...
Если надо пиши в личку, скину. У меня там несколько по другому нежели в представленной статье:во первых с опросом статуса во вторых с графикой быстрой


Если не трудно то скинь.

Вс дек 16, 2007 08:55:30

Файл ks0108.h в статье имеетсясмотрите внимательнее
Ответить