working prototype for writing to two HUB75e 64x64

master
Eggert Jung 5 years ago
commit 8935a1e618

@ -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)

@ -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

@ -0,0 +1,2 @@
idf_component_register(SRCS "hello_world_main.c"
INCLUDE_DIRS "")

@ -0,0 +1,5 @@
#
# "main" pseudo-component makefile.
#
# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.)

@ -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 <stdio.h>
#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))>>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<<GPIO_LAT)|(1ULL<<GPIO_OE)|(1ULL<<GPIO_CLK)
|(1ULL<<GPIO_R1)|(1ULL<<GPIO_G1)|(1ULL<<GPIO_B1)|(1ULL<<GPIO_R2)|(1ULL<<GPIO_G2)|(1ULL<<GPIO_B2)
|(1ULL<<GPIO_A)|(1ULL<<GPIO_B)|(1ULL<<GPIO_C)|(1ULL<<GPIO_D)|(1ULL<<GPIO_E);
//disable pull-down mode
io_conf.pull_down_en = 0;
//disable pull-up mode
io_conf.pull_up_en = 0;
//configure GPIO with the given settings
gpio_config(&io_conf);
gpio_set_level(GPIO_OE, 0);
write_bits(1,0,0,1,0,0);
for(uint8_t i=0;i<128;i++){
clock();
}
latch();
gpio_set_level(GPIO_OE, 1);
gpio_set_level(GPIO_OE, 0);
uint8_t line = 0;
for (;;) {
for(uint8_t i=0;i<128;i++){
write_bits(fb[line][i][0],fb[line][i][1],fb[line][i][2],fb[32+line][i][0],fb[32+line][i][1],fb[32+line][i][2]);
clock();
}
gpio_set_level(GPIO_OE, 1);
latch();
write_address(line);
gpio_set_level(GPIO_OE, 0);
line = (line + 1)%32;
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,6 @@
CONFIG_APP_BUILD_TYPE_ELF_RAM=y
CONFIG_VFS_SUPPORT_TERMIOS=
CONFIG_NEWLIB_NANO_FORMAT=y
CONFIG_ESP32_PANIC_PRINT_HALT=y
CONFIG_ESP32_DEBUG_STUBS_ENABLE=
CONFIG_ESP_ERR_TO_NAME_LOOKUP=

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save