Add Self Test

This commit is contained in:
sanni 2023-03-08 18:26:19 +01:00
parent e7b2ee094e
commit bc9c306c22

View File

@ -4,7 +4,7 @@
This project represents a community-driven effort to provide
an easy to build and easy to modify cartridge dumper.
Date: 23.02.2023
Date: 08.03.2023
Version: 12.4
SD lib: https://github.com/greiman/SdFat
@ -82,6 +82,9 @@ char ver[5] = "12.4";
// If you only get an empty or "Press Button" screen after flashing
// you have enabled too many modules
// Self test
#define enable_selftest
// Atari 2600
//#define enable_ATARI
@ -1007,9 +1010,10 @@ static const char modeItem17[] PROGMEM = "Arcadia 2001";
static const char modeItem18[] PROGMEM = "Fairchild Channel F";
static const char modeItem19[] PROGMEM = "Super A'can";
static const char modeItem20[] PROGMEM = "Flashrom Programmer";
static const char modeItem21[] PROGMEM = "About";
static const char modeItem21[] PROGMEM = "Self Test";
static const char modeItem22[] PROGMEM = "About";
//static const char modeItem22[] PROGMEM = "Reset"; (stored in common strings array)
static const char* const modeOptions[] PROGMEM = { modeItem1, modeItem2, modeItem3, modeItem4, modeItem5, modeItem6, modeItem7, modeItem8, modeItem9, modeItem10, modeItem11, modeItem12, modeItem13, modeItem14, modeItem15, modeItem16, modeItem17, modeItem18, modeItem19, modeItem20, modeItem21, string_reset2 };
static const char* const modeOptions[] PROGMEM = { modeItem1, modeItem2, modeItem3, modeItem4, modeItem5, modeItem6, modeItem7, modeItem8, modeItem9, modeItem10, modeItem11, modeItem12, modeItem13, modeItem14, modeItem15, modeItem16, modeItem17, modeItem18, modeItem19, modeItem20, modeItem21, modeItem22, string_reset2 };
// All included slots
void mainMenu() {
@ -1035,7 +1039,7 @@ void mainMenu() {
num_answers = 7;
} else { // currPage == 4
option_offset = 21;
num_answers = 1;
num_answers = 2;
}
// Copy menuOptions out of progmem
convertPgm(modeOptions + option_offset, num_answers);
@ -1199,11 +1203,17 @@ void mainMenu() {
break;
#endif
#ifdef enable_selftest
case 20:
selfTest();
break;
#endif
case 21:
aboutScreen();
break;
case 21:
case 22:
resetArduino();
break;
@ -1236,8 +1246,9 @@ static const char addonsItem2[] PROGMEM = "80s Consoles";
static const char addonsItem3[] PROGMEM = "90s Consoles";
static const char addonsItem4[] PROGMEM = "Handhelds";
static const char addonsItem5[] PROGMEM = "Flashrom Programmer";
//static const char addonsItem5[] PROGMEM = "Reset"; (stored in common strings array)
static const char* const addonsOptions[] PROGMEM = { addonsItem1, addonsItem2, addonsItem3, addonsItem4, addonsItem5, string_reset2 };
static const char addonsItem6[] PROGMEM = "Self Test (EEP)";
//static const char addonsItem7[] PROGMEM = "Reset"; (stored in common strings array)
static const char* const addonsOptions[] PROGMEM = { addonsItem1, addonsItem2, addonsItem3, addonsItem4, addonsItem5, addonsItem6, string_reset2 };
// 70s Consoles submenu
static const char consoles70Item1[] PROGMEM = "Atari 2600";
@ -1325,8 +1336,8 @@ void addonMenu() {
// create menu with title and 5 options to choose from
unsigned char addonsMenu;
// Copy menuOptions out of progmem
convertPgm(addonsOptions, 6);
addonsMenu = question_box(F("Type"), menuOptions, 6, 0);
convertPgm(addonsOptions, 7);
addonsMenu = question_box(F("Type"), menuOptions, 7, 0);
// wait for user choice to come back from the question box menu
switch (addonsMenu) {
@ -1359,7 +1370,13 @@ void addonMenu() {
break;
#endif
#ifdef enable_selftest
case 5:
selfTest();
break;
#endif
case 6:
resetArduino();
break;
@ -1557,6 +1574,136 @@ void handheldMenu() {
}
#endif
/******************************************
Self Test
*****************************************/
#ifdef enable_selftest
void selfTest() {
display_Clear();
println_Msg(F("Self Test"));
println_Msg(F(""));
println_Msg(F("Remove all Cartridges"));
println_Msg(F("before continuing!!!"));
println_Msg(F(""));
print_STR(press_button_STR, 1);
display_Update();
wait();
display_Clear();
// Test if pin 7 is held high by 1K resistor
pinMode(7, INPUT);
println_Msg(F("Testing 1K resistor "));
display_Update();
if (!digitalRead(7)) {
setColor_RGB(255, 0, 0);
errorLvl = 1;
println_Msg(F("Error"));
println_Msg(F(""));
print_STR(press_button_STR, 1);
display_Update();
wait();
resetArduino();
}
println_Msg(F("Testing short to GND"));
display_Update();
// Set pins 2-9, 14-17, 22-37, 42-49, 54-69 to input and activate internal pull-up resistors
for (byte pinNumber = 2; pinNumber <= 69; pinNumber++) {
if (((2 <= pinNumber) && (pinNumber <= 9)) || ((14 <= pinNumber) && (pinNumber <= 17)) || ((22 <= pinNumber) && (pinNumber <= 37)) || ((42 <= pinNumber) && (pinNumber <= 49)) || ((54 <= pinNumber) && (pinNumber <= 69))) {
pinMode(pinNumber, INPUT_PULLUP);
}
}
// Tests pins 2-9, 14-17, 22-37, 42-49, 54-69 for short to GND
for (byte pinNumber = 2; pinNumber <= 69; pinNumber++) {
if (((2 <= pinNumber) && (pinNumber <= 9)) || ((14 <= pinNumber) && (pinNumber <= 17)) || ((22 <= pinNumber) && (pinNumber <= 37)) || ((42 <= pinNumber) && (pinNumber <= 49)) || ((54 <= pinNumber) && (pinNumber <= 69))) {
if (!digitalRead(pinNumber)) {
setColor_RGB(255, 0, 0);
errorLvl = 1;
print_Msg(F("Error: Pin "));
if ((54 <= pinNumber) && (pinNumber <= 69)) {
print_Msg(F("A"));
println_Msg(pinNumber - 54);
} else {
print_Msg(F("D"));
println_Msg(pinNumber);
}
println_Msg(F(""));
print_STR(press_button_STR, 1);
display_Update();
wait();
resetArduino();
}
}
}
println_Msg(F("Testing short between pins"));
display_Update();
// Test for short between pins 2-9, 14-17, 22-37, 42-49, 54-69
for (byte pinNumber = 2; pinNumber <= 69; pinNumber++) {
if (((2 <= pinNumber) && (pinNumber <= 9)) || ((14 <= pinNumber) && (pinNumber <= 17)) || ((22 <= pinNumber) && (pinNumber <= 37)) || ((42 <= pinNumber) && (pinNumber <= 49)) || ((54 <= pinNumber) && (pinNumber <= 69))) {
pinMode(pinNumber, OUTPUT);
digitalWrite(pinNumber, LOW);
for (byte pinNumber2 = 2; pinNumber2 <= 69; pinNumber2++) {
if (((2 <= pinNumber2) && (pinNumber2 <= 9)) || ((14 <= pinNumber2) && (pinNumber2 <= 17)) || ((22 <= pinNumber2) && (pinNumber2 <= 37)) || ((42 <= pinNumber2) && (pinNumber2 <= 49)) || ((54 <= pinNumber2) && (pinNumber2 <= 69)) && (pinNumber != pinNumber2)) {
pinMode(pinNumber2, INPUT_PULLUP);
if (!digitalRead(pinNumber2)) {
setColor_RGB(255, 0, 0);
errorLvl = 1;
print_Msg(F("Error: Pin "));
if ((54 <= pinNumber) && (pinNumber <= 69)) {
print_Msg(F("A"));
print_Msg(pinNumber - 54);
} else {
print_Msg(F("D"));
print_Msg(pinNumber);
}
print_Msg(F(" + "));
if ((54 <= pinNumber2) && (pinNumber2 <= 69)) {
print_Msg(F("A"));
println_Msg(pinNumber2 - 54);
} else {
print_Msg(F("D"));
println_Msg(pinNumber2);
}
println_Msg(F(""));
print_STR(press_button_STR, 1);
display_Update();
wait();
resetArduino();
}
}
}
pinMode(pinNumber, INPUT_PULLUP);
}
}
println_Msg(F("Testing Clock Generator"));
initializeClockOffset();
if (!i2c_found) {
setColor_RGB(255, 0, 0);
errorLvl = 1;
println_Msg(F("Error: Clock Generator"));
println_Msg(F("not found"));
println_Msg(F(""));
print_STR(press_button_STR, 1);
display_Update();
wait();
resetArduino();
}
println_Msg(F(""));
print_STR(press_button_STR, 1);
display_Update();
wait();
resetArduino();
}
#endif
/******************************************
About Screen
*****************************************/