Atmel AVR ButterflyOp deze pagina: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?
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. Veel informatie over de Butterfly is te vinden op de Atmel Butterfly pagina (Butterfly user manual, pdf), en via de AVR-projects pagina.
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...
De AVR ButterflyEnkele Butterfly details
De ATmega169PV processorDe ATmega169PV processor (al een wat ouder type) is duidelijk een stuk krachtiger dan de ATtiny2313 die ik eerder gebruikt heb... Enkele kenmerken:
De ontwikkelomgevingTips: 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 PCSpecifiek 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: avrdude -p atmega169 -c butterfly -P /dev/ttyS0 -U flash:w:mijnprog.elf.hex 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 programmerProgrammeren 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: avrdude -p atmega169 -c siprog -P /dev/ttyS0 -i 40 -U
lfuse:r:-:h -U hfuse:r:-:h -U efuse:r:-:h 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-softwareOp 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. Ik verwacht hier uiteraard dat je de GCC compiler al hebt geïnstalleerd; zie de ATtiny pagina, sectie over tools. 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 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 ' 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'): avrdude -p atmega169 -c butterfly -P /dev/ttyS0 -U flash:w:main.hex 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 En als dit allemaal werkt kan je je eigen software gaan schrijven... Succes! Eigen softwareVoor 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 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 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 ButterflyVrije pinnenBij 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):
A/D conversieDe 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
Datalogger/controllerEen 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 controllerVoor complexere besturing van mijn RGB power LEDs wil ik ook de Butterfly inzetten, maar dat heeft niet zo'n haast... Later meer. Golfvorm-generatorSimpele 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-besturingHeb nog wat oude stappenmotoren liggen waar ik nog eens wat mee wil spelen. |
op mijn site |