Перейти к содержанию
    

подключение lcd FDCC2004A к atmega8

простой код(выводит символ на lcd), а не пашет ничего

вот код на cvavr:

 

#include <io.h>

#include <delay.h>

#define E PORTC.2

#define RS PORTC.0

#define RW PORTC.1

#define port PORTD

int chkbf(){ // проверка флага занятости

DDRD=0x00;

RS=0;

RW=1;

E=0;

delay_us(2);

port=0xff;

delay_us(2);

E=1;

delay_us(2);

E=0;

return(PIND.7);

}

void wrcmd(int cmd){ // пишу команду

DDRD=0xff;

while(chkbf());

RS=0;

RW=0;

E=0;

delay_us(2);

port=cmd;

delay_us(2);

E=1;

delay_ms(2);

E=0;

}

void main(){

DDRC=0xff;

PORTC=0x00;

delay_ms(100);

 

wrcmd(0b00111000); // инициализация

delay_us(40);

wrcmd(0b00001111);

delay_us(40);

wrcmd(0b00000001);

delay_ms(2);

wrcmd(0b00000110);

delay_us(40);

 

DDRD=0xff; // пишу символ

while(chkbf());

RS=0;

RW=1;

E=0;

delay_us(2);

PORTD=0b00110001;

delay_us(2);

E=1;

delay_us(2);

E=0;

delay_us(50);

}

 

че нитак??? v0 для контрастности кинул на землю через резистор 1 кОм вроде нормал

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

DDRD=0x00; - выставляете порт D как выход
RS=0;
RW=1;
E=0;
delay_us(2);
port=0xff; - включаете подтяжку на порт D. почему после 2мкс?
delay_us(2);
E=1;
delay_us(2);
E=0;
return(PIND.7);

 

 

http://www.hantronix.com/files/down/splc780d.pdf

пункт 5.4 - подробно расписан пример написания слова на дисплее

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

S6A0069 самсунговский помойму,

даташит даже нашел, прикрепляю

 

именно поэтому лучше писать не жки а контроллер, так как в данном случае от жки мало что зависит

 

DDRD=0x00; - выставляете порт D как вход... это я очепятался

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да, спасибо, поставил в начало функции проверки бизи флага, но это не спасло(((((((((

 

Изчезли темные квадраты!!!! и появился курсор в непонятном месте! УЖЕ ЧТОТО!!!!

 

Вот код переделал:

 

#include <io.h>
#include <delay.h>
#define E PORTC.2
#define RS PORTC.0
#define RW PORTC.1
#define port PORTD
int chkbf(){    // проверка флага занятости
    DDRD=0x00;
    port=0xff;
    RS=0;
    RW=1;
    E=0;
    delay_us(2);
    E=1;
    delay_us(2);
    E=0;
    return(PIND.7);    
}
void wrcmd(int cmd){    // пишу команду
    DDRD=0xff;
    //while(chkbf());    
    RS=0;
    RW=0;
    E=0;
    delay_us(2);
    port=cmd;
    delay_us(2);
    E=1;
    delay_ms(2);
    E=0;
}
void main(){
    DDRC=0xff;
    PORTC=0x00;
    delay_ms(20);
    
    wrcmd(0b00111000);  // инициализация
    delay_ms(5);
    wrcmd(0b00001110);
    delay_us(40);
    //wrcmd(0b00000001);
    //delay_ms(2);
    wrcmd(0b00000110);
    delay_us(40);

        DDRD=0xff;    // пишу символ
        while(chkbf());
        RS=0;
        RW=1;
        E=0;
        delay_us(2);
        PORTD=0b1001010111;
        delay_us(2);
        E=1;
        delay_us(2);
        E=0;
        delay_us(50);
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Изчезли темные квадраты!!!! и появился курсор в непонятном месте! УЖЕ

ЧТОТО!!!!

Ну и поставьте его на базу

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в //пишу символ поставил RS=1 RW=0 ну как и должно быть, стал писать но вместо символа - черный квадрат

:help:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в //пишу символ поставил RS=1 RW=0 ну как и должно быть, стал писать но вместо символа - черный квадрат

:help:

 

DDRD=0xff;    // пишу символ
while(chkbf());
        RS=1;      
        RW=0;
        E=1;
PORTD=0x30;
        delay_us(2);
        E=0
       delay_us(2);
        E=1;
}

 

А так

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А какой символ вообще должен высветиться... Какой у контроллера знакогенератор?

У вас много лишних задержек. Зря закоментили проверку флага занятости в процедуре записи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

тоже самое :angry2:

А тупую без while(chkbf());

 

А какой символ вообще должен высветиться... Какой у контроллера знакогенератор?

У вас много лишних задержек. Зря закоментили проверку флага занятости в процедуре записи.

 

30 в любом 0

И в его коде вообще ничего не пишется сразу 2 ошибки

 

DDRD=0xff;    // пишу символ
        while(chkbf());
        RS=0;
        RW=1;
        E=0;
        delay_us(2);
        PORTD=0b1001010111;
        delay_us(2);
        E=1;
        delay_us(2);
        E=0;
        delay_us(50);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, заработало :disco: . Я убрал while(chkbf()); из функции записи команд - лсд инициализировался. Убрал из вывода символа, тоже заработало. Странно, а что проверку занятости не надо делать, или я ее неправильно делаю :wacko:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, заработало :disco: . Я убрал while(chkbf()); из функции записи команд - лсд инициализировался. Убрал из вывода символа, тоже заработало. Странно, а что проверку занятости не надо делать, или я ее неправильно делаю :wacko:

Не правильно - читайте выложенный Вами же DS и уберите лишние задержки

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...