362 lines
7.0 KiB
C++
362 lines
7.0 KiB
C++
#define analogPin_H 600
|
|
|
|
|
|
int OUTPUT0 = 52; // Datapin0
|
|
int OUTPUT1 = 50; // Datapin1
|
|
int OUTPUT2 = 48; // Datapin2
|
|
int OUTPUT3 = 46; // Datapin3
|
|
|
|
int controlPin1 = 44; // Clock Signal PC-Register
|
|
int controlPin2 = 42; // Reset PC-Register
|
|
int controlPin3 = 40; // Multiplexer DataIN/InkrementerIn
|
|
int controlPin4 = 38; // Multiplexer BusIN / PC IN
|
|
|
|
|
|
int analogPin0 = A12; // 3,3 Volt Integer-Wert größer 650!!!
|
|
int analogPin1 = A13; // 3,3 Volt Integer-Wert größer 650!!!
|
|
int analogPin2 = A14; // 3,3 Volt Integer-Wert größer 650!!!
|
|
int analogPin3 = A15; // 3,3 Volt Integer-Wert größer 650!!!
|
|
|
|
|
|
int val0 = 0; // Variable, die den gelesenen Wert speichert
|
|
int val1 = 0; // Variable, die den gelesenen Wert speichert
|
|
int val2 = 0; // Variable, die den gelesenen Wert speichert
|
|
int val3 = 0; // Variable, die den gelesenen Wert speichert
|
|
|
|
char on = 0x01;
|
|
char SerialIncoming = 0x00;
|
|
static int counter = 0;
|
|
|
|
|
|
|
|
void PCReg_clock()
|
|
{
|
|
digitalWrite(controlPin1, LOW);
|
|
delay(75);
|
|
digitalWrite(controlPin1, HIGH);
|
|
delay(275);
|
|
}
|
|
|
|
void PCReg_reset()
|
|
{
|
|
digitalWrite(controlPin2, LOW);
|
|
delay(75);
|
|
digitalWrite(controlPin2, HIGH);
|
|
delay(275);
|
|
}
|
|
|
|
void PCReg_set(char byte)
|
|
{
|
|
PCReg_reset();
|
|
digitalWrite(controlPin4, LOW);
|
|
digitalWrite(controlPin3, LOW);
|
|
setBus(byte, 4, 0);
|
|
PCReg_clock();
|
|
digitalWrite(controlPin4, HIGH);
|
|
digitalWrite(controlPin3, HIGH);
|
|
|
|
}
|
|
|
|
void PCReg_increment()
|
|
{
|
|
digitalWrite(controlPin3, HIGH);
|
|
digitalWrite(controlPin4, LOW);
|
|
delay(11);
|
|
PCReg_clock();
|
|
}
|
|
|
|
int PCReg_count(int counter)
|
|
{
|
|
for(int i=1;i <= counter; i++)
|
|
{
|
|
PCReg_increment();
|
|
}
|
|
}
|
|
|
|
void setBus(char Input, int bus_size, char debug)
|
|
{
|
|
for(int i=0;i <= bus_size;i++)
|
|
{
|
|
int t = bitRead(Input, i);
|
|
switch(i)
|
|
{
|
|
case 0:
|
|
if(t == 1) digitalWrite(OUTPUT0, LOW);
|
|
else if (t == 0) digitalWrite(OUTPUT0, HIGH);
|
|
break;
|
|
case 1:
|
|
if(t == 1) digitalWrite(OUTPUT1, LOW);
|
|
else if (t == 0) digitalWrite(OUTPUT1, HIGH);
|
|
break;
|
|
case 2:
|
|
if(t == 1) digitalWrite(OUTPUT2, LOW);
|
|
else if (t == 0) digitalWrite(OUTPUT2, HIGH);
|
|
break;
|
|
case 3:
|
|
if(t == 1) digitalWrite(OUTPUT3, LOW);
|
|
else if (t == 0) digitalWrite(OUTPUT3, HIGH);
|
|
break;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
void readBus(int bus_size, char debug)
|
|
{
|
|
unsigned char byte = 0;
|
|
|
|
for(int i=0;i <= bus_size;i++)
|
|
{
|
|
switch(i)
|
|
{
|
|
case 0:
|
|
val0 = analogRead(analogPin0); // Pin einlesen
|
|
if(debug == 0x01) Serial.println(val0);
|
|
if(val0 > analogPin_H) byte += 0x01;
|
|
break;
|
|
case 1:
|
|
val1 = analogRead(analogPin1);// Pin einlesen
|
|
if(debug == 0x01) Serial.println(val1);
|
|
if(val1 > analogPin_H) byte += 0x02;
|
|
break;
|
|
case 2:
|
|
val2 = analogRead(analogPin2); // Pin einlesen
|
|
if(debug == 0x01) Serial.println(val2);
|
|
if(val2 > analogPin_H) byte += 0x04;
|
|
break;
|
|
case 3:
|
|
val3 = analogRead(analogPin3); // Pin einlesen
|
|
if(debug == 0x01) Serial.println(val3);
|
|
if(val3 > analogPin_H) byte += 0x08;
|
|
break;
|
|
}
|
|
}
|
|
|
|
Serial.print("Ausgabe: 0x0");
|
|
Serial.println(byte, HEX);
|
|
|
|
}
|
|
|
|
void resetBus()
|
|
{
|
|
digitalWrite(OUTPUT0, HIGH);
|
|
digitalWrite(OUTPUT1, HIGH);
|
|
digitalWrite(OUTPUT2, HIGH);
|
|
digitalWrite(OUTPUT3, HIGH);
|
|
}
|
|
|
|
char PCReg_readInput()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void setup() {
|
|
pinMode(OUTPUT0, OUTPUT);
|
|
pinMode(OUTPUT1, OUTPUT);
|
|
pinMode(OUTPUT2, OUTPUT);
|
|
pinMode(OUTPUT3, OUTPUT);
|
|
pinMode(analogPin0, INPUT);
|
|
|
|
pinMode(controlPin1, OUTPUT);
|
|
pinMode(controlPin2, OUTPUT);
|
|
pinMode(controlPin3, OUTPUT);
|
|
pinMode(controlPin4, OUTPUT);
|
|
|
|
digitalWrite(controlPin1, HIGH);
|
|
digitalWrite(controlPin2, HIGH);
|
|
digitalWrite(controlPin3, HIGH);
|
|
digitalWrite(controlPin4, HIGH);
|
|
|
|
digitalWrite(OUTPUT0, HIGH);
|
|
digitalWrite(OUTPUT1, HIGH);
|
|
digitalWrite(OUTPUT2, HIGH);
|
|
digitalWrite(OUTPUT3, HIGH);
|
|
|
|
Serial.begin(9600);
|
|
}
|
|
|
|
|
|
|
|
void loop() {
|
|
/*
|
|
readBus(4,0);
|
|
PCReg_set(0x0F);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x0E);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x0D);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x0C);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0xB);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x0A);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x09);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x08);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x07);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x06);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x05);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x04);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x03);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x02);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x01);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x00);
|
|
delay(200);
|
|
readBus(4,0);
|
|
|
|
//PCReg_set(0x02);
|
|
|
|
*/
|
|
/*
|
|
if(counter <= 2)
|
|
{
|
|
|
|
PCReg_reset();
|
|
for(int i=0; i <= 14;i++)
|
|
{
|
|
PCReg_increment();
|
|
readBus(4,0);
|
|
}
|
|
counter++;
|
|
|
|
Serial.println("Zählvorgang abgeschlossen!");
|
|
Serial.print("Durchgangnr.: ");
|
|
Serial.println(counter, DEC);
|
|
}
|
|
else if(counter == 2)
|
|
{
|
|
Serial.println("Setze PC zurück!");
|
|
PCReg_reset();
|
|
counter++;
|
|
}
|
|
else {
|
|
Serial.println("Programm abgeschlossen!");
|
|
|
|
delay(1000);}
|
|
|
|
|
|
*/
|
|
if (Serial.available() > 0) {
|
|
// Lies das eingehende Byte:
|
|
//SerialIncoming = Serial.read();
|
|
|
|
String buffer = Serial.readString();
|
|
|
|
// Ausgeben:
|
|
Serial.print("I received: ");
|
|
Serial.println(buffer);
|
|
|
|
|
|
|
|
if(buffer.compareTo("PC_inc\n") == 0)
|
|
{
|
|
Serial.println("Starte Programm!");
|
|
PCReg_increment();
|
|
}
|
|
|
|
else if(buffer.compareTo("PC_reset\n") == 0)
|
|
{
|
|
PCReg_reset();
|
|
Serial.println("Befehl ausgeführt");
|
|
}
|
|
|
|
else if(buffer.compareTo("readBus\n") == 0)
|
|
{
|
|
readBus(4,0);
|
|
Serial.println("Befehl ausgeführt");
|
|
}
|
|
else if(buffer.compareTo("PC_countto\n") == 0)
|
|
{
|
|
PCReg_reset();
|
|
PCReg_count(8);
|
|
Serial.println("Befehl ausgeführt");
|
|
}
|
|
|
|
else if(buffer.compareTo("PC_countdown\n") == 0)
|
|
{
|
|
PCReg_set(0x0F);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x0E);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x0D);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x0C);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0xB);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x0A);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x09);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x08);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x07);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x06);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x05);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x04);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x03);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x02);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x01);
|
|
delay(200);
|
|
readBus(4,0);
|
|
PCReg_set(0x00);
|
|
delay(200);
|
|
readBus(4,0);
|
|
}
|
|
else {
|
|
Serial.println("Unbekannter Befehl!");
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|