Beim Einkauf meiner ATtiny-Muster habe ich mehr auf die Verfügbarkeit und auf die Anzahl I/O Pins (mit und ohne PWM, RXD, TXD, etc) geachtet. Was ich übersehen habe: Der ATtiny2313 (20 Pins) hat nur 2kB Flash. Selbst der ATtiny85 (8 pins) hat 8kB.
Selbst beim Compilieren des "Blink"-Programms hat man die 2kB Grenze fast schon geknackt.
Arduino-lite wurde leider schon eine Weile nicht mehr aktualisiert. Damit es sich in das IDE integrieren lässt, muss man etwas tricksen:Selbst beim Compilieren des "Blink"-Programms hat man die 2kB Grenze fast schon geknackt.
Geht es auch sparsamer, ohne auf das Arduino IDE zu verzichten und direkt auf die Hardware runter zu gehen?
Arduino-Lite !
Ein Lösungsansatz scheint "Arduino-Lite" zu sein. Es implementiert einige der Arduino Befehle über C-Macros. Dadurch wird der Code, der zur Laufzeit ausgeführt wird statischer und kompakter.
"Thanks to the marcos in Arduino-Lite, we keep it simple but providing higher performance and smaller binary size. Almost all core functions in Arduino have their Arduino-lite version, most of which are implemented by marcos. In Arduino-Lite, the conversion from numbering pin to AVR registers are finished in the compiling phase, which is in the runtime in Arduino."
Ein paar einführende Links: http://blog.iteadstudio.com/arduino-lite-lightweight-avr-library/http://blog.iteadstudio.com/arduino-lite-lightweight-avr-library/
Arduino-Lite Lightweight AVR Library(1): http://www.elecfreaks.com/92.html
Arduino-Lite Lightweight AVR Library(2): http://www.elecfreaks.com/120.htmlhttp://www.robopeak.net/blog/?p=131
Arduino-Lite Development Reference Manual: http://www.elecfreaks.com/167.html , http://www.robopeak.net/blog/?p=185
Installation im IDE 1.0.3:
Das Archiv: http://arduino-lite.googlecode.com/files/arduino-lite-r0.2.zip (die momentan neueste Version) herunterladen. Die ZIP-Datei ist relativ gross, wir benötigen lediglich den Ordner "arduino-lite-r0.2.zip\arduino-lite\src\core". Dieser wird wieder nach
Herunterladen von arduino-lite-r0.2.zip , den Inhalt des Ordners "arduino-lite/src/core" in einen neuen Unterordner "arduino-1.0.3\hardware\arduino\cores\lite" kopieren.
Noch ein paar Einträge in "arduino-1.0.3\hardware\arduino\boards.txt" ergänzen:
##########################################
attiny2313-lite.name=LITE ATtiny2313 (internal 8 MHz clock)
attiny2313-lite.bootloader.low_fuses=0xe2
attiny2313-lite.bootloader.high_fuses=0xdf
attiny2313-lite.bootloader.extended_fuses=0xff
attiny2313-lite.upload.maximum_size=2048
attiny2313-lite.build.mcu=attiny2313
attiny2313-lite.build.f_cpu=8000000L
attiny2313-lite.build.core=lite
attiny2313-lite.build.variant=standard
##############################################################
mega328lite.name=LITE ATmega328 on a breadboard (8 MHz internal clock)
mega328lite.upload.protocol=stk500
mega328lite.upload.maximum_size=30720
mega328lite.upload.speed=57600
mega328lite.bootloader.low_fuses=0xE2
mega328lite.bootloader.high_fuses=0xDA
mega328lite.bootloader.extended_fuses=0x05
mega328lite.bootloader.path=arduino:atmega
mega328lite.bootloader.file=ATmegaBOOT_168_atmega328_pro_8MHz.hex
mega328lite.bootloader.unlock_bits=0x3F
mega328lite.bootloader.lock_bits=0x0F
mega328lite.build.mcu=atmega328p
mega328lite.build.f_cpu=8000000L
mega328lite.build.core=lite
mega328lite.build.variant=standard
usw.
Arduino.h ergänzen
Das IDE sucht beim Compilieren nach der Datei Arduino.h. Hierfür müssen wir noch einen kleinen Stub ergänzen. Bei der Gelegenheit fügen wir auch noch ein paar kleine Ergänzungen aus Kompatibilitätsgründen ein: Hier der Sourcecode zu arduino-1.0.3\hardware\arduino\cores\lite\Arduino.h:
// MM: need this stub to bring arduino_lit into the new IDE 1.0.x world
#ifndef Arduino_h
#include "arduino_lit.h"
#define Arduino_h
// see wiring_lit.h
#define pinMode(a,b) PIN_MODE(a,b)
#define analogWrite(a,b) ANALOG_WRITE(a,b)
#define digitalWrite(a,b) DIGITAL_WRITE(a,b)
#define digitalRead(a) DIGITAL_READ(a)
// MM: to increase compatibility with Arduino libraries ("main.cpp")
int main()
{
init();
setup();
while(1)
loop();
}
#endif
---------------------------------------
Erste Versuche
Das Beispielprogramm "Fading" lässt die Intensität einer LED wechseln.Ich habe eine kleine Änderung am Code vorgenommen, damit die statischen Macros funktionieren können:"int ledPin = 9;"
in
"#define ledPin 9"
ändern.
Danach ergibt sich folgendes Bild beim kompilieren:
"Regulär" kompiliert, für ein Arduino UNO Board:
Binäre Sketchgröße: 1.296 Bytes (von einem Maximum von 32.256 Bytes)
Für den ATtiny2313
Binäre Sketchgröße: 1.062 Bytes (von einem Maximum von 2.048 Bytes)
Für den ATtiny44:
Binäre Sketchgröße: 1.038 Bytes (von einem Maximum von 4.096 Bytes)
Für den ATtiny85:
Binäre Sketchgröße: 944 Bytes (von einem Maximum von 8.192 Bytes)
Mit Arduino-Lite:
Binäre Sketchgröße: 448 Bytes (von einem Maximum von 2.048 Bytes)
Damit sollte es möglich sein, auch ein sinnvolles Projekt auf den 2313 zu bringen, ohne auf Arduino zu verzichten und auf Registeroperationen und Bitmanipulationen zu setzen.- Nicht das dies absolut schlimm wäre, aber der Code ist dann weniger portabel und lesbar.
Arduino-Lite setzt nicht das gesamte API um. Man muss also etwas in die Trickkiste greifen.
Keine Kommentare:
Kommentar veröffentlichen