Дисплеи от мобильных телефонов- осцилограммы работы
Re: Дисплеи от мобильных телефонов- осцилограммы работы
nikityan, что будет питатся от кроны? Подсветка? Если да то ничего не выйдет. Не будет она гореть на 9 вольт (разве что с заменой внутреннего резистора но ябы не советовал разбирать дисплей). Самый лучший вариант - питать все от 3-х вольт и сделать преобразователь 3-12в.
Судя с предыдущих постов я так и не понял можно ли перевернуть изображение на 90 градусов командой 0x36 чтоб можно было рисовать на всей области экрана? На практике действительно экран не зарисовывает за 131 пиксель. Както можно исправить эту проблему?
Судя с предыдущих постов я так и не понял можно ли перевернуть изображение на 90 градусов командой 0x36 чтоб можно было рисовать на всей области экрана? На практике действительно экран не зарисовывает за 131 пиксель. Както можно исправить эту проблему?
Шуруп забитый молотком держится намного лучше чем гвоздь закрученный отверткой!
-
Foks
- Поставщик валерьянки для Кота
- Сообщения: 2108
- Зарегистрирован: Пт авг 29, 2008 16:28:19
- Откуда: Киев
Re: Дисплеи от мобильных телефонов- осцилограммы работы
Я уже писал триста раз, что же, повторюсь. С помощью 0x36 нельзя (вернее, пока не получалось).
Но можно поменять координаты X и Y, и добавить зеркализацию. Никаких программных пересчетов больше не понадобится, но направление заполнения прямоугольника при этом, конечно же, поменяется.
Но можно поменять координаты X и Y, и добавить зеркализацию. Никаких программных пересчетов больше не понадобится, но направление заполнения прямоугольника при этом, конечно же, поменяется.
Giggity giggity goo!
Re: Дисплеи от мобильных телефонов- осцилограммы работы
а на nokia 6300 никто ничего не находил?)
Re: Дисплеи от мобильных телефонов- осцилограммы работы
Простите за то что спрашиваю лишнее, ведь я только начинающий. Накопал код для дисплея lph9157-2 на Си.
#include <intrinsics.h>
#include <iom32.h>
#define F_CPU 8000000 // Only for delay calculations
#define RST PB3 //Reset висит на порте B3
#define RS PB4 //RS висит на порте B4
#define CS PB2 //CS висит на порте B2
#define white 0xFFFF
#define yellow 0xFFE0
#define cyan 0x07FF
#define green 0x07E0
#define purple 0xF81F
#define red 0xF800
#define blue 0x001F
#define black 0x0000
#define gray 0x7800+0x0380+0x0F
__flash int colorbars[8]={white,yellow,cyan,green,purple,red,blue,black};
__flash char font6x8[576]=
{0x00,0x00,0x00,0x00,0x00,0x00, // Symbol 20
0x00,0x00,0x00,0x5F,0x00,0x00, // Symbol 21
0x00,0x00,0x03,0x00,0x03,0x00, // Symbol 22
0x22,0x7F,0x22,0x22,0x7F,0x22, // Symbol 23
0x00,0x24,0x2A,0x6B,0x2A,0x12, // Symbol 24
0x00,0x23,0x13,0x08,0x64,0x62, // Symbol 25
0x00,0x3A,0x45,0x45,0x3A,0x28, // Symbol 26
0x00,0x00,0x00,0x02,0x01,0x00, // Symbol 27
0x00,0x00,0x3E,0x41,0x00,0x00, // Symbol 28
0x00,0x00,0x41,0x3E,0x00,0x00, // Symbol 29
0x00,0x2A,0x1C,0x1C,0x2A,0x00, // Symbol 2A
0x00,0x08,0x08,0x3E,0x08,0x08, // Symbol 2B
0x00,0x00,0x80,0x40,0x00,0x00, // Symbol 2C
0x00,0x08,0x08,0x08,0x08,0x00, // Symbol 2D
0x00,0x00,0x00,0x40,0x00,0x00, // Symbol 2E
0x00,0x20,0x10,0x08,0x04,0x02, // Symbol 2F
0x00,0x3E,0x51,0x49,0x45,0x3E, // Symbol 30
0x00,0x00,0x42,0x7F,0x40,0x00, // Symbol 31
0x00,0x62,0x51,0x51,0x51,0x4E, // Symbol 32
0x00,0x21,0x41,0x45,0x45,0x3B, // Symbol 33
0x00,0x18,0x16,0x11,0x7F,0x10, // Symbol 34
0x00,0x27,0x45,0x45,0x45,0x39, // Symbol 35
0x00,0x3E,0x49,0x49,0x49,0x32, // Symbol 36
0x00,0x01,0x61,0x11,0x09,0x07, // Symbol 37
0x00,0x36,0x49,0x49,0x49,0x36, // Symbol 38
0x00,0x26,0x49,0x49,0x49,0x3E, // Symbol 39
0x00,0x00,0x00,0x12,0x00,0x00, // Symbol 3A
0x00,0x00,0x20,0x12,0x00,0x00, // Symbol 3B
0x00,0x08,0x14,0x22,0x41,0x00, // Symbol 3C
0x00,0x14,0x14,0x14,0x14,0x14, // Symbol 3D
0x00,0x41,0x22,0x14,0x08,0x00, // Symbol 3E
0x00,0x06,0x01,0x51,0x09,0x06, // Symbol 3F
0x00,0x3E,0x41,0x4D,0x4D,0x2E, // Symbol 40
0x00,0x78,0x16,0x11,0x16,0x78, // Symbol 41
0x00,0x7F,0x49,0x49,0x49,0x36, // Symbol 42
0x00,0x3E,0x41,0x41,0x41,0x22, // Symbol 43
0x00,0x7F,0x41,0x41,0x41,0x3E, // Symbol 44
0x00,0x7F,0x49,0x49,0x49,0x41, // Symbol 45
0x00,0x7F,0x09,0x09,0x09,0x01, // Symbol 46
0x00,0x3E,0x41,0x41,0x51,0x32, // Symbol 47
0x00,0x7F,0x08,0x08,0x08,0x7F, // Symbol 48
0x00,0x00,0x41,0x7F,0x41,0x00, // Symbol 49
0x00,0x30,0x40,0x41,0x41,0x3F, // Symbol 4A
0x00,0x7F,0x08,0x08,0x14,0x63, // Symbol 4B
0x00,0x7F,0x40,0x40,0x40,0x60, // Symbol 4C
0x00,0x7F,0x04,0x18,0x04,0x7F, // Symbol 4D
0x00,0x7F,0x04,0x08,0x10,0x7F, // Symbol 4E
0x00,0x3E,0x41,0x41,0x41,0x3E, // Symbol 4F
0x00,0x7F,0x09,0x09,0x09,0x06, // Symbol 50
0x00,0x3E,0x41,0x61,0x21,0x5E, // Symbol 51
0x00,0x7F,0x09,0x09,0x19,0x66, // Symbol 52
0x00,0x26,0x49,0x49,0x49,0x32, // Symbol 53
0x00,0x01,0x01,0x7F,0x01,0x01, // Symbol 54
0x00,0x3F,0x40,0x40,0x40,0x3F, // Symbol 55
0x00,0x07,0x18,0x60,0x18,0x07, // Symbol 56
0x00,0x1F,0x60,0x18,0x60,0x1F, // Symbol 57
0x00,0x63,0x14,0x08,0x14,0x63, // Symbol 58
0x00,0x03,0x04,0x78,0x04,0x03, // Symbol 59
0x00,0x61,0x51,0x49,0x45,0x43, // Symbol 5A
0x00,0x00,0x7F,0x41,0x00,0x00, // Symbol 5B
0x00,0x02,0x04,0x08,0x10,0x20, // Symbol 5C
0x00,0x00,0x41,0x7F,0x00,0x00, // Symbol 5D
0x00,0x00,0x00,0x00,0x00,0x00, // Symbol 5E
0x40,0x40,0x40,0x40,0x40,0x40, // Symbol 5F
0x00,0x00,0x00,0x01,0x02,0x00, // Symbol 60
0x00,0x20,0x54,0x54,0x54,0x78, // Symbol 61
0x00,0x7E,0x48,0x48,0x48,0x30, // Symbol 62
0x00,0x38,0x44,0x44,0x44,0x28, // Symbol 63
0x00,0x30,0x48,0x48,0x48,0x7E, // Symbol 64
0x00,0x38,0x54,0x54,0x54,0x18, // Symbol 65
0x00,0x10,0x7C,0x12,0x02,0x04, // Symbol 66
0x00,0x0C,0x52,0x52,0x3C,0x02, // Symbol 67
0x00,0x7E,0x08,0x08,0x08,0x70, // Symbol 68
0x00,0x00,0x00,0x74,0x00,0x00, // Symbol 69
0x00,0x40,0x80,0x80,0x74,0x00, // Symbol 6A
0x00,0x7E,0x10,0x10,0x10,0x6C, // Symbol 6B
0x00,0x00,0x02,0x7E,0x00,0x00, // Symbol 6C
0x00,0x7C,0x04,0x78,0x04,0x78, // Symbol 6D
0x00,0x7C,0x04,0x04,0x04,0x78, // Symbol 6E
0x00,0x38,0x44,0x44,0x44,0x38, // Symbol 6F
0x00,0xFC,0x24,0x24,0x24,0x18, // Symbol 70
0x00,0x18,0x24,0x24,0x24,0xFC, // Symbol 71
0x00,0x7C,0x08,0x04,0x04,0x08, // Symbol 72
0x00,0x48,0x54,0x54,0x54,0x20, // Symbol 73
0x00,0x08,0x3E,0x48,0x40,0x00, // Symbol 74
0x00,0x3C,0x40,0x40,0x40,0x3C, // Symbol 75
0x00,0x1C,0x20,0x40,0x20,0x1C, // Symbol 76
0x00,0x3C,0x40,0x30,0x40,0x3C, // Symbol 77
0x00,0x44,0x28,0x10,0x28,0x44, // Symbol 78
0x00,0x1C,0x20,0xA0,0xA0,0x7C, // Symbol 79
0x00,0x44,0x64,0x54,0x4C,0x44, // Symbol 7A
0x00,0x08,0x36,0x41,0x00,0x00, // Symbol 7B
0x00,0x00,0x00,0x7F,0x00,0x00, // Symbol 7C
0x00,0x00,0x41,0x36,0x08,0x00, // Symbol 7D
0x02,0x01,0x01,0x02,0x02,0x01, // Symbol 7E
0x00,0x7F,0x7F,0x7F,0x7F,0x7F}; // Symbol 7F
__flash char text0[]= "SONIK 2012";
__flash char text1[]= "Nikityan";
__flash char text2[]= "176x132 pixels, 16 bit mode";
void c75_alps_cmd(char cmd)
{
PORTB&=~(1<<RS); // RS=0
SPDR=cmd;
__delay_cycles(16+4);
}
void c75_alps_data16(char data_h, char data_l)
{
PORTB|=(1<<RS); // RS=1
SPDR=data_h;
__delay_cycles(16+4);
SPDR=data_l;
__delay_cycles(16+4);
}
void c75_alps_init(void)
{
__delay_cycles(F_CPU*0.1);// delay 100ms
PORTB|=(1<<RST); //Release Reset
__delay_cycles(F_CPU*0.057);// delay 57ms
PORTB&=~(1<<CS); // CS=0, chip selsect
c75_alps_cmd(0x00);
c75_alps_data16(0x00,0x01);
c75_alps_cmd(0x10);
c75_alps_data16(0x1F,0x92);
c75_alps_cmd(0x11);
c75_alps_data16(0x00,0x14);
c75_alps_cmd(0x00);
c75_alps_data16(0x00,0x01);
c75_alps_cmd(0x10);
c75_alps_data16(0x1F,0x92);
c75_alps_cmd(0x11);
c75_alps_data16(0x00,0x1C);
c75_alps_cmd(0x28);
c75_alps_data16(0x00,0x06);
c75_alps_cmd(0x02);
c75_alps_data16(0x00,0x00);
c75_alps_cmd(0x12);
c75_alps_data16(0x04,0x0F);
c75_alps_cmd(0x22);
for (int j=0; j<(132*176);j++) {c75_alps_data16(0x00,0x00);}//black
c75_alps_cmd(0x03);//Set Entry Mode
c75_alps_data16(0x78,0x30);
c75_alps_cmd(0x01);
c75_alps_data16(0x31,0xAF);//strange must be FF?
c75_alps_cmd(0x07);
c75_alps_data16(0x00,0x33);
PORTB|=(1<<CS); // CS=1 chip deselect
}
void c75_alps_put_char16(char x, char y, char symbol, int color, int bkcolor)
{
c75_alps_cmd(0x44);//Y range
c75_alps_data16(y+7,y);//Y2,Y1
c75_alps_cmd(0x47);//X range
c75_alps_data16(x+5,x);//X2,X1
c75_alps_cmd(0x21);//coordinates
c75_alps_data16(x,y);//X, Y
c75_alps_cmd(0x22);
int offset=6*(symbol-0x20);
for (char i=0;i<6;i++)
{
for (char j=0;j<8;j++) {if (((font6x8[offset+i]<<j)&0x80)==0x80) {c75_alps_data16(color>>8,color);} else {c75_alps_data16(bkcolor>>8,bkcolor);}}
}
}
void c75_alps_put_string16(char x, char y, char __flash * text, int color, int bkcolor)
{
char i=0;
char x0=0;
while (text[i]!=0)
{
c75_alps_put_char16(x+x0,y,text[i], color , bkcolor);
i++;
x0+=6;
}
}
void c75_alps_rect(char x1, char y1, char x2, char y2, int color)
{
c75_alps_cmd(0x44);//Y range
c75_alps_data16(y2,y1);//Y2,Y1
c75_alps_cmd(0x47);//X range
c75_alps_data16(x2,x1);//X2,X1
c75_alps_cmd(0x21);//coordinates
c75_alps_data16(x1,y1);//X, Y
c75_alps_cmd(0x22);
for (int i=(y2-y1+1)*(x2-x1+1);i>0;i--) c75_alps_data16(color>>8,color);
}
void main( void )
{
DDRB=0xFF; //PortB is output
PORTB=(1<<CS)|(1<<RS);
SPCR=(1<<MSTR)|(1<<SPE);//SPI Interface
SPSR=1;
c75_alps_init();
PORTB&=~(1<<CS); // CS=0, chip selsect
c75_alps_put_string16(32,120,text0, white, black);
c75_alps_put_string16(4+3,120-10,text2, cyan, black);
c75_alps_rect(0,22,175,65,gray);//gray box
c75_alps_rect(10,34,165,54,white);
c75_alps_rect(12,36,163,52,red);
c75_alps_put_string16(22,40,text1, white, red);
for (char i=0;i<8;i++)//draw color bars
{
c75_alps_rect(i*22,0,i*22+21,21,colorbars[i]);
}
for (char i=0;i<16;i++)//draw gradients
{
c75_alps_rect(i*11,66,i*11+10,75,i*2);//blue
c75_alps_rect(i*11,76,i*11+10,85,(i<<6)*2);//green
c75_alps_rect(i*11,86,i*11+10,95,(i<<11)*2);//red
}
PORTB|=(1<<CS); // CS=1 chip deselect
while(1)
{
}
}
Но здесь много лишнего. Что из этого кода достаточно взять для инициализации дисплея и вывода какой нибудь простенькой надписи? Я спрашиваю потому что когда я найду конкретный код для запуска, я смогу понять как он работает и как в него посылаются команды.
Спойлер
#define ENABLE_BIT_DEFINITIONS // enables the bit definitions, such as PD0, CS01, WGM02..#include <intrinsics.h>
#include <iom32.h>
#define F_CPU 8000000 // Only for delay calculations
#define RST PB3 //Reset висит на порте B3
#define RS PB4 //RS висит на порте B4
#define CS PB2 //CS висит на порте B2
#define white 0xFFFF
#define yellow 0xFFE0
#define cyan 0x07FF
#define green 0x07E0
#define purple 0xF81F
#define red 0xF800
#define blue 0x001F
#define black 0x0000
#define gray 0x7800+0x0380+0x0F
__flash int colorbars[8]={white,yellow,cyan,green,purple,red,blue,black};
__flash char font6x8[576]=
{0x00,0x00,0x00,0x00,0x00,0x00, // Symbol 20
0x00,0x00,0x00,0x5F,0x00,0x00, // Symbol 21
0x00,0x00,0x03,0x00,0x03,0x00, // Symbol 22
0x22,0x7F,0x22,0x22,0x7F,0x22, // Symbol 23
0x00,0x24,0x2A,0x6B,0x2A,0x12, // Symbol 24
0x00,0x23,0x13,0x08,0x64,0x62, // Symbol 25
0x00,0x3A,0x45,0x45,0x3A,0x28, // Symbol 26
0x00,0x00,0x00,0x02,0x01,0x00, // Symbol 27
0x00,0x00,0x3E,0x41,0x00,0x00, // Symbol 28
0x00,0x00,0x41,0x3E,0x00,0x00, // Symbol 29
0x00,0x2A,0x1C,0x1C,0x2A,0x00, // Symbol 2A
0x00,0x08,0x08,0x3E,0x08,0x08, // Symbol 2B
0x00,0x00,0x80,0x40,0x00,0x00, // Symbol 2C
0x00,0x08,0x08,0x08,0x08,0x00, // Symbol 2D
0x00,0x00,0x00,0x40,0x00,0x00, // Symbol 2E
0x00,0x20,0x10,0x08,0x04,0x02, // Symbol 2F
0x00,0x3E,0x51,0x49,0x45,0x3E, // Symbol 30
0x00,0x00,0x42,0x7F,0x40,0x00, // Symbol 31
0x00,0x62,0x51,0x51,0x51,0x4E, // Symbol 32
0x00,0x21,0x41,0x45,0x45,0x3B, // Symbol 33
0x00,0x18,0x16,0x11,0x7F,0x10, // Symbol 34
0x00,0x27,0x45,0x45,0x45,0x39, // Symbol 35
0x00,0x3E,0x49,0x49,0x49,0x32, // Symbol 36
0x00,0x01,0x61,0x11,0x09,0x07, // Symbol 37
0x00,0x36,0x49,0x49,0x49,0x36, // Symbol 38
0x00,0x26,0x49,0x49,0x49,0x3E, // Symbol 39
0x00,0x00,0x00,0x12,0x00,0x00, // Symbol 3A
0x00,0x00,0x20,0x12,0x00,0x00, // Symbol 3B
0x00,0x08,0x14,0x22,0x41,0x00, // Symbol 3C
0x00,0x14,0x14,0x14,0x14,0x14, // Symbol 3D
0x00,0x41,0x22,0x14,0x08,0x00, // Symbol 3E
0x00,0x06,0x01,0x51,0x09,0x06, // Symbol 3F
0x00,0x3E,0x41,0x4D,0x4D,0x2E, // Symbol 40
0x00,0x78,0x16,0x11,0x16,0x78, // Symbol 41
0x00,0x7F,0x49,0x49,0x49,0x36, // Symbol 42
0x00,0x3E,0x41,0x41,0x41,0x22, // Symbol 43
0x00,0x7F,0x41,0x41,0x41,0x3E, // Symbol 44
0x00,0x7F,0x49,0x49,0x49,0x41, // Symbol 45
0x00,0x7F,0x09,0x09,0x09,0x01, // Symbol 46
0x00,0x3E,0x41,0x41,0x51,0x32, // Symbol 47
0x00,0x7F,0x08,0x08,0x08,0x7F, // Symbol 48
0x00,0x00,0x41,0x7F,0x41,0x00, // Symbol 49
0x00,0x30,0x40,0x41,0x41,0x3F, // Symbol 4A
0x00,0x7F,0x08,0x08,0x14,0x63, // Symbol 4B
0x00,0x7F,0x40,0x40,0x40,0x60, // Symbol 4C
0x00,0x7F,0x04,0x18,0x04,0x7F, // Symbol 4D
0x00,0x7F,0x04,0x08,0x10,0x7F, // Symbol 4E
0x00,0x3E,0x41,0x41,0x41,0x3E, // Symbol 4F
0x00,0x7F,0x09,0x09,0x09,0x06, // Symbol 50
0x00,0x3E,0x41,0x61,0x21,0x5E, // Symbol 51
0x00,0x7F,0x09,0x09,0x19,0x66, // Symbol 52
0x00,0x26,0x49,0x49,0x49,0x32, // Symbol 53
0x00,0x01,0x01,0x7F,0x01,0x01, // Symbol 54
0x00,0x3F,0x40,0x40,0x40,0x3F, // Symbol 55
0x00,0x07,0x18,0x60,0x18,0x07, // Symbol 56
0x00,0x1F,0x60,0x18,0x60,0x1F, // Symbol 57
0x00,0x63,0x14,0x08,0x14,0x63, // Symbol 58
0x00,0x03,0x04,0x78,0x04,0x03, // Symbol 59
0x00,0x61,0x51,0x49,0x45,0x43, // Symbol 5A
0x00,0x00,0x7F,0x41,0x00,0x00, // Symbol 5B
0x00,0x02,0x04,0x08,0x10,0x20, // Symbol 5C
0x00,0x00,0x41,0x7F,0x00,0x00, // Symbol 5D
0x00,0x00,0x00,0x00,0x00,0x00, // Symbol 5E
0x40,0x40,0x40,0x40,0x40,0x40, // Symbol 5F
0x00,0x00,0x00,0x01,0x02,0x00, // Symbol 60
0x00,0x20,0x54,0x54,0x54,0x78, // Symbol 61
0x00,0x7E,0x48,0x48,0x48,0x30, // Symbol 62
0x00,0x38,0x44,0x44,0x44,0x28, // Symbol 63
0x00,0x30,0x48,0x48,0x48,0x7E, // Symbol 64
0x00,0x38,0x54,0x54,0x54,0x18, // Symbol 65
0x00,0x10,0x7C,0x12,0x02,0x04, // Symbol 66
0x00,0x0C,0x52,0x52,0x3C,0x02, // Symbol 67
0x00,0x7E,0x08,0x08,0x08,0x70, // Symbol 68
0x00,0x00,0x00,0x74,0x00,0x00, // Symbol 69
0x00,0x40,0x80,0x80,0x74,0x00, // Symbol 6A
0x00,0x7E,0x10,0x10,0x10,0x6C, // Symbol 6B
0x00,0x00,0x02,0x7E,0x00,0x00, // Symbol 6C
0x00,0x7C,0x04,0x78,0x04,0x78, // Symbol 6D
0x00,0x7C,0x04,0x04,0x04,0x78, // Symbol 6E
0x00,0x38,0x44,0x44,0x44,0x38, // Symbol 6F
0x00,0xFC,0x24,0x24,0x24,0x18, // Symbol 70
0x00,0x18,0x24,0x24,0x24,0xFC, // Symbol 71
0x00,0x7C,0x08,0x04,0x04,0x08, // Symbol 72
0x00,0x48,0x54,0x54,0x54,0x20, // Symbol 73
0x00,0x08,0x3E,0x48,0x40,0x00, // Symbol 74
0x00,0x3C,0x40,0x40,0x40,0x3C, // Symbol 75
0x00,0x1C,0x20,0x40,0x20,0x1C, // Symbol 76
0x00,0x3C,0x40,0x30,0x40,0x3C, // Symbol 77
0x00,0x44,0x28,0x10,0x28,0x44, // Symbol 78
0x00,0x1C,0x20,0xA0,0xA0,0x7C, // Symbol 79
0x00,0x44,0x64,0x54,0x4C,0x44, // Symbol 7A
0x00,0x08,0x36,0x41,0x00,0x00, // Symbol 7B
0x00,0x00,0x00,0x7F,0x00,0x00, // Symbol 7C
0x00,0x00,0x41,0x36,0x08,0x00, // Symbol 7D
0x02,0x01,0x01,0x02,0x02,0x01, // Symbol 7E
0x00,0x7F,0x7F,0x7F,0x7F,0x7F}; // Symbol 7F
__flash char text0[]= "SONIK 2012";
__flash char text1[]= "Nikityan";
__flash char text2[]= "176x132 pixels, 16 bit mode";
void c75_alps_cmd(char cmd)
{
PORTB&=~(1<<RS); // RS=0
SPDR=cmd;
__delay_cycles(16+4);
}
void c75_alps_data16(char data_h, char data_l)
{
PORTB|=(1<<RS); // RS=1
SPDR=data_h;
__delay_cycles(16+4);
SPDR=data_l;
__delay_cycles(16+4);
}
void c75_alps_init(void)
{
__delay_cycles(F_CPU*0.1);// delay 100ms
PORTB|=(1<<RST); //Release Reset
__delay_cycles(F_CPU*0.057);// delay 57ms
PORTB&=~(1<<CS); // CS=0, chip selsect
c75_alps_cmd(0x00);
c75_alps_data16(0x00,0x01);
c75_alps_cmd(0x10);
c75_alps_data16(0x1F,0x92);
c75_alps_cmd(0x11);
c75_alps_data16(0x00,0x14);
c75_alps_cmd(0x00);
c75_alps_data16(0x00,0x01);
c75_alps_cmd(0x10);
c75_alps_data16(0x1F,0x92);
c75_alps_cmd(0x11);
c75_alps_data16(0x00,0x1C);
c75_alps_cmd(0x28);
c75_alps_data16(0x00,0x06);
c75_alps_cmd(0x02);
c75_alps_data16(0x00,0x00);
c75_alps_cmd(0x12);
c75_alps_data16(0x04,0x0F);
c75_alps_cmd(0x22);
for (int j=0; j<(132*176);j++) {c75_alps_data16(0x00,0x00);}//black
c75_alps_cmd(0x03);//Set Entry Mode
c75_alps_data16(0x78,0x30);
c75_alps_cmd(0x01);
c75_alps_data16(0x31,0xAF);//strange must be FF?
c75_alps_cmd(0x07);
c75_alps_data16(0x00,0x33);
PORTB|=(1<<CS); // CS=1 chip deselect
}
void c75_alps_put_char16(char x, char y, char symbol, int color, int bkcolor)
{
c75_alps_cmd(0x44);//Y range
c75_alps_data16(y+7,y);//Y2,Y1
c75_alps_cmd(0x47);//X range
c75_alps_data16(x+5,x);//X2,X1
c75_alps_cmd(0x21);//coordinates
c75_alps_data16(x,y);//X, Y
c75_alps_cmd(0x22);
int offset=6*(symbol-0x20);
for (char i=0;i<6;i++)
{
for (char j=0;j<8;j++) {if (((font6x8[offset+i]<<j)&0x80)==0x80) {c75_alps_data16(color>>8,color);} else {c75_alps_data16(bkcolor>>8,bkcolor);}}
}
}
void c75_alps_put_string16(char x, char y, char __flash * text, int color, int bkcolor)
{
char i=0;
char x0=0;
while (text[i]!=0)
{
c75_alps_put_char16(x+x0,y,text[i], color , bkcolor);
i++;
x0+=6;
}
}
void c75_alps_rect(char x1, char y1, char x2, char y2, int color)
{
c75_alps_cmd(0x44);//Y range
c75_alps_data16(y2,y1);//Y2,Y1
c75_alps_cmd(0x47);//X range
c75_alps_data16(x2,x1);//X2,X1
c75_alps_cmd(0x21);//coordinates
c75_alps_data16(x1,y1);//X, Y
c75_alps_cmd(0x22);
for (int i=(y2-y1+1)*(x2-x1+1);i>0;i--) c75_alps_data16(color>>8,color);
}
void main( void )
{
DDRB=0xFF; //PortB is output
PORTB=(1<<CS)|(1<<RS);
SPCR=(1<<MSTR)|(1<<SPE);//SPI Interface
SPSR=1;
c75_alps_init();
PORTB&=~(1<<CS); // CS=0, chip selsect
c75_alps_put_string16(32,120,text0, white, black);
c75_alps_put_string16(4+3,120-10,text2, cyan, black);
c75_alps_rect(0,22,175,65,gray);//gray box
c75_alps_rect(10,34,165,54,white);
c75_alps_rect(12,36,163,52,red);
c75_alps_put_string16(22,40,text1, white, red);
for (char i=0;i<8;i++)//draw color bars
{
c75_alps_rect(i*22,0,i*22+21,21,colorbars[i]);
}
for (char i=0;i<16;i++)//draw gradients
{
c75_alps_rect(i*11,66,i*11+10,75,i*2);//blue
c75_alps_rect(i*11,76,i*11+10,85,(i<<6)*2);//green
c75_alps_rect(i*11,86,i*11+10,95,(i<<11)*2);//red
}
PORTB|=(1<<CS); // CS=1 chip deselect
while(1)
{
}
}
Но здесь много лишнего. Что из этого кода достаточно взять для инициализации дисплея и вывода какой нибудь простенькой надписи? Я спрашиваю потому что когда я найду конкретный код для запуска, я смогу понять как он работает и как в него посылаются команды.
-
Foks
- Поставщик валерьянки для Кота
- Сообщения: 2108
- Зарегистрирован: Пт авг 29, 2008 16:28:19
- Откуда: Киев
Re: Дисплеи от мобильных телефонов- осцилограммы работы
Да вроде ничего особо лишнего там нет, только ваша же задача. Запустите хоть этот код, чтобы он работал, и разбирайтесь.
Giggity giggity goo!
Re: Дисплеи от мобильных телефонов- осцилограммы работы
LPH 9157-2 и Alps Solomon SSD1286 не одно и тоже. И в коде там лишнего не много. Пол текста знакогенератор.
C0FFEE=12648430
-
Foks
- Поставщик валерьянки для Кота
- Сообщения: 2108
- Зарегистрирован: Пт авг 29, 2008 16:28:19
- Откуда: Киев
Re: Дисплеи от мобильных телефонов- осцилограммы работы
Вот на это, кстати, внимания не обратил.eufs писал(а):Alps Solomon SSD1286
Giggity giggity goo!
Re: Дисплеи от мобильных телефонов- осцилограммы работы
Но команды то похожие? И можно запустить дисплей без подсветки временно?
Re: Дисплеи от мобильных телефонов- осцилограммы работы
Что значит похожие? или такие как надо или нет. Надо сравнивать. Особенно инициализацию. В ПО телефона закладывают подпрограммы работы с обоими дисплеями. Но они запросто могут быть разными. Просто при запуске проверяется тип и настраивают интерфейс под конкретный. А без подсветки плохо. Почти ничего не видно, только на отблеск. А что, 12В не откуда взять?
C0FFEE=12648430
Re: Дисплеи от мобильных телефонов- осцилограммы работы
И всё тот же вопрос: что нужно сделать минимум, чтоб загорелся дисплей lph9157-2. Я не могу его запустить.
-
Foks
- Поставщик валерьянки для Кота
- Сообщения: 2108
- Зарегистрирован: Пт авг 29, 2008 16:28:19
- Откуда: Киев
Re: Дисплеи от мобильных телефонов- осцилограммы работы
Всё тот же ответ: пока вы сами палец об палец не ударите, ничего не заработает.
Здесь максимум вы получите совет при наличии конкретного вопроса.
Почитайте документацию на ILI9163, он довольно похожий на LPH9157-2.
Здесь максимум вы получите совет при наличии конкретного вопроса.
Почитайте документацию на ILI9163, он довольно похожий на LPH9157-2.
Giggity giggity goo!
- radiokot__
- Мучитель микросхем
- Сообщения: 454
- Зарегистрирован: Вс янв 15, 2012 19:58:40
Re: Дисплеи от мобильных телефонов- осцилограммы работы
nikityan писал(а):И всё тот же вопрос: что нужно сделать минимум, чтоб загорелся дисплей lph9157-2. Я не могу его запустить.
Или немного тему почитать.
Про него уже столько написанно.
Ни один домашний кот незнает что он домашний.
Re: Дисплеи от мобильных телефонов- осцилограммы работы
Спойлер
#define ENABLE_BIT_DEFINITIONS#include <ioavr.h>
#include <intrinsics.h>
#define RST PB1
#define RS PB0
#define CS PB2
#define F_CPU 8000000
int main( void )
{
DDRD=255;
DDRB=255;
__delay_cycles(F_CPU*0.1);// delay 100ms
PORTB|=(1<<RST); //Release Reset
__delay_cycles(F_CPU*0.057);// delay 57ms
PORTB&=~(1<<CS); // CS=0, chip selsect
while (1) //Организовываем бесконечный цикл
{
PORTD|=(1<<6);
__delay_cycles(400000);
PORTD&=~(1<<6);
__delay_cycles(400000);
}
}
для простоты дела пересадил всё на Attiny2313. Думал что получится включить подсветку на дисплее, но пока без результатно. Не знаю как посылать команды. Ведь дисплей сидит не на аппаратном SPI, а на определённых ножках МК. Могу только дёргать 1 и 0.
-
Foks
- Поставщик валерьянки для Кота
- Сообщения: 2108
- Зарегистрирован: Пт авг 29, 2008 16:28:19
- Откуда: Киев
Re: Дисплеи от мобильных телефонов- осцилограммы работы
Откройте даташит ILI9163, там есть эпюры. Должно быть понятно, как передаются данные.
Giggity giggity goo!
Re: Дисплеи от мобильных телефонов- осцилограммы работы
Спойлер
#define ENABLE_BIT_DEFINITIONS#include <ioavr.h>
#include <intrinsics.h>
//LCD-экран от Siemens C75 (зелёный текстолит) подключён по SPI
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//настройки контактов LCD-экрана
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//линия ChipSelect
#define LCD_CS 2
//линия Reset
#define LCD_RESET 1
//линия команда/данные
#define LCD_RS 0
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//базовые цвета LCD-экрана
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#define LCD_RED 0xF800
#define LCD_GREEN 0x07E0
#define LCD_BLUE 0x001F
#define LCD_BLACK 0x0000
#define LCD_WHITE 0xFFFF
#define LCD_YELLOW 0xFFE0
#define LCD_CYAN 0x07FF
#define LCD_MAGENTA 0xF81F
#define LCD_BLACK 0x0000
//----------
//глобальные переменные
//----------
//----------
//прототипы функций
//----------
void LCD_Init(void);//инициализация LCD-экрана
unsigned char SPI_SendData(unsigned char value);//послать по SPI данные
unsigned char LCD_SendData8(unsigned char value);//послать 8-бит данных LCD-экрану
unsigned short LCD_SendData16(unsigned short value);//послать 16-бит данных LCD-экрану
unsigned char LCD_SendCommand(unsigned char command);//послать 8-бит команды LCD-экрану
void LCD_SetOutputRectangle(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2);//указать LCD-экрану прямоугольник вывода и начать процесс вывода
void LCD_SetPixel(unsigned short color);//установить пиксель в текущую позицию вывода LCD-экрана
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//общие функции
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//----------
//инициализация LCD-экрана
//----------
void LCD_Init(void)
{
//настраиваем порты
DDRB|=(1<<LCD_CS);
DDRB|=(1<<LCD_RS);
DDRB|=(1<<LCD_RESET);
//инициализируем экран
PORTB|=(1<<LCD_CS);
PORTB&=(0xff^(1<<LCD_RS));
PORTB&=(0xff^(1<<LCD_RESET));
PORTB&=(0xff^(1<<LCD_CS));
__delay_cycles(4000000);
PORTB|=(1<<LCD_RESET);
__delay_cycles(4000000);
LCD_SendCommand(0x01);//программный сброс
__delay_cycles(200000);
LCD_SendCommand(0x36);//Установка направлений заполнения прямоугольника CASET x PASET
LCD_SendData8(0x80);
LCD_SendCommand(0x11); //выход из спящего режима
__delay_cycles(200000);
LCD_SendCommand(0x3a); //установка глубины цвета
LCD_SendData8(0x5);//режим 16-бит
/*
Один параметр 0bXXXXXABC
ABC: 010 - 8bit/pixel (0bRRRGGGBB),
011 - 12bit/pixel (0bRRRRGGGG 0bBBBBRRRR 0bGGGGBBBB),
101 - 16bit/pixel (0bRRRRRGGG 0bGGGBBBBB)
*/
__delay_cycles(200000);
LCD_SendCommand(0x29); //включаем дисплей
}
//----------
//послать по SPI-данные
//----------
inline unsigned char SPI_SendData(unsigned char value)
{
SPDR=value;
while(!(SPSR&(1<<SPIF)));
return(SPDR);
}
//----------
//послать 8-бит данных LCD-экрану
//----------
inline unsigned char LCD_SendData8(unsigned char value)
{
PORTB|=(1<<LCD_RS);
return(SPI_SendData(value));
}
//----------
//послать 16-бит данных LCD-экрану
//----------
inline unsigned short LCD_SendData16(unsigned short value)
{
PORTB|=(1<<LCD_RS);
unsigned short r=SPI_SendData((value>>8)&0xff);
r=r<<8;
r|=SPI_SendData(value&0xff);
return(r);
}
//----------
//послать 8-бит команды LCD-экрану
//----------
inline unsigned char LCD_SendCommand(unsigned char command)
{
PORTB&=(0xff^(1<<LCD_RS));
return(SPI_SendData(command));
}
//----------
//указать LCD-экрану прямоугольник вывода и начать процесс вывода
//----------
inline void LCD_SetOutputRectangle(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2)
{
//устанавливаем первый и последний столбцы записи в память
LCD_SendCommand(0x2a);
LCD_SendData8(x1);
LCD_SendData8(x2);
LCD_SendCommand(0x2b);
LCD_SendData8(y1);
LCD_SendData8(y2);
//устанавливаем направление вывода
LCD_SendCommand(0x36);
LCD_SendData8(0);//сверху-вниз слева-направо, без инверсии
//запускаем процесс вывода пикселей
LCD_SendCommand(0x2c);
}
//----------
//установить пиксель в текущую позицию вывода LCD-экрана
//----------
inline void LCD_SetPixel(unsigned short color)
{
LCD_SendData16(color);
}
Нашёл код, чтоб запустить дисплей с зелёным текстолитом. Но испытываю я его на Attiny2313A. При компиляции IAR матюкается на
SPDR=value;
while(!(SPSR&(1<<SPIF)));
return(SPDR);
SPDR и SPIF не идентифицирует. Как обоёти эту приграду?
P.S. вообше хочу обойтись без аппаратного SPI, так как мне не удобно это схематически.
- U235
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Вт фев 21, 2012 20:42:26
- Откуда: Санкт-Петербург, Россия, Земля
Re: Дисплеи от мобильных телефонов- осцилограммы работы
nikityan писал(а):SPDR и SPIF не идентифицирует. Как обоёти эту приграду?
Читать даташит
Использовать программный SPI конечно можно, только обновление экрана будет происходить мучительно долго. Да и вряд ли в в 2к флеша влезет и шрифт и программа.
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...
Re: Дисплеи от мобильных телефонов- осцилограммы работы
Дисплей скорее всего мёртвый. Я нашёл другой дисплей, от Nokia 6610. Знаю точно что рабочий. Для начала нормальный дисплей? Может у кого есть уже "пройденные" сорцы кода на него?
- Вложения
-
- Изображение 002.jpg
- (16.88 КБ) 460 скачиваний
-
- Изображение 001.jpg
- (18.45 КБ) 498 скачиваний
Re: Дисплеи от мобильных телефонов- осцилограммы работы
Люди! Как организовать питание подсветки дисплея от 3.6 вольтового акумулятора? от 6-9 вольт.
- Вложения
-
- ABCD00011.JPG
- (74.75 КБ) 557 скачиваний
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: Дисплеи от мобильных телефонов- осцилограммы работы
Гуглите "step-up DC converter". Сразу можете поискать то же самое на микросхеме MC34063 - копеечный ширпотреб.
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

- U235
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Вт фев 21, 2012 20:42:26
- Откуда: Санкт-Петербург, Россия, Земля
Re: Дисплеи от мобильных телефонов- осцилограммы работы
MAX1680 как вариант получения двойного напряжения. Из обвязки - три конденсатора. Недостаток - выходное напряжение не стабилизированное.
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...