RE: Aktualisiert Arduino: Attiny 13 für belebte Häuser

#1 von Running.Wolf , 15.06.2014 11:14

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);


}


Gruss Wolfgang

All that the young can do for the old is to shock them and keep them up to date. George Bernhard Shaw


 
Running.Wolf
EuroCity (EC)
Beiträge: 1.385
Registriert am: 15.01.2006
Homepage: Link
Ort: Isernhagen
Gleise C-Gleis / M-Gleis
Spurweite H0
Steuerung CS 2
Stromart Digital


RE: Aktualisiert Arduino: Attiny 13 für belebte Häuser

#2 von garti62 , 15.06.2014 13:54

Hallo Wolfgang,

ich mache meine Sachen mit Bascom und bin deshalb mit dem Arduino und seiner Programmierung nicht so bewandert, aber das von Dir geschilderte Problem läßt darauf schließen, daß die Taktfrequenzen des Arduino und des attiny nicht identisch sind. Da hilft nur, die Taktfrequenz des attiny über das entsprechende fuse-bit auf die selbe Frequenz einzustellen wie beim Arduino.
Viel Erfolg wünscht

Ulli


erste Versuche: Weichenbau


 
garti62
InterCity (IC)
Beiträge: 645
Registriert am: 08.11.2011


RE: Aktualisiert Arduino: Attiny 13 für belebte Häuser

#3 von Running.Wolf , 15.06.2014 15:47

Hallo Ulli

danke, dann werde ich das mal machen und berichten.


Gruss Wolfgang

All that the young can do for the old is to shock them and keep them up to date. George Bernhard Shaw


 
Running.Wolf
EuroCity (EC)
Beiträge: 1.385
Registriert am: 15.01.2006
Homepage: Link
Ort: Isernhagen
Gleise C-Gleis / M-Gleis
Spurweite H0
Steuerung CS 2
Stromart Digital


RE: Aktualisiert Arduino: Attiny 13 für belebte Häuser

#4 von Eisenhorn ( gelöscht ) , 16.06.2014 15:12

Moin,

was macht den die Funktion MILLIS() ?

Nur weil ein Programm auf den uno läuft muss es ja nicht auf dem attiny laufen, wenn zum beispiel auf timer zugegriffen wird die gar nicht da sind!

Die Taktfrequenz kann aber auch eine Rolle spielen wenn er schneller läuft.

Ich würde auf jeden fall noch mal meine compil Einstellungen prüfen

Gruß Lars


Eisenhorn

RE: Aktualisiert Arduino: Attiny 13 für belebte Häuser

#5 von Running.Wolf , 16.06.2014 18:25

Moin
Millis() gibt die abgelaufenen Millisekunden nach Start zurück.
Die Funktion gehört zum Befehlsumfang vom Attiny 13, gleichwohl habe ich den Befehl rausgeworfen und ließ einen Zähler hochlaufen, dessen Stand ich regelmäßig abfrage.
Auch dies klemmte irgendwie, wenn ein digitalWrite erfolgen soll.

Ich habe es dann wie eingangs beschrieben mit der Brechstange also mit einer Kette von delay() gelöst.

@Ulli : die fusebits müssten stimmen, die core13 habe ich runtergeladen und über die Arduino IDE mit bootloader übertragen.

Nun schalten erst einmal fünf Fenster eines Hauses im vernünftigen Takt.

Morgen werde ich dann mal mit dem Monitor im IDE genauer schauen, was da eigentlich im Detail abläuft.


Gruss Wolfgang

All that the young can do for the old is to shock them and keep them up to date. George Bernhard Shaw


 
Running.Wolf
EuroCity (EC)
Beiträge: 1.385
Registriert am: 15.01.2006
Homepage: Link
Ort: Isernhagen
Gleise C-Gleis / M-Gleis
Spurweite H0
Steuerung CS 2
Stromart Digital


RE: Aktualisiert Arduino: Attiny 13 für belebte Häuser

#6 von Bodo , 17.06.2014 08:10

Hallo Wolfgang,

ich habe mit den ATtiny13 auch oft Probleme - inzwischen glaube ich, dass es ein Speicherproblem ist und die Arduino-IDE nur die Code-Größe anzeigt/prüft, nicht aber, ob noch Speicher für die Variablen benötigt wird. Sketches, die eigentlich auf den ATtiny13 passen müßten, dort aber nicht funktionieren, laufen nämlich i.d.R. auf dem ATtiny85 problemlos. Inzwischen nehme ich in solchen Fällen einfach den ATtiny85 (obwohl ich meine ATtiny13-Vorräte gerne noch irgendwie verbauen würde).

Außerdem hast Du mit delayTime = 3000000 den Wertebereich für int (2 Byte) massiv überschritten - es müßte als long definiert werden .

Hier kommt es möglicherweise auch zu Unterschieden beim Compilieren (für den Arduino Due z.B. werden für int 4 Byte verwendet).

Viele Grüße, Bodo


Die Freiheit des Menschen liegt nicht darin, dass er tun kann, was er will, sondern dass er nicht tun muss, was er nicht will. (Jean-Jacques Rousseau)

Meine Anlage - Meine Dauerbaustelle
Platinen für Modellbahn- und Arduino-Anwendungen


 
Bodo
InterCityExpress (ICE)
Beiträge: 2.473
Registriert am: 28.04.2005
Homepage: Link
Gleise C-Gleis, Lenz 0
Spurweite H0, 0
Steuerung MS2 & CS2
Stromart Digital


RE: Aktualisiert Arduino: Attiny 13 für belebte Häuser

#7 von Running.Wolf , 17.06.2014 09:08

Hallo Bodo

das ist inzwischen auch meine Vermutung mit dem Attiny13, ich habe mir Attiny45 bestellt, um mehr Speicher zu haben und bei den 8 Pins bleiben zu können. Der funktionierende Sketch sieht inzwischen so aus, wobei ich in der Funktion "BitteWarten" wegen der überschrittenen Zahlengröße zwei delay Befehle eingesetzt habe.

/* Simulation "belebtes Haus für die Modellbahn" */

#define F_CPU 9600000UL
#include <util/delay.h>
#include <avr/io.h>


unsigned long delayTime; // grundsätzlicher Takt
unsigned long delayTime1; // für jedes Haus unterschiedlich wählen, damit Start anders
unsigned long delayTime2; // Verzögerung zwischen Anschalten/Erlöschen



void setup() {

// Alle verwendeten Pins auf OUTPUT setzen, Verzögerungszeiten setzen

delayTime = 100000000;
delayTime1 = 10000;
delayTime2 = 16000;

for (int i=0;i<5;i++)
{
pinMode(i, OUTPUT);
}

}

void bitteWarten() {

delay (delayTime);
delay (delayTime); // Gesamtdauer 4,5 min
// delay (delayTime); // Gesamtdauer 7 Min
}

void loop() {

delay (delayTime1); // Verzögere start zwischen div Häusern

delay (delayTime2); // 1 LEDs werden in 14 Takten abgearbeitet
digitalWrite(0,HIGH);

bitteWarten(); // 2
digitalWrite(0,LOW);
delay(delayTime2);
digitalWrite(1,HIGH);

bitteWarten(); // 3
digitalWrite(0,HIGH);
delay(delayTime2);
digitalWrite(2,HIGH);

bitteWarten(); // 4
digitalWrite(0,LOW);
delay(delayTime2);
digitalWrite(1,LOW);

bitteWarten(); // 5
digitalWrite(0,HIGH);
delay(delayTime2);
digitalWrite(3,HIGH);

bitteWarten(); // 6
digitalWrite(0,LOW);
delay(delayTime2);
digitalWrite(1,HIGH);
delay(delayTime2);
digitalWrite(2,LOW);

bitteWarten(); // 7
digitalWrite(0,HIGH);
delay(delayTime2);
digitalWrite(4,HIGH);

bitteWarten(); // 8
digitalWrite(0,LOW);
delay(delayTime2);
digitalWrite(1,LOW);

bitteWarten(); // 9
digitalWrite(0,HIGH);
delay(delayTime2);
digitalWrite(1,HIGH);
delay(delayTime2);
digitalWrite(2,HIGH);

bitteWarten(); // 10
digitalWrite(0,LOW);
delay(delayTime2);
digitalWrite(3,LOW);

bitteWarten(); // 11
digitalWrite(0,HIGH);
delay(delayTime2);
digitalWrite(1,LOW);

bitteWarten(); // 12
digitalWrite(0,LOW);
delay(delayTime2);
digitalWrite(2,LOW);

bitteWarten(); // 13
digitalWrite(0,HIGH);
delay(delayTime2);
digitalWrite(1,HIGH);

bitteWarten(); // 14
digitalWrite(0,LOW);
delay(delayTime2);
digitalWrite(4,LOW);


}


Gruss Wolfgang

All that the young can do for the old is to shock them and keep them up to date. George Bernhard Shaw


 
Running.Wolf
EuroCity (EC)
Beiträge: 1.385
Registriert am: 15.01.2006
Homepage: Link
Ort: Isernhagen
Gleise C-Gleis / M-Gleis
Spurweite H0
Steuerung CS 2
Stromart Digital


RE: Aktualisiert Arduino: Attiny 13 für belebte Häuser

#8 von Eisenhorn ( gelöscht ) , 17.06.2014 11:04

Moin,

Warum benutzt du nicht den Interupt Timer?
Ist meiner Meinung nach wesentlich eleganter,
und es würde eine Ganze Menge Speicher sparen.

Gruß Lars


Eisenhorn

RE: Aktualisiert Arduino: Attiny 13 für belebte Häuser

#9 von Running.Wolf , 17.06.2014 19:11

Moin Lars

tja, warum.
Mit dem Arduino mache ich elegantere Lösungen, der ATtiny13 verhält sich wirklich anders... nicht nur im Takt.
Ich habe heute zwei Stunden "Grundsatzforschung" mit millis() gemacht, seltsames Verhalten.
Ich brauche daher meiner restlichen Attiny13 auf und schalte auf den Attiny45 um.
Für größere Sachen nehme ich meine Arduino Uno Lösungen, das weiss ich was ich habe.


Gruss Wolfgang

All that the young can do for the old is to shock them and keep them up to date. George Bernhard Shaw


 
Running.Wolf
EuroCity (EC)
Beiträge: 1.385
Registriert am: 15.01.2006
Homepage: Link
Ort: Isernhagen
Gleise C-Gleis / M-Gleis
Spurweite H0
Steuerung CS 2
Stromart Digital


RE: Aktualisiert Arduino: Attiny 13 für belebte Häuser

#10 von herbi39 , 17.06.2014 19:51

Hallo Wolfgang,

mit dem Attiny45 kannst du ja auch wieder MILLIS verwenden, ich hatte jedenfalls bei meinem Belebten Haus http://www.herberts-n-projekt.de/basteleien-1/belebtes-haus/ damit keine Probleme.

Viele Grüße
Herbert
http://www.herberts-n-projekt.de


 
herbi39
InterRegio (IR)
Beiträge: 193
Registriert am: 06.11.2009
Homepage: Link
Spurweite N
Stromart DC, Digital


RE: Aktualisiert Arduino: Attiny 13 für belebte Häuser

#11 von Running.Wolf , 17.06.2014 20:11

Moin Herbert.

Du hast ja auch "Schuld" dass ich mit dem Attiny angefangen habe.

Ich hatte Deinen Sketch auf dem Arduino Uno getestet, war begeistert und habe eine Tüte Attiny gekauft . Blöderweise habe ich Attiny 13 angeklickt und nicht Attiny 45. Das ist jedoch meine eigene Dusseligkeit.

Ich mache aber ungebremst weiter, die Attiny 13 laufen wie gewünscht mit den Delay () Ketten. Wenn die Häuser schön beleuchtet sind, sieht sowieso keiner mehr wie unelegant programmiert wurde.

Ich werde berichten, wie es mir mit den Attiny 45 geht. Der "Virus" hat mich auf jeden Fall heftig erwischt.

Aber vorher noch mein Programmieraufbau für den Attiny13, ich nutze einen Arduino UNO, das Minishield wird mit der Fassung aufgesteckt.



Inzwischen habe ich die Viessmann Lichtboxen und LEDs verwendet. Sie laufen bei den 5 V des Attiny 13 prima.



Hier der eingebaute Zustand, sieht für mich sehr gut aus.


Gruss Wolfgang

All that the young can do for the old is to shock them and keep them up to date. George Bernhard Shaw


 
Running.Wolf
EuroCity (EC)
Beiträge: 1.385
Registriert am: 15.01.2006
Homepage: Link
Ort: Isernhagen
Gleise C-Gleis / M-Gleis
Spurweite H0
Steuerung CS 2
Stromart Digital


   


  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz