Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: at91sam7s -> lcd (SSD1305)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
D!m@
Здравствуйте!

Есть дисплей UG-2836TLBAG01 контролер SSD1305!
Управляю с AT91sam7s256 по SPI.
Проблема в том, что не могу изменить картинку.
Команды исполняются нормально, а сама картинка не пересылается.
Может, кто знает, где грабли? Да по I2C – те же грабли. На параллельный порт нет ног.

CODE
#include <board.h>
#include <pio/pio.h>
#include <aic/aic.h>
#include <dbgu/dbgu.h>
#include <spi/spi.h>
#include <utility/math.h>
#include <utility/assert.h>
#include <utility/trace.h>



#include <stdio.h>
#include <string.h>

//------------------------------------------------------------------------------
// Local definitions
//------------------------------------------------------------------------------

/// TWI peripheral redefinition if needed (I2C)
#if !defined(AT91C_BASE_TWI) && defined(AT91C_BASE_TWI0)
#define AT91C_BASE_TWI AT91C_BASE_TWI0
#define AT91C_ID_TWI AT91C_ID_TWI0
#define PINS_TWI PINS_TWI0
#endif

/// SPI clock frequency in Hz.
#define SPICK 200000

/// Slave address of LCD.
#define LCD_ADDRESS 0x3d
#define LCD_COMAND 0x80
#define LCD_DATA 0xC0
unsigned char comand[]={
//LCD off (reset)
0xae,
//set low column addres
0x00,
//set hight column addres
0x10,
//display start set
0x40,
// Set Column Address 0..127
0x21,
0x00,
0x7f,
// Set Page Address 0..5
0x22,
0x00,
0x05,
// stop gorzontal scroll
0x2e,
// page address
0xb0,
// Set contrast control register
0x81,
0x7f,
// set segment re-map
0xa1,
// normal display mode
0xa4,
// set normal / inverse display
0xa6,
// Set multiplex ratio
0xa8,
0x3f,
// set displey offset
0xd3,
0x00,
// Set dc/dc on/off
0xad,
0x8e,
// Set com output scan direction
0xc8,
// Set displey clock divide ratio/oscilator/frequency
0xd5,
0xf0,
// Set area color mode on/off & low power display mode
0xd8,
0x05,
// Set pre-charge period
0xd9,
0xc2,
// Set com pins hardware configuration
0xda,
0x12,
// Set vcom deselect level
0xdb,
0x08,
//Set Display ON
0xaf
};



//------------------------------------------------------------------------------
// Local variables
//------------------------------------------------------------------------------

/// Pio pins to configure.
static const Pin pins[] = {PIN_LED_DS1,PIN_LCD};
/// Index pio
#define IPIN_LED1 0
#define IPIN_LCD_DC 4


//------------------------------------------------------------------------------
/// Local functions
//------------------------------------------------------------------------------



//------------------------------------------------------------------------------
/// Dummy callback, to test asynchronous transfer modes.
//------------------------------------------------------------------------------
void TestCallback()
{
printf("-I- Callback fired !\n\r");
}

//------------------------------------------------------------------------------
/// Global functions
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/// Main function
//------------------------------------------------------------------------------
void LCD_SendComand(unsigned char uc)
{
PIO_Clear(&pins[IPIN_LCD_DC]);
// for(int i =100;i>0;i--);
while (!SPI_IsFinished(AT91C_BASE_SPI));
SPI_Write(AT91C_BASE_SPI,0,uc);
}
void LCD_SendData(unsigned char uc)
{
PIO_Set(&pins[IPIN_LCD_DC]);
// for(int i =100;i>0;i--);
while (!SPI_IsFinished(AT91C_BASE_SPI));
SPI_Write(AT91C_BASE_SPI,0,uc);
}
void setXY(int page, int colum)
{
// set page
LCD_SendComand( 0xb0 | page );
// set column
LCD_SendComand( colum & 0x0f);
LCD_SendComand( (colum >> 4) | 0x10);

}
int main()
{





// configure spi
SPI_Configure(AT91C_BASE_SPI,AT91C_ID_SPI,AT91C_SPI_MSTR);
SPI_ConfigureNPCS(AT91C_BASE_SPI,0,
AT91C_SPI_CPOL | AT91C_SPI_NCPHA | AT91C_SPI_BITS_8 |
SPI_SCBR(SPICK,BOARD_MCK));
SPI_Enable(AT91C_BASE_SPI);

PIO_Configure(pins, PIO_LISTSIZE(pins));
// lcd init
//for(int i=1000000;i>0;i--);
for (int i = 0;i<sizeof (comand);i++)
LCD_SendComand(comand[i]);

setXY(0,10);
for(int i=100;i>0;i--)
LCD_SendData(0x0);
setXY(1,10);
for(int i=100;i>0;i--)
LCD_SendData(0x0);
setXY(2,10);
for(int i=100;i>0;i--)
LCD_SendData(0x0);
setXY(3,10);
for(int i=100;i>0;i--)
LCD_SendData(0x0);

//set invers
LCD_SendComand(0xa7);
//set invers
LCD_SendComand(0xa6);
//set invers
LCD_SendComand(0xa7);
//set invers
LCD_SendComand(0xa6);
PIO_Clear(&pins[IPIN_LED1]);
while(1);

}
D!m@
Неужели никто не использовал дисплеи с SSD1305 контролером?
D!m@
Попался бракованный дисплей. Взял такой же но с белой подсветкой - все работает!
Белка12
Хочу попробовать написать программу в СИ51 для SSD1303 контроллера в комплекте с микроконтроллером ADUC831.

По идее, он похож на SSD1305.

Нет похожих ICLUDE файлов.

Slonofil
Друзья, не могли бы Вы уточнить, как дела обстоят у SSD1305 с внутренним HV DC/DC? Он есть (как в SSD1306), или без внешнего источника 12...13В не обойтись?

Ещё хотел бы просить поделиться старт-ап кодом, если это возможно. Или хотя бы инициализационной последовательностью.

Спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.