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

 
 
> TIC8148+Atmega16, не отображаются данные на дисплее
roman@
сообщение Jun 18 2008, 18:21
Сообщение #1


Участник
*

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



Привет, к мк Atmega16-16PU я подсоединил жк дисплей TIC8148, питаюсь вывести информацию на него, но ничего не отображается.
DCLC - 1 port C
DIN - 0 port C
LOAD – 7 port D
Питание для жк использую от лпт порта, соединив землю жк с лпт и с землей мк. МК живится от стабилизатора (78L05) который подключен к ком порта.
Участок кода где просто питаюсь зажечь а потом погасить дисплей, порти перед этим настроил как выходи.
for(i=0;i<72;i++)
{
PORTD.7=0;
PORTC.1=0;
PORTC.0=1;
PORTC.1=1;
PORTD.7=1;
};
for(i=0;i<65000;i++)
{
};
for(i=0;i<72;i++)
{
PORTD.7=0;
PORTC.1=0;
PORTC.0=0;
PORTC.1=1;
PORTD.7=1;
};
for(i=0;i<65000;i++)
{};
Но одна интересная вещь когда торкаюсь пальцем к ножке CHK (ее не где не подключал) в некоторые промежутки времени (я так думаю в те промежутки времени когда мк должен зажечь жк) на дисплее зажигаются разные участки а потом эта ножка снова не реагирует некоторое время. В чем может бить проблема помогите мне очень интересно что не так делаю.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GoodNews
сообщение Mar 10 2012, 11:08
Сообщение #2


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

Группа: Участник
Сообщений: 88
Регистрация: 12-01-09
Из: Minsk (BY)
Пользователь №: 43 259



Добрый день, господа!
Разобравшись с даташитом к дисплею и с процедурой загрузки данных в 8148 решил реализовать отображение отдельных разрядов. Застрял на процедуре, реализующей бланкирование (пока не вешал её в прерывание дабы отработать однократное отображение разряда, а потом уже можно будет и остальное). Отображается цифра согласно знакоместу, сегмент D в восьмом разряде, под ним - символ подчеркивания (это то, что после инициализации), затем там же рядом появлятеся точка. Затем, при переборе массива lcd_buffer, us_buffer - отображаются цифры в первом (слева) разряде и символ подчеркивания отображается по-порядку слева на права. Точка не показывается в принципе. В чем ошибка? Мой код приведен ниже.
CODE
#ifndef F_CPU
#define F_CPU 8000000UL //8MHz
#endif
#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>
#include "lcd.h"
//#include "interrupts.h"

#define LCD_PORT PORTB
#define LCD_REGISTER DDRB
#define LCD_VDD_PIN 0
#define LCD_VSS_PIN 1
#define LCD_LOAD_PIN 2
#define LCD_DATA_PIN 3
#define LCD_CLK_PIN 4
#define LCD_CHK_PIN 5
#define LCD_POWER(flag) \
((flag)? (LCD_PORT |= ((1 << LCD_VDD_PIN) | (0 << LCD_VSS_PIN))): \
(LCD_PORT &= ~((1 << LCD_VDD_PIN) | (1 << LCD_VSS_PIN))))
#define LCD_CLOCK(flag) \
((flag)? (LCD_PORT |= (1 << LCD_CLK_PIN)): \
(LCD_PORT &= ~(1 << LCD_CLK_PIN)))
#define LCD_DATA(flag) \
((flag)? (LCD_PORT |= (1 << LCD_DATA_PIN)): \
(LCD_PORT &= ~(1 << LCD_DATA_PIN)))
#define LCD_LOAD(flag) \
((flag)? (LCD_PORT |= (1 << LCD_LOAD_PIN)): \
(LCD_PORT &= ~(1 << LCD_LOAD_PIN)))
static uint8_t init_complete = 0;
const uint8_t digit_buffer[10] = {
1+2+8+16+32+64,
64+32,
16+32+4+2+1,
16+32+4+64+1,
8+4+32+64,
16+8+4+64+1,
16+8+2+4+1+64,
16+32+64,
127,
127-2
};
static volatile uint8_t lcd_buffer[] = {
0, 0, 0, 0, 0, 0, 0, 0
};
static volatile uint8_t dp_buffer[] = {
0, 0, 0, 0, 0, 0, 0, 0
};
static volatile uint8_t us_buffer[] = {
0, 0, 0, 0, 0, 0, 0, 0
};
void lcd_strobe(uint8_t select_io) {
switch (select_io) {
case 0:
LCD_CLOCK(1);
_delay_us(1);
LCD_CLOCK(0);
_delay_us(1);
case 1:
LCD_LOAD(1);
_delay_us(1);
LCD_LOAD(0);
_delay_us(1);
default:
break;
}
}
void write_data(void) {
uint8_t dp = 0;
uint8_t underscore = 0;
uint8_t data = 0;
for (uint8_t i = 8; i > 0; i--) {
dp = dp_buffer[i];
lcd_strobe(0);
if (dp)
LCD_DATA(1);
else
LCD_DATA(0);
for (uint8_t j = 8; j > 0; j--) {
underscore = us_buffer[j];
lcd_strobe(0);
if (underscore)
LCD_DATA(1);
else
LCD_DATA(0);
data = lcd_buffer[j];
for (uint8_t z = 8; z > 0; z--) {
lcd_strobe(0);
if (data & 0x40)
LCD_DATA(1);
else
LCD_DATA(0);
data = data << 1;
}
}
}
lcd_strobe(1);
}
void clear_buffers(void) {
for (uint8_t i = 0; i < sizeof(dp_buffer); i++) {
dp_buffer[i] = 0;
}
for (uint8_t i = 0; i < sizeof(us_buffer); i++) {
us_buffer[i] = 0;
}
for (uint8_t i = 0; i < sizeof(lcd_buffer); i++) {
lcd_buffer[i] = 0;
}
}
void init_lcd(void) {
if (!init_complete) {
LCD_REGISTER = 0x1F;
LCD_POWER(1);
init_complete = 1;
}
for (uint8_t i = 0; i < 10; i++) {
clear_buffers();
lcd_buffer[1] = digit_buffer[i];
if (i < 9) {
us_buffer[i] = 1;
dp_buffer[i] = 1;
}
write_data();
_delay_ms(1000);
}
}


Сообщение отредактировал GoodNews - Mar 10 2012, 15:45
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- roman@   TIC8148+Atmega16   Jun 18 2008, 18:21
- - at90   Давно работал с этим ЖК. Он устроен как большой сд...   Jun 18 2008, 19:09
- - roman@   Сделал как посоветовали но у меня на экране только...   Jun 18 2008, 19:59
- - biDE   1.Там сдвиговый регистр 80-ти битный: первые 72 би...   Jun 18 2008, 20:21
- - roman@   Я проверял сперва жк на лпт порте и там работало ...   Jun 18 2008, 20:51
|- - biDE   Цитата(roman@ @ Jun 18 2008, 23:51) Я про...   Jun 18 2008, 20:57
- - roman@   Не работает дальше , может надо время задержки уве...   Jun 18 2008, 21:39
|- - rx3apf   Цитата(roman@ @ Jun 19 2008, 01:39) Не ра...   Jun 19 2008, 18:21
- - roman@   Мне просто понравилась электроника и начал недавн...   Jun 19 2008, 20:52
- - VDD   ну так ты победил этот индикатор или нет? у меня а...   Jan 20 2009, 21:49
- - VDD   примерно так и делаю. только лоад даю после посыл...   Jan 21 2009, 21:15
- - akl   Здравствуйте. Вас не затруднит протестировать прог...   Jan 22 2009, 08:56
- - VDD   победил уродца... написал на с десяток функций для...   Feb 2 2009, 21:07
- - bukh86   Здраствуйте. Только осваиваюсь и учусь программир...   Nov 2 2009, 07:27


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

 


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


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