okokok ... ich revidiere!!!
määächtig großer fehler:
habe den 2313 auf nem Attiny Shield gesteckt. über die isp-pins hab ich das shield der einfachheit halber mit dem diamex-avr usb-programmier-stick mit strom versorgt .... zu verlockend war es, das shield auch gleichzeitig als steckboard zum externen verschalten zu benutzen, da sämtliche pins mit reihenbuchsen versehen sind.
die pulldown-variante hat so funktioniert, nicht aber die pullup-version.
der (rendundante) sketch funktioniert mit dem 2313 -auf nem externen board, auch in der pullup-version!!
hier die pullup-version:
// Funktioniert mit 2313
// 8 Taster funktionieren!!
// PULLUP funktioniert!!
// Setup Variablen
//---------------------------------------
int t01 = HIGH; // setze die Variable mit Namen t01 und gib ihr den Wert HIGH
int t02 = HIGH; // etc
int t03 = HIGH; // Die Variablen t01 bis man stehen fuer
int t04 = HIGH; // die Funktions-Zustaende, gesetzt duch
int t05 = HIGH; // einmaligen Tastendruck
int t06 = HIGH;
int minus = HIGH;
int plus = HIGH;
int man = HIGH;
//---------------------------------------
const int f1 = 16; // Pin-Definition Ausgaenge fuer 2313
const int f2 = 15;
const int f3 = 14;
const int f4 = 13;
const int f5 = 12;
const int f6 = 11;
const int f7 = 10;
const int f8 = 9;
//---------------------------------------
const int i1 = 0; // Pin-Definition Eingaenge fuer 2313
const int i2 = 1;
const int i3 = 2;
const int i4 = 3;
const int i5 = 4;
const int i6 = 5;
const int i7 = 6;
const int i8 = 7;
//---------------------------------------
void setup() { // Einmalige Setup-Routine
pinMode(i1, INPUT_PULLUP); // Definition Eingaenge, interne pullups
pinMode(i2, INPUT_PULLUP);
pinMode(i3, INPUT_PULLUP);
pinMode(i4, INPUT_PULLUP);
pinMode(i5, INPUT_PULLUP);
pinMode(i6, INPUT_PULLUP);
pinMode(i7, INPUT_PULLUP);
pinMode(i8, INPUT_PULLUP);
//---------------------------------------
pinMode(f1, OUTPUT); // Definition Ausgaenge
pinMode(f2, OUTPUT);
pinMode(f3, OUTPUT);
pinMode(f4, OUTPUT);
pinMode(f5, OUTPUT);
pinMode(f6, OUTPUT);
pinMode(f7, OUTPUT);
pinMode(f8, OUTPUT);
digitalWrite(f1, HIGH); // Programmstart f1 auf HIH
}
//---------------------------------------
void loop() { // Start Endlos-Schleife
t01 = digitalRead(i1); // setze Var. t01-plus gleich dem Eingangspegel
t02 = digitalRead(i2); // der jeweils an den Inputs liegenden Tastern
t03 = digitalRead(i3);
t04 = digitalRead(i4);
t05 = digitalRead(i5);
t06 = digitalRead(i6);
man = digitalRead(f6); // man wird durch Pegel von f6 logisch gesetzt,
minus = digitalRead(i7); // minus durch Taste 7 und
plus = digitalRead(i8); // plus durch Taste 8
//---------------------------------------
if (t01 == LOW) { // wenn t01 gleich LOW dann...
digitalWrite(f1, HIGH); // setze f1 auf HIGH ...
digitalWrite(f2, LOW); // ... und alle anderen auf LOW
digitalWrite(f3, LOW);
digitalWrite(f4, LOW);
digitalWrite(f5, LOW);
digitalWrite(f6, LOW);
}
else if (t02 == LOW) // ansonsten wenn t02 gleich LOW dann ...
{
digitalWrite(f1, LOW);
digitalWrite(f2, HIGH); // setze f2 auf HIGH ...
digitalWrite(f3, LOW); // ... und alle anderen auf LOW
digitalWrite(f4, LOW);
digitalWrite(f5, LOW);
digitalWrite(f6, LOW);
}
else if (t03 == LOW)
{
digitalWrite(f1, LOW);
digitalWrite(f2, LOW);
digitalWrite(f3, HIGH); // ... usw ...
digitalWrite(f4, LOW);
digitalWrite(f5, LOW);
digitalWrite(f6, LOW);
}
else if (t04 == LOW)
{
digitalWrite(f1, LOW);
digitalWrite(f2, LOW);
digitalWrite(f3, LOW);
digitalWrite(f4, HIGH);
digitalWrite(f5, LOW);
digitalWrite(f6, LOW);
}
else if (t05 == LOW)
{
digitalWrite(f1, LOW);
digitalWrite(f2, LOW);
digitalWrite(f3, LOW);
digitalWrite(f4, LOW);
digitalWrite(f5, HIGH);
digitalWrite(f6, LOW);
}
else if (t06 == LOW)
{
digitalWrite(f1, LOW);
digitalWrite(f2, LOW);
digitalWrite(f3, LOW);
digitalWrite(f4, LOW);
digitalWrite(f5, LOW);
digitalWrite(f6, HIGH);
}
//---------------------------------------
// Sonderfall Tasten 7,8 enspr. minus und plus
if ((man == HIGH) && (minus == HIGH) && (plus == LOW))
// wenn man (gesetzt duch f6) und minus (f7) und plus (f8) logisch ...
{
digitalWrite(f7, HIGH); // dann f7 auf HIGH ...
delay(200); // und mind. 200ms bleiben
}
else // ansonsten, also wenn minus und plus nicht bedient werden ...
{
digitalWrite(f7, LOW); // ...auf LOW bleiben...
}
if ((man == HIGH) && (plus == HIGH) && (minus == LOW))
{
digitalWrite(f8, HIGH); /// gilt für f7 und f8.
delay(200);
}
else
{
digitalWrite(f8, LOW);
}
// werden minus (i7) und plus (i8) gleichzeitig getriggert, bleiben f7, f8 auf LOW!!
}
Der Sketch verwendet 1.382 Bytes (67%) des Programmspeicherplatzes. Das Maximum sind 2.048 Bytes.
Globale Variablen verwenden 27 Bytes (21%) des dynamischen Speichers, 101 Bytes für lokale Variablen verbleiben. Das Maximum sind 128 Bytes.
sehr verschwenderisch, werdet ihr sagen. aber der 2313 packts noch ;-)
so, nun gehts ans verinnerlichen ... und dann mal schauen, wie ich den sketch "kürze".