Merge pull request #4 from WantClue/temperature-failsafe
Add temperature reading to Asic run and disable if overheat
This commit is contained in:
commit
6a04694180
@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
#include "drivers/nerd-nos/nerdnos.h"
|
#include "drivers/nerd-nos/nerdnos.h"
|
||||||
#include "mining_nerdnos.h"
|
#include "mining_nerdnos.h"
|
||||||
|
#include "drivers/nerd-nos/adc.h"
|
||||||
|
#include "drivers/nerd-nos/bm1397.h"
|
||||||
|
|
||||||
extern WiFiClient client;
|
extern WiFiClient client;
|
||||||
extern mining_subscribe mWorker;
|
extern mining_subscribe mWorker;
|
||||||
@ -38,6 +40,10 @@ static bm_job_t asic_jobs[ASIC_JOB_COUNT] = {0};
|
|||||||
// to track hashrate
|
// to track hashrate
|
||||||
#define ASIC_HISTORY_SIZE 128
|
#define ASIC_HISTORY_SIZE 128
|
||||||
|
|
||||||
|
// define temperature readings
|
||||||
|
#define MAX_SAFE_TEMP 80.0 // Define maximum safe temperature (in Celsius)
|
||||||
|
#define TEMP_CHECK_INTERVAL 5000 // Check temperature every 5 seconds (in milliseconds)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint32_t diffs[ASIC_HISTORY_SIZE];
|
uint32_t diffs[ASIC_HISTORY_SIZE];
|
||||||
uint64_t timestamps[ASIC_HISTORY_SIZE];
|
uint64_t timestamps[ASIC_HISTORY_SIZE];
|
||||||
@ -120,6 +126,8 @@ void runASIC(void * task_id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint32_t extranonce_2 = 0;
|
uint32_t extranonce_2 = 0;
|
||||||
|
unsigned long lastTempCheck = 0;
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
// wait for new job
|
// wait for new job
|
||||||
while(!mMiner.newJob) {
|
while(!mMiner.newJob) {
|
||||||
@ -142,6 +150,28 @@ void runASIC(void * task_id) {
|
|||||||
uint32_t current_difficulty = 0;
|
uint32_t current_difficulty = 0;
|
||||||
|
|
||||||
while (mMiner.inRun) {
|
while (mMiner.inRun) {
|
||||||
|
// Temperature check
|
||||||
|
unsigned long currentTime = millis();
|
||||||
|
if (currentTime - lastTempCheck > TEMP_CHECK_INTERVAL) {
|
||||||
|
float currentTemp = nerdnos_get_temperature(); // Get ASIC temperature
|
||||||
|
|
||||||
|
if (currentTemp > MAX_SAFE_TEMP) {
|
||||||
|
gpio_set_level(NERD_NOS_GPIO_PEN, 0); // Disable Buck
|
||||||
|
Serial.println("ASIC temperature too high. Disabling power.");
|
||||||
|
|
||||||
|
// Wait for temperature to drop
|
||||||
|
while (nerdnos_get_temperature() > (MAX_SAFE_TEMP - 15)) { // 15 degree hysteresis
|
||||||
|
vTaskDelay(2000 / portTICK_PERIOD_MS); // Check every 2 second
|
||||||
|
}
|
||||||
|
|
||||||
|
gpio_set_level(NERD_NOS_GPIO_PEN, 1); // Enable Buck again
|
||||||
|
Serial.println("Temperature safe. Re-enabling ASIC.");
|
||||||
|
BM1397_init(200, 1); // Re-Init ASIC
|
||||||
|
}
|
||||||
|
|
||||||
|
lastTempCheck = currentTime;
|
||||||
|
}
|
||||||
|
|
||||||
// wait for the timer to start a new job
|
// wait for the timer to start a new job
|
||||||
// also yields the CPU
|
// also yields the CPU
|
||||||
pthread_mutex_lock(&job_interval_mutex);
|
pthread_mutex_lock(&job_interval_mutex);
|
||||||
|
Loading…
Reference in New Issue
Block a user