From 8935a1e61888ad25ce8772be74140fdc9458b19a Mon Sep 17 00:00:00 2001 From: Eggert Jung Date: Sat, 17 Oct 2020 03:39:34 +0200 Subject: [PATCH] working prototype for writing to two HUB75e 64x64 --- CMakeLists.txt | 6 + Makefile | 9 + main/CMakeLists.txt | 2 + main/component.mk | 5 + main/hello_world_main.c | 231 ++++++++++ sdkconfig | 1060 ++++++++++++++++++++++++++++++++++++++++++++++ sdkconfig.ci | 6 + sdkconfig.old | 1072 +++++++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 2391 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 Makefile create mode 100644 main/CMakeLists.txt create mode 100644 main/component.mk create mode 100644 main/hello_world_main.c create mode 100644 sdkconfig create mode 100644 sdkconfig.ci create mode 100644 sdkconfig.old diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..519e5a1 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,6 @@ +# The following lines of boilerplate have to be in your project's +# CMakeLists in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.5) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(hello-world) \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..0d1f5e6 --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +# +# This is a project Makefile. It is assumed the directory this Makefile resides in is a +# project subdirectory. +# + +PROJECT_NAME := hello-world + +include $(IDF_PATH)/make/project.mk + diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt new file mode 100644 index 0000000..c299e03 --- /dev/null +++ b/main/CMakeLists.txt @@ -0,0 +1,2 @@ +idf_component_register(SRCS "hello_world_main.c" + INCLUDE_DIRS "") \ No newline at end of file diff --git a/main/component.mk b/main/component.mk new file mode 100644 index 0000000..0b9d758 --- /dev/null +++ b/main/component.mk @@ -0,0 +1,5 @@ +# +# "main" pseudo-component makefile. +# +# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) + diff --git a/main/hello_world_main.c b/main/hello_world_main.c new file mode 100644 index 0000000..1512f14 --- /dev/null +++ b/main/hello_world_main.c @@ -0,0 +1,231 @@ +/* Hello World Example + + This example code is in the Public Domain (or CC0 licensed, at your option.) + + Unless required by applicable law or agreed to in writing, this + software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR + CONDITIONS OF ANY KIND, either express or implied. +*/ +#include +#include "sdkconfig.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "esp_system.h" +#include "esp_spi_flash.h" + +#include "driver/gpio.h" + +#ifdef CONFIG_IDF_TARGET_ESP32 +#define CHIP_NAME "ESP32" +#endif + +#ifdef CONFIG_IDF_TARGET_ESP32S2BETA +#define CHIP_NAME "ESP32-S2 Beta" +#endif + +#define GPIO_R1 25 +#define GPIO_G1 26 +#define GPIO_B1 27 +#define GPIO_R2 14 +#define GPIO_G2 12 +#define GPIO_B2 13 + +#define GPIO_CLK 16 +#define GPIO_OE 15 +#define GPIO_LAT 4 + +#define GPIO_A 23 +#define GPIO_B 19 +#define GPIO_C 5 +#define GPIO_D 17 +#define GPIO_E 18 + +uint8_t fb[64][128][3]; + +const unsigned char font[96][7] = { + {0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // + {0x5f,0x00,0x00,0x00,0x00,0x00,0x00}, // ! + {0x03,0x00,0x03,0x00,0x00,0x00,0x00}, // " + {0x14,0x7f,0x14,0x7f,0x14,0x00,0x00}, // # + {0x6f,0x49,0xc9,0x7b,0x00,0x00,0x00}, // $ + {0x63,0x13,0x08,0x64,0x63,0x00,0x00}, // % + {0x7f,0xc9,0x49,0x63,0x00,0x00,0x00}, // & + {0x03,0x00,0x00,0x00,0x00,0x00,0x00}, // ' + {0x3e,0x41,0x00,0x00,0x00,0x00,0x00}, // ( + {0x41,0x3e,0x00,0x00,0x00,0x00,0x00}, // ) + {0x0a,0x04,0x1f,0x04,0x0a,0x00,0x00}, // * + {0x08,0x08,0x3e,0x08,0x08,0x00,0x00}, // + + {0xc0,0x00,0x00,0x00,0x00,0x00,0x00}, // , + {0x08,0x08,0x08,0x08,0x00,0x00,0x00}, // - + {0x40,0x00,0x00,0x00,0x00,0x00,0x00}, // . + {0x60,0x10,0x08,0x04,0x03,0x00,0x00}, // / + {0x7f,0x41,0x41,0x7f,0x00,0x00,0x00}, // 0 + {0x01,0x7f,0x00,0x00,0x00,0x00,0x00}, // 1 + {0x7b,0x49,0x49,0x6f,0x00,0x00,0x00}, // 2 + {0x63,0x49,0x49,0x7f,0x00,0x00,0x00}, // 3 + {0x0f,0x08,0x08,0x7f,0x00,0x00,0x00}, // 4 + {0x6f,0x49,0x49,0x7b,0x00,0x00,0x00}, // 5 + {0x7f,0x49,0x49,0x7b,0x00,0x00,0x00}, // 6 + {0x03,0x01,0x01,0x7f,0x00,0x00,0x00}, // 7 + {0x7f,0x49,0x49,0x7f,0x00,0x00,0x00}, // 8 + {0x0f,0x09,0x09,0x7f,0x00,0x00,0x00}, // 9 + {0x41,0x00,0x00,0x00,0x00,0x00,0x00}, // : + {0xc1,0x00,0x00,0x00,0x00,0x00,0x00}, // ; + {0x08,0x14,0x22,0x00,0x00,0x00,0x00}, // < + {0x14,0x14,0x14,0x14,0x00,0x00,0x00}, // = + {0x22,0x14,0x08,0x00,0x00,0x00,0x00}, // > + {0x03,0x59,0x09,0x0f,0x00,0x00,0x00}, // ? + {0x7f,0x41,0x5d,0x55,0x5f,0x00,0x00}, // @ + {0x7f,0x09,0x09,0x7f,0x00,0x00,0x00}, // A + {0x7f,0x49,0x49,0x77,0x00,0x00,0x00}, // B + {0x7f,0x41,0x41,0x63,0x00,0x00,0x00}, // C + {0x7f,0x41,0x41,0x3e,0x00,0x00,0x00}, // D + {0x7f,0x49,0x49,0x63,0x00,0x00,0x00}, // E + {0x7f,0x09,0x09,0x03,0x00,0x00,0x00}, // F + {0x7f,0x41,0x49,0x7b,0x00,0x00,0x00}, // G + {0x7f,0x08,0x08,0x7f,0x00,0x00,0x00}, // H + {0x41,0x7f,0x41,0x00,0x00,0x00,0x00}, // I + {0x60,0x40,0x40,0x7f,0x00,0x00,0x00}, // J + {0x7f,0x08,0x08,0x77,0x00,0x00,0x00}, // K + {0x7f,0x40,0x40,0x60,0x00,0x00,0x00}, // L + {0x7f,0x01,0x01,0x7f,0x01,0x01,0x7f}, // M + {0x7f,0x01,0x01,0x7f,0x00,0x00,0x00}, // N + {0x7f,0x41,0x41,0x7f,0x00,0x00,0x00}, // O + {0x7f,0x09,0x09,0x0f,0x00,0x00,0x00}, // P + {0x7f,0x41,0xc1,0x7f,0x00,0x00,0x00}, // Q + {0x7f,0x09,0x09,0x77,0x00,0x00,0x00}, // R + {0x6f,0x49,0x49,0x7b,0x00,0x00,0x00}, // S + {0x01,0x01,0x7f,0x01,0x01,0x00,0x00}, // T + {0x7f,0x40,0x40,0x7f,0x00,0x00,0x00}, // U + {0x7f,0x20,0x10,0x0f,0x00,0x00,0x00}, // V + {0x7f,0x40,0x40,0x7f,0x40,0x40,0x7f}, // W + {0x77,0x08,0x08,0x77,0x00,0x00,0x00}, // X + {0x6f,0x48,0x48,0x7f,0x00,0x00,0x00}, // Y + {0x71,0x49,0x49,0x47,0x00,0x00,0x00}, // Z + {0x7f,0x41,0x00,0x00,0x00,0x00,0x00}, // [ + {0x03,0x04,0x08,0x10,0x60,0x00,0x00}, // "\" + {0x41,0x7f,0x00,0x00,0x00,0x00,0x00}, // ] + {0x04,0x02,0x01,0x02,0x04,0x00,0x00}, // ^ + {0x80,0x80,0x80,0x80,0x00,0x00,0x00}, // _ + {0x03,0x00,0x00,0x00,0x00,0x00,0x00}, // ` + {0x74,0x54,0x54,0x7c,0x00,0x00,0x00}, // a + {0x7f,0x44,0x44,0x7c,0x00,0x00,0x00}, // b + {0x7c,0x44,0x44,0x6c,0x00,0x00,0x00}, // c + {0x7c,0x44,0x44,0x7f,0x00,0x00,0x00}, // d + {0x7c,0x54,0x54,0x5c,0x00,0x00,0x00}, // e + {0x7f,0x05,0x05,0x01,0x00,0x00,0x00}, // f + {0xbc,0xa4,0xa4,0xfc,0x00,0x00,0x00}, // g + {0x7f,0x04,0x04,0x7c,0x00,0x00,0x00}, // h + {0x7d,0x00,0x00,0x00,0x00,0x00,0x00}, // i + {0x80,0xfd,0x00,0x00,0x00,0x00,0x00}, // j + {0x7f,0x04,0x04,0x7a,0x00,0x00,0x00}, // k + {0x7f,0x00,0x00,0x00,0x00,0x00,0x00}, // l + {0x7c,0x04,0x04,0x7c,0x04,0x04,0x7c}, // m + {0x7c,0x04,0x04,0x7c,0x00,0x00,0x00}, // n + {0x7c,0x44,0x44,0x7c,0x00,0x00,0x00}, // o + {0xfc,0x44,0x44,0x7c,0x00,0x00,0x00}, // p + {0x7c,0x44,0x44,0xfc,0x00,0x00,0x00}, // q + {0x7c,0x04,0x04,0x0c,0x00,0x00,0x00}, // r + {0x5c,0x54,0x54,0x74,0x00,0x00,0x00}, // s + {0x7f,0x44,0x44,0x60,0x00,0x00,0x00}, // t + {0x7c,0x40,0x40,0x7c,0x00,0x00,0x00}, // u + {0x7c,0x20,0x10,0x0c,0x00,0x00,0x00}, // v + {0x7c,0x40,0x40,0x7c,0x40,0x40,0x7c}, // w + {0x6c,0x10,0x10,0x6c,0x00,0x00,0x00}, // x + {0xbc,0xa0,0xa0,0xfc,0x00,0x00,0x00}, // y + {0x64,0x54,0x54,0x4c,0x00,0x00,0x00}, // z + {0x08,0x3e,0x41,0x00,0x00,0x00,0x00}, // { + {0xff,0x00,0x00,0x00,0x00,0x00,0x00}, // | + {0x41,0x3e,0x08,0x00,0x00,0x00,0x00}, // } + {0x1c,0x04,0x1c,0x10,0x1c,0x00,0x00}, // ~ + {0x00,0x00,0x00,0x00,0x00,0x00,0x00} +}; + +void write_bits(uint8_t r1, uint8_t g1, uint8_t b1, uint8_t r2, uint8_t g2, uint8_t b2){ + gpio_set_level(GPIO_R1, r1); + gpio_set_level(GPIO_G1, g1); + gpio_set_level(GPIO_B1, b1); + gpio_set_level(GPIO_R2, r2); + gpio_set_level(GPIO_G2, g2); + gpio_set_level(GPIO_B2, b2); +} + +void write_address(uint8_t addr){ + gpio_set_level(GPIO_A, addr&0x01); + gpio_set_level(GPIO_B, (addr&0x02)>>1); + gpio_set_level(GPIO_C, (addr&0x04)>>2); + gpio_set_level(GPIO_D, (addr&0x08)>>3); + gpio_set_level(GPIO_E, (addr&0x10)>>4); +} + +void put_chr(uint8_t line, uint8_t pos, uint8_t chr[]){ + for(int i=0;i<8;i++) + for(int j=0;j<7;j++) + fb[1+(line*10)+i][(pos*8)+j][0] = (chr[j]&(1<>i; +} + +void put_line(uint8_t line, char *str){ + uint8_t pos = 0; + while(str[pos] != 0){ + put_chr(line, pos, font[str[pos]-0x20]); + pos++; + } +} + +void latch(){ + gpio_set_level(GPIO_LAT, 0); + gpio_set_level(GPIO_LAT, 1); +} + +void clock(){ + gpio_set_level(GPIO_CLK, 1); + gpio_set_level(GPIO_CLK, 0); +} + +void app_main(void) +{ + printf("Hello world!\n"); + + put_line(0, "429 Amalienplatz"); + put_line(1, "0123abcd"); + + gpio_config_t io_conf; + //disable interrupt + io_conf.intr_type = GPIO_INTR_DISABLE; + //set as output mode + io_conf.mode = GPIO_MODE_OUTPUT; + //bit mask of the pins that you want to set,e.g.GPIO18/19 + io_conf.pin_bit_mask = + (1ULL<