Дисплей от Siemens S65

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Сообщение mr_smit »

Man писал(а):По вашей ссылке нужно пройти регестрацию с одобрение админа=)
..."Для проверки написал программу со счетчиком, значение которого выводится в центре экрана, а по нажатию на кнопку, выводится 4 строки в разных местах."

Код: Выделить всё

/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.9 Standard
Automatic Program Generator
© Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Chip type           : ATmega16
Program type        : Application
Clock frequency     : 14,300000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 256
*****************************************************/

#include <mega16>

#include <spi>

#include <string>

#include <delay>

#include <stdio>

#define DISP_W 132
#define DISP_H 176
#define CHAR_W 8
#define CHAR_H 14

// строки для примера
char txt1[]="Spirit for Datagor.ru";
char txt2[]="Siemens S65";
char txt3[]="display";
char txt4[]="Test programm";

// сопоставление выводов дисплея и микроконтроллера
#define RESET        PORTB.6
#define CS           PORTB.3 
// тактовый и информационный вход дисплея
// подключены к аппаратному SPI микроконтроллера


unsigned int i=0, j=0;
unsigned int counter=0;


// массив символов
flash char ascii_tab[96][14]={
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // space (32)
{ 0x00, 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x3c, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00}, //!
{ 0x00, 0x66, 0x66, 0x66, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //"
{ 0x00, 0x00, 0x00, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x6c, 0xfe, 0x6c, 0x6c, 0x00, 0x00}, //#
{ 0x00, 0x18, 0x18, 0x7c, 0xc6, 0xc2, 0xc0, 0x7c, 0x06, 0x86, 0xc6, 0x7c, 0x18, 0x18}, //$
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0xc6, 0x0c, 0x18, 0x30, 0x66, 0xc6, 0x00, 0x00}, // %
{ 0x00, 0x00, 0x00, 0x38, 0x6c, 0x6c, 0x38, 0x76, 0xdc, 0xcc, 0xcc, 0x76, 0x00, 0x00}, // &
{ 0x00, 0x18, 0x18, 0x18, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // '
{ 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x18, 0x0c, 0x00, 0x00}, // (
{ 0x00, 0x00, 0x00, 0x30, 0x18, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x30, 0x00, 0x00}, // )
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x3c, 0xff, 0x3c, 0x66, 0x00, 0x00, 0x00, 0x00}, // *
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x7e, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00}, // +
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x30, 0x00}, // ґ
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // -
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00}, // .
{ 0x00, 0x00, 0x00, 0x02, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x80, 0x00, 0x00, 0x00}, // /
{ 0x00, 0x00, 0x00, 0x38, 0x6c, 0xc6, 0xc6, 0xd6, 0xc6, 0xc6, 0x6c, 0x38, 0x00, 0x00}, // 0 (48-32)
{ 0x00, 0x00, 0x00, 0x18, 0x38, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7e, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x60, 0xc6, 0xfe, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x06, 0x06, 0x3c, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x0c, 0x1c, 0x3c, 0x6c, 0xcc, 0xfe, 0x0c, 0x0c, 0x1e, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xfe, 0xc0, 0xc0, 0xc0, 0xfc, 0x06, 0x06, 0xc6, 0x7c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x38, 0x60, 0xc0, 0xc0, 0xfc, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x06, 0x0c, 0x18, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x06, 0x0c, 0x78, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x0c, 0x18, 0x30, 0x60, 0xc0, 0x60, 0x30, 0x18, 0x0c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x60, 0x30, 0x18, 0x0c, 0x06, 0x0c, 0x18, 0x30, 0x60, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x0c, 0x18, 0x18, 0x00, 0x18, 0x18, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xde, 0xde, 0xde, 0xdc, 0xc0, 0x7c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x66, 0x66, 0x66, 0xfc, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xc0, 0xc2, 0x66, 0x3c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xf8, 0x6c, 0x66, 0x66, 0x66, 0x66, 0x66, 0x6c, 0xf8, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x62, 0x66, 0xfe, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xfe, 0x66, 0x62, 0x68, 0x78, 0x68, 0x60, 0x60, 0xf0, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x3c, 0x66, 0xc2, 0xc0, 0xc0, 0xde, 0xc6, 0x66, 0x3a, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xfe, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x3c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x1e, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0xcc, 0xcc, 0x78, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xe6, 0x66, 0x6c, 0x6c, 0x78, 0x6c, 0x6c, 0x66, 0xe6, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xf0, 0x60, 0x60, 0x60, 0x60, 0x60, 0x62, 0x66, 0xfe, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xc6, 0xee, 0xfe, 0xd6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xc6, 0xe6, 0xf6, 0xfe, 0xde, 0xce, 0xc6, 0xc6, 0xc6, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0x60, 0xf0, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xde, 0x7c, 0x0e, 0x00},
{ 0x00, 0x00, 0x00, 0xfc, 0x66, 0x66, 0x66, 0x7c, 0x6c, 0x66, 0x66, 0xe6, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0x60, 0x38, 0x0c, 0xc6, 0xc6, 0x7c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x7e, 0x7e, 0x5a, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x6c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x7c, 0x38, 0x7c, 0xc6, 0xc6, 0xc6, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x66, 0x66, 0x66, 0x66, 0x3c, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xfe, 0xc6, 0x8c, 0x18, 0x30, 0x60, 0xc2, 0xc6, 0xfe, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x3c, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x3c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x80, 0xc0, 0xe0, 0x70, 0x38, 0x1c, 0x0e, 0x06, 0x02, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x3c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x3c, 0x00, 0x00},
{ 0x10, 0x38, 0x6c, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff},
{ 0x00, 0x30, 0x18, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x0c, 0x7c, 0xcc, 0xcc, 0x76, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0xe0, 0x60, 0x60, 0x78, 0x6c, 0x66, 0x66, 0x66, 0x7c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc0, 0xc0, 0xc6, 0x7c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x1c, 0x0c, 0x0c, 0x3c, 0x6c, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xfe, 0xc0, 0xc6, 0x7c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x1c, 0x36, 0x32, 0x30, 0x7c, 0x30, 0x30, 0x30, 0x78, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0xcc, 0x78},
{ 0x00, 0x00, 0x00, 0xe0, 0x60, 0x60, 0x6c, 0x76, 0x66, 0x66, 0x66, 0xe6, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x06, 0x06, 0x00, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3c},
{ 0x00, 0x00, 0x00, 0xe0, 0x60, 0x60, 0x66, 0x6c, 0x78, 0x6c, 0x66, 0xe6, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x38, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x3c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0xfe, 0xd6, 0xd6, 0xd6, 0xd6, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0xc6, 0xc6, 0xc6, 0x7c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x66, 0x66, 0x66, 0x7c, 0x60, 0x60, 0xf0},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0xcc, 0xcc, 0xcc, 0x7c, 0x0c, 0x0c, 0x1e},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0x76, 0x66, 0x60, 0x60, 0xf0, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0xc6, 0x70, 0x1c, 0xc6, 0x7c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x10, 0x30, 0x30, 0xfc, 0x30, 0x30, 0x30, 0x36, 0x1c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x76, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0x6c, 0x38, 0x10, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xd6, 0xd6, 0xfe, 0x6c, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x6c, 0x38, 0x38, 0x6c, 0xc6, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc6, 0xc6, 0xc6, 0x7e, 0x06, 0x0c, 0x78},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xcc, 0x18, 0x30, 0x66, 0xfe, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x70, 0x18, 0x18, 0x18, 0x0e, 0x18, 0x18, 0x18, 0x70, 0x00, 0x00},
{ 0x00, 0x76, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x38, 0x6c, 0xc6, 0xc6, 0xfe, 0x00, 0x00, 0x00}
};

// определение основных цветов
// просто для удобства;)
#define BLACK 0x0000
#define RED   0xf800
#define GREEN 0x07e0
#define BLUE  0x001f
#define WHITE 0xffff


// цвет фона и текста по умолчанию
unsigned int textcolor=GREEN;
unsigned int bgcolor=0x0000;


// запись одного байта в дисплей
void lcd_write8(char dat)
{
  spi(dat);
}

// запись двух байт
void lcd_write(unsigned int dat)
{
  lcd_write8(dat>>8);
  lcd_write8 (dat);
}

// дергаем выводом CS для обозначения конца передачи данных
void lcd_cspulse(void)
{
  CS= 1;
  #asm("nop")
  CS= 0;
}

// выбор регистра в контроллере дисплея
void lcd_reg(char register_name)
{
  lcd_write8(0x74);  // стартовый байт на передачу команды
  lcd_write(register_name);
  lcd_cspulse();
}

// отправка двух байт в графическую память дисплея
void lcd_dat8(char register_dat1, char register_dat2)
{
  lcd_write8(0x76);  // стартовый байт на запись данных
  lcd_write8(register_dat1);
  lcd_write8(register_dat2);
  lcd_cspulse();
  
}

// то же самое, но из 16-и битной переменной
void lcd_dat(unsigned int data)
{
  lcd_write8(0x76);  // стартовый байт на запись данных
  lcd_write(data);
  lcd_cspulse();
}


// программа инициализации дисплея
void lcd_init_c(void)
{
  RESET=0;
  CS=1;
  delay_ms(1);
  RESET=1;
  
  delay_ms(10);
  
  CS=0;
  
  delay_ms(50);
  lcd_reg(0x00);lcd_dat(0x0001);

  lcd_reg(0x03);lcd_dat(0x000c);

  delay_ms(100);
  lcd_reg(0x0d);lcd_dat(0x0616);

  lcd_reg(0x01);lcd_dat(0x0215);
  
  delay_ms(150);  
  lcd_reg(0x07);lcd_dat(0x0037);

  CS= 1;
}


// заливка дисплея цветом color
void fill_screen(unsigned int color)
{
  
  CS= 0;  // select display
  
  lcd_reg(0x16);lcd_dat(0x8300);
  lcd_reg(0x17);lcd_dat(0xAF00);
  lcd_reg(0x21);lcd_dat(0x0000);
  lcd_reg(0x22);lcd_write8(0x76);  
  
  // start data transmission  
  for (i=0; i<DISP_H; i++)
  {
   for(j=0;j<DISP_W;j++)
   {
    lcd_write(color);
   }
  }  

  CS= 1;  // deselect display    
}

// поместить символ в графическую память дисплея
void put_char(char x, char y, char c, unsigned int color, char rot)
{
  char h,ch,p,mask;

  CS= 0;
  
  switch(rot)
  {
    default:
    case 0:
      lcd_reg(0x05);lcd_dat(0x0038);
      lcd_reg(0x17);lcd_dat8(x+CHAR_W-1, x);
      lcd_reg(0x16);lcd_dat8(y+CHAR_H-1, y);
      lcd_reg(0x21);lcd_dat8(x,y);
      lcd_reg(0x22);
      lcd_write8(0x76);  
      break;
    case 1:
      lcd_reg(0x05);lcd_dat(0x0030);
      lcd_reg(0x16);lcd_dat8(x+CHAR_W-1, x);
      lcd_reg(0x17);lcd_dat8(y+CHAR_H-1, y);
      lcd_reg(0x21);lcd_dat8(y, x);
      lcd_reg(0x22);
      lcd_write8(0x76);  
      break;
  }

  
  for (h=0; h<CHAR_H; h++) // every column of the character
  {        
       if (rot==1)
          ch=ascii_tab[ c-32 ][h];    
          else
          ch=ascii_tab[ c-32 ][CHAR_H-h-1];
    
        mask=0x80;
        for (p=0; p<CHAR_W; p++)  // write the pixels
        {
          if (ch&mask)
          {
            lcd_write(color);                
          }
          else
          {
            lcd_write(bgcolor);
          }
          mask=mask/2;
        }  // for p
  }
  CS= 1;  // deselect display    

}


// записать строку, начиная с координат x, y, цветом color и ориентацией orient
// если orient=0, то горизонтально, если =1, то вертикально
void put_string(unsigned char x, unsigned char y, char *str, unsigned int color, unsigned char orient)
{
  j=0;
  while (j<strlen(str))
  {
    put_char(x+j*CHAR_W,y,str[j],orient, color);   //  0 deg. rotated
    j++;
  }
}


interrupt [EXT_INT0] void ext_int0_isr(void)
{

}


// прерывание INT1
// запись строк примера в дисплей
interrupt [EXT_INT1] void ext_int1_isr(void)
{

  put_string(6,0,txt1,0, textcolor);

  put_string(25,00,txt2,1, textcolor);

  put_string(40,15,txt3,1, textcolor);

  put_string(35,120,txt4,0, textcolor);

}


interrupt [EXT_INT2] void ext_int2_isr(void)
{

}


void main(void)
{
PORTA=0x00;DDRA=0x00;PORTB=0x00;DDRB=0xFF;PORTC=0xFF;DDRC=0x00;PORTD=0xFF;DDRD=0x00;TCCR0=0x00;
TCNT0=0x00;OCR0=0x00;TCCR1A=0x00;TCCR1B=0x00;TCNT1H=0x00;TCNT1L=0x00;ICR1H=0x00;ICR1L=0x00;
OCR1AH=0x00;OCR1AL=0x00;OCR1BH=0x00;OCR1BL=0x00;ASSR=0x00;TCCR2=0x00;TCNT2=0x00;OCR2=0x00;
GICR|=0xE0;MCUCR=0x0A;MCUCSR=0x00;GIFR=0xE0;TIMSK=0x00;ACSR=0x80;SFIOR=0x00;SPCR=0x50;SPSR=0x01;

#asm("sei")

lcd_init_c(); // инициализация дисплея

fill_screen(bgcolor); // заливка черным

while (1)
      {

          char cnt[16];  // промежуточная переменная для функции sprint()
   
  
          sprintf(cnt,"%5u",counter);  // преобразование числа в строку

          put_string(68,60,cnt,0, BLUE); // вывод полученной строки
  
          counter++;  // инкремент переменной
      
      };
}

Нельзя всё знать, достаточно понимать.
Реклама
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Сообщение clawham »

Здравствуйте гуру сименовых экранчиков!
Назрел такой вопросик :)
экран сименся наш-то может работать с СПИ выше 33 мегагерц?
тогда получится супер скорость обновления и уйдут проблемы с контрастностью!!!
Теперь вопрос! Зачем насиловать микроконтроллер разгоняя его до 20-30 мегагерц? Ради того чтоб СПИ выплёвывался быстро? но ведь это же последовательный интерфейс!
почему бы не применить буферизацию?
собрать на примитивной логике(пару регистров сдвиговых счетчик с дешифратором и наверное пару корпусов логики) которая бы на любой частоте доступной логике(а для НСТ не предел и 60 мегагерц) шмалила б какой-то участочек памяти или вообще просто выгружала б линейку сдвиговых регистров! по окончании выплевывания микроконтроллер парралельно за 4-5 тактов загружает линейку сдвиговиков и снова начинается выгрузка этого потока данных на максимальной частоте СПИ!
Или другой вариант - выпаять из любого сидюка или винта микруху - буффер она обычно статичный рам из себя представляет на 2-8 мегабайт с прямой парралельной адресацией (хотя у меня валяется микруха на 96 килобайт - как раз то что нужно!!!)
далее на логике(ну или на маленькой дешевенькой ПЛИСинке) делаем генератор адреса последовательный от 0 до 72К и те 8 бит что получаем на выходе микрухи памяти выгоняем последовательно одним сдвиговиком с генератором и так по кругу пока не кончатся адреса :) потом МК уже сам генерируя адрес и данные пишет в память комманды которые необходимо послать в экран(выделение области 132х176) и потом данные о цвете каждой точки последовательно в 8-миьитном формате....заполнили память ПАРРАЛЕЛЬНЫЙ методом - снова запускаем логический выплевыватель этой РАМы в экранчик на максимальной частоте а сами тем временем сигнал оцифровываем и обрабатываем :)
Кто что скажет по этому поводу?
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Реклама
Аватара пользователя
krolaka
Нашел транзистор. Понюхал.
Сообщения: 169
Зарегистрирован: Пн мар 02, 2009 12:23:37
Контактная информация:

Сообщение krolaka »

да буфер харошая весч но...
у меня дисплей на частоте spi 12 мгц вроде работал выше уже не хотел запускаться :( внимательней бы почитали в интрнете что в телефоне етот дисплей работает на 13 мгц
Пробовал я на vs1000 она может без пролемс работать на 48 мгц :)
применить буфер можно при выводе видео а так не выжу смысла усложнять себе жызнь :)
Изображение
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Сообщение clawham »

не ну я имею ввиду то что авр-ке рамы-то маловато для этого экрана будет и скорости тоже....а так-всё решается :)
Как бы на простой логике наверное выйдет очень много корпусов....а это уже помехи и т.д. а на плиске забабахать такое дело было бы очень интересно...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ELcat
Друг Кота
Сообщения: 3258
Зарегистрирован: Вт май 19, 2009 09:27:30
Откуда: Украина

Сообщение ELcat »

Для ПЛИСки надо генератор тактирующий городить, или покупать готовый кварцевый генератор, или давать клоку с проца. А теперь вопрос $AVR+$ПЛИС=$ARM, или ARM всё таки дешевле?
Реклама
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Сообщение clawham »

а что общего имеет арм с плис-кой ?
и вообще плис тут как-бы вообще не особо и нужна - не такая уж и большая сложность - я просто предлагаю соорудить SPI буферизированную пушку с огроменной скоростью выплевывающую в экран тучу данных размером с весь экран а контроллер-то будет только с памятью общяться и снова таки в 8 раз быстрее ибо парралельный режим...в принципе можно подобное организовать парой корпусов программ логики типа gal16v8 и одним аналогом советского сдвиговика - ир 17 .... генератор? неужто с МК нельзя взять частоту? Да или просто напросто выпаять из любого старого компа-телефона-винта - видеокарты и т.д. собственно генераторный модуль с ТТЛ выходом? преимущества-то превалируют! в первую очередь это возможность READ-MODIFY-WRITE :) ну и в том же духе - МК удобен прост и изучен :) ему не хватает памяти и частоты СПИ - почему б нам это не модернизировать причем если на плис-ке то в принципе-то до беспредела :) хоть 400 мегагерц ))
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Реклама
Аватара пользователя
Man
Встал на лапы
Сообщения: 83
Зарегистрирован: Чт ноя 13, 2008 19:22:03

Сообщение Man »

clawham идея интересная :))
Моглибы если несложно структурную схему набросать как на логике из паральлки в spi сделать ? логики много в наличии есть смысл попробать,плисин к сожелению нету только типо palce22v10,(pal20v10или8 точно непомню) pal16v8 .
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Сообщение clawham »

Ну вот чтото типа
Изображение

только нужно будет организовать возможность отключения микросхемы памяти от этой схемы и подключения к шине МК - дабы модифицировать её....ну в общем чисто или наипримитивнейшая плисина но с тучей ног или на логике...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Аватара пользователя
ELcat
Друг Кота
Сообщения: 3258
Зарегистрирован: Вт май 19, 2009 09:27:30
Откуда: Украина

Сообщение ELcat »

Для непонятливых объясняю $AVR+$ПЛИС имелось ввиду суммарная стоимость АВРа и ПЛИСки. Насчёт памяти всего экрана явно будет круто, даже о%ительно, поскольку сама ПЛИСка потянет этак на $60-$80 или около этого. За 400 МГц даже не думай - это будет явно не по карману. Ты сам подумай 132х176х2Б=46464Б=371712б. Вот и посмотри сколько стоит такая ПЛИСина, которая вместит 400килобит. Но и хрен с ним, допустим купишь, а чем ты её BGAшную на плату посадишь? Так не лучше ли взять ARM с 64кБ памяти, который сам тебе в фоновом режиме будет скидывать в экран по прерываниям в то время пока ты на 55МГц чего-нибудь нарисуешь и всего за несчастных каких-нибудь $6-$8 :evil:
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Сообщение clawham »

Вы видите мою структурную схемку? видите там есть счетчик сдвиговый регистр делитель на 8, а ещё там надо линейка переключателей шины адреса и шины данных внешней памяти...память то стоит копейки если вообще ни со старых мамок-винтов-видюх выпаять!взять микроплиску на 512 ключиков да и будет счастье....хотя можно и просто обойтись внешним умножителем 16 мегагерц на 2 и сдвиговиком...и выгружать в целый порт сразу 8 мь бит данных(а никто не запрещает и 16(два порта) и потом дать разрешение генератору с сдвиговиком - пусть выпулят этот байт на высокой скорости а по окончании прерывание и новый байт в регистр
можно взять несколько регистров - линейку ...загружать их парралельно а потом выплевывать высокой тактовой - получится спи модулек с палралельной загрузкой :)
но как по мне так лучше уже тогда внешняя память...незачем её организовывать в самой плисине её вентилями..это слишком дорого будет стоить вы правильно заметили!
в общем всёравно это риторика :) микроконтроллер всёравно слаб многомерно для этого экрана как ни крути :) с армами мне пока не светит работать...как и с плисинами :) больший интерес представляет контроллер для ноутбуковских панелей....но тут уже проще на ноутбуке же всё и сделать :)
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Аватара пользователя
abc
Друг Кота
Сообщения: 3687
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Сообщение abc »

Вот не пойму, чего вы добиваетесь.
Скорострельности ?
Ну так аппаратный SPI в атмелах работает на Fosc/2, в PIC-ах - на Fosc/4. Т.е. максимальная для этого дисплея скорость (12-13Мбит/с) достижима даже на номинальной для многих МК частоте. Ну, в крайнем случае, МК можно чуть разогнать.

Опять же, подгружать данные во внешнюю память все равно будет сам МК. Но за то время, пока он их "подгрузит", он же сам и сможет их выдать в SPI.
Да и вообще, пишите на асме. Тогда по-настоящему прочувствуете скорость железа )
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Сообщение clawham »

Частота дисплея спокойно может перевалить за 33 мега! лично видел вживую на vs1101
дальше - частота мк 16 мег / 2 = 8 мег....из этих 8-ми мег только 4 будут результативными....4 мегабита в секунду!

а теперь берем парралельный весь порт а меги 16
полтора такта на изменение состояния, ещё такт на чтение
16/3=5,5 мегаБАЙТ в секунду!
во сколько раз круче?
а если внешнюю память организовать странично....пока выгружается первая половина - вторая рисуется МКшкой...модифицируется...это вполне ему под силу ибо спешить никуда не надо! гораздо больше времени процессорного экономится!
в принципе для армов всё то же самое реально только вот порт у него 32 бита....а следовательно при частоте 55 мегагерц получим 25 мегабит последовательных(3,125 мегабайт) или 55*4 = 220 мегабайт пиковой пропускной способности!!! разница-то есть?
помоему это и не может никак обсуждаться - любому устройству с графическим экраном и 24 битами на пикселю просто необходима внешняя память :)

конечно это слишком серьёзно для такого экранчика...он только по описаниям мне нравится 24 бита цвет 176х220 но....блин....качество этих цветов....кхм...мне собственно говоря не очень нравится ...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Fighter
Встал на лапы
Сообщения: 94
Зарегистрирован: Ср авг 01, 2007 13:32:33

Сообщение Fighter »

конечно это слишком серьёзно для такого экранчика...он только по описаниям мне нравится 24 бита цвет 176х220 но....блин....качество этих цветов....кхм...мне собственно говоря не очень нравится ...
Это вы про какой экранчик?
s65 - 176х132 16бит. хотелось бы поболе - как вы писали 176 на 220
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Сообщение clawham »

ну тоесть блин 132....перепутал малёха :)
и...насколько я знаю он умеет 24 бита отрабатывать!
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Аватара пользователя
abc
Друг Кота
Сообщения: 3687
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Сообщение abc »

6/3=5,5 мегаБАЙТ в секунду!
во сколько раз круче?
Есть т.н. принцип разумной достаточности.
При 5,5 МБайт/сек на этом дисплее можно (теоретич) получить 100кадров/сек.
Но это напоминает МПХ диаметром в 10см. Круто, но куда его такой присунуть ???

У этого дисплея малая диагональ, большая зернистость и хреновая цветопередача, ничего кроме циферок/буковок/графиков он не способен нормально отобразить. Думаю, достаточно просто поиметь в руках сам телефон, чтобы в этом убедиться.
Qwertty
Первый раз сказал Мяу!
Сообщения: 25
Зарегистрирован: Сб окт 31, 2009 12:34:44

Сообщение Qwertty »

abc писал(а):ничего кроме циферок/буковок/графиков он не способен нормально отобразить.
Не совсем циферки:
www.sasamy.narod.ru/8.avi
Аватара пользователя
abc
Друг Кота
Сообщения: 3687
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Сообщение abc »

Да, но ключевая фраза была "нормально отобразить". К дважды пережатому видео при 176х132pix это вряд ли относится...

Согласен, динамика хорошая.
Только вряд ли она получена с помощью скорострельной ПЛИСины. Скорее всего, с SPI и теми же 12-13Мбс.
Или у вас самоцель - непременно забабахать на нем видеомонитор и обставить китайцев, готорые уже готовый 2,5-дюймовый продают за 25$ ? "Это вряд ли" (с)

Все, спорить больше не буду. Занимайтесь маниловщиной сами.
Аватара пользователя
ELcat
Друг Кота
Сообщения: 3258
Зарегистрирован: Вт май 19, 2009 09:27:30
Откуда: Украина

Сообщение ELcat »

Не хочу показаться особо навязчивым, но я уже приобрёл AT91SAM7S32 именно для этого экранчика, ибо ИМХО $крутойAVR+$ПЛИС(512macrosells)>>>$ARM. (Для непонятливых ещё раз $=цена)
Аватара пользователя
abc
Друг Кота
Сообщения: 3687
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Сообщение abc »

а я - PIC18F45K20 )))
:beer:
Аватара пользователя
ELcat
Друг Кота
Сообщения: 3258
Зарегистрирован: Вт май 19, 2009 09:27:30
Откуда: Украина

Сообщение ELcat »

abc писал(а):а я - PIC18F45K20 )))
:beer:
За солидарность :beer:
Ответить

Вернуться в «Периферия»