реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Кирилица на LCD смешивается!
VXDRV
сообщение Aug 13 2008, 12:12
Сообщение #16


Участник
*

Группа: Свой
Сообщений: 67
Регистрация: 5-02-07
Пользователь №: 25 074



Код
const unsigned char WinToLCD_Table[]={
0x00,    //000 Cимвол - User 0
0x01,    //001 Cимвол - User 1
0x02,    //002 Cимвол - User 2
0x03,    //003 Cимвол - User 3
0x04,    //004 Cимвол - User 4
0x05,    //005 Cимвол - User 5
0x06,    //006 Cимвол - User 6
0x07,    //007 Cимвол - User 7
0x08,    //008 Cимвол - User 0
0x09,    //009 Cимвол - User 1
0x0A,    //010 Cимвол - User 2
0x0B,    //011 Cимвол - User 3
0x0C,    //012 Cимвол - User 4
0x0D,    //013 Cимвол - User 5
0x0E,    //014 Cимвол - User 6
0x0F,    //015 Cимвол - User 7
0x20,    //016 Cимвол -
0x20,    //017 Cимвол -
0x20,    //018 Cимвол -
0x20,    //019 Cимвол -
0x20,    //020 Cимвол -
0x20,    //021 Cимвол -
0x20,    //022 Cимвол -
0x20,    //023 Cимвол -
0x20,    //024 Cимвол -
0x20,    //025 Cимвол -
0x20,    //026 Cимвол -
0x20,    //027 Cимвол -
0x20,    //028 Cимвол -
0x20,    //029 Cимвол -
0x20,    //030 Cимвол -
0x20,    //031 Cимвол -
0x20,    //032 Cимвол -
0x21,    //033 Cимвол - !
0x22,    //034 Cимвол - "
0x23,    //035 Cимвол - #
0x24,    //036 Cимвол - $
0x25,    //037 Cимвол - %
0x26,    //038 Cимвол - &
0x27,    //039 Cимвол - '
0x28,    //040 Cимвол - Левая скобка
0x29,    //041 Cимвол - Правая скобка
0x2A,    //042 Cимвол - *
0x2B,    //043 Cимвол - +
0x2C,    //044 Cимвол - ,
0x2D,    //045 Cимвол - -
0x2E,    //046 Cимвол - .
0x2F,    //047 Cимвол - /
0x30,    //048 Cимвол - 0
0x31,    //049 Cимвол - 1
0x32,    //050 Cимвол - 2
0x33,    //051 Cимвол - 3
0x34,    //052 Cимвол - 4
0x35,    //053 Cимвол - 5
0x36,    //054 Cимвол - 6
0x37,    //055 Cимвол - 7
0x38,    //056 Cимвол - 8
0x39,    //057 Cимвол - 9
0x3A,    //058 Cимвол - :
0x3B,    //059 Cимвол -;
0x3C,    //060 Cимвол - <
0x3D,    //061 Cимвол - =
0x3E,    //062 Cимвол - >
0x3F,    //063 Cимвол - ?
0x40,    //064 Cимвол - @
0x41,    //065 Cимвол - A
0x42,    //066 Cимвол - B
0x43,    //067 Cимвол - C
0x44,    //068 Cимвол - D
0x45,    //069 Cимвол - E
0x46,    //070 Cимвол - F
0x47,    //071 Cимвол - G
0x48,    //072 Cимвол - H
0x49,    //073 Cимвол - I
0x4A,    //074 Cимвол - J
0x4B,    //075 Cимвол - K
0x4C,    //076 Cимвол - L
0x4D,    //077 Cимвол - M
0x4E,    //078 Cимвол - N
0x4F,    //079 Cимвол - O
0x50,    //080 Cимвол - P
0x51,    //081 Cимвол - Q
0x52,    //082 Cимвол - R
0x53,    //083 Cимвол - S
0x54,    //084 Cимвол - T
0x55,    //085 Cимвол - U
0x56,    //086 Cимвол - V
0x57,    //087 Cимвол - W
0x58,    //088 Cимвол - X
0x59,    //089 Cимвол - Y
0x5A,    //090 Cимвол - Z
0x5B,    //091 Cимвол - Левая квадратная скобка
0x5C,    //092 Cимвол - Правая наклонная черта
0x5D,    //093 Cимвол - Правая квадратная скобка
0x5E,    //094 Cимвол - ^
0x5F,    //095 Cимвол - _
0x60,    //096 Cимвол - `
0x61,    //097 Cимвол - a
0x62,    //098 Cимвол - b
0x63,    //099 Cимвол - c
0x64,    //100 Cимвол - d
0x65,    //101 Cимвол - e
0x66,    //102 Cимвол - f
0x67,    //103 Cимвол - g
0x68,    //104 Cимвол - h
0x69,    //105 Cимвол - i
0x6A,    //106 Cимвол - j
0x6B,    //107 Cимвол - k
0x6C,    //108 Cимвол - l
0x6D,    //109 Cимвол - m
0x6E,    //110 Cимвол - n
0x6F,    //111 Cимвол - o
0x70,    //112 Cимвол - p
0x71,    //113 Cимвол - q
0x72,    //114 Cимвол - r
0x73,    //115 Cимвол - s
0x74,    //116 Cимвол - t
0x75,    //117 Cимвол - u
0x76,    //118 Cимвол - v
0x77,    //119 Cимвол - w
0x78,    //120 Cимвол - x
0x79,    //121 Cимвол - y
0x7A,    //122 Cимвол - z
0x7B,    //123 Cимвол - Левая фигурная скобка
0x7C,    //124 Cимвол - |
0x7D,    //125 Cимвол - Правая фигурная скобка
0x20,    //126 Cимвол -
0x20,    //127 Cимвол -
0x20,    //128 Cимвол -
0x20,    //129 Cимвол -
0x20,    //130 Cимвол -
0x20,    //131 Cимвол -
0x20,    //132 Cимвол -
0x20,    //133 Cимвол -
0x20,    //134 Cимвол -
0x20,    //135 Cимвол -
0x20,    //136 Cимвол -
0x20,    //137 Cимвол -
0x20,    //138 Cимвол -
0x20,    //139 Cимвол -
0x20,    //140 Cимвол -
0x20,    //141 Cимвол -
0x20,    //142 Cимвол -
0x20,    //143 Cимвол -
0x20,    //144 Cимвол -
0x20,    //145 Cимвол -
0x20,    //146 Cимвол -
0x20,    //147 Cимвол -
0x20,    //148 Cимвол -
0x20,    //149 Cимвол -
0x20,    //150 Cимвол -
0x20,    //151 Cимвол -
0x20,    //152 Cимвол -
0x20,    //153 Cимвол -
0x20,    //154 Cимвол -
0x20,    //155 Cимвол -
0x20,    //156 Cимвол -
0x20,    //157 Cимвол -
0x20,    //158 Cимвол -
0x20,    //159 Cимвол -
0x20,    //160 Cимвол -
0x20,    //161 Cимвол -
0x20,    //162 Cимвол -
0x20,    //163 Cимвол -
0x20,    //164 Cимвол -
0x20,    //165 Cимвол -
0x20,    //166 Cимвол -
0x20,    //167 Cимвол -
0xA2,    //168 Cимвол - Ё
0x20,    //169 Cимвол -
0x20,    //170 Cимвол -
0x20,    //171 Cимвол -
0x20,    //172 Cимвол -
0x20,    //173 Cимвол -
0x20,    //174 Cимвол -
0x20,    //175 Cимвол -
0x20,    //176 Cимвол -
0x20,    //177 Cимвол -
0x20,    //178 Cимвол -
0x20,    //179 Cимвол -
0x20,    //180 Cимвол -
0x20,    //181 Cимвол -
0x20,    //182 Cимвол -
0x20,    //183 Cимвол -
0xB5,    //184 Cимвол - ё
0x20,    //185 Cимвол -
0x20,    //186 Cимвол -
0x20,    //187 Cимвол -
0x20,    //188 Cимвол -
0x20,    //189 Cимвол -
0x20,    //190 Cимвол -
0x20,    //191 Cимвол -
0x41,    //192 Cимвол - А
0xA0,    //193 Cимвол - Б
0x42,    //194 Cимвол - В
0xA1,    //195 Cимвол - Г
0xE0,    //196 Cимвол - Д
0x45,    //197 Cимвол - Е
0xA3,    //198 Cимвол - Ж
0xA4,    //199 Cимвол - З
0xA5,    //200 Cимвол - И
0xA6,    //201 Cимвол - Й
0x4B,    //202 Cимвол - К
0xA7,    //203 Cимвол - Л
0x4D,    //204 Cимвол - М
0x48,    //205 Cимвол - Н
0x4F,    //206 Cимвол - О
0xA8,    //207 Cимвол - П
0x50,    //208 Cимвол - Р
0x43,    //209 Cимвол - С
0x54,    //210 Cимвол - Т
0xA9,    //211 Cимвол - У
0xAA,    //212 Cимвол - Ф
0x58,    //213 Cимвол - Х
0xE1,    //214 Cимвол - Ц
0xAB,    //215 Cимвол - Ч
0xAC,    //216 Cимвол - Ш
0xE2,    //217 Cимвол - Щ
0xAD,    //218 Cимвол - Ъ
0xAE,    //219 Cимвол - Ы
0x62,    //220 Cимвол - Ь
0xAF,    //221 Cимвол - Э
0xB0,    //222 Cимвол - Ю
0xB1,    //223 Cимвол - Я
0x61,    //224 Cимвол - а
0xB2,    //225 Cимвол - б
0xB3,    //226 Cимвол - в
0xB4,    //227 Cимвол - г
0xE3,    //228 Cимвол - д
0x65,    //229 Cимвол - е
0xB6,    //230 Cимвол - ж
0xB7,    //231 Cимвол - з
0xB8,    //232 Cимвол - и
0xB9,    //233 Cимвол - й
0xBA,    //234 Cимвол - к
0xBB,    //235 Cимвол - л
0xBC,    //236 Cимвол - м
0xBD,    //237 Cимвол - н
0x6F,    //238 Cимвол - о
0xBE,    //239 Cимвол - п
0x70,    //240 Cимвол - р
0x63,    //241 Cимвол - с
0xBF,    //242 Cимвол - т
0x79,    //243 Cимвол - у
0xE4,    //244 Cимвол - ф
0x78,    //245 Cимвол - х
0xE5,    //246 Cимвол - ц
0xC0,    //247 Cимвол - ч
0xC1,    //248 Cимвол - ш
0xE6,    //249 Cимвол - щ
0xC2,    //250 Cимвол - ъ
0xC3,    //251 Cимвол - ы
0xC4,    //252 Cимвол - ь
0xC5,    //253 Cимвол - э
0xC6,    //254 Cимвол - ю
0xC7    //255 Cимвол - я
};

unsigned char ConvertByteToLCD(unsigned char Byte_LCD)
{
    return WinToLCD_Table[Byte_LCD];
}


Ещё табличка - работает шустрее, вероятно, чем прошлая... Специфичные знаки игнорированы.
Go to the top of the page
 
+Quote Post
_Олег_
сообщение Aug 13 2008, 12:18
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 89
Регистрация: 5-10-07
Пользователь №: 31 098



Цитата(VXDRV @ Aug 13 2008, 16:12) *
Ещё табличка - работает шустрее, вероятно, чем прошлая... Специфичные знаки игнорированы.


а как, например, с этой табличкой что-то вывести на LCD?
Go to the top of the page
 
+Quote Post
SysRq
сообщение Aug 13 2008, 13:15
Сообщение #18


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Добавлю свой вариант:

Код
#define _UNK 0xFF
static const BYTE CP1251_to_HD44780[256] =
{
    // NUL   STX   SOT   ETX   EOT   ENQ   ACK   BEL   BS    HT    LF    VT    FF    CR    SO    SI
       _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
    // DLE   DC1   DC2   DC3   DC4   NAK   SYN   ETB   CAN   EM    SUB   ESC   FS    GS    RS    US
       _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
    // SP    !     "     #     $     %     &     '     (     )     *     +     ,     -     .     /
       0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
    // 0     1     2     3     4     5     6     7     8     9     :    ;     <     =     >     ?
       0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
    // @     A     B     C     D     E     F     G     H     I     J     K     L     M     N     O
       0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
    // P     Q     R     S     T     U     V     W     X     Y     Z     [     \     ]     ^     _
       0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, _UNK, 0x5D, 0x5E, 0x5F,
    // `     a     b     c     d     e     f     g     h     i     j     k     l     m     n     o
       0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
    // p     q     r     s     t     u     v     w     x     y     z     {     |     }     ~     DEL
       0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, _UNK, _UNK, _UNK, 0xE9, _UNK,
    //
       _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
    //
       _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK,
    //                                           §     Ё                 «
       _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0xFD, 0xA2, _UNK, _UNK, 0xC8, _UNK, _UNK, _UNK, _UNK,
    // °                                         ·     ё                 »
       0xEF, _UNK, _UNK, _UNK, _UNK, _UNK, _UNK, 0xDF, 0xB5, _UNK, _UNK, 0xC9, _UNK, _UNK, _UNK, _UNK,
    // А     Б     В     Г     Д     Е     Ж     З     И     Й     К     Л     М     Н     О     П
       0x41, 0xA0, 0x42, 0xA1, 0xE0, 0x45, 0xA3, 0xA4, 0xA5, 0xA6, 0x4B, 0xA7, 0x4D, 0x48, 0x4F, 0xA8,
    // Р     С     Т     У     Ф     Х     Ц     Ч     Ш     Щ     Ъ     Ы     Ь     Э     Ю     Я  
       0x50, 0x43, 0x54, 0xA9, 0xAA, 0x58, 0xE1, 0xAB, 0xAC, 0xE2, 0xAD, 0xAE, 0x62, 0xAF, 0xB0, 0xB1,
    // а     б     в     г     д     е     ж     з     и     й     к     л     м     н     о     п
       0x61, 0xB2, 0xB3, 0xB4, 0xE3, 0x65, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0x6F, 0xBE,
    // р     с     т     у     ф     х     ц     ч     ш     щ     ъ     ы     ь     э     ю     я
       0x70, 0x63, 0xBF, 0x79, 0xE4, 0x78, 0xE5, 0xC0, 0xC1, 0xE6, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7
};

void CE110_LCD_Write(BYTE c)
{
    I2C_Start();
    I2C_WriteByte(I2C_ACCESS_WRITE(CE110_I2C_ADDRESS));
    I2C_WriteByte(CE110_I2C_CTL_LCD(CE110_CTL_Multi, CE110_CTL_RS, CE110_CTL_NORW));
    I2C_WriteByte(CP1251_to_HD44780[c]);
    I2C_Stop();
}

void CE110_LCD_WriteString(char *str)
{
    BYTE *pos = (BYTE *) str;
    
    I2C_Start();
    I2C_WriteByte(I2C_ACCESS_WRITE(CE110_I2C_ADDRESS));
    I2C_WriteByte(CE110_I2C_CTL_LCD(CE110_CTL_Multi, CE110_CTL_RS, CE110_CTL_NORW));    
    
    while(*pos)
    {
        I2C_WriteByte(CP1251_to_HD44780[*pos]);
        pos++;
    }
    
    I2C_Stop();
}

void CE110_LCD_WriteString_CSEG(prog_uchar *str)
{
    prog_uchar *pos = str;
    BYTE val;
    
    I2C_Start();
    I2C_WriteByte(I2C_ACCESS_WRITE(CE110_I2C_ADDRESS));
    I2C_WriteByte(CE110_I2C_CTL_LCD(CE110_CTL_Multi, CE110_CTL_RS, CE110_CTL_NORW));        
    
    do
    {
        val = pgm_read_byte_far((int) pos);
        if(val)
        {
            I2C_WriteByte(CP1251_to_HD44780[val]);
            pos++;
        }
    } while(val);
    
    I2C_Stop();
}


Ну и пример использования:
Код
prog_uchar FD_TimeFmtStr[] = "Время, ЧЧ:ММ: "; // все в обычной кодировке Windows, 1251

CE110_LCD_WriteString_CSEG(FD_TimeFmtStr);

CE110_LCD_Write('Ы');

CE110_LCD_WriteString("Ыыы!");


Правда, ежели требуется максимум быстродействия, то лучше без преобразований лишних... sad.gif
Go to the top of the page
 
+Quote Post
VXDRV
сообщение Aug 13 2008, 13:31
Сообщение #19


Участник
*

Группа: Свой
Сообщений: 67
Регистрация: 5-02-07
Пользователь №: 25 074



Цитата(_Олег_ @ Aug 13 2008, 18:18) *
а как, например, с этой табличкой что-то вывести на LCD?

В последних проектах использую RTOS SALVO. Например, задача по выводу на LCD 16x2:

Код
void Task_LCDOut(void)
{
    OS_Delay(16);
    WriteIR(0x30);
    OS_Delay(5);
    WriteIR(0x30);
    OS_Delay(5);
    WriteIR(0x30);
    OS_Delay(5);
    WriteIR(0x38);
    OS_Delay(5);
    WriteIR(0x80);
    OS_Delay(5);
    WriteIR(0x0C);
    OS_Delay(5);
    WriteIR(0x06);            while (WaitReady()==0) {OS_Yield();};

// Зашиваем сердечко в LCD
    WriteIR(0x40);            while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00000000);    while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00001010);    while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00011111);    while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00011111);    while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00001110);    while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00000100);    while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00000000);    while (WaitReady()==0) {OS_Yield();};
    WriteDR(0b00000000);    while (WaitReady()==0) {OS_Yield();};
    for (;;)
    {
        OS_Delay(2);

        if (LCD_ACTION==34) {LCD_ACTION=0;}
        if (LCD_ACTION==0)
        {
            if (WaitReady()==1) {WriteIR(0x80);} else {LCD_ACTION=255;}
        }
        if (LCD_ACTION==17)
        {
            if (WaitReady()==1) {WriteIR(0xC0);} else {LCD_ACTION=16;}
        }
        if ((LCD_ACTION>=1)&&(LCD_ACTION<=16))
        {
            if (WaitReady()==1)
            {
                WriteDR(ConvertByteToLCD(LCD_CHAR[LCD_ACTION-1]));
            }
            else
            {
                --LCD_ACTION;
            }
        }
        if ((LCD_ACTION>=18)&&(LCD_ACTION<=33))
        {
            if (WaitReady()==1)
            {
                WriteDR(ConvertByteToLCD(LCD_CHAR[LCD_ACTION-2]));
            }
            else
            {
                --LCD_ACTION;
            }
        }
        ++LCD_ACTION;
    }
}


LCD_CHAR[0...31] - буфер (unsigned char) в RAM;
LCD_ACTION - счётчик действий;
За проход задачи обновляется один символ.
Первая строка символы с 0 по 15, вторая с 16 по 31.

Дополнительные функции (используемые в других задачах):

Код
void CopyROMtoLCDBuff(const unsigned char *StrIn, unsigned char *LCD_Buff)

{
    while (*StrIn)
    {
        *(LCD_Buff++)=*(StrIn++);
    }
}

void CopyRAMtoLCDBuff(unsigned char *StrIn, unsigned char *LCD_Buff)
{
    while (*StrIn)
    {
        *(LCD_Buff++)=*(StrIn++);
    }
}

unsigned char length(unsigned char *StrIn)
{
    unsigned char L;
    L=0;
    while (*StrIn)
    {
        StrIn++;
        L++;
    }
    return L;
}


Например вывод текста в буфер LCD:

Код
const unsigned char Message_MEASURING[]="Measuring...";
const unsigned char Message_STATE2[]="Перенапряжение";


Вызов:

Код
pLCD_CHAR=&LCD_CHAR[0];
CopyROMtoLCDBuff(Message_MEASURING, pLCD_CHAR);
pLCD_CHAR=&LCD_CHAR[16];
CopyROMtoLCDBuff(Message_STATE2, pLCD_CHAR);


, где pLCD_CHAR - указатель на буфер LCD. Выводятся сообщения начиная с нулевого и с шестнадцатого символа (Выводится в верхней строке - "Measuring...", в нижней - "Перенапряжение").

Из оперативной памяти (например, изменяющиеся переменные - должны завершаться нулём):

Код
pITOA_BUFF=&ITOA_BUFF[0];
pLCD_CHAR=&LCD_CHAR[10];
itoa10(pITOA_BUFF, HR_Temp);
CopyRAMtoLCDBuff(pITOA_BUFF, pLCD_CHAR);


- Выводятся с 10 позиции цифры, разложенные в ITOA_BUFF.
Или тупо - присвоением:

Код
pITOA_BUFF=&ITOA_BUFF[0];
LCD_CHAR[3]=ITOA_BUFF[0];
LCD_CHAR[4]=ITOA_BUFF[1];
LCD_CHAR[5]='.';
LCD_CHAR[6]=ITOA_BUFF[2];


- Выводятся цифры из ITOA_BUFF с разделительной точкой.

Кстати, не забываем затирать старую инфу в буфере LCD_CHAR, записывая код 0x20, при обновлении её. При этом происходит постоянное обновление экрана. Необходимо переписывать только LCD_CHAR.
Go to the top of the page
 
+Quote Post
Kolia
сообщение Aug 13 2008, 13:49
Сообщение #20


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



Пользуй мою табличку - она меньше требует памяти, а по скорости практически не уступает SysRq VXDRV
зато экономия флэхи 64 байта вместо 256
Go to the top of the page
 
+Quote Post
VXDRV
сообщение Aug 13 2008, 13:57
Сообщение #21


Участник
*

Группа: Свой
Сообщений: 67
Регистрация: 5-02-07
Пользователь №: 25 074



Цитата(Kolia @ Aug 13 2008, 19:49) *
Пользуй мою табличку - она меньше требует памяти, а по скорости практически не уступает SysRq VXDRV
зато экономия флэхи 64 байта вместо 256

Ну да... )))
При том, что я повесил проект на ось - о тормозах говорить мне безсмысленно. )))
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 13 2008, 19:37
Сообщение #22


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(SysRq @ Aug 13 2008, 16:15) *
Правда, ежели требуется максимум быстродействия, то лучше без преобразований лишних... sad.gif

Преобразований там кот наплакал и на быстродействие они не влияют, а вот тормозов в вашей реализации от I2C_Start ... I2C_Stop хватает. Если требуется макс быстродейтсвие - обслуживайте I2C шину по прерыванию.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Aug 13 2008, 20:08
Сообщение #23


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(defunct @ Aug 13 2008, 23:37) *
...а вот тормозов в вашей реализации от I2C_Start ... I2C_Stop хватает. Если требуется макс быстродейтсвие - обслуживайте I2C шину по прерыванию.

Всякие страшные аргументы функции I2C_WriteByte - это константы, они известны в compile-time (работа с этим девайсом). Реализация I2C софтверная, мастер; под SDA и SCL отвели две ноги порта, прерываний мне не перепало, набортный TWI тоже не у дел (я лишь программер, железо получаю готовое).
Чем улучшить?


Извините за offtopic
Go to the top of the page
 
+Quote Post
defunct
сообщение Aug 13 2008, 20:36
Сообщение #24


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(SysRq @ Aug 13 2008, 23:08) *
Чем улучшить?

Тогда (в плане быстродействия) - ничем. Потому что по сравнению с софтверным обслуживанием I2C шины, преобразованием символов можно принебречь. При очень большом желании все преобразрования можно выполнить в цикле ожидания готовности шины на I2C_Start().

PS: реализация(стиль) у вас красивая, а вот выводы о быстродействии - сомнительные.
Go to the top of the page
 
+Quote Post
_Олег_
сообщение Aug 14 2008, 04:06
Сообщение #25


Частый гость
**

Группа: Участник
Сообщений: 89
Регистрация: 5-10-07
Пользователь №: 31 098



Спасибо за ответы, добавил нули в конце строк для вывода на LCD, теперь выводятся нормально.
Буду продолжать совершенствовать свою конструкцию.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Aug 14 2008, 06:50
Сообщение #26


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Подкину Вам и свой вариант вывода кириллицы на жк-индикаторы. программа работает и в CVAVR и в IAR (конечно с учётом синтаксиса в обоих компиляторах)

Пример использования

__flash unsigned char TestString[17] = {"Тэст Test "};
WriteStringToDispley(&TestString[0]);

P.S. Для жк 16х2 каждая строка занимает 17 байт (16 символов плюс 1 окончания строки). Программа пишет 16 символов, но не сложно ввести проверку на символ окончания строки и писать только то что нужно. Надеюсь кому-нибудь моя программа поможет smile.gif
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Aug 14 2008, 07:10
Сообщение #27


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(mempfis_ @ Aug 14 2008, 10:50) *
Пример использования
__flash unsigned char TestString[17] = {"Тэст Test "};

Не Тэст а Тест!!!

Велик и могуч русский язык....


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
_Олег_
сообщение Aug 14 2008, 07:15
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 89
Регистрация: 5-10-07
Пользователь №: 31 098



Цитата(mempfis_ @ Aug 14 2008, 10:50) *
Подкину Вам и свой вариант вывода кириллицы на жк-индикаторы. программа работает и в CVAVR и в IAR (конечно с учётом синтаксиса в обоих компиляторах)

Пример использования

__flash unsigned char TestString[17] = {"Тэст Test "};
WriteStringToDispley(&TestString[0]);

P.S. Для жк 16х2 каждая строка занимает 17 байт (16 символов плюс 1 окончания строки). Программа пишет 16 символов, но не сложно ввести проверку на символ окончания строки и писать только то что нужно. Надеюсь кому-нибудь моя программа поможет smile.gif


Спасибо, обязательно посмотрю.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Aug 14 2008, 08:39
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(demiurg_spb @ Aug 14 2008, 11:10) *
Не Тэст а Тест!!!

Велик и могуч русский язык....


laughing.gif
согласен правильно тест
писал на скорую руку....
Go to the top of the page
 
+Quote Post
GDI
сообщение Aug 14 2008, 09:14
Сообщение #30


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



2SysRq
Цитата
(я лишь программер, железо получаю готовое).
Чем улучшить?

Влиять на разработчиков и приучать их вешать всё на аппаратные интерфейсы. Мне знакома подобная ситуация, сам был в такой. Благоприятному взаимодействию очень помогают знания схемотехники у программиста.

2mempfis_
Тогда уж не
Цитата
WriteStringToDispley(&TestString[0]);
, а
Цитата
WriteStringToDisplay(&TestString[0]);
По английски тоже лучше без ошибок писать smile.gif


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 00:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01582 секунд с 7
ELECTRONIX ©2004-2016