Hallo liebes Forum, Wir haben ein Program auf der Arduino IDE geschrieben. Das Programm läuft auf den Arduino UNO wunderbar nur wenn wir von Digispark den Attiny 167 benutzen, verbindet sich der Attiny mit den Computer per USB und bricht nach wenigen Sekunden die Verbindung wieder ab. Das Program wird auch nicht ausgeführt. Durch löschen von bestimmten Programmteilen zb das 2DArray, lässt sich der Attiny richtig bespielen und er führt den restlichen Code auch aus. Vermutlich ist der Arbeitsspeicher voll von unseren Arrays, kann das sein? Jetzt unsere Frage :) gibt es eine Möglichkeit unser Program zu verkleiner bzw einen anderen weg den Attiny 167 noch zu verwenden. Oder sollen wir auf einen anderen Mikrocontroller umsteigen? Wir würden aber einen benötigen den man mittels Arduino IDE und USB Kabel bespielen kann. Vielen Dank schon für eure Hilfe,
ich habe den Code gerade mal kompiliert und bekomme als Ausgabe: Der Sketch verwendet 9.310 Bytes (62%) des Programmspeicherplatzes. Das Maximum sind 14.844 Bytes. Globale Variablen verwenden 721 Bytes des dynamischen Speichers. Das sollte eigentlich problemlos gehen. Die Code-Größe sollte also eigentlich nicht das Problem sein.
Anmerkungen zum Code: a) Du solltest Delay() vermeiden. Das blockiert den Prozessor b) Du solltest den Code in einzelne Funktionen zergliedern ... Spagetti-Code ist immer schwerer zu warten / fehleranfälliger (zumindest vermute ich mal, dass das alles in Loop passiert ... ist anhand der fehlenden Einrückungen schwer zu lesen). c) Du initialisierst das Array Schalttabelle und viele andere Variablen in jedem Loop-Durchlauf neu. Pack das alles in Setup. In Loop sollte eigentlich gar keine Variable definiert werden. wenn der Code vernüftig formatiert ist, fallen mir sicher noch ein paar andere Sachen auf ;)
Das ist ja der Punkt der uns verwirrt XD wenn der Programteil, ab ,,schalten,,, das ist der untere Teil auskommentiert wird. Läuft das Program. Ansonsten verbindet er sich und trennt anschließend die USB verbindung.
wie gesagt: erstmal Code besser strukturieren durch auslagern von Teilfunktionalitäten in Funktionen. Dann auf alle Fälle das Array global definieren und in Setup einmalig initalisieren. Tut mir Leid: insgesamt ist der Code einfach schlecht geschrieben. Das er nicht läuft scheint mir weniger am Attiny zu liegen ;-)
Danke Doedel!!! Es lag am Code, wir sind auch nicht gerade die Profis in Programieren. Attiny lässt sich bespielen, ein Traum. Werde ich gleich mal testen. Ich geb alles aus den Loop raus, was etwas deklariert, also auch die Schalttabelle(Array). Programm werden wir ein bisschen schöner schreiben :) und sollte es nicht gehn kann ich ja noch einen Auszug schicken. Cool, der Kas is bissn :)
ja mai ... gfreit mi wens gäht! Ansunstn schickst den Schmarrn heud umi, dann schau i'n mia numei oh.
Ok, ganz is der Kas doch ned bissn. Es ist möglich jetzt den Attiny zu bespielen, nur macht das Program jetzt nicht mehr das was wir wollen XD. Ich hab grob das Program abgeändert, die variablen alle Global deklariert doch jetzt gibt er den Analogen Messwert (Volt) nicht mehr richtig aus. Wie kann/soll ich die variablen richtig deklarieren, um speicher zu sparen. Ich glaub eh dass das 2DArray am meisten braucht und wenn das richtig deklariert ist sollte es auch funktionieren.... Program für Attiny im Anhang :)
warum verwendet Ihr für Pin1 bis Pin5 Variablen? Schaut Euch hierfür mal die #define Anweisung an. Dann ist das immer noch Spagetti-Code. Ich würde Euch nochmal dringend empfehlen, das in einzelne Funktionen aufzuteilen, die man unabhängig voneinander auch testen kann. Das macht den Code wesentlich übersichtlicher und leichter wartbar. Dann kann man auch bedeutend besser entscheiden, welche Variablen in einer Funktion Sinn machen und welche, die global sein sollten. Also macht eine eigene Funktion für das Einlesen des ADC, eine für das Bilden des Mittelwertes, eine eigene für das Schalten usw. Die Delay() sind immer noch schlecht und sollten raus. Arbeitet Euch in die Grundlagen von Zustandsautomaten ein. Warum zwei Schleifen zum Einlesen? Ihr berechnet praktisch den Mittelwert eines Mittelwertes. Was ist denn der tiefere Sinn dahinter?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.