Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/47: Рейтинг темы: голосов - 47, средняя оценка - 4.68
motymitobtiid
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 21
1

Atmega16 + LCD

20.01.2014, 19:23. Просмотров 8563. Ответов 11
Метки нет (Все метки)

Здравствуйте!
Хочу сделать термометр как тут http://noprisar.at.ua/publ/posts/ter...44780/1-1-0-16. Все спаял - не заработало, на LCD ничего не выводится. Теперь хочу просто вывести на LCD сообщение "Hello!". Подключал по схеме с указанного выше сайта.

Atmega16
LCD wh0802a-yyh-ct (8x2)
Питание приходит и на контроллер и на lcd 5В.

Код программы для вывода "Hello!":
Код
#include <mega16.h>

#asm
.equ __lcd_port=0x12 ;PORTС
#endasm
#include <lcd.h>

void main(void)
{
lcd_init(8);

lcd_gotoxy(0,0);
lcd_putsf("Hello!");

while (1)
{
};
}
Hex файл получил в CodeVisionAvr. Прошивал через uniprof. Фьюз jtag отключен.
Помогите найти ошибку, пожалуйста.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2014, 19:23
Ответы с готовыми решениями:

ATMEGA16 и LCD на какие порты вешать?
Добрый день. Пытаюсь нарисовать Developer Board самопальную. (заводская выглядит так погуглите...

Подключение LCD WH1602B-YYH-CTK к Atmega16
Здравствуйте. Никак не могу связать LCD c микроконтроллером. Перелопатил кучу форумов, разобрался в...

Работа с LCD дисплеем HD44780 из МК Atmega16 (GCC)
Здравствуйте, пытаюсь подключить LCD дисплей к микроконтроллеру, скачал библиотеку, но уже на...

ATMega16
Привет обитателям данного портала! Я имею микроконтроллер с ATMEGA 16. Также знаю язык C#, но увы я...

Atmega16 + SD
Дорогие форумчане! Помогите, подскажите пожалуйста с данной задачей. Дино: 1. Плата...

11
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
20.01.2014, 19:44 2
Цитата Сообщение от motymitobtiid
Все спаял - не заработало, на LCD ничего не выводится.
Контраст покрутите, до инициализации экрана в верхней строке должны быть видны квадратики.

Цитата Сообщение от motymitobtiid
.equ __lcd_port=0x12 ;PORTС
PORTC имеет адрес 0х15
0
motymitobtiid
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 21
20.01.2014, 20:05 3
У меня нет переменного резистора, поэтому контраст у меня задается как на картинке


<Изображение удалено>

Поменял в коде порт С на 0x15, перепрошил - не помогло.

А можно как-то проверить исправность LCD, может я его угробил как-то уже?
0
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
20.01.2014, 20:21 4
Цитата Сообщение от motymitobtiid
У меня нет переменного резистора, поэтому контраст у меня задается как на картинке
Так не пойдёт, на VEE ноге должен быть потенциал на примерно 4.5 В меньше чем VDD, для 5В питания это порядка 0.5В.

Цитата Сообщение от motymitobtiid
А можно как-то проверить исправность LCD, может я его угробил как-то уже?
Просто подключить питание, при правильно установленном контрасте верхняя строчка будет в кубиках.
0
20.01.2014, 20:21
Гарнист
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
20.01.2014, 20:32 5
Заземлите вход контраста.
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
20.01.2014, 22:16 6
Цитата Сообщение от Гарнист
Заземлите вход контраста.
Не заземлить, а на минус питания ЖКИ. Опять же, в старых ЖКИ схема подключения контрастности требовала 2 полярного питания.
0
motymitobtiid
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 21
22.01.2014, 19:43 7
Спасибо всем за ответы, я поставил переменный резистор, но все равно ничего кроме полоски не выводится на экран. Не пойму где ошибка в программе, в протеусе все работает.
Код
#include <mega16.h>

#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>

void main(void)
{
PORTC=0x00;
DDRC=0xFF;

lcd_init(8);

lcd_gotoxy(0,0);
lcd_putsf("Hello!");

while (1)
{
};
}
0
Pymkvym
0 / 0 / 0
Регистрация: 21.10.2013
Сообщений: 1,520
22.01.2014, 23:48 8
Смотрю - люди чего то мучаются с экранчиками.
В свое время нагуглил либу, прописал свои пины и с пол-тычка завел экранчик.
Потом переписал либу под сдвиговый регистр - пашет, как трактор.
Вот тут смотрите файлы
lcd.c и lcd.h
либа рабочая 100%
lcd_dryver.h и lcd_dryver.c - это уже через сдвиговый реализация.

https://github.com/PymkvymOpenTag/LT...cetic_Atmego32
0
BorMys
0 / 0 / 0
Регистрация: 15.01.2012
Сообщений: 100
23.01.2014, 00:44 9
Цитата Сообщение от motymitobtiid
Спасибо всем за ответы, я поставил переменный резистор, но все равно ничего кроме полоски не выводится на экран. Не пойму где ошибка в программе, в протеусе все работает.
Ну что то типа того
Работающий пример на CodeVision, Miko16+LCD только на порту А
Код
#include <mega16.h>
#include <delay.h>
#include <stdyo.h>

#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>

void avr_init(void){
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
ACSR=0x80;
SFIOR=0x00;
};
void main(void)
{
avr_init();   //инициилизация Miko16
lcd_init(16); //инициилизация LCD

while(1) //бесконечный цикл
{
lcd_putsf("motymitobtiid");
delay_ms(500);
lcd_clear();
}
}
0
BykTiho
0 / 0 / 0
Регистрация: 12.04.2010
Сообщений: 3,260
23.01.2014, 06:52 10
Кроется мысль, что перепутано питание экрана, т.к. не все экраны имеют питание на одних и тех же выводах. Вернее сказать, питание как таковое там же, но изменены местами + и -
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
23.01.2014, 13:01 11
Цитата Сообщение от BykTiho
Кроется мысль, что перепутано питание экрана, т.к. не все экраны имеют питание на одних и тех же выводах. Вернее сказать, питание как таковое там же, но изменены местами + и -
Да, стОит проверить. Путаница всегда касается только выводов №№1,2 - это питание с общим проводом, чтО гдЕ - можно узнать прозвонкой с электролитическими конденсаторами на плате дисплея.

ТС, проверьте также, чтО возвращает вызов lcd_init(8) - у Вас в коде сейчас без проверки, а функция выдаёт статус успешности инициализации, воспользуйтесь этим.
И, если статус неуспешный, попробуйте заменить на lcd_init(16), просто для эксперимента. Тоже с проверкой.
0
motymitobtiid
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 21
23.01.2014, 19:07 12
Всем большое спасибо за ответы, все заработало, Hello! выводит. Я такой валенок, припаял RESIT через 10 кОм на GND и 2 дня не мог это увидеть.

<Изображение удалено>
0
23.01.2014, 19:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2014, 19:07

Atmega16
помогите пожалуйста! есть микроконтроллер atmega16. через ассемблер на PORTC подаем комбинацию...

Atmega16
изучаю прерывания, помогите понять что значит в начале памяти программ и в области загрузчика? ...

Копирование ATmega16
Добрый день, уважаемы форумчане. Передо мной стоит небольшая задача, скопировать flash и eeprom с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru