Ich habe vor einiger Zeit einen Lilypad Abklatsch produziert mit einem BH1750FVI Sensor darauf der via I2C mit dem Atmega32u4 kommuniziert. Jetzt möchte ich, dass über die eingebaute LED welche an D13 angeschlossen ist leuchtet, wenn der BH1750FVI Licht ab einer gewissen Stärke erkennt. Dafür habe ich ne Sketch geschrieben, die auch wunderbar funktioniert. Soweit so gut.
Weil ich aber nebst dieser Funktion den Lilypad Abklatsch aber auch wie ein Lilypad nutzen will, wird bei einem normalen Upload einer anderen Sketch die BH1750 Sketch überschrieben. Das ist logisch. Also habe ich mir überlegt die BH1750 Sketch im EEPROM abzuspeichern und diese bei jedem einschalten des Lilypads automatisch auszuführen. Egal welche Sketch man sonst normal uploaded und ausführt.
Ist es möglich ne Sketch direkt vom EEPROM auszuführen? Falls ja, wie?
Und was wäre mit main.cpp in \Arduino\hardware\arduino\avr\cores\arduino?
Damit würde Zusatzcode doch in jeden mit der IDE erstellten Sketch eingebunden - oder habe ich das falsch verstanden?
Ob der dann noch wie gewünscht funktioniert, steht auf einem andern Blatt.
Allerdings halte ich das für einen ziemlichen - verzeiht - Schweinkram.
@wno158
danke für den Tipp mit der IDE, aber das würde den Sinn verfehlen. Verschenke ich eines dieser Lilypadklone, dann geht das nicht mehr, da der andere kein modifiziertes IDE hat.
Nehmen wir mal als Beispiel einen stinknormalen UNO, welcher eine LED auf dem Board hat, welche intern an D13 angeschlossen ist. Der Atmega328P weiss das von Werk aus ja nicht. Das wurde ihm später "bei gebracht". So wie ich das verstehe, steht dies im Bootloader. Auch die Tx Rx LED's, welche ihre Aufgaben haben, müssen erst wissen was sie zu tun haben. Oder sehe ich das falsch?
Es gibt doch im Bootloader eine Funktion die main() heisst. Wird diese nicht bei jedem Reset und Einschalten ausgeführt? Falls doch: Wäre es dann nicht möglich dort die BH1750 Sketch einzubauen?
So wie ich das verstehe, steht dies im Bootloader. Auch die Tx Rx LED's, welche ihre Aufgaben haben, müssen erst wissen was sie zu tun haben. Oder sehe ich das falsch?
Ja!
Die Tx Rx LED's werden von dem ATMega8U2 betätigt!
Das ist der "Koprozessor" auf dem UNO.
Und ja den ATMega8U2 könntest du für deine Zwecke modifizieren.
Wäre Arbeit, aber eine Chance besteht.
delf1980:
Das Board soll die BH1750 Funktion dauerhaft und immer ausführen. Egal ob man mit dem IDE ne neue Sketch hoch ladet oder nicht.
Lässt sich das irgendwie anders realisieren?
Außer eine eigene Boarddefinition machen und dem eigenem Core etwas unterjubeln, fällt mir nicht ein. Ist aber imho schlechte Praxis. Auch frage ich mich wafür das gut sein soll. Besonders weil du D13 nutzt. Damit kann ein Anwender Schwierigkeiten haben, SPI sauber zu nutzen wenn dann irgendwas anderes D13 auf High zieht. Du hilfst damit nicht dem Anwender sondern machst ihm das Leben schwer.
Besser: Mach eine saubere Library für dein Board, erstelle einen Beispiel-Sketch der eben auch ein neues Beispiel "BareMinimum" enthält und die Anwender sollen künftig diesen verwenden.
Eine Zeile Include vor dem Setup, zwei Zeilen im Setup, eine Zeile im loop.
Alternativ bei V2.0 einen ATtiny (8-pin) irgendwo versteckt, Der den Spaß mit der LED betreibt - Der kann ja gerne per I²C oder sonst wie von Seinem Tun abgehalten werden, wenn's denn sein muß.
Vorteil: Die Arduino-Pins sind frei (ggf. bis auf I²C, da Da ja der ATtiny nebst BH1750FVI angeschlossen sind.
Also auch nur eine halbe Lösung, da die I²C-Pins nicht 'normal' benutzt werden können, oder nur mit Einschränkungen.