SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проблема

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Vlad0o
Открыл глаза
Сообщения: 67
Зарегистрирован: Вт июл 19, 2011 19:09:46

SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проблема

Сообщение Vlad0o »

Здравствуйте.
Я новичок в программировании MCU.
У меня на руках что то вроде KIT'a. USB debug adapter, LCD 16x2 dv16210, с8051а314, несколько реле, кнопок и светодиодов. Он рабочий и исправно показывал время. (мне он таким достался). я постепенно учусь. сначала запускал примеры, поправляя их под конфигурации "сборки". И я постепенно подошел к тому чтоб что-то вывести на ЛСД экран. перерыл кучу примеров, кстати ЛСД подключен по 4 битному интерфейсу.

распиновка:
Р3.1 - d4
Р3.2 - d5
Р3.3 - d6
Р3.4 - d7

Р1.4 - E
Р1.3 - RS

(RW - GND)

так вот нашел я пример для PIC Microcontroller (PIC18F4550).
и переделал... вот что получилось:



#include "C8051F310.h"

//-----------------------------------------------------------------------------
// Pin Declarations
//-----------------------------------------------------------------------------
#define lcdport P3

sbit rs = P1^3;

sbit en = P1^4;

unsigned int i=0;

unsigned char data0[] = "Hello world";
//-----------------------------------------------------------------------------
// Function Prototypes
//-----------------------------------------------------------------------------

void OSCILLATOR_Init (void);
void PORT_Init (void);
void DDD (unsigned long); //задержка 245000=1 секунда
void lcd_ini();
void dis_cmd(unsigned char);
void dis_data(unsigned char);
void lcdcmd(unsigned char);
void lcddata(unsigned char);
//-----------------------------------------------------------------------------
// main() Routine
//-----------------------------------------------------------------------------

void main (void)
{


PORT_Init(); // Initialize Port I/O
OSCILLATOR_Init (); // Initialize Oscillator
////////////////////////////////////////////////////////
// unsigned char data0[] = "HELLO World"; ////
// unsigned int i=0; ////
/////////////////////////////////////////////////////

P3 = 0;
lcd_ini(); // LCD initialization
while(data0!='\0')
{
dis_data(data0); //вывод по букве с задержкой в 100мс
DDD(24500); //100мс задержка
i++;
}
}

//-----------------------------------------------------------------------------
// Initialization Subroutines
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// OSCILLATOR_Init
//-----------------------------------------------------------------------------
void OSCILLATOR_Init (void)
{
OSCICN |= 0x03; // Configure internal oscillator for
// its maximum frequency (24.5 Mhz)
}

//-----------------------------------------------------------------------------
// PORT_Init
void PORT_Init (void)
{
P1MDOUT = 0x18;

P3MDOUT = 0x1E;
XBR1 = 0x40; // Enable crossbar and enable
// weak pull-ups
}

void DDD (unsigned long n) //задержка
{
while(n--); //delay
{
}
}

void lcd_ini()
{
dis_cmd(0x02); // To initialize LCD in 4-bit mode.
dis_cmd(0x28); // To initialize LCD in 2 lines, 5x7 dots and 4bit mode.
dis_cmd(0x0C);
dis_cmd(0x06);
dis_cmd(0x80);
}

void dis_cmd(unsigned char cmd_value)
{
unsigned char cmd_value1;
cmd_value1 = (cmd_value & 0xF0); // Mask lower nibble because RB4-RB7 pins are being used
lcdcmd(cmd_value1); // Send to LCD
cmd_value1 = ((cmd_value<<4) & 0xF0); // Shift 4-bit and mask
lcdcmd(cmd_value1); // Send to LCD
}

void dis_data(unsigned char data_value)
{
unsigned char data_value1;
data_value1=(data_value&0xF0);
lcddata(data_value1);
data_value1=((data_value<<4)&0xF0);
lcddata(data_value1);
}


void lcdcmd(unsigned char cmdout)
{
lcdport = cmdout; //Send command to lcdport=PORTB
rs = 0;
en = 1;
DDD(2450); //10мс
en = 0;
}


void lcddata(unsigned char dataout)
{
lcdport=dataout; //Send data to lcdport=P3
rs=1;
en=1;
DDD(2450); //10мс
en=0;
}

Вот как то так...

Вроде все правильно сделал. ошибок больше не выводит компилятор, но на экране ничего не появляется.

Помогите пожалуйста. мне надо заставить его выводить текст на экран.
Реклама
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

Сообщение Ser60 »

Я думаю, что у Вас неправильно могут быть настроены пути Project -> Tool Chain Integration. Я только что успешно прокомпилировал Ваш код.

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

Invoking project defined compiler.
C:\SiLabs\MCU\IDEfiles\C51\BIN\C51.exe "test314.c" DB OE BR INCDIR(C:\SiLabs\MCU\Inc)  
.

C51 COMPILER V8.18 - SN: Eval Version
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2009

C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)
Link in progress...
C:\SiLabs\MCU\IDEfiles\C51\BIN\BL51.EXE @"C:\Documents and Settings\Sergei\My Documents\C8051\cyglink.txt"


BL51 BANKED LINKER/LOCATER V6.20 - SN: Eval Version
COPYRIGHT KEIL ELEKTRONIK GmbH 1987 - 2009
"C:\Documents and Settings\Sergei\My Documents\C8051\test314.obj"  TO "C:\Documents and Settings\Sergei\My Documents\C8051\test314" RS(256) PL(68) PW(78)  

******************************************************************************
* RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 00B6H BYTE ( 8%) *
******************************************************************************

>> 
>> 
>> 
Program Size: data=21.0 xdata=0 code=358
LINK/LOCATE RUN COMPLETE.  0 WARNING(S),  0 ERROR(S)
Если с путями все ОК, сделайте Project -> Rebuild Project и приведите весь вывод из окна Build.
Реклама
Vlad0o
Открыл глаза
Сообщения: 67
Зарегистрирован: Вт июл 19, 2011 19:09:46

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

Сообщение Vlad0o »

спасибо. все компилится. кроме настроек были дурацкие ошибки в тексте программы. однако экран до сих пор не инициализировался. горит верхняя строчка из 16 прямоугольников и все.
у меня опять тупик)


Вот вроде бы все "нормально" (листинг в первом сообщении нормально компилится и загружается), но LCD не работает...
Vlad0o
Открыл глаза
Сообщения: 67
Зарегистрирован: Вт июл 19, 2011 19:09:46

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

Сообщение Vlad0o »

Может у кого то есть опыт работы silabs+LCD ???

ЗЫ если задержка между командами на пример должна быть 50 микросекунд, а вместо этого она 10миллисекунд. это может быть причиной?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

Сообщение Ser60 »

Silabs здесь непричем. Мне кажется у Вас неправильный алгоритм инициализации
LCD. Если он совместим с HD44780, посмотрите, например, здесь на стр. 46.
http://www.sparkfun.com/datasheets/LCD/HD44780.pdf

Именно, не хватает задержки на 15 мсек по включении, нет посылки трех команд
0х03, и т.п. Кроме того, после каждой посылки данных нужна задержка как
минимум на 4.7 мс, причем не на время стробирующего сигнала en, а после него
(у Вас ее в коде нет), а после посылки любой команды нужна задержка на 180
мксек или более.
Реклама
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

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

Мяу всем..
При меры и описания можно тут посмотреть: http://www.silabs.ru/sources.php

Если на Си, то смотри прикрепление..
Вложения
LCD-F330-DS18B20-v100.rar
(51.92 КБ) 280 скачиваний
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Реклама
Vlad0o
Открыл глаза
Сообщения: 67
Зарегистрирован: Вт июл 19, 2011 19:09:46

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

Сообщение Vlad0o »

2 Ser60
буду разбираться с инициализацией.

2 МитяРа
LCD-F330-DS18B20-v100.rar я его качал, проект на ассемблере написан. его я в первую очередь достал


Я еще несколько примеров смотрел и везде используется LCDport (у меня это Р3, его Биты 1,2,3,4) и отправляются посылки-полубайты части d4-d7. т.е. команде в HEX 0x02 соответствует команда в BIN 00000010. и по LCDport отправляется 0010, т.е. на d7=0 d6=0 d5=1 d4=0. я правильно понял? если да, то вполне можно не делать в программе LCDport, а просто объявить порты для d4-d7 и побитно отправлять команды? но тогда как отправлять текст, т.е. буквы. в этом случаи каждую букву придется "вручную" отправлять?

Извиняюсь. возможно что то некорректно описал.
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

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

Мя с Си совсем не дружу - пишу строго на Асме..
Vlad0o писал(а):отправляется 0010, т.е. на d4=0 d5=0 d6=1 d7=0. я правильно понял?
Бит D7 самый старший, он-же левый..
Т.е. твои 0010 должны быть d7=0 d6=0 d5=1 d4=0

Не знаю, что такое LCDport, но побитно отправлять тетраду, это изврат..

Посмотри, как делается в программе LCD16x1x4b.asm, там все подробно написано и если надо, то можно это в Си перевести..

P.S. Посмотрю, как помнится были примеры на Си..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Vlad0o
Открыл глаза
Сообщения: 67
Зарегистрирован: Вт июл 19, 2011 19:09:46

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

Сообщение Vlad0o »

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

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

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

Мя вспомнил, где видел прогу на Си для LCD-шника.. Это в книге Николайчука ещё от 2002 года.. там в конце примеры есть, правда для шины данных 8 бит..
Вот глава из более новой его книги: http://www.silabs.ru/pubs/G14.pdf

А зачем вообще применять 4-битный интерфейс для индикатора, неужели ножек не хватает ?
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Vlad0o
Открыл глаза
Сообщения: 67
Зарегистрирован: Вт июл 19, 2011 19:09:46

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

Сообщение Vlad0o »

Спасибо. сейчас посмотрю.

А ножек действительно не хватает. И он у меня уже так был подключен.
В с8051f314 у Р3 всего 4 пина, остальные порты заняты кнопками, реле, оптронами, светодиодами, датчиком температуры...

Я тут еще с инициализацией повозился:

void lcd_ini()
{
DDD(2450);
DDD(245);
DDD(245);
DDD(245);
DDD(245);
DDD(245);//15мс задержка после включения

dis_cmd(0х03);

DDD(245);
DDD(245);
DDD(245);
DDD(245);
DDD(245);//5мс задержка

dis_cmd(0х03);

DDD(245);
DDD(35);//1,7 мс задержка

dis_cmd(0х03);
DDD(245);
DDD(35);//1,7 мс задержка

dis_cmd(0x02);
DDD(245);
DDD(35);//1,7 мс задержка



//dis_cmd(0x02); // To initialize LCD in 4-bit mode.
dis_cmd(0x28); // To initialize LCD in 2 lines, 5x7 dots and 4bit mode.
DDD(245);
DDD(245);
DDD(245);;//5 мс задержка
DDD(245);
DDD(245);
dis_cmd(0x0C);
DDD(245);
DDD(245);//5 мс задержка
DDD(245);
DDD(245);
DDD(245);
dis_cmd(0x06);
DDD(245);
DDD(245);
DDD(245);
DDD(245);
DDD(245);//5 мс задержка
dis_cmd(0x80);
}

так при компиляции он выдает 3 ошибки *** ERROR C100 : unprintable character 0xF5 skipped, на строки с dis_cmd(0х03);
пока не нашел как избавиться от этого.
Vlad0o
Открыл глаза
Сообщения: 67
Зарегистрирован: Вт июл 19, 2011 19:09:46

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

Сообщение Vlad0o »

Спасибо за книжку. надо будет ее прочитать.
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

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

У мя ещё самая первая книга, ещё по Cygnal, а потом была "потолще" и уже по SiLabs-ам..
Мя интересно на твою схему глянуть..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Vlad0o
Открыл глаза
Сообщения: 67
Зарегистрирован: Вт июл 19, 2011 19:09:46

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

Сообщение Vlad0o »

А можно название толстой книги по Silabs'ам?

Как приедет тот кто дал мне эту сборку, попрошу схему нарисовать. Навороченная она жуть мне не разобраться :cry:.
Могу только примерно комплектацию написать.
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

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

Она так-же и называется "x51-совместимые микроконтроллеры фирмы Silicon Laboratories (Cygnal)."
вот тут есть некоторые главы из неё: http://www.silabs.ru/publication.php
Есть ещё одна, другого автора: http://books.tr200.ru/v.php?id=482265
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Vlad0o
Открыл глаза
Сообщения: 67
Зарегистрирован: Вт июл 19, 2011 19:09:46

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

Сообщение Vlad0o »

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

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

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

Что-бы он показывал, его надо настроить со всеми необходимыми задержками и правильно подключить..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Vlad0o
Открыл глаза
Сообщения: 67
Зарегистрирован: Вт июл 19, 2011 19:09:46

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

Сообщение Vlad0o »

я тут ковырял код http://www.silabs.ru/pubs/G14.pdf

и у меня возник вопрос по некоторым строкам:

#define LCD_DATA P2 // Байт шины данных LCD
#define LCD_DATA_CF PRT2CF // Регистр настройки порта шины LCD
....
.....
...


void Set_Data (byte CH) // Выставить данные на шину
{
LCD_DATA_CF=0xFF;
LCD_DATA=CH;
}


я пытался повторить это, но у меня выдает 'PRT2(в моем случаи 3 )CF': undefined identifier



Еще я перебирал вот это http://invent-systems.narod.ru/shkola1.htm

там тоже встречается подобное:

#define LCD PORTD // определение порта
#define LCD_TRIS TRISD
....
...

LCD_TRIS = 0x0F; // настройка R0--R4 на ввод

поскольку я в предыдущих "такое" не использовал, то у меня складывается впечатление, что причина как раз тут, ну, и конечно в неправильных командах инициализации.

Может вы знаете, что это и как правильно с этим работать?
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

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

Насчёт Си ничего не скажу, но если порты настроены неправильно, то даже при верной программе можно ничего с них не прочитать правильно..

P.S. Насчёт Си, отправь в личку приглашение Chip115 - он на Сях писал недавно.. http://radiokot.ru/forum/viewtopic.php? ... 1&start=80
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: SiLabs c8051f314 + LCD DV16210 Не могу понять в чем проб

Сообщение Ser60 »

Книга Гладштейна, что рекомендовал МитяРа очень толковая, рекомендую. Еще есть книга по Силабовским контроллерам, написанная инженерами Силабс http://www.silabs.com/Marcom%20Document ... xtbook.zip. Правда, к сожалению обе книги довольно старые и не покрывают новые МК серии C8051F9xx, с кот. я сейчас работаю. Но Ваши F3xx там описаны нормально.

Кстати, Вы уверены, что функция DDD выдает требуемые задержки. Как Вы это проверили?

Пример выше заточен под PIC. Это его типичные имена регистров TRISD и т.п. Присоединяюсь к совету МитяРа освоить АСМ. Программа выдачи на ЖКИ подразумевает лишь пересыклу байтов или полубайтов, С здесь отдыхает. Ну или на худой конец разберитесь как интегрировать АСМ и С и используйте код работы с ЖКИ разработанный силлабовцами. Посмотрите даташит своего ЖКИ. Для некоторых из них фирма-изготовитель описывает алгоритм инициализации и работы с ним, включая примеры на С.
Закрыто

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