Fórum témák

» Több friss téma
Cikkek » MIDI vezérlő AVR-el (V-USB-MIDI) I.
MIDI vezérlő AVR-el (V-USB-MIDI) I.
Szerző: pintad, idő: Okt 5, 2009, Olvasva: 30597, Oldal olvasási idő: kb. 1 perc
Lapozás: OK   4 / 5

A program maga a V-USB projektre épül. Az általam letöltött program elsőre majdnem hibátlanul működött, első észrevételem azonban az volt, hogy a szabályozható ellenállások közül csak az utolsó kettő működött. Áttanulmányozva a programot megtaláltam a "hibát", és javítottam.

Pár szóban a működéséről:
A program végigmegy az összes D/A konverteren, beolvassa az értékét, és összehasonlítja az előző értékekkel, amiket egy tömbben tárol. Ha változik az érték, akkor jelet küld az USB-n keresztül. Nyomógombok érzékelése a következő: keyPressed függvény segítségével megvizsgálja, hogy történt-e változás PortB bemenetein (amire a billentyűk vannak kötve), és ha van változás, akkor jelet küld az USB-n.

Ami az általam tapasztalt hibát okozta, az az volt, hogy alapból csak a 6-os és 7-es lábat vizsgálta a program, illetve volt benne egy olyan utasítás, amit őszintén szólva nem is értettem, így hát kicseréltem két saját utasításra, és utána működött is. (Őszintén szólva, nem sok dolgom volt C kóddal ezelőtt.)

A program forráskódja letölthető itt, illetve a kész HEX fájl letölthető itt.

A programozóról, programozásról itt nem írok, a neten sok helyen, például itt is van leírás (az itt bemutatott STK200/300-as LPT programozó több szoftverrel, így az AVRDude-t tartalmazó WinAVR-el is működik).

Módosítás: többen kérték, hogy írjam le a fuse bitek beállítását. Alapesetben ez a beállítás megtalálható a makefile-ban, tehát ha WinAVR-el programozzuk az AVR-t, akkor ezt nem kell megadnunk. Kimásoltam hát ezt a részt a makefileből, hiszen ennél érthetőbben és egyszerűbben én se tudom leírni:

Fuse high byte:
0xc1 = 1 1 0 0   0 0 0 1 <-- BOOTRST (boot reset vector at 0x3800)
       ^ ^ ^ ^   ^ ^ ^------ BOOTSZ0
       | | | |   | +-------- BOOTSZ1
       | | | |   + --------- EESAVE (preserve EEPROM over chip erase)
       | | | +-------------- CKOPT (full output swing)
       | | +---------------- SPIEN (allow serial programming)
       | +------------------ WDTON (WDT not always on)
       +-------------------- RSTDISBL (reset pin is enabled)

Fuse low byte:
0x9f = 1 0 0 1   1 1 1 1
       ^ ^ `-´   `--+--´
       | |  |       +------- CKSEL 3..0 (external >8M crystal)
       | |  +--------------- SUT 1..0 (crystal osc, BOD enabled)
       | +------------------ BODEN (BrownOut Detector enabled)
       +-------------------- BODLEVEL (2.7V)

A cikk még nem ért véget, lapozz!
Következő: »»   4 / 5
Értékeléshez bejelentkezés szükséges!
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem