neděle 21. prosince 2008

Stav projektu k 21.12. 2008

O víkendu jsem se pustil do oživování řídicího modulu. Napájení propojek a smd součástek, včetně procesoru, bylo otázkou chvilky. Horší to už bylo s programováním... Pořídil jsem si programátor usbasp, z obchodu na stavebnice.com. Programátor přišel rychle, ale docela mě překvapilo, že v něm nebyl firmware (na to jsem přišel celkem rychle). Firmware jsem tedy nahrál pomocí ponyprogu na mém starém počítači, který má paralelní port.

Ovšem programátor se pořád nechtěl bavit s modulem. Vyzkoušel jsem tedy komunikaci s již plně oživeným modulem pro ovládání motorků a ono to funguje. Po dlouhém bádání (opravdu dlouhém) se mi podařilo identifikovat chybu. V datasheetu atmega64 je na straně 306 toto:
Even though the SPI Programming interface re-uses the SPI I/O module, there is one important difference: The MOSI/MISO pins that are mapped to PB2 and PB3 in the SPI I/O module are not used in the Programming interface. Instead, PE0 and PE1 are used for data in SPI Programming mode as shown in Table 127.
Viz také obrázek:


Dosud jsem pracoval pouze s attiny2313, atmega8 a atmega16 u kterých jsou programovací piny MISO a MOSI totožné se stejnojmennými piny rozhraní SPI. Proto mě nenapadlo, že to u atmega64 bude jiné. Tak aspoň jsem zase o něco moudřejší :-) ATmega64 je v řídicím modulu použitý z toho důvodu, že je to nejlevnější procesor od Atmelu s dvěma UARTy. Jeden je potřeba na komunikaci s podřízenými moduly a jeden na komunikaci s počítačem. Samozřejmě je tu i možnost použít soft UART. Ten ale není tak spolehlivý.

Programátor usbasp jsem si vybral z toho důvodu, že je podporován programem avrdude, který je možné použít jak ve Windows (WinAvr), tak na Linuxu. A navíc nebyl moc drahý. Třeba se někomu bude hodit ukázka používaných příkazů. Parametr ponyser stačí přepsat na usbasp, port není potřeba zadávat a jinak je to stejné. Pro výpočet potřebných fuse bitů používám online AVR Fuse Calculator.

Jako IDE na Linuxu používám Eclipse 3.3 Europe. Do něj stačí nainstalovat plugin pro vývoj C/C++ (CDT) a plugin pro AVR. Potom je možné vytvořený projekt nahrát do mikroprocesoru přímo z prostředí Eclipse. Příjemným pomocníkem je AVR Device Explorer - v něm je seznam registrů, přerušovací vektory a další užitečné informace.

Ještě předtím než můžeme programovat přímo z Eclipse je však potřeba mít v systému crossdev a vytvořit si verzi gcc pro avrka. S crossdev budete mít téměř zaručeně celou řadu problémů :-) Doporučuji najít si howto přímo pro danou distribuci. Dále je potřeba (alespoň u mě - je to zřejmě nějaký bug) v adresáři projektu debug vytvořit následující link (aby si linker nestěžoval):
ln -s /usr/lib64/binutils/avr/2.18/ldscripts ldscripts
Potom je ještě potřeba umožnit přístup k programátoru i non-root uživateli. To zařídíme nejlíp pomocí UDEV. Stačí jednoduché pravidlo. V adresáři /etc/udev/rules.d/ jsem vytvořil soubor 97-usbasp.rules a v něm jsou dva řádky:
# USBasp programmer
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", GROUP="users", MODE="0660"
Pak už stačí jen pomocí příkazu udevadm control reload_rules donutit udev znovunačíst pravidla a i obyčejný uživatel může zvesela programovat...

Žádné komentáře:

Okomentovat