MicroCHIP.RU
Главная Документация Отладочные средства Справочник Поиск Ссылки
 Новости   Конференция   Контакты 
 

Нужна помощь Tic 149

 Нoвaя темa  |  Наверх  |  Перейти к теме  |  Поиск  |  Правила  |  Вход 

ВНИМАНИЕ!
Вы просматриваете архив форума.

Этот форум работает только в режиме просмотра и поиска.

Действующий форум переведен на новый движок и
находится по адресу www.microchip.su

 Нужна помощь Tic 149
Автор: DenisPic ()
Дата:   22/11/2006 16:58

Всем добрый день. Не удается проинициализировать дисплей тик149. Подключил
следующим образом.
1 - тонтал на 1 Мкф на землю
2 - сброс
3 - +5в
4 - SDA
5 - Gnd
6 - SCL
Контакты смотрят вниз (как на плате)
вот код инициализации. Все по даташнику:
i2c_start();
i2c_write(0b01111000);                      // Адрес 78
i2c_write(0x80); i2c_write(0b00000001);
i2c_write(0x80); i2c_write(0b00010000); 
i2c_write(0x80); i2c_write(0b00001110);	
i2c_write(0x80); i2c_write(0b00010010); 
//i2c_write(0x80); i2c_write(0b00000110);
i2c_write(0x80); i2c_write(0b00001010); 
i2c_write(0x80); i2c_write(0b10000100); 
i2c_write(0x80); i2c_write(0b00000001);
i2c_write(0x80); i2c_write(0b00001101);	
i2c_write(0x80); i2c_write(0b00001001);	 
i2c_write(0x80); i2c_write(0b00010010);	 
i2c_write(0x80); i2c_write(0b10101000);	
i2c_write(0x80); i2c_write(0b00000111);	    
i2c_stop();


Подскажите пожалуйста, мож я что проглядел


 
 ответ
Автор: Vova ()
Дата:   22/11/2006 19:11

1. VLCD : керамический конденсатор "на землю" ~1..4.7мкФ
2. RES  : сброс драйвера лог.нулем, если не предполагается
          программный сброс со стороны хост-контроллера,
          то соединить с VDD
3. VDD  : +5В
4. SDA  : I2C "данные"
5. GND  : "земля"
6. SCL  : I2C "клок"


#define LCD_RESET   (RC5)
#define LCD_ADDR    (0x78)

/*  -------------------------------------------------------------------------
 *  инициализация драйвера PCF8535
 */
        LCD_RESET = 1;          // вывели lcd из ресета

        i2c_start();

        i2c_write(LCD_ADDR);        // адрес
        i2c_write(0b00000000);      // control byte
        i2c_write(0x01);            // на основн стр

        i2c_write(0b00001110);      // на стр 110
        i2c_write(0b00010010);      // BIAS = 1/9
        i2c_write(0b10000100);      // MUX = 1/65
        i2c_write(0b00000100);      // D = 0, E = 0;
        i2c_write(0b00100100);      // IB = 1
//      i2c_write(0b00100000);      // IB = 0
        i2c_write(0b00001110);      // MX = 1, MY = 1;
//      i2c_write(0b00001100);      // MX = 1, MY = 0;

        i2c_write(0x01);            // на основн стр
        i2c_write(0b00010000);      // PD = 0, V = 0; горизонтальная адресация
//      i2c_write(0b00010010);      // PD = 0, V = 0; вертикальная

        i2c_write(0b00001011);      // на стр 011
        i2c_write(0b01011000);      // TRS = 1, BRS = 1;
        i2c_write(0b00000101);      // DM = 1

        delay_ms(1);

        i2c_write(0x01);            // на основн стр
        i2c_write(0b00001101);      // на стр 101

        i2c_write(0b00001000);      // S[1;0] = 00, mul factor = 2
//      i2c_write(0b00000110);      // PRS = 1, Vlcd programing range high
        i2c_write(0b00000100);      // PRS = 0, Vlcd programing range low

        i2c_write(61 | 0x80);       // установка напряжения
        i2c_write(0b00000101);      // включение генератора

        delay_ms(1);                // should be более 20 мкс
        i2c_write(0b00001001);      // S[1;0] = 01, mul factor = 3
        delay_ms(1);
        i2c_write(0b00001010);      // S[1;0] = 10, mul factor = 4
        delay_ms(1);
        i2c_write(0b00001011);      // S[1;0] = 11, mul factor = 5

        i2c_write(0x01);            // на основн стр
        i2c_write(0b00001011);      // на стр 011

        i2c_write(0b00000100);      // DM = 0

        i2c_write(0x01);            // на основн стр
        i2c_write(0b00001110);      // на стр 110
        i2c_write(0b00000110);      // D = 1, E = 0; normal

        i2c_stop();

/*  -------------------------------------------------------------------------
 *  очистка ОЗУ драйвера
 */
        i2c_start();

        i2c_write(LCD_ADDR);        // адрес
        i2c_write(0b01000000);      // control byte

        for(qwe = 0; qwe < 1064; qwe++)
            i2c_write(0x00);

        i2c_stop();

/*  -------------------------------------------------------------------------
 *  картинка на индикатор
 */
        i2c_start();

        i2c_write(LCD_ADDR);           // адрес
        i2c_write(0b00000000);         // control byte

        i2c_write(0x01);               // на основн стр
        i2c_write(0b01000000);         // Y = 0;
        i2c_write(0b10000000);         // X = 0;

        i2c_restart();
    
        i2c_write(LCD_ADDR);           // адрес
        i2c_write(0b01000000);         // control byte
    
        pic = qweqwe;   
        for(qwe = 0; qwe < 1064; qwe++)
            i2c_write(*pic++);

        i2c_stop();

/*  -------------------------------------------------------------------------
 */


const unsigned char qweqwe[1064] = { 
    0 ,  7 ,  8 , 16 , 16 , 16 , 16 , 16 ,  0 ,  0
 ,  0 ,  4 ,  4 ,  4 ,  4 ,  3 ,  0 ,  7 ,  2 ,  4
 ,  7 ,  2 ,  4 ,  7 ,  0 ,  7 ,  2 ,  4 ,  7 ,  2
 ,  4 ,  7 ,  0 ,  0 ,  0 ,  4 ,  4 ,  4 ,  4 ,  3
 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 , 14 , 18 , 17 , 17 , 16 , 16 ,  0 ,  0 ,  7 ,  2
 ,  4 ,  4 ,  4 ,  3 ,  0 ,  0 ,127 ,  2 ,  4 ,  4
 ,  4 ,  3 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 , 16 , 16 , 16 , 63 ,  0 ,  0 ,  0 ,  0 ,  0 , 32
 , 34 , 34 , 34 , 29 ,  0 ,  0 ,  0 , 32 , 34 , 34
 , 34 , 29 ,  0 ,  0 ,  4 ,  2 ,  1 ,  1 ,  2 ,  4
 ,  0 ,  0 , 15 , 17 , 34 , 34 , 34 ,  1 ,  0 ,  0
 ,  1 ,  2 , 12 , 16 , 63 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 ,  0 ,192 , 32 , 16 , 16 ,144 ,144
 ,240 ,  0 ,  0 , 96 ,144 ,144 ,144 ,144 ,240 , 16
 ,240 ,  0 ,  0 ,240 ,  0 ,  0 ,240 ,  0 ,240 ,  0
 ,  0 ,240 ,  0 ,  0 ,240 ,  0 ,  0 , 96 ,144 ,144
 ,144 ,144 ,240 , 16 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 , 16 , 16 , 16 , 16 ,144 ,224 ,  0
 ,  0 ,254 , 32 , 16 , 16 , 16 ,224 ,  0 ,  0 ,240
 , 32 , 16 , 16 , 16 ,224 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  3 , 18 , 18 , 18 ,242 , 18 , 18 , 18
 ,  2 ,  2 , 18 , 18 , 18 , 18 ,226 ,  2 ,  2 ,  2
 , 18 , 18 , 18 , 18 ,226 ,  2 ,  2 , 18 , 34 ,194
 ,194 , 34 , 18 ,  2 ,  2 ,194 , 34 , 18 , 18 , 18
 ,226 ,  2 ,  2 ,130 ,130 ,130 ,130 ,242 ,130 ,  2
 ,  3 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 ,  0 ,  3 ,  7 , 15 , 15 , 31 , 63
 , 63 , 63 , 63 ,127 ,127 ,127 ,127 ,127 , 63 , 63
 , 63 , 63 , 31 , 15 , 15 ,  7 ,  3 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  1 ,  1
 ,  3 ,  7 ,  7 , 15 , 31 , 31 , 63 , 63 , 31 , 31
 , 15 ,  7 ,  7 ,  3 ,  1 ,  1 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  7 ,  4 ,  4
 ,  4 ,  4 ,  4 ,  4 ,  4 ,255 ,  4 ,  4 ,  4 ,  4
 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4
 ,  4 ,  4 ,  4 ,  4 ,  4 ,127 , 68 , 68 , 68 , 68
 , 68 , 68 ,127 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4
 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4
 ,  4 ,  4 ,  4 ,255 ,  4 ,  4 ,  4 ,  4 ,  7 ,  0
 ,  0 ,  0 ,  0 ,  0 , 15 ,127 ,255 ,255 ,255 ,255
 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255
 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255
 ,255 ,127 , 15 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,128 ,128 ,128 ,128 ,128 ,128 ,128 ,255 ,255 ,255
 ,255 ,255 ,255 ,255 ,128 ,128 ,128 ,128 ,128 ,128
 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,254 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2 ,255 ,  2
 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2
 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2 ,255 ,  2
 ,  2 ,  2 ,  2 ,  2 ,  2 ,255 ,  2 ,  2 ,  2 ,  2
 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2
 ,  2 ,  2 ,  2 ,  2 ,  2 ,  2 ,255 ,  2 ,  2 ,  2
 ,  2 ,254 ,  0 ,  0 ,  0 ,  0 ,  0 ,128 ,240 ,248
 ,254 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255
 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255
 ,255 ,255 ,254 ,248 ,240 ,128 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 ,  8 , 12 , 12 , 14 , 15 , 15 , 15
 ,255 ,255 ,255 ,255 ,255 ,255 ,255 , 15 , 15 , 14
 , 12 , 12 ,  8 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,255 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,255 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,255 ,  0
 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,255
 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 ,  0 ,  0 ,128 ,128 ,192 ,224 ,224
 ,224 ,224 ,240 ,240 ,240 ,240 ,240 ,224 ,224 ,224
 ,224 ,192 ,128 ,128 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,128 ,192 ,192 ,224 ,224 ,192 ,192 ,128
 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 ,  0 ,252 ,  4 ,  4 ,  4 ,  4 ,  4
 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4
 ,  4 ,  4 ,  4 ,  4 ,228 , 36 , 36 , 36 , 36 , 36
 , 36 ,228 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4
 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4 ,  4
 ,  4 ,  4 ,252 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 , 15 ,  8 ,  8 , 15 ,  0 ,  0 , 15 ,  4
 ,  8 ,  8 ,  8 ,  7 ,  0 ,  0 ,  0 ,  9 ,  9 ,  9
 ,  9 ,  7 ,  0 ,  0 , 15 ,128 , 65 , 66 , 68 ,143
 ,  0 ,  0 , 15 ,  9 ,  9 ,  9 ,  9 ,  6 ,  0 ,  0
 ,  3 , 13 ,  9 ,  9 ,  9 ,  7 ,  0 ,  0 , 15 ,  4
 ,  8 ,  8 ,  8 ,  7 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 , 63 , 33 , 33 , 33 , 34 , 30 ,  0 , 15
 , 16 , 32 , 32 , 32 , 32 , 32 ,  0 ,  0 , 63 , 34
 , 34 , 34 , 34 , 32 ,  0 ,  0 , 57 , 70 , 68 , 68
 , 74 , 49 ,  0 ,  0 ,  0 ,124 , 68 , 68 , 66 , 67
 ,  0 ,  0 ,  0 , 64 , 68 , 68 , 68 , 59 ,  0 ,  0
 ,  0 ,124 , 68 , 68 , 66 , 67 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 , 56 , 32 ,224 , 32 , 32 , 32 ,224 , 56
 ,  0 ,252 , 64 , 32 , 32 , 32 ,192 ,  0 ,  0 ,192
 , 32 , 32 , 32 , 32 ,224 , 32 ,  0 ,224 , 64 ,128
 ,  0 ,  0 ,224 ,  0 ,  0 ,224 , 32 , 32 , 32 , 32
 ,192 ,  0 ,  0 ,192 , 32 , 32 , 32 , 32 , 32 ,  0
 ,  0 ,252 , 64 , 32 , 32 , 32 ,192 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 ,  0 ,  0 ,224 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,128 , 64 , 32 , 32 , 32 , 32 , 32 ,  0
 ,  0 ,224 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,192
 , 32 , 32 , 32 , 32 ,192 ,  0 ,  0 ,  0 , 32 , 32
 , 32 , 32 ,192 ,  0 ,  0 ,  0 , 32 , 32 , 32 , 32
 ,192 ,  0 ,  0 ,  0 , 32 , 32 , 32 , 32 ,192 ,  0
 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0
 ,  0 ,  0 ,  0 ,  0
 };



 
 еще кусочек
Автор: Vova ()
Дата:   22/11/2006 19:18

недоделанное. сыро.


tic13364.h

/*  -------------------------------------------------------------------------
    18.07.2006  всю историю удалил
    09.09.2005  initiate
    ---------------------------------------------------------------------- */

#ifndef __TIC13364_H_
#define __TIC13364_H_

/*  -------------------------------------------------------------------------
 */

#define TIC13364_RESET          RC5
#define TIC13364_RESET_TRIS     TRISC5

#define TIC13364_ADDR           (0x78)

/*  -------------------------------------------------------------------------
 */

#define LCD_BLANK           (0)     // Display Mode
#define LCD_NORMAL          (2)
#define LCD_ALLON           (1)
#define LCD_INVERSE         (3)

#define LCD_MUX_1_17        (0)     // Multiplex Rate
#define LCD_MUX_1_26        (1)
#define LCD_MUX_1_34        (2)
#define LCD_MUX_1_49        (3)
#define LCD_MUX_1_65        (4)

#define LCD_BIAS_1_4        (7)     // Bias System
#define LCD_BIAS_1_5        (6)
#define LCD_BIAS_1_6        (5)
#define LCD_BIAS_1_7        (4)
#define LCD_BIAS_1_8        (3)
#define LCD_BIAS_1_9        (2)
#define LCD_BIAS_1_10       (1)
#define LCD_BIAS_1_11       (0)

#define LCD_MULTFACT_X2     (0)     // Voltage Multiplier Factor
#define LCD_MULTFACT_X3     (1)
#define LCD_MULTFACT_X4     (2)
#define LCD_MULTFACT_X5     (3)

#define LCD_NORMALPOWER     (0)     // норма
#define LCD_POWERDOWN       (1)     // полный power down
#define LCD_TEMPMESSONLY    (2)     // работает только измерение температуры

#define LCD_INTGENON        (2)     // работает внутренний Vlcd генератор
#define LCD_VDDASVLCD       (1)     // генератор откл, как Vlcd используется Vdd
#define LCD_EXTVLCD         (0)     // генератор откл, Vlcd внешнее

#define LCD_LOWCURRENT      (0)     // current mode for bias system
#define LCD_HIGHCURRENT     (1)

#define LCD_HORIZONTAL      (0)
#define LCD_VERTICAL        (1)

typedef struct
{
    unsigned PowerMode      : 2;    // PD&DOF   power down mode
    unsigned Addressing     : 1;    // V        vertical addressing
    unsigned DisplayMode    : 2;    // D&E      display mode
    unsigned MirrorX        : 1;    // MX       mirror x
    unsigned MirrorY        : 1;    // MY       mirror y
    unsigned Bias           : 3;    // BS       bias system
    unsigned MuxRate        : 3;    // M        multiplex rate
    unsigned CurrentMode    : 1;    // IB       display size (current for BS)
    unsigned TempCoeff      : 3;    // TC       temperature coefficient
    unsigned VlcdValue      : 8;    // PRS&Vop
    unsigned VlcdControl    : 2;    // HVE&DM
    unsigned VoltMultFact   : 2;    // S        voltage multiplier factor
    unsigned TRS_BRS        : 2;    // TRS&BRS
} tic13364_cfg_t;

/*  -------------------------------------------------------------------------
 */

extern tic13364_cfg_t   tic13364;
extern const uint8      font[][6];

/*  -------------------------------------------------------------------------
 */

#define tic13364_char_addr(x,y)     tic13364_set_addr((x*6), y)
#define tic13364_put_str_at(x,y,p)  (tic13364_char_addr(x, y), tic13364_put_str(p))

void    tic13364_update_cfg (void);
void    tic13364_init       (void);
void    tic13364_clear      (void);

void    tic13364_set_addr   (uint8 x, uint8 y);

void    tic13364_put_char   (uint8 c);
void    tic13364_put_str    (const uint8 * str);

/*  -------------------------------------------------------------------------
 */

uint8   ascii_decode        (uint8 c);
uint8   bit_reverse         (uint8 b);

/*  -------------------------------------------------------------------------
 */

#endif // __TIC13364_H_

/*  =====================================================================  */



tic13364.c

/*  -------------------------------------------------------------------------
    18.07.2006  всю историю удалил
    09.09.2005  initiate
    ---------------------------------------------------------------------- */

#include <pic.h>
#include "typedef.h"
#include "stdmcrs.h"
#include "globals.h"
#include "i2c.h"
#include "tic13364.h"

/*  -------------------------------------------------------------------------
 */

tic13364_cfg_t     tic13364;

void tic13364_update_cfg(void)
{
    register uint8 tmp;

    i2c_start(TIC13364_ADDR);

    i2c_write(0x00);
    i2c_write(0x01);                                // на основн стр
    i2c_write(0x0E);                                // на стр 110
    i2c_write(0x10 |   tic13364.Bias);              // BS
    i2c_write(0x80 |   tic13364.MuxRate);           // M
    i2c_write(0x04);                                // display mode blank
    i2c_write(0x20 |  (tic13364.CurrentMode << 2)); // IB
    i2c_write(0x08 |  (tic13364.MirrorX << 2)       // MX
                   |  (tic13364.MirrorY << 1));     // MY
    i2c_write(0x01);                                // на основн стр
    i2c_write(0x10 |  (tic13364.Addressing << 1)    // V
                   | ((tic13364.PowerMode & 1) << 2));// PD
    i2c_write(0x20);                                // XM0 = 0
    i2c_write(0x0B);                                // на стр 011
    i2c_write(0x40 |  (tic13364.TRS_BRS << 3));     // TRS, BRS
    i2c_write(0x05);                                // DM = 1
    delay_ms(1);                                    // should be greater 20us
    i2c_write(0x01);                                // на основн стр
    i2c_write(0x0D);                                // на стр 101
    i2c_write(0x08);                                // S, mul factor = 2
    i2c_write(0x04 | ((tic13364.VlcdValue & 0x80) << 1));// PRS
    i2c_write(0x10 |   tic13364.TempCoeff);         // TC = 7
    i2c_write(0x80 |   tic13364.VlcdValue);         // Vop
    i2c_write(0x04 | ((tic13364.VlcdControl & 2) >> 1));// HVE

    tmp = 0;
    while(tic13364.VoltMultFact > tmp)
    {
        tmp++;
        delay_ms(1);                                // should be greater 20us
        i2c_write(0x08 | tmp);                      // S
    }

    i2c_write(0x01);                                // на основн стр
    i2c_write(0x0B);                                // на стр 011
    i2c_write(0x04 | ((tic13364.VlcdControl & 1))); // DM
    i2c_write(0x01);                                // на основн стр
    i2c_write(0x0E);                                // на стр 110
    i2c_write(0x04 |   tic13364.DisplayMode);       // D,E

    i2c_stop();
}


/*  -------------------------------------------------------------------------
 */

void tic13364_clear(void)
{
    register uint16 cnt;

    i2c_start(TIC13364_ADDR);
    i2c_write(0x40);

    for(cnt = 0; cnt < 1064; cnt++)
        i2c_write(0x00);

    i2c_stop();
}

void tic13364_set_addr(uint8 x, uint8 y)
{
    i2c_start(TIC13364_ADDR);
    i2c_write(0x00);                    // control byte

    i2c_write(0x01);                    // на основн стр
    i2c_write(0x20);                    // XM0 = 0
    i2c_write(0x40 | y);
    i2c_write(0x80 | x);

    i2c_stop();
}

/*  -------------------------------------------------------------------------
 */

static const byte decode_tbl[] = { 
// 0x20 - 0x79 as default but charset = charset - 0x20, 
// 0xC0 - 0xFF (RU) - have to decoding
0x21, 0x60, 0x22, 0x61, 0x88, 0x25, 0x63, 0x64,  // А - З
0x65, 0x66, 0x2B, 0x67, 0x2D, 0x28, 0x2f, 0x68,  // И - П
0x30, 0x23, 0x34, 0x69, 0x6A, 0x38, 0x89, 0x6B,  // Р - Ч
0x6C, 0x8A, 0x6D, 0x6E, 0x8F, 0x6F, 0x70, 0x71,  // Ш - Я
0x41, 0x72, 0x73, 0x74, 0x8B, 0x45, 0x76, 0x77,  // а - з
0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x4f, 0x7E,  // и - п
0x50, 0x43, 0x7F, 0x59, 0x8C, 0x58, 0x8D, 0x80,  //
0x81, 0x8E, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87 };//

uint8 ascii_decode(uint8 c)
{
    if (c < 0x20) c = 0x00;
    else
    {
        if (c < 0x80) c -= 0x20;
        else
        {
            if (c >= 0xC0) c = decode_tbl[c - 0xC0];
            else c = 0x00;
        }
    }
    return c;
}

void tic13364_put_char(byte c)
{
    c = ascii_decode(c);

    i2c_start(TIC13364_ADDR);
    i2c_write(0b01000000);              // control byte

    i2c_write(bit_reverse(font[c][0]));
    i2c_write(bit_reverse(font[c][1]));
    i2c_write(bit_reverse(font[c][2]));
    i2c_write(bit_reverse(font[c][3]));
    i2c_write(bit_reverse(font[c][4]));
    i2c_write(bit_reverse(font[c][5]));

    i2c_stop();
}

void tic13364_put_str(const uint8 * str)
{
    while(*str) tic13364_put_char(*str++);
}

/*  -------------------------------------------------------------------------
 */

uint8 bit_reverse(uint8 b)
{
    uint8 res = 0;
    if (b & 0b00000001) res |= 0b10000000;
    if (b & 0b00000010) res |= 0b01000000;
    if (b & 0b00000100) res |= 0b00100000;
    if (b & 0b00001000) res |= 0b00010000;
    if (b & 0b00010000) res |= 0b00001000;
    if (b & 0b00100000) res |= 0b00000100;
    if (b & 0b01000000) res |= 0b00000010;
    if (b & 0b10000000) res |= 0b00000001;
    return(res);
}


/*  =====================================================================  */



 
 кусочек main'а
Автор: Vova ()
Дата:   22/11/2006 19:19

void main(void)
{
    ...
    tic13364.PowerMode    = LCD_NORMALPOWER;
    tic13364.Addressing   = LCD_HORIZONTAL;
    tic13364.DisplayMode  = LCD_NORMAL;
    tic13364.MirrorX      = 1;
    tic13364.MirrorY      = 1;
    tic13364.Bias         = LCD_BIAS_1_9;
    tic13364.MuxRate      = LCD_MUX_1_65;
    tic13364.CurrentMode  = LCD_HIGHCURRENT;
    tic13364.TempCoeff    = 7;
    tic13364.VlcdValue    = 60;
    tic13364.VlcdControl  = LCD_INTGENON;
    tic13364.VoltMultFact = LCD_MULTFACT_X5;
    tic13364.TRS_BRS      = 0b11;           // TRS = 1, BRS = 1

    tic13364_update_cfg();
    tic13364_clear();
    tic13364_set_addr(0, 0);
    ...
}



 
 Спасибы
Автор: DenisPic ()
Дата:   22/11/2006 21:09

Уау!!! Не ожидал таково ответа. Большой СЭНКС !!!


 
 Re: Спасибы
Автор: DenisPic ()
Дата:   23/11/2006 13:41

Всем добрый!
Сделал все по Вашим рекомендациям, все по даташнику на PCF8535, но дисплей молчит
почемуто.

С тиком 32(85) вааще проблем небыло, а этот молчит :(

Может посоветуете чё-нить, а то я начинаю бояться что спалил его (или он просто был
дохлый)

Vova а Вы не могли бы скинуть этот пдфник мне или по аське или в мыло
С.Ув.Денис


 
 ответ
Автор: Vova ()
Дата:   24/11/2006 15:53

я не вижу того, что именно вы делаете, правильно ли подключено? правильно ли дергаете сбросом?
отвечает ли драйвер ACK'ами? каковы подтяжки на шине? и т.д. и т.п. код рабочий.


 
 Re: ответ
Автор: Viael ()
Дата:   24/11/2006 17:22

код который я тебе по мылу пересылал тоже 100% рабочий.Посмотри аск на шине есть?


 
 Э-эех,сори за длиннату
Автор: DenisPic ()
Дата:   24/11/2006 23:24

Вот оно. Подключил как сказано выше.(пробывал ресет подтягивать к вдд, аналогично)
#include "pic18.h"
#include <htc.h>
#define PIC 18F252
__CONFIG	(1, HS & OSCSDIS);
__CONFIG	(2, BORDIS & PWRTEN & WDTDIS & BORV42);
__CONFIG	(3, CCP2RC1);
__CONFIG	(4, DEBUGDIS & LVPDIS & STVRDIS);
__CONFIG	(5, UNPROTECT);
__CONFIG	(6, WRTEN);
//**************************************************************************
#define LCD_LED   	(RA0)
#define LCD_RESET 	(RC5)
#define LCD_ADDR 	(0x78)
//**************************************************************************
void i2c_wait_idle();
void i2c_start();
void i2c_stop();
void i2c_restart();
void i2c_write(char data);
char i2c_read();
void delay_ms(unsigned int num);
void init_pic();
void init_lcd();
void cler_lcd();
void bmp_lcd();
//**************************************************************************
unsigned int cnt;
const unsigned char * pic;
extern const unsigned char qweqwe[];
//**************************************************************************
void main()
{
	init_pic();
	delay_ms(1000);
	LCD_LED = 1;
	LCD_RESET = 1;
	delay_ms(500);
	init_lcd();
	delay_ms(500);
	cler_lcd();
	
	for(;;)
	{
	bmp_lcd();
	while(1);//стопорнемся
	}
}

//*************************************************************************
void init_pic()
{
	TRISB = 0b00011111;
	LATB = 0;
	TRISA = 0b00000000;	
	LATA = 0;
	TRISC = 0b00011000;	
	LATC = 0;
	
	PORTB = 0x00;
	PORTA = 0x00;
	PORTC = 0x00;
	
	ADCON1 		= 7;
	ADCON0 		= 0;
	GIE 		= 0;
	IPEN 		= 0;
	RBPU 		= 1;
	T2CON 		= 0b00000100;
	CCP1CON 	= 0x0f;
	PR2 		= 0xff;
	CCPR1L 		= 0x00;
	SSPCON1 	= 0b00101000;
	SSPADD 		= 0x0f; //0x02;
	//SPEN 		= 1;
	SPEN 		= 0;
	BRGH 		= 0;
	SPBRG 		= 0;
	SYNC 		= 0;
	CREN 		= 1;
	PEIE 		= 1;
	//RCIE 		= 1;
	INT0IE 		= 1;
	INT1IE 		= 1;
	INT2IE 		= 1;
	INT0IF 		= 0;
	INT1IF 		= 0;
	INT2IF 		= 0;
	GIE 		= 1;
}
//*************************************************************************
void i2c_start() 
{ 
	SEN = 1; 
	i2c_wait_idle(); 
}
//*************************************************************************
void i2c_stop() 
{
	PEN = 1; 
	i2c_wait_idle(); 
}
//*************************************************************************
void i2c_restart() 
{
	RSEN = 1; 
	i2c_wait_idle(); 
}
//*************************************************************************
void i2c_write(char data) 
{
	SSPBUF = data; 
	i2c_wait_idle(); 
}
//*************************************************************************
char i2c_read() 
{
	RCEN = 1; 
	i2c_wait_idle(); 
	return SSPBUF;
}
//*************************************************************************
void i2c_wait_idle()
{
	while((SSPCON2 & 0x1F) || RW);
}
//*************************************************************************
void delay_ms(unsigned int num)
{

	TMR2 = 0;
	do
		{
   		TMR2IF = 0; while(!TMR2IF);
		} 
	while(--num);
}
//*************************************************************************
void init_lcd()
{
		i2c_start();

        i2c_write(LCD_ADDR);        // адрес
        i2c_write(0b00000000);      // control byte
        i2c_write(0x01);            // на основн стр

        i2c_write(0b00001110);      // на стр 110
        i2c_write(0b00010010);      // BIAS = 1/9
        i2c_write(0b10000100);      // MUX = 1/65
        i2c_write(0b00000100);      // D = 0, E = 0;
        i2c_write(0b00100100);      // IB = 1
//      i2c_write(0b00100000);      // IB = 0
        i2c_write(0b00001110);      // MX = 1, MY = 1;
//      i2c_write(0b00001100);      // MX = 1, MY = 0;

        i2c_write(0x01);            // на основн стр
        i2c_write(0b00010000);      // PD = 0, V = 0; горизонтальная адресация
//      i2c_write(0b00010010);      // PD = 0, V = 0; вертикальная

        i2c_write(0b00001011);      // на стр 011
        i2c_write(0b01011000);      // TRS = 1, BRS = 1;
        i2c_write(0b00000101);      // DM = 1

        delay_ms(10);

        i2c_write(0x01);            // на основн стр
        i2c_write(0b00001101);      // на стр 101

        i2c_write(0b00001000);      // S[1;0] = 00, mul factor = 2
//      i2c_write(0b00000110);      // PRS = 1, Vlcd programing range high
        i2c_write(0b00000100);      // PRS = 0, Vlcd programing range low

        i2c_write(61 | 0x80);       // установка напряжения
        i2c_write(0b00000101);      // включение генератора

        delay_ms(10);                // should be более 20 мкс
        i2c_write(0b00001001);      // S[1;0] = 01, mul factor = 3
        delay_ms(10);
        i2c_write(0b00001010);      // S[1;0] = 10, mul factor = 4
        delay_ms(10);
        i2c_write(0b00001011);      // S[1;0] = 11, mul factor = 5

        i2c_write(0x01);            // на основн стр
        i2c_write(0b00001011);      // на стр 011

        i2c_write(0b00000100);      // DM = 0

        i2c_write(0x01);            // на основн стр
        i2c_write(0b00001110);      // на стр 110
        i2c_write(0b00000110);      // D = 1, E = 0; normal

        i2c_stop();
}
//*************************************************************************
void cler_lcd()
{
	i2c_start();
	i2c_write(LCD_ADDR);        // адрес
	i2c_write(0b01000000);      // control byte
	for(cnt = 0; cnt < 1064; cnt++)
	i2c_write(0x00);
	i2c_stop();
}
		
void bmp_lcd()
{		
		i2c_start();

        i2c_write(LCD_ADDR);           // адрес
        i2c_write(0b00000000);         // control byte

        i2c_write(0x01);               // на основн стр
        i2c_write(0b01000000);         // Y = 0;
        i2c_write(0b10000000);         // X = 0;

        i2c_restart();
    
        i2c_write(LCD_ADDR);           // адрес
        i2c_write(0b01000000);         // control byte
    
        pic = qweqwe;   
        for(cnt = 0; cnt < 1064; cnt++)
            i2c_write(*pic++);

        i2c_stop();
}


const unsigned char qweqwe[1064] = { 
    0 ,  7 ,  8 , 16 , 16 , 16 , 16 , 16 ,  0 ,  0
 ,  0 ,  4 ,  4 ,  4 ,  4 ,  3 ,  0 ,  7 ,  2 ,  4

                     бла-блабла



 
 Посмотри осцилоскопом,АСК видно?(-)
Автор: Viael ()
Дата:   26/11/2006 02:56

1


 
 Re: АСК видно?
Автор: DenisPic ()
Дата:   26/11/2006 13:09

Ок, в понедельник гляну, сразу отпешусь. Просто на работе все оставил.


 
 ресетом пощелкать пробуйте
Автор: Vova ()
Дата:   04/12/2006 13:40

т.е. до этого ресет был в воздухе либо на земле??? а вы читать-то умеете? удачи.


 
 Vova, спасибо!
Автор: Wowan ()
Дата:   04/12/2006 17:12

Тут, неожиданно, потребовалось применить TIC149. Не мудрствуя лукаво взяли пример
кода. Все пошло сразу.Единственное замечание: в разных паритях индикаторов
приходится подбирать напрряжение питания матрицы.
Т.е. в i2c_write(61 | 0x80); // установка напряжения не всегда 61.
Еще раз спасибо!


 
 не за что
Автор: Vova ()
Дата:   04/12/2006 18:52

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