Code:
uint32_t xx = 3; // pick TEST inloop() :: 0,1,2 >> change this before compile - or add query in setup() to set
void setup() {
Serial.begin(115200);
while (!Serial && millis() < 4000 );
Serial.println("Compile Time:: " __FILE__ " " __DATE__ " " __TIME__);
analogReadRes(12);
analogWriteRes(12);
Serial.print("This Teensy Digital Pin Count :: ");
Serial.println(NUM_DIGITAL_PINS);
HelpMe();
}
uint32_t cnt = 0;
void loop() {
cnt++;
if ( xx == 0 ) {
// array pinsSDIO[] requires PINS JUMPERED: 34>37, 35>38, 36>39
sdioTestPWM( cnt );
}
else if ( xx == 1 ) {
// This code changes Voltage seen on each pin
// Freq changes in pin pairs: 34/35, 36/37, 38/39
sdioTestVolts( cnt );
}
else if ( xx == 2 )
{
// Paul's code changes FREQ to each pin
// uint32_t xx = 2; // change this before compile - or add query in setup() to set
loopPaulHz();
}
else if ( xx == 3 ) {
allPinTest( cnt );
}
else if ( xx == 4 ) {
aLogPinTest( cnt );
}
int xxQ = tellMe( 0 );
if (xxQ < 10 ) xx = xxQ;
}
elapsedMillis emiWait;
uint32_t emWaitM;
uint32_t pinsSDIO[9] = { 34, 35, 36, 37, 38, 39, 34, 35, 36 }; //note first three repeat duplicates
//uint32_t pinsSDIO[9] = { 34, 35, 36, 37, 39, 38, 34, 35, 36 };
FASTRUN void sdioTestPWM( uint32_t cnt) {
int ii, mm, nn;
if ( cnt % 2 ) mm = 0;
else mm = 3;
for ( ii = mm; ii < mm + 3; ii++ ) {
nn = ii + 3;
// pinMode( pinsSDIO[ii], INPUT_DISABLE); // Not required - pin state set on analogWrite
pinMode( pinsSDIO[nn], INPUT);
}
for ( ii = mm; ii < mm + 3; ii++ ) {
nn = ii + 3;
//analogWriteFrequency( pinsSDIO[ii], (nn + (cnt % 4)) * 1000000 ); // Similar results on changing or other frequencies
analogWriteFrequency( pinsSDIO[ii], 16664000 );
analogWrite( pinsSDIO[ii], 128 );
delayMicroseconds( 4);
uint32_t pCnt = 0, Cnt0 = 0, Cnt1 = 0;
while ( 0 == digitalReadFast( pinsSDIO[nn] ) );
while ( digitalReadFast( pinsSDIO[nn] ) );
emiWait = 0;
emWaitM = millis() + 500;
while ( emiWait < 500 ) {
// while ( emWaitM >millis() ) {
while ( 0 == digitalReadFast( pinsSDIO[nn] ) ) Cnt0++;
while ( digitalReadFast( pinsSDIO[nn] ) ) Cnt1++;
pCnt++;
}
Serial.print(ii);
Serial.print(" Cnt=");
Serial.print(pCnt * 2);
Serial.print(" PWM out =");
Serial.print(pinsSDIO[ii]);
Serial.print(" Dig Read =");
Serial.print(pinsSDIO[nn]);
Serial.print(" Cnt0's=");
Serial.print(Cnt0);
Serial.print(" Cnt1's=");
Serial.print(Cnt1);
Serial.println();
}
Serial.println();
}
FASTRUN void sdioTestVolts( uint32_t cnt) {
int ii, nn;
for ( ii = 0; ii < 6; ii++ ) {
nn = 1 + ii;
analogWriteFrequency( pinsSDIO[ii], nn * 1000 );
analogWrite( pinsSDIO[ii], nn * 32 );
}
while (1) {
}
}
uint32_t n = 0;
void loopPaulHz()
{
#ifdef GPIO8_GDIR
GPIO8_GDIR |= (0x3F << 12);
n++;
GPIO8_DR = (GPIO8_DR & ~(0x3F << 12)) | ((n & 0x3F) << 12);
delayMicroseconds(50);
#endif
}
uint32_t pinLast[NUM_DIGITAL_PINS];
void allPinTest( uint32_t cnt ) {
uint32_t ii, SET;
Serial.print("PULLDOWN Start Vals:\n ");
SET = 0;
Serial.print("PULLDOWN :: TEST to 3.3V\n ");
for ( ii = 0; ii < NUM_DIGITAL_PINS; ii++) {
pinMode( ii, INPUT_PULLDOWN );
delayMicroseconds( 5 );
pinLast[ii] = digitalReadFast( ii );
if (pinLast[ii]) {
Serial.print("\nd#=");
Serial.print( ii );
Serial.print( " val=" );
}
Serial.print( pinLast[ii] );
Serial.print(',');
}
Serial.println();
Serial.println();
while ( 1 ) {
uint32_t jj, dd = 0, cc = 0;
cc = 0;
for ( ii = 0; ii < NUM_DIGITAL_PINS; ii++) {
jj = digitalReadFast( ii );
if ( jj != pinLast[ii] ) {
dd = 1;
cc++;
pinLast[ii] = jj;
Serial.print("d#=");
Serial.print( ii );
if ( pinLast[ii] ) Serial.print( "\t" );
Serial.print( " val=" );
Serial.print( pinLast[ii] );
Serial.print(',');
}
if ( cc > 1 ) {
Serial.println(">>>");
}
if ( Serial.available() ) {
while ( Serial.available() ) Serial.read();
if ( 0 == SET ) {
SET = 1;
Serial.print("PULLUP :: TEST TO GND\n ");
}
else {
SET = 0;
Serial.print("PULLDOWN :: TEST to 3.3V\n ");
}
for ( ii = 0; ii < NUM_DIGITAL_PINS; ii++) {
if ( 0 == SET )
pinMode( ii, INPUT_PULLDOWN );
else
pinMode( ii, INPUT_PULLUP );
delayMicroseconds( 20 );
pinLast[ii] = digitalReadFast( ii );
if (SET != pinLast[ii]) {
Serial.print("d#=");
Serial.print( ii );
Serial.print( " val=" );
Serial.println( pinLast[ii] );
}
}
}
}
if ( dd ) {
dd = 0;
Serial.println();
delay( 50 );
}
}
}
PROGMEM char showText [][48] = {
"Enter # below for test choice\t ver0.1\n",
"\t0: test 34,35,36 crossed to 36,37,38\n",
"\t1: change voltage on 34-39\n",
"\t2: change Freq on 34-39\n",
"\t3: All Pins Test digital\n",
"\t4: Test Analog A0-A13 \n",
""
};
int tellMe( int whatNow ) {
int retVal = 0;
if ( 0 == whatNow )
if ( Serial.available() ) while ( Serial.available() ) Serial.read();
else return 100;
HelpMe();
while ( Serial.available() ) {
char chi = Serial.read();
if ( chi >= '0' && chi <= '9' ) retVal = chi - '0';
}
return retVal;
}
void HelpMe() {
uint32_t ii = 0;
while ( 0 != showText[ii][0] ) {
Serial.print( showText[ii] );
ii++;
}
}
uint32_t pinAlog[ 14 ] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13}; // FAKE NUM_ANALOG_INPUTS==14 t4 p#14-#27
void aLogPinTest( uint32_t cnt ) {
uint32_t ii, SET;
Serial.print("PULLDOWN Start Vals:\n ");
SET = 0;
Serial.print("PULLDOWN :: TEST to 3.3V\n ");
for ( ii = 0; ii < NUM_DIGITAL_PINS; ii++) {
pinMode( ii, INPUT_PULLDOWN );
delayMicroseconds( 5 );
pinLast[ii] = digitalReadFast( ii );
if (pinLast[ii]) {
Serial.print("\nd#=");
Serial.print( ii );
Serial.print( " val=" );
}
Serial.print( pinLast[ii] );
Serial.print(',');
}
Serial.println();
Serial.println();
while ( 1 ) {
uint32_t jj, dd = 0, cc = 0;
cc = 0;
for ( ii = 0; ii < NUM_DIGITAL_PINS; ii++) {
jj = digitalReadFast( ii );
if ( jj != pinLast[ii] ) {
dd = 1;
cc++;
pinLast[ii] = jj;
Serial.print("d#=");
Serial.print( ii );
if ( pinLast[ii] ) Serial.print( "\t" );
Serial.print( " val=" );
Serial.print( pinLast[ii] );
Serial.print(',');
}
if ( cc > 1 ) {
Serial.println(">>>");
}
if ( Serial.available() ) {
while ( Serial.available() ) Serial.read();
if ( 0 == SET ) {
SET = 1;
Serial.print("PULLUP :: TEST TO GND\n ");
}
else {
SET = 0;
Serial.print("PULLDOWN :: TEST to 3.3V\n ");
}
for ( ii = 0; ii < NUM_DIGITAL_PINS; ii++) {
if ( 0 == SET )
pinMode( ii, INPUT_PULLDOWN );
else
pinMode( ii, INPUT_PULLUP );
delayMicroseconds( 20 );
pinLast[ii] = digitalReadFast( ii );
if (SET != pinLast[ii]) {
Serial.print("d#=");
Serial.print( ii );
Serial.print( " val=" );
Serial.println( pinLast[ii] );
}
}
}
}
if ( dd ) {
dd = 0;
Serial.println();
delay( 50 );
}
}
}
Directions for USE: