Easyelectronics.ru

Электроника для всех
Текущее время: 23 сен 2019, 05:58

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 134 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 27 авг 2012, 16:10 
Администратор
Аватара пользователя

Зарегистрирован: 16 янв 2010, 06:09
Сообщения: 6273
Откуда: Челябинск
;-----------------------------------------------
; HEX TO ASCII
;-----------------------------------------------
;input: R16 = 8 bit value 0 ... 255
;output: R18, R17, R16 = digits
;bytes: 20

Hex2Ascii: LDI r18,-1+'0'
_bcd1: INC r18
SUBI r16,100
BRCC _bcd1
LDI r17,10+'0'
_bcd2: DEC r17
SUBI r16,-10
BRCS _bcd2
SBCI r16,-'0'
RET

_________________
Хозяин дома


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 27 авг 2012, 23:40 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 4088
Откуда: г. Липецк
Собственно сам макрос:
Код:
;------------------ MACROS ------------------------------------------------------------
.MACRO BinToBCD            ; двоично-десятичное преобразование
; BinToBCD kff, reg; r16 - исходный двоичный байт
; kff - делитель; reg - BCD результат       
   ldi   @1, -1            ;   
$MCR_DGT:   
   inc   @1            ;
   subi   r16, @0         ;
   brsh   MCR_DGT         ;
   subi   r16, -@0         ;
.ENDM
; -------------------------------------------------------------------------------------
Как его применять:
Код:
; -------------------------------------------------------------------------------------
   BinToBCD 100, r18         ; BCD старшая цифра
   BinToBCD 10, r17         ; BCD средняя цифра
;                  ; BCD младшая цифра осталась в r16
; -------------------------------------------------------------------------------------

А вывод кода неупакованного BCD на дисплей зависит от его типа (дисплея). Если требуются ASCII символы, перед выводом добавляете к цифре $30 (0x30h).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 10 сен 2012, 09:34 
Заглядывает иногда

Зарегистрирован: 24 авг 2012, 09:06
Сообщения: 67
Откуда: Златоуст
А как очистить содержимое экрана.
Пробовал LCDCLR и wr_cmd 0x01 (очистка экрана), что вроде бы по сути одно и тоже, но старое как было, так и осталось.

Вообще бред какой то творится. Перепрошил мк демкой, все оk. Удалил из своей вообще все символьные надписи, оставил только единождный вывод значения регистра. Прошил... ВСЕ СТАРНЫЕ НАДПИСИ ВЕРНУЛ!!!!! .... откуда он ее берет?!?! На вывод регистра ему вообще пофиг...
.... и как оказалось ему теперь вообще на все пофиг. Он ничего нового вообще не пытается выводить, та надпись как влилась в него....

С утра пришел, включил, все работает, не менял вообще ничего......


Последний раз редактировалось Biggy 11 сен 2012, 08:16, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 10 сен 2012, 11:54 
Заглядывает иногда

Зарегистрирован: 24 авг 2012, 09:06
Сообщения: 67
Откуда: Златоуст
В демо программе в основном файле есть такое
Код:
TextLine1:   .byte               DWIDTH   ; Видеопамять. Длина ее зависит от ширины экрана
TextLine2:   .byte               DWIDTH   ; Ширина указана в lcd4_macro.inc, в самом конце.

в данном файле не нашел данной константы (DWIDTН)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 11 сен 2012, 13:44 
Заглядывает иногда

Зарегистрирован: 24 авг 2012, 09:06
Сообщения: 67
Откуда: Златоуст
При попытке осознания того, как в дисплей запихнуть фразу типа
Код:
t_Normal1:      .db   "Pinboard II     "


нашел такое
Цитата:
DI HALT говорит:
5 Июнь 2012 в 9:09

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

Причем я рекомендую следующий метод: Сделай видео память. Область памяти длинной Х*У байт, под размер дисплея. И все данные пиши туда. А раз десять-двадцать в секунду, параллельным потоком, по таймеру или еще как, эту видеопамять пропихивай в дисплей. В результате ты не будешь тратить драгоценное время проца на бессмысленные таскания данных туда сюда. Проще в видео память писать.

Возникла пара вопросов.
1. Что за память программ? Это имелась ввиду флеш? (ну или еепром на худой конец). Или это какая то особая.
2. Как сделать видеопамять? Где отвести под нее место (в РОН)??

Я понимаю что в демо-программе все это реализовано. Понимаю, что там построено все грамотно, код вылизан до мелочей, программа близка к идеалу. Но там целая операционка, новичку тяжело понять что там вообще творится. Посему еще вопрос такой, можете ли выложить процедуру работы с такими данными, чтобы запихнуть их в дисплей. Или хотя бы дать подробный словесный алгоритм как это сделать. По простому. Без всяких наворотов RTOS.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 11 сен 2012, 14:50 
Заглядывает иногда

Зарегистрирован: 24 авг 2012, 09:06
Сообщения: 67
Откуда: Златоуст
Завалил, конечно, уже вопросами. Но чем больше делаю, тем меньше начинаю понимать. Хотел просто вывести регистр на экран через процедуры преобразования в аскии... выводит бред, хотел число, ... выводит бред.... пошел совсем по простому.
Код:
ldi R17,0x31
LCD_COORD 0,0
rcall data_wr

ldi R17,0x31
LCD_COORD 1,0
rcall data_wr


и так до 15 позиции 1 строки. Все, больше в программе ничего нету. Результат скрином ниже
Изображение

Нажал перезагрузку, единственная 1 превратилась в ||.
В начале все инициализации есть, осознанно взял с РТОС-демки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 11 сен 2012, 20:12 
Старожил
Аватара пользователя

Зарегистрирован: 04 июл 2012, 21:07
Сообщения: 206
Откуда: Казахстан, Аксу.
Я поначалу думал что запустить LCD для меня будет проблема, но завёлся он у меня с первого раза. Нарвался как-то на статью http://cxem.net/mc/mc89.php и по подобию состряпал свою программу. Там нет библиоткеи как таковой, там наборы ПП, что для меня оказалось легче чем юзать готовую библу. Было всё прозрачно и стало понятно, переписал на другие пины порта. Потом сдружил ATTiny2313 c PS/2 клавой и используя те же ПП, выводил данные на LCD, предварительно перекодировав скан код клавиши в ASCII. Получился вроде как терминал, набыдлокодил конечно, но для начинающего сойдёт. А ДиХальтовскую библу я раскурю обязательно, просто начинаю с того что попроще для меня в понимании.
С одним у меня пока запара, если запустить схему просто подав питание, то МК не сразу начинает корректно читать клаву, то мусор какой-то гонит на LCD, отображается не то что нажимается на клаве, но если выдержать сек 10 после подачи питания, то всё нормально. А вот если взять и перезалить прошиву в контроллере, то после прошивки начинает сразу работать, до перезапуска питания. Такое ощущение что связано с Reset(ом). Правда у меня всё собрано на беспаечной макетке, может быть глюки из-за этого и вылазят.

_________________
Романтизьму нет, выпить спокойно не дают, нет прежней красоты....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 12 сен 2012, 09:41 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2012, 00:31
Сообщения: 1797
Откуда: Новокузнецк
SergVAG писал(а):
Я поначалу думал что запустить LCD для меня будет проблема, но завёлся он у меня с первого раза. Нарвался как-то на статью http://cxem.net/mc/mc89.php и по подобию состряпал свою программу. Там нет библиоткеи как таковой, там наборы ПП, что для меня оказалось легче чем юзать готовую библу. Было всё прозрачно и стало понятно, переписал на другие пины порта. Потом сдружил ATTiny2313 c PS/2 клавой и используя те же ПП, выводил данные на LCD, предварительно перекодировав скан код клавиши в ASCII. Получился вроде как терминал, набыдлокодил конечно, но для начинающего сойдёт. А ДиХальтовскую библу я раскурю обязательно, просто начинаю с того что попроще для меня в понимании.
С одним у меня пока запара, если запустить схему просто подав питание, то МК не сразу начинает корректно читать клаву, то мусор какой-то гонит на LCD, отображается не то что нажимается на клаве, но если выдержать сек 10 после подачи питания, то всё нормально. А вот если взять и перезалить прошиву в контроллере, то после прошивки начинает сразу работать, до перезапуска питания. Такое ощущение что связано с Reset(ом). Правда у меня всё собрано на беспаечной макетке, может быть глюки из-за этого и вылазят.

мож контроллер раньше клавиатуры инициализируется и долбится в нее. А клава еще в этот момент не готова. В итоге начинают общаться абы как. МОжно попробовать после запуска контроллера выждать некоторое время (500 мс), а потом уже начинать все действия по отношению к клавиатуре.

PS. Кстати уверенны что это клава гонит, а не дисплей?

_________________
elisey.su


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 12 сен 2012, 13:11 
Старожил
Аватара пользователя

Зарегистрирован: 04 июл 2012, 21:07
Сообщения: 206
Откуда: Казахстан, Аксу.
Вот смотрите что получается. Я сначала инициализирую дисплей, после вывожу типа приветственного сообщения типа Terminal LCD+PS/2 KeyBoard, затем намеренно запускаю задержку секунд на 5 (всё это время сообщение выводится). Затем происходит очистка всего дисплея и прога тупит в главном цикле main rjmp main, пока не сработает обработчик INT_0 (нажатие кнопки на клаве). Если подать питание на схему, сообщение выводится без ошибок, после очистки дисплея нажимаю на клаве кнопку, иногда полный бред выводится, а иногда (если после очистки дисплея чуть чуть выждать) нормально всё.
Но после перепрошивки контроллера, видимо когда прогер отпустит линию Reset, девайс работает как было задумано. Я вот грешу на глюки по питанию, потому что когда начинает всякая хрень выводиться, выдерну USB-шнурок и снова воткну, как правило со второго раза всё работает. Схема питается от программатора.
С клавой только односторонний обмен, так что только клава может долбиться в контроллер и то только по нажатию кнопок.

_________________
Романтизьму нет, выпить спокойно не дают, нет прежней красоты....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 13 сен 2012, 11:53 
Заглядывает иногда

Зарегистрирован: 24 авг 2012, 09:06
Сообщения: 67
Откуда: Златоуст
Что, никто не знает как мне помочь?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 13 сен 2012, 12:51 
Администратор
Аватара пользователя

Зарегистрирован: 16 янв 2010, 06:09
Сообщения: 6273
Откуда: Челябинск
Я сейчас не дома и пишу с телефона, но слазь в учебный курс и там под эту библиотечку есть простой пример без излишеств.

Видеопамять делается просто в озу. Заводишь там переменную на столько байт, сколько у тебя в дисплее символов на экране. И пишешь все туда.

То что у тебя каракули на экране это уже чтото. Проверь все линии связи с дисплеем. Причем прозванивай от ножки проца до ножки дисплея. Где то у тебя похоже неконтакт. Или моя демка работает?

_________________
Хозяин дома


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 13 сен 2012, 13:48 
Заглядывает иногда

Зарегистрирован: 24 авг 2012, 09:06
Сообщения: 67
Откуда: Златоуст
Я тоже сначала про неконтакт подумал, и прозванил все 2 раза. И 2 мысля тоже была проверить демку, и она отлично работала....
Команда WR_DATA кстати тоже отлично выводит все, даже русские.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 19 мар 2013, 16:44 
Только пришел

Зарегистрирован: 15 мар 2013, 17:33
Сообщения: 11
Подключил дисплей как в быстром старте к порту B
питается пинборд 2ой ревизии от юсб в обход стабилизаторов
залил тестовую прошивку
Далее при подаче напряжения вовсю загоряются все сегменты лсд дисплея и следовательно видно все 16 квадратов
Подключения перепроверил. Линии прозвонил. истерики еще нет, но намечается в самое ближайшее время))
PS. Программа работает, то есть по уарту сигнал с ацп норм посылается и заметил что при выключении платы на доли секунды таки выскакиевает приветствие пинборды
Заранее спасибо всем сочувствующим)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 19 мар 2013, 16:57 
Администратор
Аватара пользователя

Зарегистрирован: 16 янв 2010, 06:09
Сообщения: 6273
Откуда: Челябинск
Контраст убавь, если видны все 16 квадратов, то текст ты не увидишь. Должно быть при включении еле еле видно только 1й ряд.

_________________
Хозяин дома


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 19 мар 2013, 17:40 
Только пришел

Зарегистрирован: 15 мар 2013, 17:33
Сообщения: 11
Спасибо!! Я то пожадничал и реостат на минимум скрутил, чтобы поконтрастнее было)))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 17 мар 2014, 14:48 
Только пришел

Зарегистрирован: 02 ноя 2013, 13:26
Сообщения: 5
Здравствуйте, подскажите пожалуйста, где ошибка. Пользуюсь Pinboard2, решил запустить дисплей. В комплекте пинбоарды дисплей wh1602b-ygk-ctk. Подключение такое A01 - RS, A02 - E,
GND - R/W, A04..A07 - D4..D7. Провода прозванивал, все рабочие.
В данный момент дисплей после инициализации показывает только верхний ряд квадратов при максимальной контрастности.
Да, главный герой -модуль STM32 из набора Pinboard.
Вот код

Код:
#include "stm32f10x.h"
#include "lcd-hd44780.h"
#define DELAY_T 1000000
#define Delay_strob_E 100

ErrorStatus HSEStartUpStatus;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_ClocksTypeDef RCC_Clocks;

#define Port_E            GPIO_Pin_2
#define Port_RS            GPIO_Pin_1
#define Pins_Data         GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7
#define Port_E_1         GPIO_SetBits(GPIOA, Port_E);
#define Port_E_0         GPIO_ResetBits(GPIOA, Port_E);
#define Port_RS_1         GPIO_SetBits(GPIOA, Port_RS);
#define Port_RS_0         GPIO_ResetBits(GPIOA, Port_RS);

void Delay(uint32_t Val)//micro sec.
{   volatile uint32_t nCount;
 
        nCount=(RCC_Clocks.HCLK_Frequency/(1000000*6))*Val;
        for (; nCount!=0; nCount--);
}

void Enter_4bits_LCD(uint16_t Data)
{
GPIO_ResetBits(GPIOA, Pins_Data);
   if (Data!=0)
   {
      Port_E_1
      Delay(Delay_strob_E);   
      GPIO_SetBits(GPIOA, (Data&(uint16_t)0x0F)<<4);
      Delay(Delay_strob_E);   
      Port_E_0   
      Delay(Delay_strob_E);
      Delay(50);
   }
   else {
            Port_E_1
            Delay(Delay_strob_E);   
            Port_E_0   
            Delay(Delay_strob_E);
        }
}


void Enter_Byte_LCD(uint16_t Byte)
{
Enter_4bits_LCD((Byte&(uint16_t)0xF0)>>4);   
Enter_4bits_LCD(Byte&(uint16_t)0x0F);

}
void Show_Char_LCD(unsigned char c)
{
   Port_RS_1;
   Delay(100);
   Enter_Byte_LCD(c);
   }

void InitDisplay(void)
{
/*---port init */
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
   
   GPIO_InitStructure.GPIO_Pin = Port_E|Port_RS|Pins_Data;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_ResetBits(GPIOA, Port_E|Port_RS|Pins_Data);

/*-------------*/
   Delay(200000);
   
   Port_RS_0;
   Enter_4bits_LCD(0x03);
   Delay(40);
   Enter_Byte_LCD(0x28);
   Delay(40);
   Enter_Byte_LCD(0x28);
   Delay(38);
   Enter_Byte_LCD(0x08);
   Delay(38);
   Enter_Byte_LCD(0x06);
   Delay(1540);
   Enter_Byte_LCD(0x01);
   Delay(1000);
   Enter_Byte_LCD(0x0C);
   Enter_Byte_LCD(0x02);

   Show_Char_LCD('S');
   Delay(10000000);
   Port_RS_0
   Enter_Byte_LCD(0x01);
}
void InitAll(void)
{
  RCC_DeInit();
   RCC_HSEConfig(RCC_HSE_ON);
   HSEStartUpStatus=RCC_WaitForHSEStartUp();
   
   if (HSEStartUpStatus == SUCCESS)
   {   RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);
   
      /* Включаем буфер предвыборки FLASH */
   FLASH->ACR |= FLASH_ACR_PRFTBE;
   FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
   FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;
   }
   RCC_ClockSecuritySystemCmd(ENABLE);
   
   /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);

    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);

    /* PCLK1 = HCLK */
    RCC_PCLK1Config(RCC_HCLK_Div1);

    RCC_GetClocksFreq (&RCC_Clocks);
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
   
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB, GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
   return;
}

int main(void)
{
InitAll();
   GPIO_SetBits(GPIOB, GPIO_Pin_5);
InitDisplay();
   GPIO_SetBits(GPIOB, GPIO_Pin_6);
   while(1)   {   }

   }
/*============================================================ */
#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %drn", file, line) */

  /* Infinite loop */
   GPIO_SetBits(GPIOB, GPIO_Pin_7);
  while (1)
  {
  }
}
#endif


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 17 мар 2014, 15:56 
Администратор
Аватара пользователя

Зарегистрирован: 16 янв 2010, 06:09
Сообщения: 6273
Откуда: Челябинск
А дисплею уровней STM32 хватит? Он то пятивольтовый, а стмка 3.3

_________________
Хозяин дома


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 17 мар 2014, 16:01 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
DI HALT писал(а):
А дисплею уровней STM32 хватит? Он то пятивольтовый, а стмка 3.3
HD44780-based дисплеи нормально работают от трёхвольтовых уровней STM32. Надо только на Vcc дисплея подать +5V (и на верхний конец резистора - регулятора контраста тоже), а сигналы оставить трёхвольтовые.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 17 мар 2014, 16:29 
Только пришел

Зарегистрирован: 02 ноя 2013, 13:26
Сообщения: 5
то есть с уровнями нормально? от STM работать должно? я был уверен, что на плате уже все продумано)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 17 мар 2014, 17:08 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
butcherbay3000 писал(а):
то есть с уровнями нормально? от STM работать должно? я был уверен, что на плате уже все продумано)
Да, нормально, такое подключение текстовых LCD к STM32 уже обсуждалось на форуме. Я сам подключал к F4-Discovery (там напряжение питания МК всего 3.0V, поэтому логические уровни даже ниже, чем стандартные 3.3V).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 17 мар 2014, 17:21 
Только пришел

Зарегистрирован: 02 ноя 2013, 13:26
Сообщения: 5
AlexPM писал(а):
butcherbay3000 писал(а):
то есть с уровнями нормально? от STM работать должно? я был уверен, что на плате уже все продумано)
Да, нормально, такое подключение текстовых LCD к STM32 уже обсуждалось на форуме. Я сам подключал к F4-Discovery (там напряжение питания МК всего 3.0V, поэтому логические уровни даже ниже, чем стандартные 3.3V).


Значит логично допустить, что на железо грешить не надо и проблема в моем коде.
Я инициализацию делал прямо по даташиту, ни шагу в сторону. Много где говорят "проверь тайминги", но у меня функция Delay работает корректно(проверял на диодах, моргают с нужной частотой).
Чего я не замечаю?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 17 мар 2014, 18:06 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
butcherbay3000 писал(а):
Чего я не замечаю?
Я бы вот это условие убрал и всю ветвь "else" к нему:
if (Data!=0)

И в инициализации дисплея одного этого не достаточно:
Enter_4bits_LCD(0x03);
Должно быть передано четыре ниббла - 0x03, 0x03, 0x03, 0x02, прежде чем приступать к передаче полных байтов в LCD. После первого ниббла - задержка согласно даташиту (не менее 4.1 мс).

Возможно, и другие ошибки в коде есть. Если делаете принципиально сами по даташиту - так хотя бы читайте этот даташит весь, а не через абзац ;-) Диаграмма инициализации - must read.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 17 мар 2014, 19:13 
Только пришел

Зарегистрирован: 02 ноя 2013, 13:26
Сообщения: 5
Цитата:
Возможно, и другие ошибки в коде есть. Если делаете принципиально сами по даташиту - так хотя бы читайте этот даташит весь, а не через абзац ;-) Диаграмма инициализации - must read.


По поводу ветки (Data!=0)
Без нее у меня возникали трудности при передаче некоторых чисел, у которых старшая тетрада оказывалась равно нулю. Этот ноль функция SetBits воспринимала как неправильный параметр и вываливалась в бесконечный цикл(типа защита от неправильных параметров в учебном курсе у DI Halta подсмотрел).
Код:
#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %drn", file, line) */

  /* Infinite loop */
   GPIO_SetBits(GPIOB, GPIO_Pin_7);
  while (1)
  {
  }
}
#endif


Понятное дело эту диаграмму инициализации я прочитал весьма внимательно. Но там ни слова не было про эти четыре ниббла!
по крайней мере в даташите на wh1602b-ygk-ctk


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 17 мар 2014, 20:00 
Старожил

Зарегистрирован: 15 янв 2013, 13:24
Сообщения: 5665
butcherbay3000 писал(а):
По поводу ветки (Data!=0)
Без нее у меня возникали трудности при передаче некоторых чисел, у которых старшая тетрада оказывалась равно нулю. Этот ноль функция SetBits воспринимала как неправильный параметр и вываливалась в бесконечный цикл
Вы же понимаете, что иногда надо передавать данные, равные нулю? А у Вас не только исключена такая возможность, но ещё и передаётся какой-то левак вместо нуля (т.к. строб "E" генерируется)! Используйте более универсальную функцию, чтобы могла передать любое значение.

butcherbay3000 писал(а):
Понятное дело эту диаграмму инициализации я прочитал весьма внимательно. Но там ни слова не было про эти четыре ниббла!
по крайней мере в даташите на wh1602b-ygk-ctk
Не знаю, что написано в даташите на конкретно этот LCD (конкретные "листовки" иногда бывают слишком краткими), сверьтесь с первоисточниками - документацией на HD44780, KS0066 и т.п.аналоги.
И по форумам (не только "STM32", но и "AVR", "SM8", ...) сайта посмотрите про инициализацию таких дисплеев - таких тем было очень много.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Pinboard2 & LCD
СообщениеДобавлено: 17 мар 2014, 22:14 
Старожил
Аватара пользователя

Зарегистрирован: 06 янв 2012, 18:49
Сообщения: 802
Откуда: Новый Уренгой
DI HALT писал(а):
А дисплею уровней STM32 хватит? Он то пятивольтовый, а стмка 3.3

Хватит однозначно, работает просто отлично :-)

_________________
selenur.ru


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 134 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB