Hi everyone,
I'm trying to use a P10 led display (DMD2) with a NodeMcu V3 and WiFi as STA and I get and exception.
Below is the sketch:
#include <SPI.h>
#include <DMD2.h>
#include <ESP8266WiFi.h>
//#include <ESP8266WiFiSTA.h>
//SPIDMD dmd(1,1);
#define pin_A 16 //D0
#define pin_B 12 //D6
#define pin_sclk 0 //D3
#define pin_clk 14 //D5
#define pin_r 13 //D7
#define pin_noe 15 //D8
#define DISPLAYS_WIDE 1
#define DISPLAYS_HIGH 1
SPIDMD dmd(DISPLAYS_WIDE, DISPLAYS_HIGH, pin_noe, pin_A, pin_B, pin_sclk); // DMD controls the entire display
void setup() {
ESP.eraseConfig();
Serial.begin(9600);
Serial.println("Setup");
pinMode(LED_BUILTIN, OUTPUT);
/**/
dmd.begin();
/**/
dmd.setBrightness(32);
Serial.println("DMD");
Serial.println("WiFi");
/**/
WiFi.disconnect(true);
WiFi.setAutoReconnect(false);
WiFi.mode(WIFI_OFF);
WiFi.mode(WIFI_STA);
WiFi.begin("myWiFi", "myPassword");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
/**/
}
bool turn_on = true;
// the loop function runs over and over again forever
void loop() {
for (int i = 0; i < 512; i++) {
digitalWrite(LED_BUILTIN, i % 2);
dmd.setPixel(i % 32, i / 32, turn_on ? GRAPHICS_ON : GRAPHICS_OFF);
Serial.println(i);
delay(100);
}
turn_on = !turn_on;
}
and the Decoded exception:
Exception 0: Illegal instruction
PC: 0x40201998: scan_running_dmds() at C:\Users\mefor\Documents\Arduino\libraries\DMD2\DMD2_Timer.cpp line 215
EXCVADDR: 0x00000000
Decoding stack results
0x40201704: SPIDMD::writeSPIData(unsigned char volatile**, int) at C:\Users\mefor\Documents\Arduino\libraries\DMD2\DMD2.cpp line 59
0x4010025c: timer0_isr_handler(void*) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_timer.cpp line 84
0x40100278: timer0_isr_handler(void*) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_timer.cpp line 89
0x401008f7: umm_free_core(void*) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\umm_malloc\umm_malloc.cpp line 351
0x40100b7b: free(void*) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\umm_malloc\umm_malloc.cpp line 398
0x40100530: pvPortZalloc(size_t, char const*, int) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\heap.cpp line 301
0x40202734: HardwareSerial::write(unsigned char const*, unsigned int) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266/HardwareSerial.h line 164
0x40201cd9: ESP8266WiFiGenericClass::mode(WiFiMode, WiFiState*) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\libraries\ESP8266WiFi\src\ESP8266WiFiGeneric.cpp line 432
0x40202ac8: Print::println() at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\Print.cpp line 186
0x40202050: ESP8266WiFiGenericClass::mode(WiFiMode, WiFiState*) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\libraries\ESP8266WiFi\src\ESP8266WiFiGeneric.cpp line 458
0x4020112a: setup() at D:\Dev\Arduino\test\P10Test/P10Test.ino line 36
0x402032fc: loop_wrapper() at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_main.cpp line 194
If I run only the display it works great, if I run only the WiFi it works great.
What could be the issue ?
I'm guessing some timer0 issues, maybe ?!
If I move the dmd.begin after the wifi is connected it works for 10-15 seconds then I get:
Exception 0: Illegal instruction
PC: 0x4020199c: scan_running_dmds() at C:\Users\mefor\Documents\Arduino\libraries\DMD2\DMD2_Timer.cpp line 214
EXCVADDR: 0x00000000
Decoding stack results
0x40101152: stopWaveform(uint8_t) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_waveform.cpp line 194
0x4010041b: millis() at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_wiring.cpp line 191
0x40203d18: __analogWrite(uint8_t, int) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_wiring_pwm.cpp line 69
0x40101152: stopWaveform(uint8_t) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_waveform.cpp line 194
0x40201807: BaseDMD::scanDisplay() at C:\Users\mefor\Documents\Arduino\libraries\DMD2\DMD2.cpp line 102
0x4010017c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_main.cpp line 177
0x4010025c: timer0_isr_handler(void*) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_timer.cpp line 84
0x4020c72d: sys_timeout_abs at core/timeouts.c line 189
0x4020bb0d: memp_free at core/memp.c line 447
0x40203160: loop_task(ETSEvent*) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_main.cpp line 205
0x4010017c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_main.cpp line 177
0x402031d5: __esp_yield() at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_main.cpp line 116
0x40204d4c: initTimer() at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_waveform.cpp line 89
0x40203846: __delay(unsigned long) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_wiring.cpp line 54
0x401002a2: timer1_isr_init() at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_timer.cpp line 49
0x40204e31: startWaveformClockCycles(uint8_t, uint32_t, uint32_t, uint32_t) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_waveform.cpp line 146
0x40203d18: __analogWrite(uint8_t, int) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_wiring_pwm.cpp line 69
0x40101152: stopWaveform(uint8_t) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_waveform.cpp line 194
0x40204d4c: initTimer() at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_waveform.cpp line 89
0x40201807: BaseDMD::scanDisplay() at C:\Users\mefor\Documents\Arduino\libraries\DMD2\DMD2.cpp line 102
0x4010017c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_main.cpp line 177
0x402031d5: __esp_yield() at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_main.cpp line 116
0x40204d4c: initTimer() at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_waveform.cpp line 89
0x4010025c: timer0_isr_handler(void*) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_timer.cpp line 84
0x40203846: __delay(unsigned long) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_wiring.cpp line 54
0x401002a2: timer1_isr_init() at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_timer.cpp line 49
0x40204e31: startWaveformClockCycles(uint8_t, uint32_t, uint32_t, uint32_t) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_waveform.cpp line 146
0x4010017c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_main.cpp line 177
0x40203d18: __analogWrite(uint8_t, int) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_wiring_pwm.cpp line 69
0x40101152: stopWaveform(uint8_t) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_waveform.cpp line 194
0x4010017c: ets_post(uint8, ETSSignal, ETSParam) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_main.cpp line 177
0x402031d5: __esp_yield() at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_main.cpp line 116
0x40204d4c: initTimer() at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_waveform.cpp line 89
0x40101152: stopWaveform(uint8_t) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_waveform.cpp line 194
0x40203846: __delay(unsigned long) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_wiring.cpp line 54
0x401002a2: timer1_isr_init() at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_timer.cpp line 49
0x40204e31: startWaveformClockCycles(uint8_t, uint32_t, uint32_t, uint32_t) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_waveform.cpp line 146
0x40201807: BaseDMD::scanDisplay() at C:\Users\mefor\Documents\Arduino\libraries\DMD2\DMD2.cpp line 102
0x40203d18: __analogWrite(uint8_t, int) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_wiring_pwm.cpp line 69
0x40101152: stopWaveform(uint8_t) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_waveform.cpp line 194
0x40202744: HardwareSerial::write(unsigned char const*, unsigned int) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266/HardwareSerial.h line 165
0x40201807: BaseDMD::scanDisplay() at C:\Users\mefor\Documents\Arduino\libraries\DMD2\DMD2.cpp line 102
0x402019bd: scan_running_dmds() at C:\Users\mefor\Documents\Arduino\libraries\DMD2\DMD2_Timer.cpp line 215
0x4010025c: timer0_isr_handler(void*) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_timer.cpp line 84
0x40100278: timer0_isr_handler(void*) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\core_esp8266_timer.cpp line 89
0x402011d6: loop() at D:\Dev\Arduino\test\P10Test/P10Test.ino line 53
0x402041c1: uart_write(uart_t*, char const*, size_t) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266\uart.cpp line 509
0x40202738: HardwareSerial::write(unsigned char const*, unsigned int) at C:\Users\mefor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.2\cores\esp8266/HardwareSerial.h line 164
[...]