как на ESP32 настроить таймер на частоту работы 70Гц
вся проблема в том что контролер все время перезапускается
вот сам скетч
вся проблема в том что контролер все время перезапускается
вот сам скетч
C++:
//#include "bitmap.h"
#include "111.h"
unsigned long last_time;
#define X_RES 320 // pixels
#define Y_RES 240 // pixels
#define REFRESH_RATE 70 // Hz
#define S 14 ///S
#define CL1 12
#define CL2 13
#define DISP 15
#define PSD0 16
#define PSD1 5
#define PSD2 4
#define PSD3 0
#define pulseCL2() {digitalWrite(CL2, HIGH);digitalWrite(CL2, LOW);}
#define ON true
#define OFF false
char* bitmap_ptr = (char*)bitmap;
#define SWAP(b) b = (b << 4) | (b >> 4)
//#include "gpio.h"
#include "user_interface.h"
#include "hw_timer.h"
//#include "hw_timer.c"
#define REG_READ(_r) (*(volatile uint32 *)(_r))
#define WDEV_NOW() REG_READ(0x3ff20c00)
uint32 tick_now2 = 0;
static uint32 j = 0;
bool state = 0;
long ledOn = 300000, ledOff = 700000;
unsigned long lastMillis = 0;
void hw_test_timer_cb() {
refresh();
hw_timer_arm(14285);
}
void ICACHE_FLASH_ATTR user_init(void) {
//hw_timer_init(NMI_SOURCE, 0);
hw_timer_init(FRC1_SOURCE, 0);
hw_timer_set_func(hw_test_timer_cb);
hw_timer_arm(14285);
} // End of user_init
void WR_DATA(uint8_t data)
{
// gpio_set_level(REGISTER_BIT7_ON_PIN, (disp_register & 0x80) >> 7);
// gpio_set_level(REGISTER_BIT6_ON_PIN, (disp_register & 0x40) >> 6);
// gpio_set_level(REGISTER_BIT5_ON_PIN, (disp_register & 0x20) >> 5);
// gpio_set_level(REGISTER_BIT4_ON_PIN, (disp_register & 0x10) >> 4);
digitalWrite(PSD3, (data & 0x08) >> 3);
digitalWrite(PSD2, (data & 0x04) >> 2);
digitalWrite(PSD1, (data & 0x02) >> 1);
digitalWrite(PSD0, (data & 0x01));
}
void refresh()
{
// Critical Code here
//
//digitalWrite(S, !digitalRead(S));
///digitalWrite(CL2, !digitalRead(CL2));
//digitalWrite(CL1, !digitalRead(CL1));
//digitalWrite(D0, !digitalRead(D0));
//digitalWrite(D1, !digitalRead(D1));
//digitalWrite(D2, !digitalRead(D2));
//digitalWrite(D3, !digitalRead(D3));
uint8_t x, y, bitmap_byte, bitmap_byte1;
for(y = 0; y < 240; y++) {
for(x = 0; x < 40; x++) {
// byte thisByte = pgm_read_byte(& bitmap ++);
// bitmap_byte = pgm_read_byte(bitmap_ptr++);
// bitmap_byte1 =bitmap_byte;
// SWAP(bitmap_byte);
PGM_P data1 = pgm_read_word(bitmap_ptr++);
// WR_DATA( bitmap_byte);
digitalWrite(PSD3, (data1 & 0x80) >> 7);
digitalWrite(PSD2, (data1 & 0x40) >> 6);
digitalWrite(PSD1, (data1 & 0x20) >> 5);
digitalWrite(PSD0, (data1 & 0x10) >> 4);
digitalWrite(CL2, HIGH); // up
digitalWrite(CL2, LOW); // down
// WR_DATA (bitmap_byte1);
digitalWrite(PSD3, (data1 & 0x08) >> 3);
digitalWrite(PSD2, (data1 & 0x04) >> 2);
digitalWrite(PSD1, (data1 & 0x02) >> 1);
digitalWrite(PSD0, (data1 & 0x01));
digitalWrite(CL2, HIGH); // up
digitalWrite(CL2, LOW); // down
}
// Clear S and toggle s on start of frame
if (y == 0) {
digitalWrite(S, HIGH); // Set First Lime Marker
}
digitalWrite(CL1, HIGH); // up
digitalWrite(CL1, LOW); // down
digitalWrite(S, LOW);
}
}
void setup() {
Serial.begin(115200); //Serial connection
delay(500);
Serial.println("Waiting for connection");
// hw_timer_init(NMI_SOURCE, 0);
hw_timer_init(FRC1_SOURCE,0);
hw_timer_set_func(hw_test_timer_cb);
hw_timer_arm(14285);
Serial.print(" hw_timer_init ");
pinMode(S, OUTPUT);
pinMode(DISP, OUTPUT);
pinMode(CL1, OUTPUT);
pinMode(CL2, OUTPUT);
pinMode(PSD0, OUTPUT);
pinMode(PSD1, OUTPUT);
pinMode(PSD2, OUTPUT);
pinMode(PSD3, OUTPUT);
digitalWrite(DISP, HIGH);
digitalWrite(S, LOW);
digitalWrite(CL1, LOW);
digitalWrite(CL2, LOW);
digitalWrite(PSD0, LOW);
digitalWrite(PSD1, LOW);
digitalWrite(PSD2, LOW);
digitalWrite(PSD3, LOW);
}
void loop()
{
if (micros() - last_time > 14285)
{
last_time = micros();
//Serial.println(FPSTR(pgm_read_word(bitmap_ptr++)));
//refresh();
}
if (millis() - lastMillis > 1000) {
lastMillis = millis();
// Serial.print("LED = ");
// Serial.println(state);
}
//
//delay(2000);
}