Свежие обсуждения
Микроконтроллеры

Mega8 + LCD Nokia3310

1 3

Добрый день !
Помогите разобраться, написал программу вывода на СИ (CVAVR) для Mega8 + LCD Nokia3310. Все работает, но вот беда, почему-то не получается включить режим отображения вывода черным по белому (normal). Все время пишет в инверсном виде т.е. белым по черному. Так же (видимо по той же причине) не включается режим зеркалирования. Вообще такое ощущение что вообще не включаются расширенные (extended) команды.
Я подозреваю, что что-то делаю неправильно, но никак не могу понять что именно. Не дайте погибнуть человеку, неделю мучаюсь......
В архиве проект для CVAVR и проект для Протеуса.
Чужой hex в протеусе показывает все правильно.

247637.rar

 

Господа, никто не поможет?

 

Попробуйте так


while(1)
{
PORTD.5=0;
lcd_send(0x0D,1);
delay_ms(100);
PORTD.5=1;
lcd_send(0x0C,1);
delay_ms(100);
}

 

Я наверное чего то не понимаю, зачем PORTD.5=0, PORTD.5=1 ? В моей программе это бессмыслица, тем более что PORTD.5 это вход.
Задержки конечно же пробовал не помогает.
Если имеется ввиду PORTС.5 , то не помогает.

 

1) В своей программе вы настраиваете portd на выход, если это бессмыслица, то я-то при чём?

2) Вы именно альтернируете PORTD.5 в вашей программе с помощью оператора if, чтобы помигать диодом.

3) В соответствии с п.1 и п.2 делаю вывод, что программу писали не вы.

 

Lerik: Все время пишет в инверсном виде т.е. белым по черному.
В Протэусе тоже пишет в инверсном виде?
Я вчера попытался скомпилировать Ваш проект в CVAVR 1.23.8с Он мне выдал 50 ошибок. Может я чего то не то делаю, я CVAVR не пользуюсь, но пару программ компилировал без особых проблем.
В файле lcd.c коды инициализации жк дисплейа такие же как и в даташите, т.е. правильные. Вашу ошибку выявить нет возможности т.к. не могу запустить симуляцию в протэусе.

P.S. GM Добрый вечер.
Программа и «порубанный» файл симуляции говорят, что Lerik нашёл проект блока питания и пытается написать свою программу управления т.к. исходника судя по всему не имеет.

 

Привет Link, сколько лет, сколько зим!

Мне и без компиляции видно, что вроде всё нормально. Но если не работает, надо искать ошибку. Предлагал товарисчу сделать попеременную смену режима с инверсного на прямой и обратно каждые 100мс, должна же картинка изменяться...Так вместо того, чтобы сделать как говорят, и доложить результаты, он начинает толковать о бессмыслице, о том что у него порт стоит на вход... Порт-то стоит, да настроен на выход. Ну разуй глаза и посмотри в программу, там всё написано...Прошу прощения за резкость.

 

GM: Привет Link, сколько лет, сколько зим!
Это точно. В место Lerica послушался Вашего совета и посмотрел его тестовую программу.

Leric Глянул я Вашу тестовую программу.
// Lcd_Mode(1);
lcd_send(0x0C, LCD_CMD); //Вот эта команда включает нормальный режим, который в прочем уже включен при инициализации дисплея.
lcd_goto_xy(15,4);
lcd_str(str2);

// Lcd_Mode(2);
lcd_send(0x0D, LCD_CMD);// А вот именно эта строка инвертирует дисплей. После инвертирования дисплея, Вы в своей программе уходите в цикл, и больше нормальный режим не включаете.
lcd_goto_xy(25,6);
lcd_str(str1);

Так что теперь как Вы думаете - почему у Вас все в инверсном печатает?

 

GM: " Ну разуй глаза и посмотри в программу, там всё написано...Прошу прощения за резкость."

Прощаю , весна, обострениия...
Порт D на выход - все правильно, он "диодиком" моргает чтобы было видно что протеус симулит.
Но то что Вы предложили работать не будет даже теоретически, потому что если бы Вы посмотрели внимательно , к тому времени как начинает мигать светодиод, все уже на экран выведено и смена режимов нормальный-инверсный ни к чему не может привести, так как ничего на экран не выводится !!! Ну или Вы просто не понимаете как работает LCD Nokia 3310

 

to Link :
"lcd_send(0x0D, LCD_CMD);// А вот именно эта строка инвертирует дисплей. После инвертирования дисплея, Вы в своей программе уходите в цикл, и больше нормальный режим не включаете. Так что теперь как Вы думаете - почему у Вас все в инверсном печатает?"

Да действительно, все вроде правильно, но перед этим то нет включенного режима инверсии и изначально он выключен но печатет все равно в инверсном !!! Поверьте мне, что на таком я бы не споткнулся потому как уже 2 недели борюсь с этим ..... и безрезультатно, поэтому я выложил проект и хотел что бы меня "ткнули носом" где же у меня ошибка, я подозреваю что там все просто только я чего-то не понимаю, возможно проблемы с задержками поэтому дисплей не отрабатывает, может еще чего. Если кто реально писал аналогичную программу или сталкивался тот конечно может подсказать.
Это действительно блок питания, он у меня работает достаточно давно, есть у меня и исходники но к сожалению они написаны на ассемблере. Хотелось просто в качестве тренировки переписать на СИ, что бы всегда была возможность изменить код так как мне надо
Про 50 ошибок, может просто у Вас версия старенькая у меня 2.03.9 Standart.

Спасибо всем откликнувшимся.