HI thanks for your suggestion. I got it what you mean, quite confusing this SERCOM thing even if I read the tutorial several times now.
However I tested the code but unfortuntaly without success. I connected my small Logic analyzer to get an understanding what's happening on the wires.
I compared the "working" version with the soft SPI and the hardware SPI:
software SPI
Adafruit_ST7735 tft = Adafruit_ST7735(PIN_TFT_CS, PIN_TFT_DCA0, PIN_TFT_MOSI, PIN_TFT_SCLK, PIN_TFT_RST);
hardware SPI
SPIClass mySPI (&sercom0, 6, PIN_TFT_SCLK, PIN_TFT_MOSI, SPI_PAD_2_SCK_3, SERCOM_RX_PAD_0); //miso,clk, mosi
Adafruit_ST7735 tft = Adafruit_ST7735(&mySPI, PIN_TFT_CS, PIN_TFT_DCA0, PIN_TFT_RST);
So some activity is there but still some is missing,
This is the test sketch:
/*
ST7735 SAMD21 Test
*/
#include <Arduino.h>
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <SPI.h>
#define PIN_TFT_DCA0 17 //PA04 pin9 ch0
#define PIN_TFT_MOSI 8 //PA06 pin11 ch1
#define PIN_TFT_SCLK 9 //PA07 pin12 ch2
#define PIN_TFT_CS 1 //PA10 pin15 ch3
#define PIN_TFT_RST 0 //PA11 pin16 ch4
#define PIN_TFT_EN 38 //PA13 pin22 EXTINT[13]
#define PIN_TEST_LED 6 //PA20 pin29 ch5
SPIClass mySPI (&sercom0, 6, PIN_TFT_SCLK, PIN_TFT_MOSI, SPI_PAD_2_SCK_3, SERCOM_RX_PAD_0); //miso,clk, mosi
//Adafruit_ST7735 tft = Adafruit_ST7735(PIN_TFT_CS, PIN_TFT_DCA0, PIN_TFT_MOSI, PIN_TFT_SCLK, PIN_TFT_RST); //working but it's soft SPI only
Adafruit_ST7735 tft = Adafruit_ST7735(&mySPI, PIN_TFT_CS, PIN_TFT_DCA0, PIN_TFT_RST); //-Just used for setup
void setup() {
delay(1000);
mySPI.begin();
pinMode(PIN_TFT_EN, OUTPUT); digitalWrite(PIN_TFT_EN, HIGH); //screen power enable
tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab
tft.setRotation(1);
tft.setTextWrap(false);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 30);
tft.setTextColor(ST77XX_YELLOW);
tft.println("Hello World!");
}
void loop() {
pinMode(PIN_TEST_LED, OUTPUT); digitalWrite(PIN_TEST_LED, HIGH);
delay(200);
pinMode(PIN_TEST_LED, OUTPUT); digitalWrite(PIN_TEST_LED, LOW);
delay(200);
}
edit
i may missed the pinPeripheral section
It seems to work At least it's refreshing faster than with soft SPI. Still there is a "black screen" between the refreshes and not as smoothles like a SSD1306 OLED but much better than before
Your're a genius, thanks Martin!!
/*
ST7735 SAMD21 Test
*/
#include <Arduino.h>
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <SPI.h>
#include "wiring_private.h" // pinPeripheral() function
#define PIN_TFT_DCA0 17 //PA04 pin9 SERCOM0/PAD[0] ch0
#define PIN_TFT_MOSI 8 //PA06 pin11 SERCOM0/PAD[2] ch1
#define PIN_TFT_SCLK 9 //PA07 pin12 SERCOM0/PAD[3 ch2
#define PIN_TFT_CS 1 //PA10 pin15 ch3
#define PIN_TFT_RST 0 //PA11 pin16 ch4
#define PIN_TFT_EN 38 //PA13 pin22 EXTINT[13]
#define PIN_TEST_LED 6 //PA20 pin29
SPIClass mySPI (&sercom0, 6, PIN_TFT_SCLK, PIN_TFT_MOSI, SPI_PAD_2_SCK_3, SERCOM_RX_PAD_0); //miso,clk, mosi
//Adafruit_ST7735 tft = Adafruit_ST7735(PIN_TFT_CS, PIN_TFT_DCA0, PIN_TFT_MOSI, PIN_TFT_SCLK, PIN_TFT_RST); //working but it's soft SPI only
Adafruit_ST7735 tft = Adafruit_ST7735(&mySPI, PIN_TFT_CS, PIN_TFT_DCA0, PIN_TFT_RST); //-Just used for setup
void setup() {
pinMode(PIN_TFT_EN, OUTPUT); digitalWrite(PIN_TFT_EN, HIGH); //screen power enable
delay(1000);
mySPI.begin();
// Assign pins to SERCOM functionality
pinPeripheral(PIN_TFT_DCA0, PIO_SERCOM_ALT);
pinPeripheral(PIN_TFT_MOSI, PIO_SERCOM_ALT);
pinPeripheral(PIN_TFT_SCLK, PIO_SERCOM_ALT);
tft.initR(INITR_BLACKTAB); // Init ST7735S chip, black tab
tft.setRotation(1);
tft.setTextWrap(false);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 30);
tft.setTextColor(ST77XX_YELLOW);
tft.println("Hello World!");
}
uint8_t i=0;
void loop() {
pinMode(PIN_TEST_LED, OUTPUT); digitalWrite(PIN_TEST_LED, HIGH);
delay(200);
pinMode(PIN_TEST_LED, OUTPUT); digitalWrite(PIN_TEST_LED, LOW);
delay(200);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 30);
tft.setTextColor(ST77XX_YELLOW);
tft.println("Hello World!"); tft.println(i++);
}