Moin
ich habe den Attiny 13-20 ausprobiert. Der hat 1 K Memory, also nicht allzu üppig. Er hat aber großes Potential für graue Haare, soweit das bei mir noch möglich ist.
Ich habe den Ur-Sketch auf dem Arduino Uno getestet und er läuft.
Wegen der Platzbegrenzung auf dem Attiny 13 habe ich das TV Flimmern rausgenommen und den reduzierten Sketch erfolgreich auf dem Uno getestet.
Um Attiny 13 mit dem Uno programmieren zu können, müssen einige Core Daten runtergeladen und ins Sketchbook gespeichert werden. Erfolgreich gelaufen.
Ich teste das erste Programm mit dem Attiny 13-20, nämlich den Blink aus den Beispielen, der nur eine LED an und aus macht und mit delay (1000) läuft.
Verblüffenderweise ist der ATTINY 13-20 fixer, um eine Sekunde zu erreichen. Also habe ich delay (1000) auf delay(6200) erhöht, um das gleiche Ergebnis (eine Sekunde) zu haben.
So weit so gut.
Also den Ur-sketch ohne Flimmern hergenommen und auf den Attiny geladen. Nichts geht.
Grummel ....
Dann habe ich die MILLIS() Funktion eliminiert und einfach die Takte gezählt, um von der absoluten Zeit unabhängig zu sein.
Getestet auf dem Arduino Uno -> alles ist gut.
Auf den Attiny 13 hochgeladen, grrr .... geht nicht.
Heute Nacht hatte ich dann die berühmte "Traumlösung", die ich gerade umgesetzt habe.
Gegen meine Überzeugung habe ich die Delay-Funktion eingesetzt.
Die Schleife mit den Abfragen der einzelnen Blinkfrequenzen habe ich in der Loop durch eine Latte von 15 Delay Funktionen ersetzt, in der jeweiligen zeitlichen Folge werden dann die 5 möglichen LEDs ein- bzw ausgeschaltet. Damit sie nicht im Takt gleich schalten, ist noch eine zweite Delay Funktion kürzerer Laufzeit dazwischen geschaltet.
Gut, es funktioniert und das erste Haus kann bestückt werden.
Aber kann mir mal jemand sagen, warum der Attiny 13 die Programme mit Millis() bzw Funktionsaufrufen nicht mag und nicht das macht, was auf dem Arduino Uno fehlerlos läuft?
Hier der Sketch mit der "Brechstange" Delay():
/* Simulation "belebtes Haus für die Modellbahn" */
int delayTime; // grundsätzlicher Takt
int delayTime1; // für jedes Haus unterschiedlich wählen, damit Start anders
int delayTime2; // Verzögerung zwischen Anschalten/Erlöschen
void setup() {
// Alle verwendeten Pins auf OUTPUT setzen
delayTime = 3000000;
delayTime1 = 10000;
delayTime2 = 16000;
for (int i=0;i<5;i++)
{
pinMode(i, OUTPUT);
}
}
void loop() {
delay (delayTime1); // Verzögere Start zwischen diversen Häusern
delay (delayTime); // 1
digitalWrite(0,HIGH);
delay (delayTime); // 2
digitalWrite(0,LOW);
delay(delayTime2);
digitalWrite(1,HIGH);
delay (delayTime); // 3
digitalWrite(0,HIGH);
delay(delayTime2);
digitalWrite(2,HIGH);
delay (delayTime); // 4
digitalWrite(0,LOW);
delay(delayTime2);
digitalWrite(1,LOW);
delay (delayTime); // 5
digitalWrite(0,HIGH);
delay(delayTime2);
digitalWrite(3,HIGH);
delay (delayTime); // 6
digitalWrite(0,LOW);
delay(delayTime2);
digitalWrite(1,HIGH);
delay(delayTime2);
digitalWrite(2,LOW);
delay (delayTime); // 7
digitalWrite(0,HIGH);
delay(delayTime2);
digitalWrite(4,HIGH);
delay (delayTime); // 8
digitalWrite(0,LOW);
delay(delayTime2);
digitalWrite(1,LOW);
delay (delayTime); // 9
digitalWrite(0,HIGH);
delay(delayTime2);
digitalWrite(1,HIGH);
delay(delayTime2);
digitalWrite(2,HIGH);
delay (delayTime); // 10
digitalWrite(0,LOW);
delay(delayTime2);
digitalWrite(3,LOW);
delay (delayTime); // 11
digitalWrite(0,HIGH);
delay(delayTime2);
digitalWrite(1,LOW);
delay (delayTime); // 12
digitalWrite(0,LOW);
delay(delayTime2);
digitalWrite(2,LOW);
delay (delayTime); // 13
digitalWrite(0,HIGH);
delay(delayTime2);
digitalWrite(1,HIGH);
delay (delayTime); // 14
digitalWrite(0,LOW);
delay(delayTime2);
digitalWrite(4,LOW);
}