Pages: [1]   Go Down
Author Topic: UTFT ist zu langsam  (Read 2488 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 1
Posts: 93
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
habe erst vor ein paar Tagen mit AVR angefangen.

was ich so hin bekomme

RS232 komunikation
1,8" Display mit ST7735
#define sclk 13
#define mosi 11
#define cs   10
#define dc   9
#define rst  8 

Als Library für das Display hebe ich      UTFT     sie ist aber recht langsam bei großen Buchstaben.   ( ohne SPI )
Die Library    Adafruit_ST7735    ist ausreichend schnell.   ( mit SPI )

Nur möchte ich gerne die UTFT Library behalten.
Hat jemand die UTFT mal geändert so das sie SPI beinhaltet ?

Wenn ja....
kann ich diese bekommen ?
Habe mich schon versucht das selbst zu ertsellen, bekomme das aber nicht hin


Danke für Infos und Hilfe

Grüße
Ratllos
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 112
Posts: 5277
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Es wäre sinnvoll, wenn Du die von Dir verwendeten Bibliotheken verlinken würdest, damit wir wissen, von welchem Stück Code Du genau sprichst. Die Namen sind leider nicht immer eindeutig und für's Nachforschen aufgrund von geratenen Verbindungen ist mir meine Zeit zu schade.
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 93
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
habe alles hochgeladen
( Hoffe zumindest, da ich zum ersten mal was hochgeladen habe.


http://www.dateiupload.net/download.php?file=3d9a87ae0590349dcb0fa798ef07c270

Versuche mit seit 1 Woche an AVR
Seit 3 Tagen hänge ich wegen der Geschwindigkeit
( Da git es ja diees SPI, bekomme das aber nicht hin )

Mit fertigen Programen aus dem Internet geht das  aber

Danke für Hilfe
Grüße
Ratlos
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 93
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
was ich vergessen hatte

Verwende

Arduino UNO       238P-PU

Grüße
Ratlos  smiley-cry
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 112
Posts: 5277
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dazu sollte eigentlich ein SPI.begin() in der setup()-Routine und das ersetzen des Codes in UTFT.cpp der Methode LCD_Writ_Bus() bis zur Zeile "case 8:" durch folgenden Code genügen.

Code:
void UTFT::LCD_Writ_Bus(char VH,char VL, byte mode)
{   
switch (mode)
{
case 1:
if (VH==1)
sbi(P_RS, B_RS);
else
cbi(P_RS, B_RS);

SPI.transfer(VL);
break;
case 8:
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 93
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo pilon,
wenn ich den Code in die UTFT.cpp  tausche.
bekomme ich eine Fehlermeldung



Das hier verstehe ich nicht
Dazu sollte eigentlich ein SPI.begin() in der setup()-Routine

Danke
Grüße
Ratlos
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 112
Posts: 5277
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
bekomme ich eine Fehlermeldung

... und die wäre?
Hast Du die SPI-Bibliothek included? Also im UTFT.cpp und in Deinem Sketch muss ein
Code:
#include "SPI.h"
rein.

Quote
Das hier verstehe ich nicht
Dazu sollte eigentlich ein SPI.begin() in der setup()-Routine

Dein setup() muss jetzt so aussehen:
Code:
void setup() {
  SPI.begin();
  // hier kommt der alte Inhalt von setup()
}

wobei Du die Kommentarzeile ernst nehmen musst smiley!
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 93
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

SUPER GUT

Es geht
Vielen Dank

Grüße
Ratlos
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 93
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

tut mir leid das ich noch mal Stören muss, aber ich hab noch ein kleines Problem.

Ich habe das Display und nun zusätzlich ein SD-Karten Modul über SPI angeschlossen und funktioniert auch wunderbar, jedoch wenn das Programm ohne die SD-Karte starte ist die Anzeige wieder langsam.

Angeschlossen habe ich das nach diesen Schema:


Hier der CODE:
Code:
#include <SPI.h>
#include <UTFT.h>
#include <SD.h>

// Declare which fonts we will be using
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
//extern uint8_t DotMatrix_M[];
extern uint16_t logohirth2[];

int sda = 11;  //MOSI
int scl = 13;  //SCLK
int cs = 10;   
int rst = 8;
int rs = 9;

//#define sclk 13
//#define mosi 11
//#define MISO  12
//#define cs   6 SD-Karte
//#define cs   10 Display
//#define dc   9
//#define rst  8 

const int chipSelect = 6;   

UTFT myGLCD(ITDB18SP,sda,scl,cs,rst,rs);   // Remember to change the model parameter to suit your display module!

void setup()

{
  Serial.begin(9600);
  pinMode(10, OUTPUT);
  SPI.begin();  // ist neu zum Starten der SPI
  randomSeed(analogRead(0));
 
  myGLCD.InitLCD();
  myGLCD.clrScr();
  myGLCD.setFont(BigFont);
  myGLCD.print("TEST", 6,2);

  Serial.print("Initializing SD card...");
 
  if (!SD.begin(chipSelect))
  {
    Serial.println("Card failed, or not present");
    return;
  }
  Serial.println("card initialized.");
  File dataFile = SD.open("datalog.txt", FILE_WRITE);
 
  if (dataFile)
  {
    dataFile.println("test");
    dataFile.close();
    Serial.println("test");
  } 
  else {
    Serial.println("error opening datalog.txt");
  }
}


void loop()
{
  for(int i=0;i<100;i++)
  {
   myGLCD.printNumI(i, 40,40);
  }
}

Hab schon mehrmals versucht das zu umgehen aber ohne erfolg.

Könnt ihr mir helfen?

Gruß Ratlos
Logged

Germany
Offline Offline
Edison Member
*
Karma: 137
Posts: 1548
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Soweit ich mich erinnere programmiert SD.begin() das SPI HW-Subsystem um. Wenn man mehrere SPI-Geräte anschließen will, genügt es leider nicht, jeweils getrennte chip select Leitungen zu haben. Vielmehr muss man bedenken, dass jedes SPI-Gerät eine andere SPI Konfiguration (Flanken, Geschwindigkeit) benötigt. Zudem ändert jede Lib (hier die SD-Lib) diese Konfiguration einfach ab. 

Grüße,
Oliver
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 112
Posts: 5277
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

olikraus liegt richtig, die SD-Bibliothek setzt die SPI-Geschwindigkeit auf 125kHz wie der folgende Auszug zeigt:

Code:
  // Enable SPI, Master, clock rate f_osc/128
  SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR1) | (1 << SPR0);
  // clear double speed
  SPSR &= ~(1 << SPI2X);

Wenn Du das mit dieser Hardware-Konfiguration betreiben willst, musst Du relativ viele Änderungen an den Bibliotheken vornehmen. Es ist schon so wie olikraus schreibt, die meisten Bibliotheken sind so programmiert, dass sie alleiniger Verwender der entsprechenden Hardware sind. Der grosse Vorteil, den Du bei Arduino hast: es ist alles komplett Open Source, somit kannst Du diese Änderungen vornehmen. Eine relativ einfache Methode (die aber nicht in jedem Fall zum Erfolg führt), ist das Sichern der SPI-Konfigurations-Register nach der jeweiligen Hardware-Initialisierung und das Rücksetzen auf die gesicherten Werte vor jedem Bibliotheksaufruf. Damit könntest Du Dir die Bibliotheksänderungen ersparen.
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 93
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke für die Info.

Ich habe das Problem nun damit gelöst das ich die Library/SD/utility/Sd2Card.h angepasst hab und nun die SD karte üder den SPI Softmode anspreche und auf andere Pins gesetzt hab.

Hier meine Anpassung:
Code:
// SPI pin definitions
//
#define SOFTWARE_SPI = false

#ifndef SOFTWARE_SPI
// hardware pin defs
/**
 * SD Chip Select pin
 *
 * Warning if this pin is redefined the hardware SS will pin will be enabled
 * as an output by init().  An avr processor will not function as an SPI
 * master unless SS is set to output mode.
 */
/** The default chip select pin for the SD card is SS. */
uint8_t const  SD_CHIP_SELECT_PIN = SS_PIN;
// The following three pins must not be redefined for hardware SPI.
/** SPI Master Out Slave In pin */
uint8_t const  SPI_MOSI_PIN = MOSI_PIN;
/** SPI Master In Slave Out pin */
uint8_t const  SPI_MISO_PIN = MISO_PIN;
/** SPI Clock pin */
uint8_t const  SPI_SCK_PIN = SCK_PIN;
/** optimize loops for hardware SPI */
#define OPTIMIZE_HARDWARE_SPI

#else  // SOFTWARE_SPI
// define software SPI pins so Mega can use unmodified GPS Shield
/** SPI chip select pin */
uint8_t const SD_CHIP_SELECT_PIN = 5;
/** SPI Master Out Slave In pin */
uint8_t const SPI_MOSI_PIN = 4;
/** SPI Master In Slave Out pin */
uint8_t const SPI_MISO_PIN = 3;
/** SPI Clock pin */
uint8_t const SPI_SCK_PIN = 2;
#endif  // SOFTWARE_SPI

LG Ratlos
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 93
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,
das mit dem 328 geht perfekt.

Aber mit Sanguino-0101r1.zip  und den    644p
http://code.google.com/p/sanguino/downloads/detail?name=Sanguino-0101r1.zip&can=2&q=
geht SPI nicht
was mach ich jetzt falsch ?

Code:
// UTFT_Demo_160x128_Serial (C)2012 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
// This program requires the UTFT library.
#include <SPI.h>
#include <UTFT.h>
#include <SD.h>

File root;


// Declare which fonts we will be using
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];

int zahl = 6250;
int sprit = 120;

// Atmega 644P
int sda = 5;  //MOSI   TFT
int scl = 7;  //SCLK   TFT
int cs = 4;   //SS TFT
int rst = 0; //TFT
int rs = 1; //TFT



const int chipSelect = 6;   

UTFT myGLCD(ITDB18SP,sda,scl,cs,rst,rs);   // Remember to change the model parameter to suit your display module!

void setup()
{
   SPI.begin();  // ist neu zum Starten der SPI
  Serial.begin(19200);
  pinMode(10, OUTPUT);

Wenn was zu info ( suche ) fehlt bitte einfach schreiben
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 112
Posts: 5277
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dein "geht SPI nicht" müsstest Du schon etwas genauer erklären.

Bitte denk daran, dass viele Arduino-Bibliotheken nur die Original-Arduinos (ATmega168 oder ATmega328P) unterstützen, vielfach auch noch die Mega-Reihe (ATmega1280 und ATmega2560).
Bevor Du also einfach einen anderen Prozessor einsetzt, müsstest Du die Kompatibilität genau abklären. Vor allem direkte Register-Ansteuerung ist meist nicht sehr portabel.
 
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 93
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo pylon

Da hast Du recht.


habe weiter probiert und mit der Kombination

644p
+ Sanguino-0101r1.zip
+ Arduino 1.0.3

geht es    smiley-lol

Das scheint alles sehr komples zu sein.



Bin froh das ich soweit gekommen bin, den mache das erst seit ca. 4 Wochen

Grüße
Ratlos
Logged

Pages: [1]   Go Up
Jump to: