подключение tft 2.4

exolon
Offline
Зарегистрирован: 20.05.2015

здраствуйте, пологаю я успел надоесть

есть вот такой дисплей http://www.mikrocontroller.net/attachment/230681/display_2.jpg на ili9325 подключил его к самодельной ардуине на Atmega128 немного танца с бубно и библиотеки от суда https://alselectro.wordpress.com/2014/11/28/touch-screen-tft-shield-for-... удалось его запустить, всё отлично

но вовпрос заключается в следующим, можно ли за местли в место

// #define LCD_CS A3 // Chip Select goes to Analog 3
// #define LCD_CD A2 // Command/Data goes to Analog 2
// #define LCD_WR A1 // LCD Write goes to Analog 1
// #define LCD_RD A0 // LCD Read goes to Analog 0

// #define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

использовать цифровые пины ?

простите за откровенно глупый вопрос хотель бы спросить мнение знающих людей прежде чем куралесить

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да) они кстати все цифровые

так у тебя все цифровые заняты же

exolon
Offline
Зарегистрирован: 20.05.2015

нет, у atmega128 42цифровых пина

http://www.automation-drive.com/EX/05-15-01/AVR-H128-sch.gif

для подключения пришлось подправить файл uno_24_shield.h

#ifndef _UNO_24_SHIELD_
#define _UNO_24_SHIELD_

// Code provided by Smoke And Wires
// http://www.smokeandwires.co.nz
// This code has been taken from the Adafruit TFT Library and modified
//  by us for use with our TFT Shields / Modules
// For original code / licensing please refer to
// https://github.com/adafruit/TFTLCD-Library
 

// This header file serves two purposes:
//
// 1) Isolate non-portable MCU port- and pin-specific identifiers and
//    operations so the library code itself remains somewhat agnostic
//    (PORTs and pin numbers are always referenced through macros).
//
// 2) GCC doesn't always respect the "inline" keyword, so this is a
//    ham-fisted manner of forcing the issue to minimize function calls.
//    This sometimes makes the library a bit bigger than before, but fast++.
//    However, because they're macros, we need to be SUPER CAREFUL about
//    parameters -- for example, write8(x) may expand to multiple PORT
//    writes that all refer to x, so it needs to be a constant or fixed
//    variable and not something like *ptr++ (which, after macro
//    expansion, may increment the pointer repeatedly and run off into
//    la-la land).  Macros also give us fine-grained control over which
//    operations are inlined on which boards (balancing speed against
//    available program space).

// Smoke And Wires 2.4 Shield pin usage:
// LCD Data Bit :    7    6    5    4    3    2    1    0
// Digital pin #:    7    6    5    4    3    2    9    8
// Uno port/pin :  PD7  PD6  PD5  PD4  PD3  PD2  PD1  PD0

#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0

#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
// Pixel read operations require a minimum 400 nS delay from RD_ACTIVE
// to polling the input pins.  At 16 MHz, one machine cycle is 62.5 nS.
// This code burns 7 cycles (437.5 nS) doing nothing; the RJMPs are
// equivalent to two NOPs each, final NOP burns the 7th cycle, and the
// last line is a radioactive mutant emoticon.
#define DELAY7        \
  asm volatile(       \
    "rjmp .+0" "\n\t" \
    "rjmp .+0" "\n\t" \
    "rjmp .+0" "\n\t" \
    "nop"      "\n"   \
    ::);

  // // These set the PORT directions as required before the write and read
  // // operations.  Because write operations are much more common than reads,
  // // the data-reading functions in the library code set the PORT(s) to
  // // input before a read, and restore them back to the write state before
  // // returning.  This avoids having to set it for output inside every
  // // drawing method.  The default state has them initialized for writes.
  // #define setWriteDirInline() { DDRD |=  B11010000; DDRB |=  B00101111; }
  // #define setReadDirInline()  { DDRD &= ~B11010000; DDRB &= ~B00101111; }

 
 //
  #define write8inline(d) {                          \
    PORTD = (PORTD & B00000000) | ((d) & B11111111); \  
    WR_STROBE; }
  #define read8inline(result) {                       \
    RD_ACTIVE;                                        \
    DELAY7;                                           \
    result = (PIND & B11111111); \
    RD_IDLE; }
  #define setWriteDirInline() { DDRD |=  B11111111;}
  #define setReadDirInline()  { DDRD &= ~B11111111;}

 
 

  // As part of the inline control, macros reference other macros...if any
  // of these are left undefined, an equivalent function version (non-inline)
  // is declared later.  The Uno has a moderate amount of program space, so
  // only write8() is inlined -- that one provides the most performance
  // benefit, but unfortunately also generates the most bloat.  This is
  // why only certain cases are inlined for each board.
  #define write8 write8inline

 // When using the TFT breakout board, control pins are configurable.
 #define RD_ACTIVE  *rdPort &=  rdPinUnset
 #define RD_IDLE    *rdPort |=  rdPinSet
 #define WR_ACTIVE  *wrPort &=  wrPinUnset
 #define WR_IDLE    *wrPort |=  wrPinSet
 #define CD_COMMAND *cdPort &=  cdPinUnset
 #define CD_DATA    *cdPort |=  cdPinSet
 #define CS_ACTIVE  *csPort &=  csPinUnset
 #define CS_IDLE    *csPort |=  csPinSet

// #endif
// #endif

// Data write strobe, ~2 instructions and always inline
#define WR_STROBE { WR_ACTIVE; WR_IDLE; }

// These higher-level operations are usually functionalized,
// except on Mega where's there's gobs and gobs of program space.

// Set value of TFT register: 8-bit address, 8-bit value
#define writeRegister8inline(a, d) { \
  CD_COMMAND; write8(a); CD_DATA; write8(d); }

// Set value of TFT register: 16-bit address, 16-bit value
// See notes at top about macro expansion, hence hi & lo temp vars
#define writeRegister16inline(a, d) { \
  uint8_t hi, lo; \
  hi = (a) >> 8; lo = (a); CD_COMMAND; write8(hi); write8(lo); \
  hi = (d) >> 8; lo = (d); CD_DATA   ; write8(hi); write8(lo); }

// Set value of 2 TFT registers: Two 8-bit addresses (hi & lo), 16-bit value
#define writeRegisterPairInline(aH, aL, d) { \
  uint8_t hi = (d) >> 8, lo = (d); \
  CD_COMMAND; write8(aH); CD_DATA; write8(hi); \
  CD_COMMAND; write8(aL); CD_DATA; write8(lo); }

#endif // _UUNO_24_SHIELD_

так я получил возможность использовать всю линейку PD0-PD7

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

exolon пишет:

библиотеки от суда 

Библиотеки лучше от прокуратуры брать.

exolon
Offline
Зарегистрирован: 20.05.2015

да не всё так просто поменяь аналоговые пины на цифровые, похоже придётся опять лесть во внутрь, библиотеки

// Constructor for breakout board (configurable LCD control lines).
// Can still use this w/shield, but parameters are ignored.
SWTFT::SWTFT() :  Adafruit_GFX(TFTWIDTH, TFTHEIGHT) {

  // Convert pin numbers to registers and bitmasks
  _reset     = LCD_RESET;
 
    csPort     = portOutputRegister(digitalPinToPort(LCD_CS));
    cdPort     = portOutputRegister(digitalPinToPort(LCD_CD));
    wrPort     = portOutputRegister(digitalPinToPort(LCD_WR));
    rdPort     = portOutputRegister(digitalPinToPort(LCD_RD));

  csPinSet   = digitalPinToBitMask(LCD_CS);
  cdPinSet   = digitalPinToBitMask(LCD_CD);
  wrPinSet   = digitalPinToBitMask(LCD_WR);
  rdPinSet   = digitalPinToBitMask(LCD_RD);
  csPinUnset = ~csPinSet;
  cdPinUnset = ~cdPinSet;
  wrPinUnset = ~wrPinSet;
  rdPinUnset = ~rdPinSet;

    *csPort   |=  csPinSet; // Set all control bits to HIGH (idle)
    *cdPort   |=  cdPinSet; // Signals are ACTIVE LOW
    *wrPort   |=  wrPinSet;
    *rdPort   |=  rdPinSet;
 
  pinMode(LCD_CS, OUTPUT);    // Enable outputs
  pinMode(LCD_CD, OUTPUT);
  pinMode(LCD_WR, OUTPUT);
  pinMode(LCD_RD, OUTPUT);

//  if(reset) {
 
  digitalWrite(LCD_RESET, HIGH);
  pinMode(LCD_RESET, OUTPUT);

 // }

пологаю это гдето сдесь, сам я не программист, это можно сказать хобби

посоветует может кто, как это поправить или где ещё порыть

Radjah
Offline
Зарегистрирован: 06.08.2014

ЕвгенийП пишет:

Библиотеки лучше от прокуратуры брать.

Лесть тоже не поможет. Только бабки. %)

nikantovik
Offline
Зарегистрирован: 19.06.2015

[quote=exolon]

здраствуйте, пологаю я успел надоесть

есть вот такой дисплей http://www.mikrocontroller.net/attachment/230681/display_2.jpg на ili9325 подключил его к самодельной ардуине на Atmega128 немного танца с бубно и библиотеки от суда https://alselectro.wordpress.com/2014/11/28/touch-screen-tft-shield-for-... удалось его запустить, всё отлично

А мне почему то даже танцы с бубном не помогают :(

Что я делаю не так? Или может чего то не делаю. Сделал как указанно. Скачал библиотеки. Установил прошиваю а толку нет......

exolon
Offline
Зарегистрирован: 20.05.2015

возможно 2 ньюанса вымогли ошибиться с распиновкой её можно посмотреть в файле hardware\arduino\variants\crumbuino128\plus_arduino.h

библиотека довольно старая без излишиств и расчитана на atmega238 дисплей подключен к #define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0

#define LCD_RESET A4 // Can alternately just connect to RESET

и

// LCD Data Bit :    7    6    5    4    3    2    1    0
// Digital pin #:    7    6    5    4    3    2    9    8
// Uno port/pin :  PD7  PD6  PD5  PD4  PD3  PD2  PB1  PB0

что соответствует лапам МК А0-61/А1-60/А2-59/А3-58/А4-57/

PD7-LСD_D7-32

PD-6-LCD_D6-31

PD5-LCD_D5-30

PD4-LCD_D4-29

PD3-LCD_D3-28

PD2-LCD_D2-27

PB1-LCD_D1-11

PB0-LCD_D0-10

так он подключается стандартно, но меня не устроил такой расклад, вот и подправил файл библиотеки.

попробуйте подключить именно так без правки файла

а если подключат с исправленным файлом

PD7-LСD_D7-32

PD-6-LCD_D6-31

PD5-LCD_D5-30

PD4-LCD_D4-29

PD3-LCD_D3-28

PD2-LCD_D2-27

PD1-LCD_D1-26

PD0-LCD_D0-25

проверте всё внимательно

AndreyE
Offline
Зарегистрирован: 02.05.2017

Здравствуйте. А кто-нибудь добивался работы Atmega128 и дисплея tft 2.4 на ili9341?  Библиотека "SPFD5408-master" c гит хаба. https://github.com/JoaoLopesF/SPFD5408 ( Кстати, на 328 атмеге все чудесно работает с этой библиотекой, но свободных пинов почти не остается.). Ковырял ее долго. Но опыта маловато. Исправлял файлы библиотеки и "pin_magic.h"   и "SPFD5408_Adafruit_TFTLCD.cpp". Не помогло. Может кто подскажет как Atmega128 с TFT 2.4 на ili9341 поженить. На данный момент при загрузке график теста из примеров экран мерцает и видно, что процесс идет. Но, похоже, не происходит инициализации дисплея и картинки нет, только мерцание. В Atmega128 загрузчик MegaCore с гит хаба (https://github.com/MCUdude/MegaCore). Исправленная мной библиотека здесь https://yadi.sk/d/HlwgoRtS3HYgNZ .

 

 

 

AndreyE
Offline
Зарегистрирован: 02.05.2017

Хоть тема и древняя, но может кто откликнется.:)