Работа с ЖКИ на контроллере HD44780 и его аналогах

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Открыл глаза
Аватара пользователя
Сообщения: 55
Зарегистрирован: Сб апр 16, 2011 19:55:15
Откуда: Красноярский край

Сообщение ВСЕГДА НА СВЯЗИ »

Друзья, будьте добры, подскажите пожалуйста. Есть пару дисплеев с контроллерами, с DVD. Хочу поставить в свой самодельный трансивер для указания рабочей частоты и других функций. Как их туда можно подогнать? Нужно ли будет перепрограммировать контроллеры или что то добавить ещё. Ранее с этим не занимался, поэтому прошу подсказки. Заранее спасибо.
Контактная информация:
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Можно все, но не все могут :))
А вообще если серьезно, какой контроллер для начала на этих дисплеях.Ищем информацию на контроллер, работаем.
В поисках истины человек развивается.
Контактная информация:
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 69
Зарегистрирован: Пт июл 08, 2011 09:03:07

Сообщение Sergey78 »

Если при подключении сигнала RS с выхода Pic к индикатору, на выходах DB0..DB7, Е,RS сигнал по форме http://www.lcdinfo.ru/data/lcd/lcd.pdf (страница 12) меняется на отрицательную постоянку, то индикатор труп ? Квадраты на верхней строке при этом высвечиваются нормально.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

а нога чтения/записи в каком состоянии?Для перевода дисплея в режим чтения нужно ногу R/W к земле притянуть.В этом режиме никакие сигналы из дисплея не должны выходить.Если притянули и все еще ноги на минусе, то конечно труп.
Там же русский даташит, почему вообще вопросы возникают?
В поисках истины человек развивается.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Сообщения: 124
Зарегистрирован: Вт июл 10, 2012 00:13:27
Откуда: Белгородская обл.

Сообщение mr.boroda »

что то перестал дисплей wg1602 работать высвечивает в первой строке мелькающие горизонтальные полоски, в каждом разряде на разном расстоянии.
контраст крутил - не помогает...
это конец ему?
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

нужно внимательно проверять все уровни в том числе и питания.Как раз дисплей загорается всплеском индикаторов,потом уже нормально верхнюю строку заполняет.
В поисках истины человек развивается.
Контактная информация:
Реклама
Встал на лапы
Сообщения: 124
Зарегистрирован: Вт июл 10, 2012 00:13:27
Откуда: Белгородская обл.

Сообщение mr.boroda »

vitalik_1984 писал(а):нужно внимательно проверять все уровни в том числе и питания.Как раз дисплей загорается всплеском индикаторов,потом уже нормально верхнюю строку заполняет.
проблема оказалась не в железе, а скорее всего в cvavr))
когда использую библиотеку alcd.h - все работает, если использую lcd.h или lcd_rus.h - то никак... завтра подробней... седня уже спать пойду...
Открыл глаза
Аватара пользователя
Сообщения: 69
Зарегистрирован: Пт июл 08, 2011 09:03:07

Сообщение Sergey78 »

а нога чтения/записи в каком состоянии?Для перевода дисплея в режим чтения нужно ногу R/W к земле притянуть.В этом режиме никакие сигналы из дисплея не должны выходить.Если притянули и все еще ноги на минусе, то конечно труп.


К минусу RW притянут. Если сигнал RS от дисплея отключить то на Е, RS и на каналах данных DB0...7 как и положено есть импульс, при подключении RS к дисплею, на всех каналах кроме Е показывает вместо импульса -0,4в.
Там же русский даташит, почему вообще вопросы возникают?
Там - это где ? Видел только на английском.
Встал на лапы
Сообщения: 124
Зарегистрирован: Вт июл 10, 2012 00:13:27
Откуда: Белгородская обл.

Сообщение mr.boroda »

В общем то гадал сегодня, так ниче и не получилось.
Если используюстандартную библиотеку alcd.h - работает
Если же подключаю lcd_rus.h или просто стандартную lcd.h то не хочет(при замене строки #include <alcd.h> ), выводит только мигающий сегмент...

Вот код, может где то недописал?

Код: Выделить всё

#include <mega8.h>
#include <1wire.h>
#include <stdio.h>
#include <delay.h>
#include <ds18b20.h>
#asm
.equ __lcd_port=0x12; PORTD /* ЖКИ дисплей подключили к порту I/O D*/
#endasm
#include <alcd.h>
unsigned char min,sek,chas,T,lcd_buffer[33];
int temp;
// Timer1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
// Place your code here
T++; 
if (T==200){T=0;sek++;};
if (sek==60){sek=0;min++;};
if (min==60){min=0;chas++;};
if (chas==24){chas=0;};
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=In Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=P State4=0 State3=0 State2=0 State1=0 State0=0 
PORTB=0x20;
DDRB=0xDF;

// Port C initialization
// Func6=Out Func5=In Func4=Out Func3=In Func2=In Func1=In Func0=Out 
// State6=0 State5=P State4=0 State3=P State2=P State1=P State0=0 
PORTC=0x2E;
DDRC=0x51;

// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1500,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0A;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AH=0x1D;
OCR1AL=0x4C;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// 1 Wire Bus initialization
// 1 Wire Data port: PORTB
// 1 Wire Data bit: 5
// Note: 1 Wire port settings must be specified in the
// Project|Configure|C Compiler|Libraries|1 Wire IDE menu.
w1_init();

// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTD Bit 7
// RD - PORTD Bit 6
// EN - PORTD Bit 5
// D4 - PORTD Bit 3
// D5 - PORTD Bit 2
// D6 - PORTD Bit 1
// D7 - PORTD Bit 0
// Characters/line: 8
ds18b20_init(0, 0, 60, DS18B20_12BIT_RES);
lcd_init(16);
PORTC.0=1;
// Global enable interrupts
#asm("sei")

while (1)
      {
      // Place your code here
      lcd_clear();        /* очистка дисплея */
      lcd_gotoxy(0,0);          /* верхняя строка, 0 позиция */
      lcd_putsf("fack");      /* выводим надпись в указанных координатах */ 
      lcd_gotoxy(0,1);          /* нижняя строка, 0 позиция */
      sprintf(lcd_buffer,"%u:%u:%u - %u gr",chas,min,sek,temp);   /* заполняем буфер */
      lcd_puts(lcd_buffer);     /* выводим надпись в указанных координатах */
      if (PINC.5==0){chas++;};
      if (PINC.3==0){min++;};
      temp=ds18b20_temperature(0);
      delay_ms(100); 
      }
}
и еще вопрос вывожу не экран время и если время 13:05:04, то выводит 13:5:4... Чтоб вывести с нулями это мне нужно на разряды разложить и по разряду выводить?
Вложения
Фото0338.jpg
когда lcd или lcd_rus
(173.83 КБ) 536 скачиваний
Фото0339.jpg
когда библиотека alcd.h
(162.23 КБ) 498 скачиваний
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение ut1wpr »

mr.boroda писал(а): и еще вопрос вывожу не экран время и если время 13:05:04, то выводит 13:5:4... Чтоб вывести с нулями это мне нужно на разряды разложить и по разряду выводить?

Код: Выделить всё

sprintf(lcd_buffer,"%02u:%02u:%02u - %2u gr",chas,min,sek,temp);   /* заполняем буфер */
А потом садимся и внимательно читаем сказку о предмете... http://ru.wikipedia.org/wiki/Printf
А потом становимся умные-умные. И учим других.. :) :)
С уважением,
Виктор.
Встал на лапы
Сообщения: 124
Зарегистрирован: Вт июл 10, 2012 00:13:27
Откуда: Белгородская обл.

Сообщение mr.boroda »

http://mega-avr.ucoz.ru/publ/1 вот тут читал...

Теперь умный, умный)))
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение ut1wpr »

mr.boroda писал(а):http://mega-avr.ucoz.ru/publ/1 вот тут читал...
Странно. Тогда почему возник вопрос? Там ведь все четко расписано. Если непонятно, а под рукой есть отлаживаемое устройство с рабочим дисплеем, что мешает все неясные вопросы перепробовать на макете? Другие на Протезусе тренируются, говорят, тоже помогает...
С уважением,
Виктор.
Открыл глаза
Сообщения: 71
Зарегистрирован: Вт дек 09, 2008 20:54:30
Откуда: Златоуст

Сообщение Biggy »

А как на экран вывести русские символы. Нашел не помню уж где программу - перекодировщик LCD20 (в приложении).
В результате ее работы словосочетание "Русский язык" преобразуется в

Код: Выделить всё

Db  50h,79h,63h,63h,0BAh,0B8h,0B9h,20h,0C7h,0B7h,0C3h,0BAh,20h,20h,20h,20h
Как это скормить дисплею?
Вложения
LCD20.zip
(125.01 КБ) 212 скачиваний
Изображение
Контактная информация:
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение ut1wpr »

mr.boroda писал(а):Вот код, может где то недописал?

Код: Выделить всё

 Далее много всякого
Вопрос. Вы прикинули, насколько информативна выложенная часть кода? В процентах от общего объема. Как у кого, у меня пропадает желание вылущивать оттуда полезную часть. Вы бы потрудились убрать из текста все то, что вам "волшебник" кодвижна нагенерировал, там почти все абсолютно ненужное. Поберегите чужое время.

Обработчик прерывания будет выполняться быстрее, если его переписать:

Код: Выделить всё

interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
// Place your code here
  if( ++T != 200 ) return;
  T = 0; if( ++second != 60 ) return;
  second = 0; if( ++minutes != 60 ) return;
  minutes = 0; if( ++hours != 24 ) return;
  hours = 0;
}
В вашем варианте выполняются все проверки. В предложенном - только необходимые.
Хотя в вашем тренировочном варианте это не так уж и важно, но приучайте себя к оптимизации обработчиков по быстродействию. Иногда бывает полезно. :)
Пусть вас не пугает обилие операторов возврата. Компилятор их превратит в джампы на точку выхода из обработчика. Вообще, при написании на Си желательно "видеть", во что компилятор превратит вами написанное.
Последний раз редактировалось ut1wpr Сб сен 08, 2012 08:50:27, всего редактировалось 1 раз.
С уважением,
Виктор.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

ut1wpr писал(а):Вы бы потрудились убрать .... все абсолютно ненужное. Поберегите чужое время.

Согласен полностью, и к тому же еще и без спойлера такой большой код.
В поисках истины человек развивается.
Контактная информация:
Открыл глаза
Сообщения: 71
Зарегистрирован: Вт дек 09, 2008 20:54:30
Откуда: Златоуст

Сообщение Biggy »

А как очистить содержимое экрана. Команда
0х01 не помогает.
Изображение
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Судя по даташиту команда очистки экрана заполняет символами 0x20 - (пробелы) весь дисплей.Можете поступить аналогичным образом.
Ну а вообще хотелось бы посмотреть каким образом команда отсылается.
Контактная информация:
Родился
Сообщения: 11
Зарегистрирован: Пн сен 10, 2012 09:17:55

Сообщение xaker66 »

Добрый день .У меня такой вопрос,может быть он ламерский ,но информацию по нему не могу нигде найти.Мне нужно вывести часы на LCD 20x4,но так чтобы размер цифр был не на одну строку ,а на 2 или 3 строки типа такого .Если кто знает поделитесь как или подскажите где можно найти информацию по этой теме
Вложения
IMG_0909.1.jpg
(48.08 КБ) 347 скачиваний
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Сообщение uk8amk »

8 первых символов с номером 0...7 находятся в области CGRAM и их изображение может задавать пользователь, т.е. вы. Вам нужно записать туда разные 'кубики' и из них строить изображение цифр. Многие библиотеки выложенные в этой ветке имеют функции для определения пользовательских символов. Это на тот случай если ваша не имеет такойсвозможности.
Родился
Сообщения: 11
Зарегистрирован: Пн сен 10, 2012 09:17:55

Сообщение xaker66 »

можно более подробно что и как
Ответить

Вернуться в «Периферия»