Deze pagina is nog in ontwikkeling!!! Missen nog delen/details...
De Atmel AVR Butterfly (Atmel: ATAVRBFLY) is een
demo-printje van Atmel. Waarom is deze zo interessant?
Goedkoop (ik had ze begin 2011 voor €22,50 incl BTW, excl
verzendkosten)
Volledig: een simpel LCD display, een joystick met 5 schakelaars
(up/down/left/right/enter), speakertje, een 4 Mbit data flash,
temperatuursensor, etc
ATmega169 processor, programmeerbaar in C
Vrije ingangen (analoog en digitaal) en uitgangen (digitaal)
Batterij-gevoed (geleverd met grote knoopcel) en erg laag
stroomgebruik
Klein (6.7 x 4.5 x 1.2 cm, kleiner dan een credit-card of bankpas) en
licht.
Al met al een handig ding om makkelijk projectjes op
te zetten die een simpele gebruikersinterface nodig hebben, en een beperkte
hoeveelheid processing power (bijvoorbeeld een low-speed data logger, dankzij
de 512 kByte data flash). Zelf in een doosje ingebouwd, zie links, inclusief
een simpele schakeling om het geheel via USB te voeden (communicatie gaat nog
wel via de seriele poort) en wat blauwe ledjes voor het display (maar, kan ook
nog met batterijen gevoed, voor bijvoorbeeld draagbare toepassingen).Een
voorbeeld van een toepassing is mijn NiMH
batterij-tester.
Een van de opvolgers van de Butterfly is de ATXMEGAB1-XPLD
(Atmel XMEGA-B1 Xplained) met een ATxmega128B1 processor, USB, aanraaktoetsen,
LCD etc, volgens Atmel store $29,-. Lijkt interessant. Als ik nog eens nieuw
moet kopen...
0 - 4 MHz @ 1.8V - 5.5V, 0 - 8 MHz @ 2.7V - 5.5V (maar let op, de
seriële flash op de Butterfly gaat maar van 2.7 tot 3.6V... ! )
De
ontwikkelomgeving
Tips: Voor Code::Blocks kies de atmega169 als core, niet de
atmega169P (I/O library issue. En kies avr-gcc als linker,
niet avr-g++.
Ik gebruik hiervoor dezelfde tools (GCC compiler, Code::Blocks) als voor de
andere Atmel processor die ik gebruik, de ATtiny2313. Zie dan ook deze pagina
voor een overzicht van de ontwikkelomgeving.
Direct aan
de PC
Specifiek voor de Butterfly: de Butterfly kan direct op een seriële poort
op de PC aangesloten worden (wel zelf een connector er op zetten), en kan
dan zonder extra hardware via de ingebouwde boot loader worden geprogrammeerd
met avrdude (één regel), boot loader starten via menu naar Options >
Boot loader > Jump to boot loader; hier de joystick indrukken ('Enter') en
ingedrukt houden totdat je avrdude gestart hebt:
Snel en makkelijk... Maar: de Butterfly wordt geleverd zonder connectoren,
afhankelijk van wat je er mee wilt moet je die er zelf op solderen. Eerste wat
ik dus gedaan heb is met een header en drie draadjes er een 9-polige sub-D
connector (female) opgezet voor de seriële poort, zodat ik hem aan mijn PC kan
hangen; zie pagina 19-20 van het user
manual. Testen: probeer je naam in de Butterfly te zetten via
HyperTerm of gtkterm (pagina 4).
Een
seriële programmer
Programmeren kan ook met de seriële programmer die
ik ook voor de ATtiny gebruik, en wordt dan aangesloten op de 6-polige ISP
connector. Wel een extra 1N4148 diode aangebracht in de voedingslijn van de
programmer; de butterfly mag maximaal 4.5 Volt hebben ivm de seriële
flash (heb ook de signaallijnen op een lager niveau begrenst, 5V1 zenerdiodes
vervangen door 4V3). De seriële programmer heeft het voordeel dat je ook alle
andere commando's van avrdude kan gebruiken, bijvoorbeeld op de fuses
uit te lezen ( standaard: l=0xe2, h=0x98, e=0xff, device signature =
0x1e9405) of te programmeren, of om de oorspronkelijke binary (inclusief
boot loader) uit te lezen voor het geval zaken overschreven raken en de
standaard boot loader niet meer werkt (twee keer één regel):
Vreemd genoeg is de teruggelezen binary niet helemaal dezelfde als die die
ik in de file met de oorspronkelijke sources heb gevonden...
De
Butterfly menu-software
Op de Butterfly draait een eenvoudig menu-gedreven applicatie, die je de
mogelijkheden van de Butterfly laten proberen (datum/tijd, temperatuur,
muziekjes spelen, ...). Dit wordt gedaan vanuit een C programma, waarvan ook de
source bescjikbaar is, als voorbeeld om aan programmeurs het hoe en waarom te
laten zien.
De beschrijving hier is voor Linux, maar onder Windows gaat
het geheel op een vergelijkbare manier.
De menu-demo is oorspronkelijk geschreven voor de Atmel ontwikkelomgeving,
maar er is ook een GCC port beschikbaar wat bijvoorbeeld in een Linux-omgeving
handiger kan zijn. Dit is gelijk een goede test om je GCC-omgeving te testen,
en als startpunt te dienen. Van de AVR projects site is de
source van de GCC port van versie Rev07 te downloaden (versie 0.7.6
van 20091217). Pak deze uit in een nieuwe folder. Je ziet in deze folder nu een
aantal C code en header files, een make file, en zo voort.
Start nu een terminal in die folder, en (als je dat nog niet globaal gedaan
hebt) zorg dat Linux je AVR-tools kan vinden door het pad goed te zetten.
Daarna kan je met make de compilatie starten:
PATH=/usr/local/avr/bin:$PATH
make
Compilers zijn niet altijd helemaal deterministisch. Zo is de demo-binary
onder Windows 6 bytes kleiner dan die onder Linux (zelfde make file, zelfde GCC
versie). Kan komen door kleine verschillen in bijvoorbeeld de
link-volgorde.
De compiler gaat nu aan de slag, en produceert (als alles goed gaat) een
file genaamd 'main.hex'. Je kunt uiteraard ook proberen om het
geheel in een IDE als Code::Blocks te importeren, maar met de meegeleverde
make-file gaat het vanaf de command line wel zo makkelijk.
Het uploaden naar de Butterfly: sluit de Butterfly aan op de seriële poort,
en breng hem in bootloader mode (zie ook het user manual): Options »
Boatloader » Jump to bootloader. In de terminal avrdude
opzetten met de volgende argumenten (maar druk nog NIET op 'Enter'):
De demo-software gebruikt iets meer dan 13 Kbyte; de bootloader is 1 Kbyte
groot. Er is dus nog haast 2Kbyte plek om wat kleine (test-)routines toevoegen
aan de standaard versie.
Op de Butterfly nu de joystick indrukken en ingedrukt houden, op het
toetsenbord de 'Enter' indrukken, en avrdude moet nu starten (je kan de
joystick loslaten). avrdude gaat nu het een en ander inlezen, de flash
wissen en programmeren, en weer teruglezen om te verifiëren dat alles goed is
gegaan. Na de bootload staat de Butterfly in rust: joystick 'up', en de
startup tekst komt in beeld; nu AVR BUTTERFLY GCC. Klik de
joystick naar rechts, en de versie 076 verschijnt (0.7.6).
En als dit allemaal werkt kan je je eigen software gaan schrijven...
Succes!
Eigen
software
Voor mijn eigen software ga ik uit van de Butterfly demo-programma opzet,
hierin zitten al routines voor menu-besturing, LCD-aansturing en dergelijke;
dus waarom niet hergebruiken? Op die manier hoef je alleen aan te passen wat er
in je eigen programma moet (en eventueel er uit te gooien wat te veel ruimte in
neemt, zoals de liedjes in sound.c).
Wel vind ik de menu-structuur vrij onoverzichtelijk (verdeeld over enkele
files als menu.h en main.h, en over diverse tabellen). Ik heb de menu's er uit
geplukt en in één tabel met kolommen voor state, naam en acties gezet. Hiervan
maak ik met behulp van Perl nu al de benodigde tabellen en zo (ik maak een
nieuwe menu.h). Als ik nu menu's verander hoef ik dat maar op een
plaats te doen...
Een eerste test was het maken van wat wijzigingen in de voltmeter (floating
point wegwerken, nergens voor nodig; via menu schakelen tussen interne en
externe referentiespanning), om te kijken of het werkt.
Mijn
projecten met de Butterfly
Vrije
pinnen
Bij eigen projectjes wil ik extra hardware aansluiten (bijvoorbeeld 4
analoge ingangen gebruiken). De volgende pinnen zijn 'vrij' (of vrij te maken)
voor experimenten, zie het Butterfly user
manual, en/of de details in Butterfly
Alternate Pin Uses van smileymicros (waar nog meer Butterfly info
te vinden is):
De standaard software maakt geen gebruik van de ingebouwde 1.1V
referentiespanning, maar gebruikt om stroom te besparen via PF3 de
voedingsspanning (2.85V) als referentie... Dus, als je een externe voeding
aansluit veranderen je meetwaarden, afhankelijk van de externe spanning.
De interne hoog-ohmige (~50K) referentiespanning wordt belast door het
NTC-circuit (160K) en indien aangesloten de LDR, dat kan een probleem zijn...
Spanning is dus maar zo'n 0.8V in plaats van 1.1V. Misschien een baantje
doorkrassen?
Met de Vcc-pinnen op de connectoren is het even oppassen: de meeste zijn de
Vcc_ext spanning, dat wil zeggen bedoeld om de Butterfly mee van
spanning te voorzien, niet om spanning te leveren! Ze zijn via een diode
gescheiden van de batterij-spanning op de butterfly. Alleen de Vcc
op de JTAG connector is echt de processor-spanning.
Datalogger/controller
Een eerste serieus project in mijn NiMH
batterij-tester; gebaseerd op een simpele data logger/controller met opslag
op de flash chip: hoe snel is een NiMH van vol naar 1 Volt (leeg) door een 100
mA belasting (die wordt afgeschakeld bij het bereiken van 1 Volt, om te verre
ontlading te voorkomen)?
LED
controller
Voor complexere besturing van mijn RGB power LEDs
wil ik ook de Butterfly inzetten, maar dat heeft niet zo'n haast... Later
meer.
Golfvorm-generator
Simpele schakeling om twee kanalen analoge data te genereren met behulp van
de LTC1661 10-bit DAC (Digitaal naar Analoog Converter), bijvoorbeeld voor het
maken van willekeurige golfvormen (geluid, testen), of het weergeven van data
in grafische vorm op een oscilloscoop (handig bij heel langzame signalen las
bij mijn batterijtester; versneld weergeven om te bekijken).
Stappenmotoren-besturing
Heb nog wat oude stappenmotoren liggen waar ik nog eens wat mee wil
spelen.