LCD_16X02_Atmega8

Тут обсуждаем все что связано с микроконтроллерами.

Модератор: gurvinok

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: LCD_16X02_Atmega8

Сообщение gurvinok » 25 апр 2017, 17:18

Процентов на 90 буква С написана в русской раскладке клавиатуры.
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: LCD_16X02_Atmega8

Сообщение AVRIK » 25 апр 2017, 21:23

Алексей!!! Вы угадали все буквы! Подарок в студию! (подарок за мной,при встрече(если найдете свободное время конечно!)).

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: LCD_16X02_Atmega8

Сообщение gurvinok » 29 апр 2017, 23:03

Это частая засада. Истчо есть букавки Х, О, Р ну и тд по аналогии)))
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: LCD_16X02_Atmega8

Сообщение AVRIK » 30 апр 2017, 01:02

Алексей здравствуйте!
По причине того что нарисованный вами код не вывел на дисплей никого, решил пошагово изучить происходящее в сеем колдовстве! Сочинил такой вот код, по эпизоду вашего кода, но тут странные вещи происходят однако!!!

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

/*
 * _8_PORT.c
 *
 * Created: 29.10.2016 11:15:20
 *  Author: SUN
 */ 
#define  F_CPU7372800UL
#include <avr/io.h>
#include <avr/delay.h>
#define PORT_D4    PORTB
#define PORT_D5    PORTB
#define PORT_D6    PORTB
#define PORT_D7    PORTB
#define D4           4
#define D5           5
#define D6           6
#define D7           7

 unsigned char *k;
//--------------------------------------
void lcd_out(char data)
{
	if(data & 0x01)
	{
		PORT_D4 |= (1 << D4);
	}
	else
	{
		PORT_D4 &= ~(1 << D4);
	}
	if(data & 0x02)
	{
		PORT_D5 |= (1 << D5);
	}
	else
	{
		PORT_D5 &= ~(1 << D5);
	}
	if(data & 0x04)
	{
		PORT_D6 |= (1 << D6);
	}
	else
	{
		PORT_D6 &= ~(1 << D6);
	}
	if(data & 0x08)
	{
		PORT_D7 |= (1 << D7);
	}
	else
	{
		PORT_D7 &= ~(1 << D7);
	}
	
}

//-----------------------------------------------------------------
int main(void)
{
	DDRB=0xFF;
	PORTB=0x00;
 unsigned char A=0;
	A=0x01;
	k =& A;
	 lcd_out(k);
     
	
			 		
    while(1)
   {
	 
    asm("nop");
   }	   		   
		
		
}	
Создал указатель с целью забирать с постоянного адреса данные (data), а туда их по идее приносет переменная А.
Загрузил вручную переменную А числом 0х01 и присвоив значение указателю "k" запустил это число аргументом в функцию void lcd_out(char data){...}; -(ваших рук дело). В результате вместо 4го пина,игнорируя фильтр "if" активируются 4-5-7 пин!? А когда в "main"- аргументом в функцию вставляю не значение с указателя а напрямую переменную "А", все путем!
Вопрос: Почему функция при чтении переменного(аргумента) срабатывает правильно, а при чтении той же переменной(аргумента), но присвоенному к указателю, делает ошибку?
Вот что выдает:
Вложения
Снимок.PNG
Снимок.PNG (6.78 КБ) 434 просмотра

AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: LCD_16X02_Atmega8

Сообщение AVRIK » 30 апр 2017, 20:45

Здравствуйте Алексей!
Предполагаю что вы не загружены работой на майские праздники!? Предлагаю встретиться при удобном случае для обсуждения моей проблемы, которая проблемой является для меня, а для вас, уверен сущий пустяк. Выберите свободное время, и я приглашаю вас в кабак на Остоженке. Там и обсудим что и как. Очень надеюсь что не откажете и уделите мне пару-тройку часов! Заметьте, еще с декабря я напрашиваюсь на "аудиенцию" к вам, но дела, дела, дела!!! Ну чтож, слово за вами.

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: LCD_16X02_Atmega8

Сообщение gurvinok » 02 май 2017, 18:59

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

AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: LCD_16X02_Atmega8

Сообщение AVRIK » 03 май 2017, 01:59

Здравствуйте Алексей!
По поводу вопросов по теме, я его задал шагом раньше, но вы быть может на нее не обратили внимание. Просмотрите пожалуйста.
По поводу "пивнушки". Я приглашал вас не пиво пить, а обговорить мое предложение. Дело в том что у меня уже года полтора лежит вышедший из строя гаджет, которую сконструировал молодой гениальный паренек, который на сегодняшний день живет за границей, и контактов у меня к сожалению нет. Так вот, этот прибор заглючил и надо ее реанимировать. Я увидел в вас талантливого программиста и отзывчивого человека, который к тому-же принимает деловые предложения. Вот и пытался к вам достучаться. Я не представлял, где можно обсудить такой вопрос лучше, чем в непринужденной обстановке, за дружеским столом, вот и все!
Но рас вы категорически против, поясните мне пожалуйста, как бы я мог обсудить с вами предложения. Конечно-же вы понимаете что такие вопросы на просторах интернета не обсуждаются. Нет желания?, нет проблем, Бог вам в помощь!
А по поводу моего вопроса от 30го апреля, подскажите пожалуйста в чем ошибка.
С уважением!

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: LCD_16X02_Atmega8

Сообщение gurvinok » 03 май 2017, 18:43

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

k =& A;
    lcd_out(k);
Функции вместо данных будет передан адрес расположения переменной А. Чтобы передать указатель на А можно просто написать lcd_out(&A);
Если долго мучиться, может быть получится.

AVRIK
Сообщения: 119
Зарегистрирован: 24 сен 2016, 11:25

Re: LCD_16X02_Atmega8

Сообщение AVRIK » 06 май 2017, 00:26

Алексей здравствуйте!
Все изучаю ваш код от 12го апреля по запуску дисплея.Есть вопрос: в коде отсутствует установка координат стартового адреса курсора "gotoxy". Но в вашем коде есть функция lcd_init(); в котором через "switch(lcd)" комбинациями "0"и"1" пина выбирается положение курсора,(согласно комментариям). Исключает ли такая установка необходимость установки начального адреса первого символа,(в gotoxy(0-ячейка,0-строка)).
Взяты ли аргументы lcd_init с "описание команд модуля"?

Аватара пользователя
gurvinok
Сообщения: 1473
Зарегистрирован: 02 мар 2013, 09:18
Откуда: Москва

Re: LCD_16X02_Atmega8

Сообщение gurvinok » 08 май 2017, 10:31

Вот готовый генератор кода. Несколько кликов мышкой и все готово. Генерит код под студию. В корне проекта можно посмотреть на все функции. Именно функция lcd_init(BYTE lcd) принимает в качестве аргумента тип отображаемого курсора и выводит его в верхний левый угол.
А вот здесь полное описание данных функций.
Если долго мучиться, может быть получится.

Ответить