/*************************** * tester pro modul Simon 3 * vstupy 7489 spojit, napojit na X3, D03 * W na X1, D02 * adresy na A,B,C,D, výstupy D04,5,6,7 * výstupy Q 7489 na x4,5,6,7, D08,9,10,11 * reproduktor D03 */ #include const int data7489pin=3, clock7489pin=2, a0pin=4,a1pin=5,a2pin=6,a3pin=7, q0pin=8,q1pin=9,q2pin=10,q3pin=11, speakerPin=4; const int rs = 12, clk = 13, d4 = 4, d5 = 5, d6 = 6, d7 = 7; //čísla digitálních výstupů pro ovládání displeje LiquidCrystal lcd(rs, clk, d4, d5, d6, d7); void generujSestupnouHranu ( int obvodPin) { //funkce pro generování náběžné hrany pro zápis do 7489 digitalWrite(obvodPin, HIGH); //Vytvoření náběžné hrany pro zápis digitalWrite(obvodPin, LOW); delay (1); digitalWrite(obvodPin, HIGH); } void setup() { // put your setup code here, to run once: int i; for (i=0;i<8;i++) { pinMode(i, OUTPUT); } for (i=8;i<12;i++) { pinMode(i, INPUT); } lcd.begin(16, 2); lcd.clear(); } void loop() { int i,k, adresa, a0,a1,a2,a3,q; bool testFail; for ( i=0;i<16;i++) { lcd.clear(); lcd.setCursor (0,0); lcd.print ("7489 memory test"); adresa = i; a3=adresa/8; adresa=adresa%8; a2=adresa/4; adresa=adresa%4; a1=adresa/2; adresa=adresa%2; a0=adresa; testFail=false; lcd.setCursor (0,1); lcd.print ("Addr:"); lcd.print (i); lcd.print ("..."); digitalWrite (a0pin,a0); //zapis adresy digitalWrite (a1pin,a1); digitalWrite (a2pin,a2); digitalWrite (a3pin,a3); digitalWrite ( data7489pin,0 ); //nejprve zapsat do paměti 0 generujSestupnouHranu (clock7489pin); for (k=8;k<12;k++) { //čtení nuly if ( digitalRead (k)) testFail=true; } digitalWrite ( data7489pin,1 ); //zapiseme 1 generujSestupnouHranu (clock7489pin); for (k=8;k<12;k++) { //čtení 1 if ( !digitalRead (k)) testFail=true; } if (testFail) { lcd.print ("fail"); tone (speakerPin,800,1000); delay (2000); } else lcd.print ("ok"); digitalWrite (a0pin,a0); //zapis adresy digitalWrite (a1pin,a1); digitalWrite (a2pin,a2); digitalWrite (a3pin,a3); delay (500); } }