реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Atmega16+LCD 16*2 не могу прицепить, Начинающий просит помощи
Vny4ek
сообщение Jan 11 2008, 13:54
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 145
Регистрация: 11-01-08
Пользователь №: 34 001



Всем доброго времени суток! Есть небольшая просьба помочь разобраться!
Я только начинаю изучать АВР.
Установил CODEVISION и Proteus. В реале есть Атмега16-16 и 16символьный 2х строчный дисплей Bolymin. Хочу хотя бы вывести для начало на него Hello world, но не получается.
В кодвизион в примерах нашел вот такой исходник, который по идее это должен делать, в протеусе смоделировал устройство, но ничего не получается. Подскажите плиз чайнику в чем ошибка.
Подключил так:


// Исходник:
/*
LCD Demo

CodeVisionAVR C Compiler
© 2000-2007 HP InfoTech S.R.L.
www.hpinfotech.ro

Chip: ATmega8515
Memory Model: SMALL
Data Stack Size: 128 bytes

Use an 2x16 alphanumeric LCD connected
to the STK500 PORTC header as follows:

[LCD] [STK500 PORTC HEADER]
1 GND- 9 GND
2 +5V- 10 VCC
3 VLC- LCD contrast control voltage 0..1V
4 RS - 1 PC0
5 RD - 2 PC1
6 EN - 3 PC2
11 D4 - 5 PC4
12 D5 - 6 PC5
13 D6 - 7 PC6
14 D7 - 8 PC7
*/

// the LCD is connected to PORTC outputs
// see the file lcd.h in the ..\inc directory
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm

// include the LCD driver routines
#include <lcd.h>

void main(void)
{
// initialize the LCD for
// 2 lines & 16 columns
lcd_init(16);

// go on the second LCD line
lcd_gotoxy(0,1);

// display the message
lcd_putsf("Hello world");

// stop here
while (1);
}



p.s. Всем заранее спасибо кто поможет, и ткните плиз носом потом как построить меню на этом дисплее и 4 кнопочки вверх вниз энтер отмена
Go to the top of the page
 
+Quote Post
archi2000
сообщение Jan 11 2008, 14:07
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 38
Регистрация: 30-09-05
Пользователь №: 9 098



Пытался и я когда-то в Протеусе такую задачу выполнить - ничего не получилось. Спаял макет, залил прошивку и работало. Когда будешь работать с реальным ЖКИ, то нужно выставить контрастность, чтобы без посылки данных с процессора засветилась одна строчка. Это будет означать, что ЖКИ исправен.
Еще - при работе с реальным ЖКИ нужно правильно выполнить инициализацию. Некоторые типы ЖКИ этой процедурой инициализации (таймингами) отличаются.
Go to the top of the page
 
+Quote Post
Vny4ek
сообщение Jan 11 2008, 14:11
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 145
Регистрация: 11-01-08
Пользователь №: 34 001



Да дело в том что есть у меня одна прошивка, рабочего девайса там используется такой же дисплей, в протеусе все работает, он светит текст. Только там на порт Д все повешено, и у меня только прошивка той программы исходников нет, вот а хочется самому разобраться
Go to the top of the page
 
+Quote Post
archi2000
сообщение Jan 11 2008, 14:35
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 38
Регистрация: 30-09-05
Пользователь №: 9 098



Чтобы разобраться как работает ЖКИ тебе поможет этот симулятор
http://www.geocities.com/dinceraydin/djlcdsim/djlcdsim.html
По даташиту делаешь инициалазацию а затем выводишь символы.
Чтобы разобраться в твоем hex файле прошивки можно его дизасемблировать.
Также две статьи
http://www.atmel.ru/Spec/LCD.htm
http://www.atmel.ru/Articles/Atmel17.htm

Сообщение отредактировал archi2000 - Jan 11 2008, 15:04
Go to the top of the page
 
+Quote Post
Vny4ek
сообщение Jan 11 2008, 16:25
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 145
Регистрация: 11-01-08
Пользователь №: 34 001



Тоесть примеры кодвижена не подходят и нужна инициалицация для каждого типа дисплея своя? Зачем же тогда интересно привели такие примеры. Сейчас пробую разобраться с инициализацией

забыл, просто я читал другие источники ну типа пособия пошаговые для начинающих, там ничего небыло про инициализацию. Типа подключите дисплей, и откомплируйте код. Хотя может я не прав. Жду еще советов, точно ли в этом дело?
Go to the top of the page
 
+Quote Post
Дюс
сообщение Jan 11 2008, 17:24
Сообщение #6





Группа: Новичок
Сообщений: 7
Регистрация: 1-02-07
Пользователь №: 24 950



Проверь порты. Снизь частоту МК, дело может быть действительно в таймингах. Советую скачать даташит на Bolymin ЖК и сверить инициализацию. Прикрепляю описание на русском работы с подобными ЖК. ДУмаю пригодится.

PS В свое время писал библиотеки для winstar инициализация немного от МЭЛТ отличалось. Может и у Bolymin свои тараканы есть.

Удачи
Прикрепленные файлы
Прикрепленный файл  lcd.pdf ( 393.48 килобайт ) Кол-во скачиваний: 794
 
Go to the top of the page
 
+Quote Post
DiMomite
сообщение Jan 11 2008, 19:34
Сообщение #7


Участник
*

Группа: Свой
Сообщений: 47
Регистрация: 8-04-06
Из: Одесса
Пользователь №: 15 959



а почему у Вас в коде написано "Chip: ATmega8515", #include с именем камня в коде вообще никакого нет, а в Протеусе стоит Mega16 ?
Go to the top of the page
 
+Quote Post
backa
сообщение Jan 12 2008, 07:41
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 313
Регистрация: 15-06-05
Из: Минск
Пользователь №: 6 028



Я пробовал в Proteus - все работает.
Одно но - я писал сам все. На ассемблере и на С (IAR).
Работает как часы:-).
Особое внимание на выдержку временных интервалов!!!
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Jan 12 2008, 12:10
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



А вы порт С на выход сконфигурировали? Все работает. Для меги16 а не 8515. Вот:
Код
This program was produced by the
CodeWizardAVR V1.25.3 Professional
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

......



Moderator:
Cтоль обширные исходники (да еще сгененрированные роботом) оформленные не ввиде приложения удалены. Тем более, что тема избитая донельзя.....

Сообщение отредактировал zltigo - Jan 12 2008, 21:23


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Jan 12 2008, 13:34
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Попробуйте при инициализации портов добавить вот такие строки.
Код
MCUCSR |= 0x80;
MCUCSR |= 0x80;
Go to the top of the page
 
+Quote Post
KisaLove
сообщение Aug 25 2008, 12:28
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 5-05-06
Пользователь №: 16 807



Конечно поздно пишу, но сам с этим сталкивался - proteus не обрабатывал работу LCD в случае если используется mega16 и LCD, вешающийся на PORTC. Сам долго ломал голову, пока кто-то на этом сайте не написал про это. Теперь приходится в исходниках писать типа такого
Код
; EU KIT-Mega16
    .equ PORTC = 0x15
    .equ DDRC  = 0x14
    .equ PINC  = 0x13
    .equ PORTD = 0x12
    .equ DDRD  = 0x11
    .equ PIND  = 0x10
; proteus
;    .equ PORTC = 0x1B
;    .equ DDRC  = 0x1A
;    .equ PINC  = 0x13
;    .equ PORTD = 0x18
;    .equ DDRD  = 0x17
;    .equ PIND  = 0x16

То есть на время эмуляции "переназначать" адрес PORT'а C.

Может и криво ответил, но тем кто впервые сталкивается думаю поможет - надо в модели под протеусом просто повесить LCD на другой порт и переназначать адреса на момент эмуляции если в живой схеме хотите все таки на PORTC вешать. (правда это возможно если оставшиеся порты свободны smile.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 22:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01422 секунд с 7
ELECTRONIX ©2004-2016