Sida 1 av 6

'Wizard' för AVR-utveckling

Postat: 5 januari 2006, 03:45:38
av cykze
Inledning

Det är inte ofta man ser mjukvaruprojekt i Projekt-forumet. :)

En wizard för att skapa AVR-projekt kom på tal i den här tråden för ett tag sedan...

En wizard kan vara väldigt smidig precis då man ska starta ett projekt för att räkna ut timer-värden och att välja värden för UART:en t ex. Framför allt slipper man allt databladsletande och kan snabbt komma igång med ett projekt. Den wizard som finns i CodevisionAVR är rätt bra, förutom att koden den genererar inte är vacker. Tyvärr är den också rätt värdelös efter att man väl har skapat sitt program också. Jag skulle vilja ha ett program som man även kan ha användning för under kodandets gång. Dessutom är Codevisions wizard, och alla andra jag har sett, absolut inte fria programvaror.

Hur som helst tog jag och gjorde en egen wizard, som är tänkt att användas tillsammans med den fria C-kompilatorn/paketet avr-gcc/WinAVR. Den är faktiskt rätt användbar redan nu. Sen får man väl se hur bra man kommer och trivas med den när man väl börjar på ett AVR-projekt. Som det är nu genereras koden utifrån de val man gör i programmet. Än så länge finns bara de AVR-funktioner som man använder oftast (Timer, UART, A/D och Externa interrupts). Under Timer-delen fattas fortfarande en hel del, främst PWM. Men det är rätt enkelt att lägga till nya flikar.

Jag har väl tänkt försöka komma på något bra sätt hur den ska kunna underlätta när man sitter och kodar också. Hur jag ska lösa det har jag inte riktigt kommit fram till. Man kan visserligen använda wizarden, som den är nu, till det, men jag letar efter något effektivare sätt. Det lutar nog åt att man i varje flik presenterar relevanta register och bitar, för att åstakomma det man har ställt in att man vill göra. Eller något åt det hållet. :) Jag ska fundera på vad jag saknar när jag sitter och kodar till AVR:en.

Programmet ska gå att använda som det är nu. Men det är fortfarande en del detaljer som ska fixas.


Att göra

* Informationsrutor, för att bl a informera om vilka i/o-pinnar som påverkas av en viss inställning och register som är aktuella för en viss funkton (t ex UDR för UART:en).
* Försöka fixa "utseendebuggar" som vissa har upplevt
* Ordna till i Timer-fliken
* Bestämma hur i/o-ports-kommentarerna ska se ut
* Lägga till ytterligare AVR-funktioner (SPI, TWI osv.)
* Komma på lite nya funtioner som skulle underlätta utvecklandet
* Ringbuffert för UART:en
* Lägga in stöd för flera AVR:er
* Snygga till layouten
* + lite till


Lite bilder (nyaste först)

Jämförelse-rutan efter ändring av prescalern från 1 till 8 (Linux):
Bild

I/O-portar (Linux):
Bild

UART + delay-generatorn (Linux):
Bild

Timer (med PWM-inställningar) (Linux):
Bild

Äldre bilder:
Timer (Linux)
A/D (Windows)

Programmet är ett experiment för att se om programidéen kan visa sig vara användbar eller inte. Det finns inga garantier att programmet genererar helt korrekt kod, även om det är det som är tanken. Hittar du fel i programmet så får du gärna höra av dig.


Ladda ner

Senaste versionen av programmet (60kB) om någon vill prova. Kräver att Python och wxPython är installerat (i den ordningen) för Windows. Ledsen om det är en del och ladda hem för er med modem, men kombinationen Python och wxPython kan jag bara inte säga nej till. :)

En färdigbyggd version av programmet för Windows finns också att ladda hem. Tyvärr har jag inte möjlighet att alltid hålla den lika uppdaterad som själva py-filen här ovan. Zip-filen finns att ladda hem här. (~3.8 MB) Packa upp zip-filen och kör programmet avr_app.exe. Varken Python eller wxPython behöver alltså vara installerat.

Vi Linux-användare (eller *nix-användare i allmänhet) installerar Python och wxPython genom distens paketsystem eller i värsta fall genom att kompilera det själva och installera. Sen är det bara att köra programmet med "python avr_app.py" eller göra den körbar och sedan köra den direkt.

Kör du Mac OS X finns Python här och wxPython här. Jag har dock ingen möjlighet att testa programmet under Mac OS X tyvärr.


Uppdateringar

080308: Bugfix: Uträkningarna av _delay_loop_1 och _delay_loop_2 var felaktiga!
071212: Uppdaterat bild (compare)
070405: Grupperat inställningar i rutor och förbättrat Timer-fliken. Windows-exe:n _ej_ uppdaterad
060426: Lagt in stöd för Mega128 och fixat lite
060320: Lagt in stöd för Tiny2313.
060319: Fixat buggen med att jämförelsefunktionen inte fungerade för vissa typer av inställningar (kryssboxar).
060131: Gjort om mycket i koden. Lagt in kod, den nya jämförelsemetoden (se bild) och delay-generatorn i flikar.
060110: Lagt in inställningar för PWM och input capture. Lite justeringar behövs dock. Lagt in ny bild.
060107: Ändrat i "Att göra"-listan
060107: Inställningar för I/O-portarna. Nya bilder.
060106: Bugfix + ny bild
0601??: (Se bild 3) Lagt till val av klockfrekvens och en mycket enkel delay-uträknare + plus lite småfix.
0601??: Ändrat i "Att göra"-listan
0601??: Gjort så att den kan generera fullständig kod.

Postat: 5 januari 2006, 08:09:45
av Oskar
Whoho! =) Imponerande må jag säga! Även om man får anse att programmet än så länge är en "betaversion" så ser det ju mycket användbart och lovande ut!

Pyton har jag inte tidigare kommit i kontakt med. Synd att man int har någon grafisk miljö på linuxdatorn, men den är helt enkelt för värdelös för det.

Jag får testa progget. Just i början av ett avr projekt kan ett sådant program vara mycket användbart. Speciellt om man är avr noobie ;)

jag kan ju försöka verka duktig o säga att jag klarade mig utan wizard ändå på mitt projekt .. =)

EDIT:
o herreligen .. va du verkligen uppe den tiden du postade?! =)

/Oskar

Postat: 5 januari 2006, 10:21:46
av oJsan
Bra initiativ! Antar att du kanske har kikat på Imagecraft IDE for ICCAVR :D Ser i alla fall väldigt likt ut... Sånna där guider är bra för att komma igång snabbt och slippa räkna på diverse klockvärden osv!

Postat: 5 januari 2006, 12:44:01
av Macce
Snyggt.

Bekvämt när wxpython fanns i portagen, så man får köra "the Gentoo way", "emerge wxpython". :)

Postat: 5 januari 2006, 13:17:25
av $tiff
Det här var en riktigt bra idé!
Jag blir riktigt sugen på att hjälpa till på ett hörn! Det där med UART-stöd för många olika AVR är ju t.ex. en riktigt träsk med tanke på vad de har stökat runt dessa register med tiden.

Postat: 5 januari 2006, 13:21:40
av PaNiC
$tiff: Jo det skojar man inte bort. Ruskigt rörigt är det.

Trådskaparen: Bra initiativ! Det finns verkligen användning för ett sådant här program :).

Postat: 5 januari 2006, 14:57:32
av cykze
Nu har jag lagt in stöd för att kunna generera fullständig kod. Se bild 3 i första posten.

$tiff: Ni får gärna hjälpa till med att lägga in stöd för flera AVR:er, förslagsvis de populäraste först (Mega8, Tiny2313, Mega16, Mega32 mfl.). Men det blir aktuellt först när programmet börjar kännas färdigt. Det skulle inte vara så kul om man skulle behöva skriva om allt bara för att man har behövt göra någon radikal ändring i programmet.

Men ni får jättegärna komma med synpunkter så länge.

En grej till som jag tänkte på är att man skulle kunna få någon slags hjälp när man vill flytta en kod från t ex en Mega8 till en Mega88. Namn på register och bitar är nämligen inte de samma på dom båda. Men det finns nog många saker att fixa innan man kan komma så långt.

edit: Jag har lagt till klockfrekvensval och en liten enkel delay-uträknare. (Se bild 3)

Postat: 6 januari 2006, 22:29:14
av $tiff
En idé är att lägga till kommentarer efter vissa val ("rullgardinslist" eller kryssruta) som berättar vad alternativet får för implicita konsekvenser, t.ex. att vissa pinnar sätt som ingångar för ADCn och att PWM och UART kommer att lägga vantarna på kontrollen över vissa I/O, etc.

Andra önskemål:

En komplett ringbuffert för UARTen. Sådana libs finns färdiga och väl fungerande så det ska du inte behöva skriva.

En metod för att enkelt infoga asm-kod i en C-rutin. Att pasa över variablerna på rätt sätt är inte så lätt för alla...

Postat: 7 januari 2006, 00:59:58
av cykze
Inställningar för I/O-portarna inlagda!

$tiff:

> En idé är att lägga till kommentarer efter vissa val ("rullgardinslist" eller kryssruta) som berättar vad alternativet får för implicita konsekvenser, t.ex. att vissa pinnar sätt som ingångar för ADCn och att PWM och UART kommer att lägga vantarna på kontrollen över vissa I/O, etc.

Jag ska försöka ordna det och PWM som nästa steg.

> En komplett ringbuffert för UARTen. Sådana libs finns färdiga och väl fungerande så det ska du inte behöva skriva.

Det krävs ju en del kod för att få en ringbuffert att fungera. Ska man lägga in stöd för det så försöker jag nog göra det så enkelt som möjligt. Vill man sedan ha en mer avancerad för man ordna det själv i sitt program. Lägger till det i "Att göra"-listan iaf.

> En metod för att enkelt infoga asm-kod i en C-rutin. Att pasa över variablerna på rätt sätt är inte så lätt för alla...

Jo, syntaxen verkar lite klurig och man ska komma ihåg vilka "constraints" man ska använda. Jag har själv inte använt mig av variabler till och från inline-asm. Men det ska väl inte vara helt omöjligt att fixa. I så fall blir det nog i ett litet delprogram (fönster) i så fall. Ungefär som delay-generatorn ligger nu. Har du någon idé hur den dialogrutan skulle kunna se ut? Vad man ska kunna mata in osv.

Postat: 7 januari 2006, 01:11:40
av baron3d
Mycket snyggt

Har själv något liknade i tankarna, fast för pic ...

Ingår C-kompilatorn i wxPython eller Python ?
Kanske en dum fråga, men känner inte till dessa program.

Postat: 7 januari 2006, 01:48:22
av cykze
baron3d: Någon C-kompilator ingår inte. Python är ett mycket smidigt och omtyckt objektorienterat programmeringsspråk. Det kompileras inte till maskinkod utan behöver en tolk. Det är därför Python behöver vara installerat. wxPython är en Python-wrapper av wxWidgets (tidigare wxWindows), som är ett mycket trevligt och lättanvänt GUI-lib. Kombinationen Python och wxPython är riktigt skön. :)

Eller du kanske syftade på C-kompilatorn som ska kompilera all genererad kod? :) I så fall är det AVR-GCC (WinAVR i Windows) som är tänkt ska användas. Det borde såklart ha framgått i första posten.

Postat: 9 januari 2006, 21:59:44
av baron3d
Ok, tack.

Har provat och skriva en, men det är inte lätt.
Framföralt optimerings delen.

Postat: 10 januari 2006, 10:02:26
av axelsonic
cykze, har bara en sak att säga. Fyfan vad ball =) . Fortsätt gärna !

Postat: 10 januari 2006, 10:58:28
av Croaton
Coolt!

Blir sugen på att testa någon AVR proc samt avr-gcc... (Har hållit mig till PIC än så länge).

Keep it up!

/Croaton

Postat: 10 januari 2006, 12:21:04
av karlstedt
Bra jobb där cykze.. Nu börjar du konvertera de förvirrade PIC-användarna också... Sånt måste ju betraktas som en god gärning ;)