Hello,
I am working on a small project that should test one cable with 24 pins on one side and on the other side it got another 24 pins, in total 48 points. I want to use an Atmel328p, an LCD 16x2, and few mux and demux in order to complete the test.
My question is very simple how should I create the code in order the test to be fast and after it is finished to print on lcd if the cable is ok or not and where is the problem between witch pins .
I am working on a small project that should test one cable with 24 pins on one side and on the other side it got another 24 pins, in total 48 points. I want to use an Atmel328p, an LCD 16x2, and few mux and demux in order to complete the test.
My question is very simple how should I create the code in order the test to be fast and after it is finished to print on lcd if the cable is ok or not and where is the problem between witch pins .
#include <LiquidCrystal_SR_LCD3.h>
const int PIN_LCD_STROBE = 12; // Out: LCD IC4094 shift-register strobe
const int PIN_LCD_DATA = 11; // Out: LCD IC4094 shift-register data
const int PIN_LCD_CLOCK = 10; // Out: LCD IC4094 shift-register clock
const int PIN_LCD_BACKLIGHT = 7; // Out: LCD backlight (PWM)
// srdata / srclock / strobe
LiquidCrystal_SR_LCD3 lcd(PIN_LCD_DATA, PIN_LCD_CLOCK, PIN_LCD_STROBE);
int buton=3; //buton
int b=0;
int mux=0;
int pinmux=0;
int demux=0;
int pindemux=0;
int test=0;
int countermux=0;
int counterdemux=0;
int eroare_scurt=0;
int eroare_open=0;
int pinliber=0;
int doipini=0;
int i=0;
void setup(){
pinMode(PIN_LCD_BACKLIGHT, OUTPUT);
analogWrite(PIN_LCD_BACKLIGHT, 80);
pinMode(0 ,OUTPUT); //Atmegapin 2 mux A
pinMode(1 ,OUTPUT); //Atmegapin 3 mux B
pinMode(2 ,OUTPUT); //Atmegapin 4 mux C
pinMode(3 ,OUTPUT); //Atmegapin 5 mux 1 enable
pinMode(4 ,OUTPUT); //Atmegapin 6 mux 2 enable
pinMode(5 ,OUTPUT); //Atmegapin 11 mux 3 enable
pinMode(6 ,OUTPUT); //Atmegapin 12 demux A
pinMode(7 ,OUTPUT); //Atmegapin 13 demux B
pinMode(8 ,OUTPUT); //Atmegapin 14 demux C
pinMode(9 ,INPUT); //Atmegapin 15 outputdemux
pinMode(10 ,OUTPUT); //Atmegapin 16 display clk
pinMode(11 ,OUTPUT); //Atmegapin 17 display D
pinMode(12 ,OUTPUT); //Atmegapin 18 display stb
pinMode(A0, OUTPUT); //Atmegapin 23 demux 1 enable
pinMode(A1, OUTPUT); //Atmegapin 24 demux 2 enable
pinMode(A2, OUTPUT); //Atmegapin 25 demux 3 enable
pinMode(A3, INPUT); //Atmegapin 26 button
pinMode(13, OUTPUT); //Atmegapin 19 buzzer
lcd.begin(16, 2); // lcd init
lcd.home (); // go home
lcd.setCursor (0, 0);
lcd.print(F("text1"));
lcd.setCursor (0, 1);
lcd.print(F("text2"));
lcd.setCursor (0, 2);
}
void loop()
{
Start:
digitalWrite(3,1); //mux&demux off
digitalWrite(4,1);
digitalWrite(5,1);
digitalWrite(14,1);
digitalWrite(15,1);
digitalWrite(16,1);
// b=digitalRead(A3);
// if(b>=1){
eroare_scurt=0;
eroare_open=0;
pinliber=0;
countermux=0;
lcd.setCursor (0, 1);
//lcd.print(F("Start Program"));
for(mux=3;mux<6;mux++){ //mux on
digitalWrite(mux,0);
for(pinmux=0;pinmux<8;pinmux++){
digitalWrite(0, pinmux%2); //bit A
if(( pinmux >=2 && pinmux <=3) || pinmux>=6){
digitalWrite(1, HIGH); //bit B
};
if(pinmux>=4){
digitalWrite(2, HIGH); //bit C
};
countermux++;
counterdemux=0;
for(demux=14;demux<17;demux++){
digitalWrite(demux,0); //demux on
for(pindemux=0;pindemux<8;pindemux++){ //pin count
digitalWrite(6, pindemux%2); //bit A
if(( pindemux >=2 && pindemux <=3) || pindemux>=6){ //bit B
digitalWrite(7, HIGH);
};
if(pindemux>=4){
digitalWrite(8, HIGH);
};
counterdemux++;
//lcd.setCursor (0, 1); //debug code.
// lcd.print(F("CM "));
// lcd.print(countermux);
// lcd.print(F("CDM "));
// lcd.print(counterdemux);
// lcd.print(F(" "));
// delay(50);
test = digitalRead(9); //read demux value
if((countermux<=4 || countermux==7) || (countermux==11 || (countermux>=14 && countermux<=18))) { //if its soldered
if(test==1 && (countermux!=counterdemux)){ //verify when 1
eroare_scurt=countermux;
};
if(test==0 && (countermux==counterdemux)){
eroare_open=countermux;
};
};
if((countermux>=8 && countermux<=10) || (countermux>=21 && countermux<=24)){ //if the pin its free
if(test==1)
eroare_scurt=countermux;
};
if(countermux==5){ //verify pins 5 si 6
if(test==1&&counterdemux==5){
doipini=1;
};
if((test==1&&counterdemux==6)&&doipini==1){
doipini=2;
};
};
if(countermux==6){
if((test==1&&counterdemux==5)&&doipini==2)
doipini=3;
if((test==1&&counterdemux==6)&&doipini==3)
doipini=4;
};
if(countermux==7&&doipini!=4)
eroare_open=6;
if(countermux==7)
doipini==0;
if(countermux==12){ //verify pins 12 si 13
if(test==1&&counterdemux==12){
doipini=1;
};
if((test==1&&counterdemux==13)&&doipini==1){
doipini=2;
};
};
if(countermux==13){
if((test==1&&counterdemux==12)&&doipini==2)
doipini=3;
if((test==1&&counterdemux==13)&&doipini==3)
doipini=4;
};
if(countermux==14&&doipini!=4)
eroare_open=13;
if(countermux==14)
doipini==0;
if(countermux==19){ //verify pins 19 si 20
if(test==1&&counterdemux==19){
doipini=1;
};
if((test==1&&counterdemux==20)&&doipini==1){
doipini=2;
};
};
if(countermux==20){
if((test==1&&counterdemux==19)&&doipini==2)
doipini=3;
if((test==1&&counterdemux==20)&&doipini==3)
doipini=4;
};
if(countermux==21&&doipini!=4)
eroare_open=20;
if(countermux==21)
doipini==0;
digitalWrite(6,0);
digitalWrite(7,0);
digitalWrite(8,0);
if(eroare_scurt!=0 || eroare_open!=0)
goto Sfarsit;
};
digitalWrite(demux,1); //demux used off
};
digitalWrite(0,0);
digitalWrite(1,0);
digitalWrite(2,0);
};
digitalWrite(mux,1);
};
Sfarsit:
digitalWrite(demux,1); //demux used off
digitalWrite(0,0);
digitalWrite(1,0);
digitalWrite(2,0);
digitalWrite(mux,1);
lcd.setCursor (0, 1);
if(eroare_scurt!=0){
lcd.print(F("Short pin "));
lcd.print(eroare_scurt);
for(i=eroare_scurt;i>0;i--){
digitalWrite(13,1);
delay(500);
digitalWrite(13,0);
delay(10);
};
}
else if(eroare_open!=0){
lcd.print(F("Open pin "));
lcd.print(eroare_open);
lcd.print(F(" "));
for(i=eroare_open;i>0;i--){
digitalWrite(13,1);
delay(500);
digitalWrite(13,0);
delay(10);
goto Start;
};
}
else{
lcd.print(F("Cable OK. "));
};
// b=digitalRead(A3);
// lcd.print(b);
// delay(100);
// };
delay(100);
}
const int PIN_LCD_STROBE = 12; // Out: LCD IC4094 shift-register strobe
const int PIN_LCD_DATA = 11; // Out: LCD IC4094 shift-register data
const int PIN_LCD_CLOCK = 10; // Out: LCD IC4094 shift-register clock
const int PIN_LCD_BACKLIGHT = 7; // Out: LCD backlight (PWM)
// srdata / srclock / strobe
LiquidCrystal_SR_LCD3 lcd(PIN_LCD_DATA, PIN_LCD_CLOCK, PIN_LCD_STROBE);
int buton=3; //buton
int b=0;
int mux=0;
int pinmux=0;
int demux=0;
int pindemux=0;
int test=0;
int countermux=0;
int counterdemux=0;
int eroare_scurt=0;
int eroare_open=0;
int pinliber=0;
int doipini=0;
int i=0;
void setup(){
pinMode(PIN_LCD_BACKLIGHT, OUTPUT);
analogWrite(PIN_LCD_BACKLIGHT, 80);
pinMode(0 ,OUTPUT); //Atmegapin 2 mux A
pinMode(1 ,OUTPUT); //Atmegapin 3 mux B
pinMode(2 ,OUTPUT); //Atmegapin 4 mux C
pinMode(3 ,OUTPUT); //Atmegapin 5 mux 1 enable
pinMode(4 ,OUTPUT); //Atmegapin 6 mux 2 enable
pinMode(5 ,OUTPUT); //Atmegapin 11 mux 3 enable
pinMode(6 ,OUTPUT); //Atmegapin 12 demux A
pinMode(7 ,OUTPUT); //Atmegapin 13 demux B
pinMode(8 ,OUTPUT); //Atmegapin 14 demux C
pinMode(9 ,INPUT); //Atmegapin 15 outputdemux
pinMode(10 ,OUTPUT); //Atmegapin 16 display clk
pinMode(11 ,OUTPUT); //Atmegapin 17 display D
pinMode(12 ,OUTPUT); //Atmegapin 18 display stb
pinMode(A0, OUTPUT); //Atmegapin 23 demux 1 enable
pinMode(A1, OUTPUT); //Atmegapin 24 demux 2 enable
pinMode(A2, OUTPUT); //Atmegapin 25 demux 3 enable
pinMode(A3, INPUT); //Atmegapin 26 button
pinMode(13, OUTPUT); //Atmegapin 19 buzzer
lcd.begin(16, 2); // lcd init
lcd.home (); // go home
lcd.setCursor (0, 0);
lcd.print(F("text1"));
lcd.setCursor (0, 1);
lcd.print(F("text2"));
lcd.setCursor (0, 2);
}
void loop()
{
Start:
digitalWrite(3,1); //mux&demux off
digitalWrite(4,1);
digitalWrite(5,1);
digitalWrite(14,1);
digitalWrite(15,1);
digitalWrite(16,1);
// b=digitalRead(A3);
// if(b>=1){
eroare_scurt=0;
eroare_open=0;
pinliber=0;
countermux=0;
lcd.setCursor (0, 1);
//lcd.print(F("Start Program"));
for(mux=3;mux<6;mux++){ //mux on
digitalWrite(mux,0);
for(pinmux=0;pinmux<8;pinmux++){
digitalWrite(0, pinmux%2); //bit A
if(( pinmux >=2 && pinmux <=3) || pinmux>=6){
digitalWrite(1, HIGH); //bit B
};
if(pinmux>=4){
digitalWrite(2, HIGH); //bit C
};
countermux++;
counterdemux=0;
for(demux=14;demux<17;demux++){
digitalWrite(demux,0); //demux on
for(pindemux=0;pindemux<8;pindemux++){ //pin count
digitalWrite(6, pindemux%2); //bit A
if(( pindemux >=2 && pindemux <=3) || pindemux>=6){ //bit B
digitalWrite(7, HIGH);
};
if(pindemux>=4){
digitalWrite(8, HIGH);
};
counterdemux++;
//lcd.setCursor (0, 1); //debug code.
// lcd.print(F("CM "));
// lcd.print(countermux);
// lcd.print(F("CDM "));
// lcd.print(counterdemux);
// lcd.print(F(" "));
// delay(50);
test = digitalRead(9); //read demux value
if((countermux<=4 || countermux==7) || (countermux==11 || (countermux>=14 && countermux<=18))) { //if its soldered
if(test==1 && (countermux!=counterdemux)){ //verify when 1
eroare_scurt=countermux;
};
if(test==0 && (countermux==counterdemux)){
eroare_open=countermux;
};
};
if((countermux>=8 && countermux<=10) || (countermux>=21 && countermux<=24)){ //if the pin its free
if(test==1)
eroare_scurt=countermux;
};
if(countermux==5){ //verify pins 5 si 6
if(test==1&&counterdemux==5){
doipini=1;
};
if((test==1&&counterdemux==6)&&doipini==1){
doipini=2;
};
};
if(countermux==6){
if((test==1&&counterdemux==5)&&doipini==2)
doipini=3;
if((test==1&&counterdemux==6)&&doipini==3)
doipini=4;
};
if(countermux==7&&doipini!=4)
eroare_open=6;
if(countermux==7)
doipini==0;
if(countermux==12){ //verify pins 12 si 13
if(test==1&&counterdemux==12){
doipini=1;
};
if((test==1&&counterdemux==13)&&doipini==1){
doipini=2;
};
};
if(countermux==13){
if((test==1&&counterdemux==12)&&doipini==2)
doipini=3;
if((test==1&&counterdemux==13)&&doipini==3)
doipini=4;
};
if(countermux==14&&doipini!=4)
eroare_open=13;
if(countermux==14)
doipini==0;
if(countermux==19){ //verify pins 19 si 20
if(test==1&&counterdemux==19){
doipini=1;
};
if((test==1&&counterdemux==20)&&doipini==1){
doipini=2;
};
};
if(countermux==20){
if((test==1&&counterdemux==19)&&doipini==2)
doipini=3;
if((test==1&&counterdemux==20)&&doipini==3)
doipini=4;
};
if(countermux==21&&doipini!=4)
eroare_open=20;
if(countermux==21)
doipini==0;
digitalWrite(6,0);
digitalWrite(7,0);
digitalWrite(8,0);
if(eroare_scurt!=0 || eroare_open!=0)
goto Sfarsit;
};
digitalWrite(demux,1); //demux used off
};
digitalWrite(0,0);
digitalWrite(1,0);
digitalWrite(2,0);
};
digitalWrite(mux,1);
};
Sfarsit:
digitalWrite(demux,1); //demux used off
digitalWrite(0,0);
digitalWrite(1,0);
digitalWrite(2,0);
digitalWrite(mux,1);
lcd.setCursor (0, 1);
if(eroare_scurt!=0){
lcd.print(F("Short pin "));
lcd.print(eroare_scurt);
for(i=eroare_scurt;i>0;i--){
digitalWrite(13,1);
delay(500);
digitalWrite(13,0);
delay(10);
};
}
else if(eroare_open!=0){
lcd.print(F("Open pin "));
lcd.print(eroare_open);
lcd.print(F(" "));
for(i=eroare_open;i>0;i--){
digitalWrite(13,1);
delay(500);
digitalWrite(13,0);
delay(10);
goto Start;
};
}
else{
lcd.print(F("Cable OK. "));
};
// b=digitalRead(A3);
// lcd.print(b);
// delay(100);
// };
delay(100);
}