LCD и микроконтроллер SiLabs

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пт ноя 20, 2009 16:27:43

Сообщение goodking »

Привет! Помогите разобратся с ЖКИ, подключил правильно, но на экран ничего не выводится, горит только верхняя строка ;микроконтроллер SiLabs C8051F120, индикатор PYC1602AHW-SYL

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

#include "c8051F120.h"
#include <string>

sbit LCD_rs=P7^4;
sbit LCD_rw=P7^2;
sbit LCD_en=P7^0;
#define LCD_data P6

void Port_IO_Init(void);
void LCD_init(void);
void LCD_command(unsigned char var);
void LCD_busy(void);
void LCD_senddata(unsigned char var);
void LCD_sendstring(unsigned char *var);
void LCD_build();
unsigned char Mas[40];

 void main (void)
  {
    int i;
    
    WDTCN     = 0xDE;
    WDTCN     = 0xAD;
    Port_IO_Init();
    LCD_init ();
    LCD_build();
	for(i =0;i<35;i++) Mas[i] = 0;
	strcpy(Mas,"0123456789ABCDEFGHJKL");
   LCD_sendstring (Mas);
   while (1) {};
  

   }
   
  void Port_IO_Init(void)
{
    SFRPAGE   = CONFIG_PAGE;
    P6MDOUT   = 0xFF;
    P7MDOUT   = 0x15;
    XBR2      = 0xC0;

}


void LCD_init(void)
{LCD_data = 0x38;// 2 линии 8 бит 5х8 точек
 LCD_rs = 0;// обработка данных как инструкций
 LCD_rw = 0; // запись данных в ЖКИ
 LCD_en = 1;
 LCD_en = 0;
 LCD_busy(); //пауза для обработки команд
 LCD_data = 0x0F;//включить дисплей, курсор
 LCD_rs  = 0;
 LCD_rw = 0;
 LCD_en = 1;
 LCD_en = 0;
 LCD_busy();
 LCD_data = 0x01;
 LCD_rs = 0;
 LCD_rw = 0;
 LCD_en = 1;
 LCD_en = 0;
 LCD_busy();
 LCD_data = 0x06;//режим введения авто увиличение без сдвига
 LCD_rs = 0;
 LCD_rw = 0;
 LCD_en = 1;
 LCD_busy();

}


void LCD_busy()
{unsigned char i,j; 
for(i=0;i<50;i++) //A simple for loop for delay 
for(j=0;j<255;j++);
}


void LCD_command(unsigned char var)
{
 LCD_data = var;
 LCD_rs = 0;
 LCD_rw = 0;
 LCD_en = 1;
 LCD_en = 0;
 LCD_busy();
}


void LCD_sendstring(unsigned char *var)
{ while(*var) //till string ends 
LCD_senddata(*var++); //send characters one by one 
}


void LCD_build()
{
LCD_command(0x48); //Load the location where we want to store 
LCD_senddata(0x32); //Load row 1 data 
LCD_senddata(0x0E); //Load row 2 data 
LCD_senddata(0x0E); //Load row 3 data 
LCD_senddata(0x0E); //Load row 4 data 
LCD_senddata(0x1F); //Load row 5 data 
LCD_senddata(0x00); //Load row 6 data 
LCD_senddata(0x04); //Load row 7 data 
LCD_senddata(0x00); //Load row
}



void LCD_senddata(unsigned char var)
{
 LCD_data = var;
 LCD_rs = 1;
 LCD_rw = 0;
 LCD_en = 1;
 LCD_en = 0;
 LCD_busy();
}


Подскажите, с чем это может быть связано?? вот ссылка на данные по ЖКИ

http://zefiryn.tme.pl/dok/a06/pyc1602a-series-1.pdf
Реклама
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

Мя в Си не силён, но сразу вопрос - а порты настроены, на соответствующий ввод,вывод и прочее ?
..
Программу сам писал или откуда-то брал ?
Можешь тут посмотреть: http://www.silabs.ru/publication.php
..
Обычно с LCD всё работает сразу...
Реклама
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пт ноя 20, 2009 16:27:43

Сообщение goodking »

МитяРа писал(а):Мя в Си не силён, но сразу вопрос - а порты настроены, на соответствующий ввод,вывод и прочее ?
Я установил все порты в режим push-pull(по моему так правильно)
..
МитяРа писал(а): Программу сам писал или откуда-то брал ?
Можешь тут посмотреть: http://www.silabs.ru/publication.php
..
Обычно с LCD всё работает сразу...
частично сам, частично пользовался примерами, но вроде как все правильно (относительно назначения регистров и т.д.) только вот почему-то не проходит инициализация ЖКИ :( вот тот пример, который я использовал http://www.coe.uncc.edu/~sjkuyath/ETEE2 ... torial.pdf
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

goodking..
Я установил все порты в режим push-pull(по моему так правильно)
Попробуй проверить, а настроены-ли они.. Просто вместо вывода на LCD выводи в порт 00h, потом FFh и посмотри осциллографом..
Мя сам недавно стал SiLabs осваивать, а до этого только с "классикой" занимался.. http://radiokot.ru/forum/viewtopic.php?p=304409#304409
..
только вот почему-то не проходит инициализация ЖКИ
Могу предположить, что не хватает времени на команду..
Т.е. твой пример рассчитан на классику, а СиЛабс - гораздо быстрее, а т.к. все задержки в программе
формируются простыми циклами, то индикатору просто не хватает времени между двумя командами, что-бы закончить инициализацию..
А на неё надо кучу миллисекунд...
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пт ноя 20, 2009 16:27:43

Сообщение goodking »

МитяРа писал(а):goodking..
Я установил все порты в режим push-pull(по моему так правильно)
Попробуй проверить, а настроены-ли они.. Просто вместо вывода на LCD выводи в порт 00h, потом FFh и посмотри осциллографом..
Я в отладочном окне глянул-все норм

..
МитяРа писал(а): Могу предположить, что не хватает времени на команду..
Т.е. твой пример рассчитан на классику, а СиЛабс - гораздо быстрее, а т.к. все задержки в программе
формируются простыми циклами, то индикатору просто не хватает времени между двумя командами, что-бы закончить инициализацию..
А на неё надо кучу миллисекунд...
Спасибо, сейчас попробую разобратся :))
Реклама
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

goodking..
Я в отладочном окне глянул-все норм
:shock: Ты на порту посмотри.. он у тя что нить выводит или как ?
Реклама
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пт ноя 20, 2009 16:27:43

Сообщение goodking »

МитяРа писал(а):goodking..
Я в отладочном окне глянул-все норм
:shock: Ты на порту посмотри.. он у тя что нить выводит или как ?
Ну так я и говорю, в отладочном окне видны значения всех регистров портов при работе программы, вроде все совпадает! :)
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

goodking..
в отладочном окне видны значения всех регистров портов при работе программы, вроде все совпадает!
:shock: :)
а) Проверь, после твоей настройки портов МК выводит что нить в порт физически ?
..
б) Вот кусок программы:

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

//**********************************************************************
void LCD_Init (void)
{
	LCD_EN(0);
	LCD_DC(0);
	LCD_RW(0);
	Time(500);
	LCD_Put (0x38);	/* Function (0x20) + 8-bit (0x10) + Two-Line (0x08) */
	Time(200);
	LCD_Put (0x38);
	Time(100);
	LCD_Put (0x38);	/* Function (0x20) + 8-bit (0x10) + Two-Line (0x08) */
	Time(100);
	LCD_Reset();
}
..
Видишь, там стоят конкретные задержки после команд инициализации дисплея, а в твоей проге - мя их не нашёл...
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пт ноя 20, 2009 16:27:43

Сообщение goodking »

МитяРа писал(а):goodking..
в отладочном окне видны значения всех регистров портов при работе программы, вроде все совпадает!
:shock: :)
а) Проверь, после твоей настройки портов МК выводит что нить в порт физически ?
..
б) Вот кусок программы:

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

//**********************************************************************
void LCD_Init (void)
{
	LCD_EN(0);
	LCD_DC(0);
	LCD_RW(0);
	Time(500);
	LCD_Put (0x38);	/* Function (0x20) + 8-bit (0x10) + Two-Line (0x08) */
	Time(200);
	LCD_Put (0x38);
	Time(100);
	LCD_Put (0x38);	/* Function (0x20) + 8-bit (0x10) + Two-Line (0x08) */
	Time(100);
	LCD_Reset();
}
..
Видишь, там стоят конкретные задержки после команд инициализации дисплея, а в твоей проге - мя их не нашёл...
У меня LCD_busy(для задержки)
Ща проверю
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

goodking..
У меня LCD_busy(для задержки)
busy обычно не задержка, а готовность дисплея.. есть флаг такой..
Но на деле им редко пользуются и просто формируют задержку...
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пт ноя 20, 2009 16:27:43

Сообщение goodking »

Порт проверил- работает, но я знал, что дело не в нем
МитяРа писал(а):goodking..
У меня LCD_busy(для задержки)
busy обычно не задержка, а готовность дисплея.. есть флаг такой..
Но на деле им редко пользуются и просто формируют задержку...
Ну да, там ничего не опрашивается, а просто пустой цикл
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

goodking , а вот такой осторожный вопрос: а ты пёсика на цепь посадил ?
В смысле - ватч-дог запретил ?
А то, в твоей проге об этом - ни строчки нету... :) :tea:
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вт авг 14, 2007 14:46:45
Откуда: Москва

Сообщение Freiwind »

Собака запрещена:
WDTCN = 0xDE;
WDTCN = 0xAD;
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

Freiwind и goodking у кого раздвоение личности ? :)) :tea:
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вт авг 14, 2007 14:46:45
Откуда: Москва

Сообщение Freiwind »

Все целы. :)
Я просто листинг глянул.
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

Ааа.. мя просто в Сях не воспринимаю что там делается, не могу представить..
goodking ты куда пропал ?
Мы с Freiwind-ом ждём ответов, как у тя дела ?
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пт ноя 20, 2009 16:27:43

Сообщение goodking »

МитяРа писал(а):Ааа.. мя просто в Сях не воспринимаю что там делается, не могу представить..
goodking ты куда пропал ?
Мы с Freiwind-ом ждём ответов, как у тя дела ?
Привет привет! :)) :)) да нормально все, думаю, как правильно инициализировать
Модератор
Аватара пользователя
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Сообщение МитяРа »

Мяу goodking..
Может это чем поможет:
Вложения
ONIC_LCD.rar
(140.06 КБ) 163 скачивания
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пт ноя 20, 2009 16:27:43

Сообщение goodking »

МитяРа писал(а):Мяу goodking..
Может это чем поможет:
Спасибо, сейчас посмотрим..
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пт ноя 20, 2009 16:27:43

Сообщение goodking »

Все понял, таки с портами проблема, а именно с управляющими сигналами (LCD_rs; LCD_rw; LCD_en ) то-есть при работе программы они почему-то вообще не изменяются :( хотя они сконфигурированы так же как и шина данных..
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»