Jump to content

Recommended Posts

#define F_CPU 1000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <avr/io.h>

#define RS PINC0
#define EN PINC1
// Функция передачи команды
void lcd_com(unsigned char com)
{
	PORTC &= ~(1 << RS); // RS = 0 (запись команд)
	PORTC |= (1 << EN); // EN = 1 (начало записи команды в LCD)
	PORTD &= 0xF0; //обнуляем 0:4 пины порта Д
	PORTD |= (com >> 4); // старший нибл
	_delay_us(100);
	PORTC &= ~(1 << EN); // EN = 0 (конец записи команды в LCD)
	_delay_us(100);
	PORTC |= (1 << EN); // EN = 1 (начало записи команды в LCD)
	PORTD &= 0xF0; //обнуляем 0:4 пины порта Д
	PORTD |= (com & 0x0F); // младший нибл
	_delay_us(100);
	PORTC &= ~(1 << EN); // EN = 0 (конец записи команды в LCD)
	_delay_us(100);
}
// Функция передачи данных
void lcd_data(unsigned char data)
{
	PORTC |= (1 << RS);PORTC|=(1 << EN); // RS = 1 (запись данных), EN - 1 (начало записи команды в LCD)
	PORTD &= 0xF0; PORTD |= (data >> 4); // старший нибл
	_delay_us(100);
	PORTC &= ~(1 << EN); // EN = 0 (конец записи команды в LCD)
	_delay_us(100);
	PORTC |= (1 << EN); // EN = 1 (начало записи команды в LCD)
	PORTD &= 0xF0; PORTD |= (data & 0x0F); // младший нибл
	_delay_us(100);
	PORTC &= ~(1 << EN); // EN = 0 (конец записи команды в LCD)
	_delay_us(100);
}
//функция передачи строки
void lcd_string (const char str1[])
{
	wchar_t n;
	for(n=0;str1[n]!='\0';n++)
	lcd_data(str1[n]);
}
//функция вывода чисел
void lcd_chisla(unsigned int chislo)
{//делим число и выводим посимвольно в buffer, buffer[2] значение запятой
	unsigned char buffer[5]={'0','0',',','0',0};
	buffer[0]=(chislo/100)+'0';
	buffer[1]=((chislo%100)/10)+'0';
	buffer[3]=(chislo%10)+'0';
	for (unsigned char i=0;i<5;i++)
	{
		lcd_data(buffer[i]);
	}
}
//функция позиционирования курсора
void lcd_poz(unsigned char x)
{
	char adress;
	adress=x|0b10000000;//set DDRAM adress дш стр24
	lcd_com(adress);
}
//функция инициализации дисплея
void lcd_ini(void)
{
	_delay_ms(15);
	// Конфигурирование четырехразрядного режима
	PORTC |= (1 << PIND1);
	PORTC &= ~(1 << PIND0);
	// Активизация четырехразрядного режима
	PORTC |= (1 << EN);
	PORTC &= ~(1 << EN);
	lcd_com(0x20); //0b00100000 - 4 разрядная шина, 1 строки
	_delay_ms(40);
	lcd_com(0x08); // 0b00001000 полное выключение дисплея
	_delay_ms(40);
	lcd_com(0x01); // 0b00000001 очистка дисплея
	lcd_com(0x06);  //0b00000110 - курсор движется вправо, сдвига нет
	_delay_ms(40);
	lcd_com(0x0C);  //0b00001100 - дисплей включен, курсор выключен, мерцание выключено
	_delay_ms(40);
}
//функция очистки дисплея
void lcd_clear (void)
{
	lcd_com(0b00000001);
}

void port_ini (void)
{
	DDRD|=0xFF;
	DDRB|=0xFF;
	DDRC|=0xFF;
	PORTD|=0;
	PORTB|=0;
	PORTC|=0;
}
int main(void)
{
	port_ini();
	lcd_ini();
	while (1)
	{	
		lcd_poz(0);
		lcd_string("i love maria");
	}
}

вот вся портянка

Share this post


Link to post
Share on other sites
_delay_ms(20); //Ждем 15 мс (стр 45)
	sendhalfbyte(0b00000011);
	_delay_ms(4);
	sendhalfbyte(0b00000011);
	_delay_us(100);
	sendhalfbyte(0b00000011);
	_delay_ms(1);
	sendhalfbyte(0b00000011);
	_delay_ms(1);
	sendhalfbyte(0b00000010);
	_delay_ms(1);
		
	sendbyte(0b00101000,0); //0-0-1-DL-N-F-0-0,(4бит-режим DL=0) и (2 линии N=1, N=0 1 линия), (F=0 размер символов 5*8 точек F=1 размер 5*10)
	_delay_ms(1);
	sendbyte(0b00001100,0); //0-0-0-0-1-D-C-B,(включаем изображение на дисплее (D=1 вкл D=0 выкл),курсор выкл=0 вкл=1 (C-подчеркивание, B-квадрат)
	_delay_ms(1);
	sendbyte(0b00000110,0); //0-0-0-0-0-1-I/D-S,(I/D=0 счетчик адреса уменьшается =1 увелич.(S=0 сдвиг экрана не будет,S=1 сдвиг производится согласно I/D
	_delay_ms(1);
	clearlcd();//стереть дисплэй

Я полагаю у вас не верная инициализация дисплея. Нужна вот такая последовательность.. sendhalfbyte(0b00000011); функция отсылает 1-е 4 бита.(0-3)

Edited by Demonrostov

Share this post


Link to post
Share on other sites

Металл-композит как альтернатива ферриту: дроссели Panasonic семейства ETQP

Современные электронные устройства требуют все более компактных и эффективных компонентов. Новые металл-композитные дроссели обладают рядом преимуществ перед дросселями с ферритовым сердечником. Они не имеют ярко выраженного насыщения, обладают отличными частотными свойствами и способны работать при температурах до 150°C и выше. Все это делает их альтернативой стандартным дросселям с ферритовым сердечником в широком спектре автомобильных и промышленных приложений.

Подробнее

8 минут назад, Дмитрий Мамедиев сказал:

но она работает с передачей через порты 4:7

так сделай чтобы работала через 0:3, а не тупо вытри из процедуры инициализации

1 час назад, Дмитрий Мамедиев сказал:


//функция инициализации дисплея
void lcd_ini(void)
{
	_delay_ms(15);
	// Конфигурирование четырехразрядного режима
	PORTC |= (1 << PIND1);
	PORTC &= ~(1 << PIND0);
	// Активизация четырехразрядного режима
	PORTC |= (1 << EN);
	PORTC &= ~(1 << EN);
}

 

Конфигурирование четырехразрядного режима куда делось?

Share this post


Link to post
Share on other sites
                     

Новые литиевые ХИТы Fanso работают даже при +150ºС!

Когда приходится учитывать работу в экстремальных условиях, к выбору электронных компонентов подходишь с особой тщательностью. Высокие температуры, большие перепады давления, труднодоступность – все это требует специальной продукции. Склад КОМПЭЛ пополнился новыми литиевыми ХИТами Fanso, стабильно работающими даже при температуре до 150 ºС. Батарейки имеют номинальное напряжение 3,6 В, обладают ёмкостью от 700 до 14000 мАч, работоспособны в широком температурном диапазоне -20…150ºС и имеют низкий саморазряд (не более 3% в год в нормальных условиях хранения).

Подробнее о высокотемпературной линейке

13 минуты назад, Дмитрий Мамедиев сказал:

но она работает

Может оно и работает, но закрывая на не правильную (согласно даташиту) инициализацию, вы закладываете себе на будущее  непонятки типа "как, оно же работало!".  Один дисплей может работать, второй нет....Один протеус реагирует на код так другая версия уже может по другому.

Share this post


Link to post
Share on other sites

Вам никто не поможет, пока вы сами не начнете делать сразу правильно, а не так "как вроде работает".

Share this post


Link to post
Share on other sites
Только что, Дмитрий Мамедиев сказал:

я только изменил в lcd_com и lcd_data порядок передачи полубайта

Это как? Порядок есть порядок, его менять не надо...


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites
26 минут назад, Дмитрий Мамедиев сказал:

да ничего я не вытирал из инициализации.

да ну? передача первых четырех ниблов (команды 0х3 и 0х2) из твой портянки куда делась?

1602.thumb.png.a40df6dc218a0ae5a936c92661da75c8.png

Share this post


Link to post
Share on other sites
19 минут назад, Дмитрий Мамедиев сказал:

lcd_com и lcd_data

Вы не заметили, что эти функции практически одинаковы и отличаются только RS сигналом, так может их стоит объединить и добавить еще один параметр (команда, данные)...И партянка станет короче:rolleyes:

Share this post


Link to post
Share on other sites
void lcd_ini(void)
{
	_delay_ms(15);
	lcd_com(0x3);
	_delay_ms(5);
	lcd_com(0x3);
	_delay_us(100);	
	lcd_com(0x3);//0b00100000 - 4 разрядная шина, 1 строки
	lcd_com(0x2);//очистка дисплея, курсор невидим и не мигает
	lcd_com(0x8);// 0b00000001 очистка дисплея
	lcd_com(0x6);//0b00000110 - курсор движется вправо, сдвига нет
	lcd_com(0xC);//0b00001100 - дисплей включен, курсор выключен, мерцание выключено
}

вот с этим заработало. 

Share this post


Link to post
Share on other sites
11 минуту назад, Дмитрий Мамедиев сказал:

вот с этим заработало. 

лапшу на ущи не вешай.

Share this post


Link to post
Share on other sites

ну если не вешаешь расскажи, что ты там передал в ЖКИ этой командой  lcd_com(0x3); или этой lcd_com(0x2); и что надо было передать, обиженный ты наш

Share this post


Link to post
Share on other sites

Вы там ни че не напутали? После прошивки идет верификация и если нет ошибок значит все хорошо. Ошибка в программе или нерабочий пин.

Share this post


Link to post
Share on other sites

То что программа скомпилировалась не означает что она рабочая.


Учение - изучение правил. Опыт - изучение исключений.

Share this post


Link to post
Share on other sites

Добрый день!

Раньше имел дело только с дисплеями 1602 и nokia 5110.

Сейчас попал в руки дисплей PG24122 (интернет определяет его как GM24122S1RH).

PG24122_front_640.jpg.8df3afca6cc6fa2b81c53a32c67f51e3.jpgHTB1cFvTJFXXXXcaXVXXq6xXFXXXx.jpg.2b7a9b2946bfbaab83c042a831e4562f.jpg

Описание: http://megtestesules.info/hobbielektronika/cuccok.html

LCD Module Specification: http://megtestesules.info/hobbielektronika/cuccok/HE001/GM24122S1RH-J6.pdf

1365847185_.PNG.e3d8fc9d53abeab008f5ad30461ca31e.PNG

Продается на алиэкспресс: https://ru.aliexpress.com/item/32814247150.html

Это всё, что я смог найти в сети про этот дисплей.

Может кто-то научить, как подключить его к Ардуино или Атмега?

Спасибо!

Share this post


Link to post
Share on other sites

У меня примерно с таким же интерфейсом от древнего ноута есть дисплей. Дело в том что тут не всё так просто. У дисплея есть память только на одну строку, а всю картинку должен держать в себе контроллер. По всей видимости, логически дисплей состоит из двух частей - верхней и нижней половины с независимыми регистрами строк. Каждая часть из себя представляет регистр строки в который ты побитно через SD1 и SD2 с общим клоком CP заносишь данные на одну строку(длину строки в битах х.з. какая у этого дисплея можно определить практически либо с маркировки но думаю что кратная 8) потом выдаёшь сигнал LOAD(типа строчный синхросигнал), и содержимое записывается в транзисторы TFT-матрицы и переключается на следующую строку. Заряд на них держится... какое-то время, от секунд до минуты. Когда загрузил все строки, выдаётся сигнал FRAME(это типа кадровой развертки в телевизоре), счетчик строк обнуляется и всё идет сначала. По-хорошему, сигнал надо выдать в начале отрисовки дисплея.

Общий провод и +5в - понятно куда подключать, VLCD и VADJ всё-таки надо смотреть в даташит, в моём дисплее от ноута там было порядка -19В и на контрасте -21В или наоборот. У этого дисплея поидее должно быть меньше, но надо уточнять.

ME(M) это вход частоты перекллючения ЖК ячеек дисплея... поидее туда надо меандр в диапазоне 10-20Гц. Чем быстрее переключаешь тем отзывчивей дисплей но выше энергопотребление. Можно попробовать в эконом режиме 1-2Гц но может наяать неприятно мерцать.

К мелкому контроллеру не подключишь... тут надо много RAM.


Учение - изучение правил. Опыт - изучение исключений.

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By dron92
      Подскажите как вернуть к жизни контролер или в утиль!
      Решил собрать программатор AVRISP mkII купил микросхему собрал подключил а устройств нет в диспетчере и  Flip не видит его!
      Начал искать косяки в сборке не нашел решил спаять Отладочная плату
      тот же результат, попробовал подключить через ISP не отвечает !
      Решил пойти на крайние меры  подключил через FuseDoctor сигнатуру он не видел вел 1e9482 вроде увидел но результата сбросить не проучилось но теперь он начал видится в таком формате фото внизу




    • By Sl653
      Доброй ночи. Продам Segnetics SMH4 новый в упаковке. 14 т.р. и УПП Siemens Sirius 3RW4036 29т.р. тоже новый. Если кого заинтересовало то пишите на почту sl.s@inbox.ru
       
       


    • By Jesterary
      Здравствуйте. Подскажите, был ли у кого-то опыт отправки изображений с камеры (подключенной через UART или bluetooth-камеры) через GPRS (у меня модуль SIM800L, но в целом это не принципиально) на удаленный сервер? Средствами управляющего микроконтроллера, пусть даже ардуины какой-нибудь, но не малины. Возможно ли это вообще? Хотелось бы, конечно, использовать в проекте беспроводную камеру и общаться с ней, ибо камеры, подключаемые напрямую так себе качество дают. 
      Сразу скажу, что важна именно такая связь. Микроконтроллер + модуль связи + камера находятся в коробке и путешествуют по городу, в это время человек сидя дома на диване может смотреть фото с этой камеры. Смартфон для моих целей не подойдет, суть именно в микроконтроллере с модулями.
      Если у кого-то такое получалось - поделитесь, пожалуйста :)
      А то нахожусь в некоторой прострации и даже не знаю, в какую сторону думать.
    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Anton Bondarenko
      Всем привет
      Прошу не ругать, впервые подобный вопрос задаю.
      Хочу сделать прибор, который будет посылать сигнал, когда возле прибора будет проходить металлический предмет. 
      — угол отслеживания до 30° а лучше прямая линия, траектория
      — время реакции очень высокое до 100 мс
      — ширина проема в котором нужно сканировать от 10 до 20метров,
      — передача сигнала через вифи
      Может есть готовые решения, или отдельные компоненты.
      Подскажите пжл в каком направлении искать.
      Смотрел датчики движения, но главная проблема — время реакции.
      Спасибо
       
  • Сообщения

    • Неправда это. Я в молодости пищалки на 25-АС-326 спалил напрочь 20-Ваттным усилителем...... генератором все диапазоны прогнал. Они-ж на номинальную рассчитаны, на 25, я тогда не знал, что пищалки там 3ГД-**
    • После того как вставили картинку ткните на ней 2 раза мышкой - выскочит окошко, вот в нем любой размер картинки и выставляйте.
    • Много встречал и "халтурщиков", и настоящих профи. Рупорные были только ВЧ и, немного реже, СЧ. НЧ ни разу не видел. Не повезло... 
    • берем 4 батарейки 18650 (или аналогичные), к ним берем плату https://aliexpress.ru/item/32817069499.html?spm=a2g0s.9042311.0.0.264d33edxZOcBj (или похожую на нужный вольтаж), и подключаем все это хозяйство параллельно . Платка балансира зарядит АКБ и отключит когда батарейка зарядится. Сняли питание от сети и  колонка работает от АКБ. нет лишней коммутации. У мну так Шурик работает на этой платке и 4 батарейках 32700.
    • Вы еще связку энкодер+цифровой потенциометр предложите, тоже сносу не будет)))
    • Магнитопровод: ШЛ16 х 16,    Индуктивность: 1,2 Гн,     Номинальный ток: 0,4 А По току подойдёт (даже один на оба канала), индуктивность маловата, НО (Дроссель Д38 в исполнении Н (Д38Н) имеет две одинаковые симметричные обмотки)  можно собрать хитрый  C-L-C фильтр, который будет эффективнее простого давить пульсации.  Фильтры такого типа стояли в  БП "Симфонии". Есть даже люди, которые знают, как их правильно рассчитать.  
    • Пробовал такие. Очень надёжные, проволочные и герметичные, но редкие.   Картинки сами получаются большие. Нужно их как-то редактировать. На некоторых форумах есть ограничения максимального размера 1024х768, больше не вставляются.  
×
×
  • Create New...