Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

WH4004 4bit Мозговой штурм

Непрочитано 23.12.2011, 22:32  
VitaminPSG
Частый гость
 
Регистрация: 23.12.2011
Сообщений: 13
Сказал спасибо: 15
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
VitaminPSG на пути к лучшему
Лампочка WH4004 4bit Мозговой штурм

Добрый вечер уважаемые форумчане. Суть моей проблемы в том, что не получаеться запустить дисплей Winstar WH4004 4x40 в полной режиме. Т.е.
из 4-х строк, работают только две нижних. В первой строке горят квадратики (что косвенно указывает на работоспособность 1-го контроллера). Меняя местами сигналы Е1 и Е2 я убедился в том, что текст сообщений меняется.
Тоесть на экран должно вывести
LCD 1 Line 1
LCD 1 Line 2
LCD 2 Line 1
LCD 2 Line 2

Если у меня стояло Е1 Е2 было так
############

LCD 2 Line 1
LCD 2 Line 2

Если стояло Е2 Е1 то выводит так
############

LCD 1 Line 1
LCD 1 Line 2

ПРограмма + драйвер для дисплея написаны в PICC
Код:
//Программа
//lcd_40x4.c

#include ‹16F877A.h›
#use delay(clock=20000)
#fuses XT, NOPROTECT, PUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#include ‹lcd_40x4_h.c›


void main() {
   lcd_init1();
   delay_ms(2);
   lcd_init2();
          while(true) {
                   
           //TEST 1
           //---------------------------------
           lcd_gotoxy(1,1);
           printf(lcd_putc1,"Test ... 123456789");
           delay_ms(150);
           lcd_gotoxy(1,2);
           printf(lcd_putc1,"QERTY ASDFGH ZXCVBNM");
           delay_ms(150);
           lcd_gotoxy(1,3);
           printf(lcd_putc2,"TEST LCD 40X4");
           delay_ms(150);
           lcd_gotoxy(1,2);
           printf(lcd_putc2,"/*-+,.");
           delay_ms(1500);
           lcd_putc1("\f");
           delay_ms(1000);
           lcd_putc2("\f");
           delay_ms(1500);
           //---------------------------------
           
           //TEST 1
           //---------------------------------
           lcd_gotoxy(1,1);
           printf(lcd_putc1,"LINE 1 LCD1");
           delay_ms(1000);
           lcd_gotoxy(1,2);
           printf(lcd_putc1,"LINE 2 LCD1");
           delay_ms(1000);
           lcd_gotoxy(1,3);
           printf(lcd_putc2,"LINE 1 LCD2");
           delay_ms(1000);
           lcd_gotoxy(1,4);
           printf(lcd_putc2,"LINE 2 LCD2");
           delay_ms(1000);
           lcd_gotoxy(1,1);
           printf(lcd_putc1,"LCD 1 LINE 1");
           delay_ms(1500);
           lcd_gotoxy(2,1);
           printf(lcd_putc2,"LCD 2 LINE 1");
           delay_ms(1500);
           lcd_gotoxy(3,2);
           printf(lcd_putc1,"LCD 1 LINE 2");
           delay_ms(1500);
           lcd_gotoxy(4,2);
           printf(lcd_putc2,"LCD 2 LINE 2");
           delay_ms(1500);
           lcd_putc1("\f");
           delay_ms(1500);
           lcd_putc2("\f");
           //---------------------------------
       
           
            }
   }
Код:
//Драйвер
//lcd_40x4_h.c by huichoman

#define LCD_DB4   PIN_D4
#define LCD_DB5   PIN_D5 
#define LCD_DB6   PIN_D6 
#define LCD_DB7   PIN_D7 
#define LCD_RS    PIN_C0 
#define LCD_RW    PIN_C1 
#define LCD_E1    PIN_C2 
#define LCD_E2    PIN_C3
#define USE_RW_PIN   1      

// These are the line addresses for most 4x40 LCDs. 
#define LCD_LINE_1_ADDRESS 0x00 //1-st chip
#define LCD_LINE_2_ADDRESS 0x40 //1-st chip
#define LCD_LINE_3_ADDRESS 0x00 //2-ed chip
#define LCD_LINE_4_ADDRESS 0x40 //2-ed chip

//======================================== 
#define lcd_type 2   // 0=5x7, 1=5x10, 2=2 lines(or more) 
int8 lcd_line; 

int8 const LCD_INIT_STRING[4] = 
{ 
 0x20 | (lcd_type ‹‹ 2),  // Set mode: 4-bit, 2+ lines, 5x8 dots 
 0xc,                     // Display on 
 1,                       // Clear display 
 6                        // Increment cursor 
 }; 
                              
//DISPLAY 1
//------------------------------------- 
void lcd_send_nibble1(int8 nibble) 
{ 
 output_bit(LCD_DB4, !!(nibble & 1)); 
 output_bit(LCD_DB5, !!(nibble & 2));  
 output_bit(LCD_DB6, !!(nibble & 4));    
 output_bit(LCD_DB7, !!(nibble & 8));    
 delay_cycles(1); 
 output_high(LCD_E1); 
 delay_us(2); 
 output_low(LCD_E1); 
}
//DISPLAY 2
//------------------------------------- 
void lcd_send_nibble2(int8 nibble) 
{ 
 output_bit(LCD_DB4, !!(nibble & 1)); 
 output_bit(LCD_DB5, !!(nibble & 2));  
 output_bit(LCD_DB6, !!(nibble & 4));    
 output_bit(LCD_DB7, !!(nibble & 8));    
 delay_cycles(1); 
 output_high(LCD_E2); 
 delay_us(2); 
 output_low(LCD_E2); 
}

#ifdef USE_RW_PIN 
int8 lcd_read_nibble(void) 
{ 
int8 retval;  
#bit retval_0 = retval.0 
#bit retval_1 = retval.1 
#bit retval_2 = retval.2 
#bit retval_3 = retval.3 
retval = 0;    
output_high(LCD_E1); 
delay_us(1);
retval_0 = input(LCD_DB4); 
retval_1 = input(LCD_DB5); 
retval_2 = input(LCD_DB6); 
retval_3 = input(LCD_DB7);  
output_low(LCD_E1); 
delay_us(1);   
return(retval);    
}    
#endif 
#ifdef USE_RW_PIN 
int8 lcd_read_byte(void) 
{ 
int8 low; 
int8 high; 
output_high(LCD_RW); 
delay_cycles(1); 
high = lcd_read_nibble(); 
low = lcd_read_nibble(); 

return( (high‹‹4) | low); 
} 
#endif 

//DISPLAY 1
//---------------------------------------- 
// Send a byte to the LCD. 
void lcd_send_byte1(int8 address, int8 n) 
{ 
output_low(LCD_RS); 
#ifdef USE_RW_PIN 
while(bit_test(lcd_read_byte(),7)) ; 
#else 
delay_us(60);  
#endif 
if(address) 
   output_high(LCD_RS); 
else 
   output_low(LCD_RS);   
 delay_cycles(1); 
#ifdef USE_RW_PIN 
output_low(LCD_RW); 
delay_cycles(1); 
#endif 
output_low(LCD_E1); 
lcd_send_nibble1(n ›› 4); 
lcd_send_nibble1(n & 0xf); 
} 
//---------------------------- 

//DISPLAY 2
//---------------------------------------- 
// Send a byte to the LCD. 
void lcd_send_byte2(int8 address, int8 n) 
{ 
output_low(LCD_RS); 
#ifdef USE_RW_PIN 
while(bit_test(lcd_read_byte(),7)) ; 
#else 
delay_us(60);  
#endif 
if(address) 
   output_high(LCD_RS); 
else 
   output_low(LCD_RS); 
 delay_cycles(1); 
#ifdef USE_RW_PIN 
output_low(LCD_RW); 
delay_cycles(1); 
#endif 
output_low(LCD_E2); 
lcd_send_nibble2(n ›› 4); 
lcd_send_nibble2(n & 0xf); 
} 
//---------------------------- 

//DISPLAY 1
//----------------------------
void lcd_init1(void) 
{ 
int8 i; 
lcd_line = 1; 
output_low(LCD_RS); 
#ifdef USE_RW_PIN 
output_low(LCD_RW); 
#endif 
output_low(LCD_E1); 
delay_ms(35);          
for(i=0 ;i ‹ 3; i++) 
   { 
    lcd_send_nibble1(0x03); 
    delay_ms(5); 
   } 
lcd_send_nibble1(0x02); 
for(i=0; i ‹ sizeof(LCD_INIT_STRING); i++) 
   { 
   lcd_send_byte1(0, LCD_INIT_STRING[i]); /*
   Этой строки небыло, я добавил её сам по аналогии lcd_init2
   */
    #ifndef USE_RW_PIN 
    delay_ms(5); 
    #endif 
   } 
} 
//DISPLAY 2
void lcd_init2(void) 
{ 
int8 i; 
lcd_line = 1; 
output_low(LCD_RS); 
#ifdef USE_RW_PIN 
output_low(LCD_RW); 
#endif 
output_low(LCD_E2); 
delay_ms(35);          
for(i=0 ;i ‹ 3; i++) 
   { 
    lcd_send_nibble2(0x03); 
    delay_ms(5); 
   } 
lcd_send_nibble2(0x02); 
for(i=0; i ‹ sizeof(LCD_INIT_STRING); i++) 
   { 
    lcd_send_byte2(0, LCD_INIT_STRING[i]); 
    #ifndef USE_RW_PIN 
    delay_ms(5); 
    #endif 
   } 
} 
//---------------------------- 

void lcd_gotoxy(int8 x, int8 y) 
{ 
int8 address; 
switch(y) 
  { 
   case 1: 
     address = LCD_LINE_1_ADDRESS; 
     break; 

   case 2: 
     address = LCD_LINE_2_ADDRESS; 
     break; 

   case 3: 
     address = LCD_LINE_3_ADDRESS; 
     break; 

   case 4: 
     address = LCD_LINE_4_ADDRESS; 
     break; 

   default: 
     address = LCD_LINE_1_ADDRESS; 
     break; 
      
  } 
address += x-1; 
lcd_send_byte1(0, 0x80 | address); 
lcd_send_byte2(0, 0x80 | address); 
} 

// DISPLAY 1
void lcd_putc1(char c) 
{ 
 switch(c) 
   { 
    case '\f': 
      lcd_send_byte1(0,1); 
      lcd_line = 1; 
      delay_ms(2); 
      break;  
    case '\n': 
       lcd_gotoxy(1, ++lcd_line); 
       break; 
    case '\b': 
       lcd_send_byte1(0,0x10); 
       break; 
    default: 
       lcd_send_byte1(1,c); 
       break; 
   } 
} 
//DISPLAY 2
void lcd_putc2(char c) 
{ 
 switch(c) 
   { 
    case '\f': 
      lcd_send_byte2(0,1); 
      lcd_line = 1; 
      delay_ms(2); 
      break; 
    case '\n': 
       lcd_gotoxy(1, ++lcd_line); 
       break; 
    case '\b': 
       lcd_send_byte2(0,0x10); 
       break; 
    default: 
       lcd_send_byte2(1,c); 
       break; 
   } 
} 

//------------------------------ 
#ifdef USE_RW_PIN 
char lcd_getc(int8 x, int8 y) 
{ 
char value; 

lcd_gotoxy(x,y); 

// Wait until busy flag is low. 
while(bit_test(lcd_read_byte(),7));  

output_high(LCD_RS); 
value = lcd_read_byte(); 
output_low(LCD_RS); 

return(value); 
} 
#endif
Ниже прикладываю схемы соединений.
P.s. Буду признателен за помощь в решении моей проблемы.
Миниатюры:
Нажмите на изображение для увеличения
Название: PIC.JPG
Просмотров: 80
Размер:	66.4 Кб
ID:	29570  
Реклама:

Последний раз редактировалось VitaminPSG; 24.12.2011 в 15:27.
VitaminPSG вне форума  
Сказали "Спасибо" VitaminPSG
warel (28.06.2019)
Непрочитано 23.12.2011, 23:07  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: WH4004 4bit Мозговой штурм

Сообщение от VitaminPSG Посмотреть сообщение
ПРограмма + драйвер для дисплея написаны в PICC
Это CCS . Хоть он так же Pic C ,Но говоря PICC обычно подразумевают HI-TECH.

Вы меняете E1 и E2 и у вас меняется вывод . У меня подозрения что один из выходов или не сконфигурирован или не рабочий.
1) Осциллограф , анализатор есть ?
2) Подсоединять временно какой то один из E . Тут либо будет так же на одну половину выводить , либо совсем не будет . Зато это подтвердит мои слова.
__________________
Осторожно , злой кот

Последний раз редактировалось dosikus; 23.12.2011 в 23:11.
dosikus вне форума  
Эти 2 пользователя(ей) сказали Спасибо dosikus за это сообщение:
VitaminPSG (23.12.2011), warel (28.06.2019)
Непрочитано 23.12.2011, 23:23  
VitaminPSG
Частый гость
 
Регистрация: 23.12.2011
Сообщений: 13
Сказал спасибо: 15
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
VitaminPSG на пути к лучшему
По умолчанию Re: WH4004 4bit Мозговой штурм

Если я оставляю E1 (E2 отключаю выводит следующее)
#########

#########

Если я оставляю E2(E1 отключаю выводит следующее)
#########

LCD 2 Line 1
LCD 2 Line 2

Мне кажеться что не происходит инициализация первого контроллера =(
VitaminPSG вне форума  
Сказали "Спасибо" VitaminPSG
warel (28.06.2019)
Непрочитано 23.12.2011, 23:26  
EugenPKH
Прописка
 
Регистрация: 08.10.2009
Сообщений: 101
Сказал спасибо: 2
Сказали Спасибо 11 раз(а) в 10 сообщении(ях)
EugenPKH на пути к лучшему
По умолчанию Re: WH4004 4bit Мозговой штурм

Сообщение от VitaminPSG Посмотреть сообщение
Если я оставляю E1 (E2 отключаю выводит следующее)
#########

#########

Если я оставляю E2(E1 отключаю выводит следующее)
#########

LCD 2 Line 1
LCD 2 Line 2

Мне кажеться что не происходит инициализация первого контроллера =(
Правильно вам кажется , а все из за того что у вас не правильно она написана
попробуйте почитать доку для инициализации там должна быть большая задержка в начале
для проверке исправить код программы так :
void main() {
lcd_init2();
delay_ms(2);
lcd_init1();
и верните все E как были
EugenPKH вне форума  
Эти 2 пользователя(ей) сказали Спасибо EugenPKH за это сообщение:
VitaminPSG (23.12.2011), warel (28.06.2019)
Непрочитано 23.12.2011, 23:28  
Popeye
Почётный гражданин KAZUS.RUN
 
Аватар для Popeye
 
Регистрация: 05.08.2007
Адрес: Болгария Перник
Сообщений: 1,771
Сказал спасибо: 74
Сказали Спасибо 357 раз(а) в 245 сообщении(ях)
Popeye на пути к лучшему
По умолчанию Re: WH4004 4bit Мозговой штурм

Код впечатляет. Без комментариев, тоесть пишем задачу, все ясно, через месяц, после написания кода следующей программы как будем разбиратся что написали прежде ? Если нужно подправить ? А ?
__________________
Мыслю, следовательно существую
Popeye вне форума  
Эти 2 пользователя(ей) сказали Спасибо Popeye за это сообщение:
VitaminPSG (23.12.2011), warel (28.06.2019)
Непрочитано 23.12.2011, 23:40  
VitaminPSG
Частый гость
 
Регистрация: 23.12.2011
Сообщений: 13
Сказал спасибо: 15
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
VitaminPSG на пути к лучшему
По умолчанию Re: WH4004 4bit Мозговой штурм

Сообщение от EugenPKH Посмотреть сообщение
Правильно вам кажется , а все из за того что у вас не правильно она написана
попробуйте почитать доку для инициализации там должна быть большая задержка в начале
для проверке исправить код программы так :
void main() {
lcd_init2();
delay_ms(2);
lcd_init1();
и верните все E как были
По прежнему не работает первые две строки
VitaminPSG вне форума  
Сказали "Спасибо" VitaminPSG
warel (28.06.2019)
Непрочитано 23.12.2011, 23:41  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: WH4004 4bit Мозговой штурм

VitaminPSG, Проверяете вживую ?
__________________
Осторожно , злой кот
dosikus вне форума  
Эти 2 пользователя(ей) сказали Спасибо dosikus за это сообщение:
VitaminPSG (23.12.2011), warel (28.06.2019)
Непрочитано 23.12.2011, 23:42  
VitaminPSG
Частый гость
 
Регистрация: 23.12.2011
Сообщений: 13
Сказал спасибо: 15
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
VitaminPSG на пути к лучшему
По умолчанию Re: WH4004 4bit Мозговой штурм

Сообщение от Popeye Посмотреть сообщение
Код впечатляет. Без комментариев, тоесть пишем задачу, все ясно, через месяц, после написания кода следующей программы как будем разбиратся что написали прежде ? Если нужно подправить ? А ?
Если поможете убду примного благодарен, на решение проблемы готов даже выделить 300 рублей)
VitaminPSG вне форума  
Сказали "Спасибо" VitaminPSG
warel (28.06.2019)
Непрочитано 23.12.2011, 23:43  
VitaminPSG
Частый гость
 
Регистрация: 23.12.2011
Сообщений: 13
Сказал спасибо: 15
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
VitaminPSG на пути к лучшему
По умолчанию Re: WH4004 4bit Мозговой штурм

Сообщение от dosikus Посмотреть сообщение
VitaminPSG, Проверяете вживую ?
Да, только что перепрошил, все по прежнему.
VitaminPSG вне форума  
Сказали "Спасибо" VitaminPSG
warel (28.06.2019)
Непрочитано 23.12.2011, 23:47  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: WH4004 4bit Мозговой штурм

Сообщение от VitaminPSG Посмотреть сообщение
Да, только что перепрошил, все по прежнему.
Мою версию проверить не можете ?
__________________
Осторожно , злой кот
dosikus вне форума  
Эти 2 пользователя(ей) сказали Спасибо dosikus за это сообщение:
VitaminPSG (23.12.2011), warel (28.06.2019)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Важно: нужен мозговой штурм! Sukhanov Производственное оборудование 79 27.05.2008 07:22


Часовой пояс GMT +4, время: 10:01.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.