Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » дисплей Nokia-1202
дисплей Nokia-1202
доцент2 Дата: Сб, 14.09.2013, 20:29  |                                                                                                                Сообщение # 16
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

Спасибо за пример!
С такими подпрограммами, я сталкивался на VisualBasic, а как организовать их на Протоне пока не соображу.
Могу ошибаться, слышал краем уха, на СТМ32 можно задать битность 9, что упрощает задачу.
По поводу 6100 согласен.
Завтра поеду на барахолку посмотрю старые телефоны (стоят они копейки).
Matrix252005 Дата: Сб, 14.09.2013, 20:40  |                                                                                                                Сообщение # 17
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Цитата (доцент2)
...на СТМ32 можно задать битность 9...

Я пишу на микроБэйсике (mikroBasic for ARM), он немного похож на СИ... Так что там проще переделать прогу... 

А по поводу 9-ти битки на СПИ, НЕТ, такого в мВ нет... Там только 8 или 16.

Цитата (доцент2)
...а как организовать их на Протоне пока не соображу.

Можно просто процедурами... И ссылаться на них по GoSub...


THE TRUTH IS OUT THERE.

С уважением, Николай.
доцент2 Дата: Сб, 14.09.2013, 21:05  |                                                                                                                Сообщение # 18
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

Спасибо за ответ!
По поводу настройки битности наверное перепутал с другим контроллером (но точно видел в инете).
Мне попадалась библиотека на дисплей написанная микроБейсике. Пока только и остается использовать процедуры. Буду пробовать.
Matrix252005 Дата: Сб, 14.09.2013, 21:10  |                                                                                                                Сообщение # 19
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Цитата (доцент2)
По поводу настройки битности наверное перепутал с другим контроллером (но точно видел в инете).

Это может быть для других софтов... Или софтовый СПИ.... Там Вы можете сколько угодно сделать...

Цитата (доцент2)
Мне попадалась библиотека на дисплей написанная микроБейсике.

Так возьмите ее за основу и просто поменяйте операторы... Проще говоря, подгоните под протон...
Именно так я делал с 3310, взял свой проект на 3310 и перевел ее для мВ...

Цитата (доцент2)
Пока только и остается использовать процедуры.

sad Плохо что в Протоне нельзя делать процедуры, очень удобно...


THE TRUTH IS OUT THERE.

С уважением, Николай.
доцент2 Дата: Сб, 14.09.2013, 21:44  |                                                                                                                Сообщение # 20
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

При 8 битах проблем нет.
К сожалению при 9 битах просто заменить операторы не получиться, придется использовать USART настроив его на 9 бит или "дрыгать ножками" с помощью подпрограмм.
ivan_fd Дата: Вс, 15.09.2013, 22:12  |                                                                                                                Сообщение # 21
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Не нужен Вам никакой USART. Делаете софтовый SPI и все проблемы.

Добавлено (15.09.2013, 22:12)
---------------------------------------------
Вот приблизительная процедура передачи данных в LCD.

Код
CS = 0
CLK = 0

      if command then
        SDA = 1
      else
        SDA = 0
      endif
       
     CLK = 1

     for i=0 to 8
      CLK = 0
   if c & 0x80 = 0x80 then
     SDA = 1
        else
    SDA = 0
endif

CLK = 1

        c = с << 1
        delayus 2
NEXT
       
CS = 1

Сообщение отредактировал ivan_fd - Вс, 15.09.2013, 22:13
ЯНДЕКС Дата: 15.09.2013
доцент2 Дата: Пн, 16.09.2013, 13:45  |                                                                                                                Сообщение # 22
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

ivan_fd
я в принципе так и сделал, пример в архиве. но дисплей работать не хочет (хоть бы "шум" показал). Порядок инициализации списал с примера на Си в инете.
в примере просто сделал инициализацию, задаю координаты и пытаюсь вывести символ "|" $FF.
есть вопрос с RES-том, куда его девать - на землю кинуть или на +.
Или на него нужно подать типа:
RES=1
delayus 10
RES=0
Прикрепления: pic12f629Nokia-.rar (38.1 Kb)
ivan_fd Дата: Пн, 16.09.2013, 22:00  |                                                                                                                Сообщение # 23
Группа: Модераторы
Ранг:  Специалист
Сообщений: 894
Репутация: 124   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Вот схема подключения с habrahabr.ru



Да, и почему Вы не просимулируете в Протеусе вместе с экраном, будет сразу видно работает али нет.

Добавлено (16.09.2013, 21:56)
---------------------------------------------
При инициализации reset нужно 

RST = 0
ПАУЗА
RST = 1

Добавлено (16.09.2013, 22:00)
---------------------------------------------
Посмотрел Ваш код, где Вы взяли пример?

Вот как должно быть

spi(CMD,0x20); // write VOP register
spi(CMD,0x90); 
spi(CMD,0xA4); // all on/normal display
spi(CMD,0x2F); // Power control set(charge pump on/off)
spi(CMD,0x40); // set start row address = 0
spi(CMD,0xb0); // set Y-address = 0
spi(CMD,0x10); // set X-address, upper 3 bits
spi(CMD,0x0);  // set X-address, lower 4 bits
spi(CMD,0xC8); // mirror Y axis (about X axis)
spi(CMD,0xa1); // Invert screen in horizontal axis
spi(CMD,0xac); // set initial row (R0) of the display
spi(CMD,0x07);
//spi(CMD,0xF9); // 
spi(CMD,0xaf); // display ON/OFF

Lcd_Clear(); // clear LCD
spi(CMD,0xa7); // invert display
Delay10KTCYx(100); // 1/2 Sec delay
spi(CMD,0xa6); // normal display (non inverted)
Delay10KTCYx(100); // 1 Sec delay

доцент2 Дата: Вт, 17.09.2013, 00:42  |                                                                                                                Сообщение # 24
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

В железе дисплей Nokia-1202 не работает. В протеусе Nokia-1100 запустился. (У них вроде разные контроллеры)
Пытаюсь задать положение символа X,Y аналогично как для Nokia3310, но не получается. перелапатил даташит, но толком ничего не понял, может $80 и $10 не те
XY_LCD:
Dan=$B0|Y: GoSub Data_LCD' Y axe initialisation  Y
Dan=$10|x: GoSub Data_LCD' X axe initialisation  X

Сообщение отредактировал доцент2 - Вт, 17.09.2013, 00:53
anatol Дата: Вт, 17.09.2013, 00:55  |                                                                                                                Сообщение # 25
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

отсюда инициализация
Код
LCD_write_byte(0xE2, 0); // Reset      
LCD_write_byte(0xA4, 0); // Power saver off      
LCD_write_byte(0x2F, 0); // Power control set     
LCD_write_byte(0xAF, 0); // LCD display on    

       LCD_write_byte(0xB0 | 0, 0); // Page address set    

/* Print 'A' character */      
LCD_write_byte(0x00, 1);      
LCD_write_byte(0x7C, 1);      
LCD_write_byte(0x12, 1);      
LCD_write_byte(0x12, 1);      
LCD_write_byte(0x7C, 1);      
LCD_write_byte(0x00, 1);

Обратите внимание что девятый байт при команде идет нулем. а при выводе с единицей. Как старшим битом вперед или младшим разбирайся сам.
и обращение


ivan_fd, у 1102 другой драйвер.

доцент2 Здесь я отправлял последовательность байт с "дерганьем"
У вас я бы заменил SDA=Dan.7 на SDA=Dan.i
Код
For i=0 To 7
        SCLK=0
        SDA=Dan.7
            SCLK=1
            Dan=Dan<<1
'          DelayUS 2
Next i
то есть
Код
For i=0 To 7
        SCLK=0
        SDA=Dan.i
            SCLK=1
           '          DelayUS 2
Next i

Сообщение отредактировал anatol - Вт, 17.09.2013, 01:01
доцент2 Дата: Вт, 17.09.2013, 07:14  |                                                                                                                Сообщение # 26
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

Спасибо Анатолий!
Т.е. для инициализации дисплея достаточно четырех строчек?
LCD_write_byte(0xE2, 0); // Reset
LCD_write_byte(0xA4, 0); // Power saver off
LCD_write_byte(0x2F, 0); // Power control set
LCD_write_byte(0xAF, 0); // LCD display on
(в описании контроллера их там целая таблица)
а, вот эти строчки можно не использовать или они обязательны?

LcdSend( 0x3D , 0 );  // Charge pump
LcdSend( 0x01 , 0 );  // Charge pump = 4 (default 5 is too hight for 3.0 volt)
LcdSend( 0xE1 , 0 );  // Additional VOP for contrast increase
LcdSend( 0x16 , 0 );  // from -127 to +127

сегодня попробую.
прощу прощенья, но мне не совсем понятно как как задать положение выводимого символа Х, У?

Сообщение отредактировал доцент2 - Вт, 17.09.2013, 14:25
anatol Дата: Вт, 17.09.2013, 15:40  |                                                                                                                Сообщение # 27
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

По инициализации подробно.
Не забывайте что передача старшим битом (битом команда=0, данные=1) вперед.
Начальная установка места в столбце 0 1 0 1 1 address
Отсчет от левого верхнего угла, побайтно, сверху вниз = кол-во строк/8
address = 4 бита равны номеру байта.
Так как столбцов 98 (или 96) требуется 7 бит и команда установки состоит из 2-х посылок
из 3-х 0 0 0 0 1 Х address
и  4-х 0 0 0 0 0 address    бит в команде адреса. Выделенный бит признак команды. Рядом 7-й бит байта установки.
Все это прекрасно расписано в даташите на драйвер дисплея (стоит на стекле) http://tuxotronic.org/wiki/_media/component/lcd/ste2007.pdf

Сообщение отредактировал anatol - Вт, 17.09.2013, 16:06
доцент2 Дата: Вт, 17.09.2013, 17:36  |                                                                                                                Сообщение # 28
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

Помогите с моделью дисплея Nokia-1202 для протеуса
На макетке дисплей Nokia-1202 так и хочет работать, поставил второй - тоже признаков жизни не подает. (питание дисплея 3,3В работает только подсветка).

Сообщение отредактировал доцент2 - Вт, 17.09.2013, 18:01
anatol Дата: Вт, 17.09.2013, 18:09  |                                                                                                                Сообщение # 29
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 472
Репутация: 32   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Похоже затупили, надо отдохнуть. wink
Данные отправляются 9-ти битным кодом, где:
-если первый отправленный бит = 0. то остальные 8 бит команда;
-если первый отправленный бит = 1, то остальные отображают пикселы (вкл, выкл)
Отображается столбик из 8 бит.
Следующий столбик из 8 бит отображается за этим, сверху вниз столбца, по цепочке, автоматом. Потом переход наверх и следующий столбец, аналогично первому правее его (это для режима по сбросу в исходное). И так далее, экран рисуется целиком.
Если надо изменить только часть экрана. то производится установка в позицию по трем девятибайтным командам. Одна команда устанавливает место по вертикали 0 1 0 1 1 address, по другому к примеру 010110110 место 6(5, если считать с нуля) байта,пиксели с 49 по 56 (48 -55)
и upper 3–bit address 0 0 0 0 1 * address
и  ower 4–bit address 0 0 0 0 0 address
по другому к примеру :0 0 0 0 1 Х 001 и 0 0 0 0 0 1101 , что буде равно  0 0011101 = 29 столбцу

Научитесь просто засветить и получить строчки на дисплее передавая одно число к примеру 3 (00000011). Как получите полоски без сдвига = победа.
доцент2 Дата: Вт, 17.09.2013, 18:37  |                                                                                                                Сообщение # 30
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

получилось! ох как мудрено, хорошо описание не на китайском.
получается так:
Dan=$b0|Y: command=0: GoSub Data_LCD ' это строчка Y от 0 до 7
Dan=$10|X1: command=0: GoSub Data_LCD' X axe initialisation: 0001 *xxx
Dan=$00|X2: command=0: GoSub Data_LCD' X axe initialisation: 0000 xxxx          с 0 до 96
пока не соображу, если мне надо расположить символ по оси Х, например с "координатой" 45=101101, как программно "поделить" 45 между Х1=%10 и Х2=%1101?
Форум Picbasic.ru » Программирование МК » Proton PicBasic » дисплей Nokia-1202
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск: