Тема: PCF8576 + Arduino
Показать сообщение отдельно
Старый 05.08.2013, 02:57   #13
s.m.
Гуру
 
Регистрация: 20.07.2009
Город: Минск
Регион: Беларусь
Сообщений: 1,543
s.m. is a splendid one to beholds.m. is a splendid one to beholds.m. is a splendid one to beholds.m. is a splendid one to beholds.m. is a splendid one to beholds.m. is a splendid one to beholds.m. is a splendid one to behold
По умолчанию

Завел частично индикатор

Вот скетч, выводящий слово CODE

Код:
#define I2C_ADDR 0x38
#define I2C_SEND_BUFFER_SIZE 17 

#include <Wire.h>

void setup() {
delay(5000);
//Serial.begin(115200);//
  Wire.begin();

  initLCD();
/*
  Wire.beginTransmission(I2C_ADDR);
  uint8_t dataArray3[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 0, 0, 0, 0, 0, 169, 99, 1, 20, 96, 161, 0, 0, 0 }; 
//  uint8_t dataArray3[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 0, 0, 0, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 0 }; 
  Wire.write(dataArray3, I2C_SEND_BUFFER_SIZE);
  Wire.endTransmission();
*/
  unsigned char data[14];
  data[0] = 0x00; 
  data[1] = 0x00;
  data[2] = 0x00;
  data[3] = 0x00; 
  data[4] = 0x00;
  data[5] = 0xA9;
  data[6] = 0x63; 
  data[7] = 0x01;
  data[8] = 0x14;
  data[9] = 0x60; 
  data[10] = 0xA1;
  data[11] = 0x00;
  data[12] = 0x00; 
  data[13] = 0x00;

  sendDataToLCD(data);  
/*
  Wire.beginTransmission(I2C_ADDR);
  uint8_t dataArray4[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 2, 0, 0, 0, 21, 108, 224, 98, 12, 20, 96, 0, 0, 0 };
  //uint8_t dataArray4[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
  Wire.write(dataArray4, I2C_SEND_BUFFER_SIZE);
  Wire.endTransmission();
*/  

  unsigned char data2[14];
  data2[0] = 0x02; 
  data2[1] = 0x00;
  data2[2] = 0x00;
  data2[3] = 0x00; 
  data2[4] = 0x15;
  data2[5] = 0x6C;
  data2[6] = 0xE0; 
  data2[7] = 0x62;
  data2[8] = 0x0C;
  data2[9] = 0x14; 
  data2[10] = 0x60;
  data2[11] = 0x00;
  data2[12] = 0x00; 
  data2[13] = 0x00;

  sendDataToLCD(data2);  
}

void loop() { 
}

void sendDataToLCD(unsigned char *data) {
  unsigned char buffer[I2C_SEND_BUFFER_SIZE];
  byte i = 0;

  buffer[0] = 0xE0;
  buffer[1] = 0xCB;
  buffer[2] = 0xF0;
  
  for (i = 3; i < I2C_SEND_BUFFER_SIZE; i ++) {
     buffer[i] = data[i - 3]; 
  }  
  
  Wire.beginTransmission(I2C_ADDR);
  Wire.write(buffer, I2C_SEND_BUFFER_SIZE);
  Wire.endTransmission();
}

void initLCD() {
    /* init
   E0CBF000000000000000 
   E0CBF020000000000000 
   E0CBF000000000000000 
   E0CBF020000000000000  
   */
  
  /*
  Wire.beginTransmission(I2C_ADDR);
  uint8_t dataArray[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; 
  Wire.write(dataArray, I2C_SEND_BUFFER_SIZE);
  Serial.print(Wire.endTransmission()); 

  Wire.beginTransmission(I2C_ADDR);
  uint8_t dataArray2[I2C_SEND_BUFFER_SIZE] = { 0xE0, 0xCB, 0xF0, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; 
  Wire.write(dataArray2, I2C_SEND_BUFFER_SIZE);
  Serial.print(Wire.endTransmission()); 
*/
   
  unsigned char data[14];
  byte i = 0;

  for (i = 0; i <= 14; i++) {
    data[i] = 0x00; 
  }  

  sendDataToLCD(data); 
  
  data[0] = 0x20;

  sendDataToLCD(data); 
}
Дело за малым, написать кусок кода, который будет выводить произвольную строку. Проблема сейчас в том, что используется мультиплексирование для вывода данных.
Нашел только куски кода для 1:2

Может у кого-то есть готовый кусок кода для случая 1:3 ?
__________________
Мой проект: Citroen Xsara Android CarPC
s.m. вне форума   Ответить с цитированием