'Wizard' för AVR-utveckling

Berätta om dina pågående projekt.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

'Wizard' för AVR-utveckling

Inlägg 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.
Senast redigerad av cykze 8 mars 2008, 13:26:22, redigerad totalt 35 gånger.
Användarvisningsbild
Oskar
Inlägg: 1805
Blev medlem: 6 september 2005, 15:11:36
Ort: Storsjö, Sorsele

Inlägg 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
Användarvisningsbild
oJsan
EF Sponsor
Inlägg: 1541
Blev medlem: 11 november 2005, 21:36:51
Ort: Umeå
Kontakt:

Inlägg 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!
Användarvisningsbild
Macce
Inlägg: 4301
Blev medlem: 29 maj 2003, 16:40:58

Inlägg av Macce »

Snyggt.

Bekvämt när wxpython fanns i portagen, så man får köra "the Gentoo way", "emerge wxpython". :)
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg 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.
Användarvisningsbild
PaNiC
Inlägg: 2565
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg 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 :).
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg 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)
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg 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...
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg 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.
Användarvisningsbild
baron3d
EF Sponsor
Inlägg: 1339
Blev medlem: 1 oktober 2005, 23:58:43
Ort: Torestorp

Inlägg 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.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg 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.
Användarvisningsbild
baron3d
EF Sponsor
Inlägg: 1339
Blev medlem: 1 oktober 2005, 23:58:43
Ort: Torestorp

Inlägg av baron3d »

Ok, tack.

Har provat och skriva en, men det är inte lätt.
Framföralt optimerings delen.
Användarvisningsbild
axelsonic
EF Sponsor
Inlägg: 709
Blev medlem: 8 juni 2003, 20:56:03
Ort: Stockholm

Inlägg av axelsonic »

cykze, har bara en sak att säga. Fyfan vad ball =) . Fortsätt gärna !
Croaton
Inlägg: 137
Blev medlem: 23 november 2005, 10:06:26
Ort: Örnsköldsvik

Inlägg 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
Användarvisningsbild
karlstedt
EF Sponsor
Inlägg: 966
Blev medlem: 14 oktober 2003, 16:55:23
Ort: Lund
Kontakt:

Inlägg 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 ;)
Skriv svar