Guten Abend Forum,
dies ist mein erster Beitrag und ich hoffe einfach mal, dass er richtig platziert war und alle nötigen Informationen enthält.
Zur groben Beschreibung der Situation. Ein Arbeitskollege von mir brauch für den Vergleich der Fördermenge von Einspritzdüsen einen Rechteckgenerator mit verstellbarer Einschaltzeit. Das Einstellen der Periodendauer wird über einen Drehschalter mit 12 Positionen realisiert, welcher wiefolgt schaltet. Pin 1 -> Pin 2 -> Pin 3 -> Pin 4 -> Pin 1 -> Pin 2 ->...
Die Schaltung sowie der folgende Sketch haben auf einem Board mit Megachip (https://www.amazon.de/gp/product/B01MA5BLQI/ref=ppx_yo_dt_b_search_asin_image?ie=UTF8&psc=1) problemlos funktioniert und es waren auch, für den Zweck, ausreichend genau Frequenzen mit dem Oszilloskop messbar.
Aufgrund der geringen Anzahl an benötigten Pins und um für minimale Materialkosten und Platzverbrauch zu sorgen, habe ich mich auf der Suche nach einem passendem Board für dieses, mit einem Attiny85, entschieden. (https://www.amazon.de/gp/product/B076KVKHH1/ref=ppx_yo_dt_b_search_asin_image?ie=UTF8&psc=1)
Nun habe ich das Sketch auf den Attiny85 kompiliert, wobei kein Fehler angezeigt wurde. Auch das Aufspielen ging ohne Probleme.
Nur das Programm möchte nicht so richtig laufen. Beim Drehen des Schalters scheint der Tiny nicht richtig mit zu zählen und der Ausgang schaltet nicht korrekt.
Könnte dies einfach an der unterschiedlichen Rechenleistung der Chips liegen und sollte ich daher eventuell auf einen Nano oder Uno umsteigen? Oder kann dies andere Ursachen haben?
Ich bedanke mich schonmal für die Hilfe.
Mit freundlichen Grüßen
Benny
int S1;
int S1pos;
int S2;
int S2pos;
int S3;
int S3pos;
int S4;
int S4pos;
int Hzh;
int Hzr;
int Ansteuerung;
int Pause;
void setup() {
pinMode (0, INPUT);
pinMode (1, OUTPUT);
pinMode (2, INPUT);
pinMode (3, INPUT);
pinMode (4, INPUT);
Ansteuerung = 0;
Hzh = 0;
Hzr = 0;
S1pos = 0;
S2pos = 0;
S3pos = 0;
S4pos = 0;
Pause = 5;
}
void loop() {
if (Hzh == 1) // Ansteuerung erhöhen
{
Ansteuerung = Ansteuerung + 1;
Hzh = 0;
}
if (Hzr == 1) // Ansteuerung verringern
{
Ansteuerung = Ansteuerung - 1;
Hzr = 0;
}
if (digitalRead(0) == 1) //Status S1 abfragen
{
if (S1 == 0) //positive Flanke S1
{
S1pos = 1; //Flanke S1 speichern
}
if (S1 == 1) //keine positive Flanke
{
S1pos = 0;
}
S1 = 1; //Status S1 speichern
}
if (digitalRead(2) == 1) //Status S2 abfragen
{
if (S2 == 0) //positive Flanke S2
{
S2pos = 1; //Flanke S2 speichern
}
if (S2 == 1) //keine positive Flanke
{
S2pos = 0;
}
S2 = 1; //Status S2 speichern
}
if (digitalRead(3) == 1) //Status S3 abfragen
{
if (S3 == 0) //positive Flanke S3
{
S3pos = 1; //Flanke S3 speichern
}
if (S3 == 1) //keine positive Flanke
{
S3pos = 0;
}
S3 = 1; //Status S3 speichern
}
if (digitalRead(4) == 1) //Status S4 abfragen
{
if (S4 == 0) //positive Flanke S4
{
S4pos = 1; //Flanke S4 speichern
}
if (S4 == 1) //keine positive Flanke
{
S4pos = 0;
}
S4 = 1; //Status S4 speichern
}
if ((S1 == 1) && (S2pos == 1)) //hochzählen wenn S1 auf S2
{
Hzh = 1;
S1 = 0;
}
if ((S2 == 1) && (S3pos == 1)) //hochzählen wenn S2 auf S3
{
Hzh = 1;
S2 = 0;
}
if ((S3 == 1) && (S4pos == 1)) //hochzählen wenn S3 auf S4
{
Hzh = 1;
S3 = 0;
}
if ((S4 == 1) && (S1pos == 1)) //hochzählen wenn S4 auf S1
{
Hzh = 1;
S4 = 0;
}
if ((S4 == 1) && (S3pos == 1)) //runterzählen wenn S4 zu S3
{
Hzr = 1;
S4 = 0;
}
if ((S3 == 1) && (S2pos == 1)) //runterzählen wenn S3 zu S2
{
Hzr = 1;
S3 = 0;
}
if ((S2 == 1) && (S1pos == 1)) //runterzählen wenn S2 zu S1
{
Hzr = 1;
S2 = 0;
}
if ((S1 == 1) && (S4pos == 1)) //runterzählen wenn S1 zu S4
{
Hzr = 1;
S1 = 0;
}
if (Ansteuerung >= 1) //Ausgang ansteuern
{
digitalWrite(1, HIGH);
delay (Ansteuerung);
digitalWrite(1, LOW);
delay (Pause);
}
}