User Tools

Site Tools


pl:avrc:programator

Programator

Wstęp

Dawno temu kiedy komputery posiadały jeszcze pory równoległe programowanie układów AVR wymagało jedynie kilku rezystorów. Dzisiaj w erze laptopów konieczne jest zbudowanie dodatkowego urządzenia pośredniczącego: programatora. Zadaniem urządzenia jest wysyłanie komend do układu docelowego w celu wykorzystania wbudowanego modułu ISP układów AVR, który to posiada między innymi możliwość zmiany zawartości pamięci Flash (programu).

Idea

Obecnie popularne programatory posiadają następujące wady:

  • Są stosunkowo drogie - Najtańszy oficialny programator AVR Dragon to wydatek rzędu ∼250 PLN
  • Są skomplikowane - wiele programatorów posiada np. bufory konieczne do programowania układów pracujących przy napięciach zasilania innych niż 5V
  • Wymagają niepodpisanych sterowników (problemy w 64 Windowsie) (Edit: Najnowsze wydania USBLib nie posiadają tego problemu)

Oraz co najgorsze:

  • Wymagają innego programatora do uruchomienia!

Kod programatora opiera się na projekcie wchodzącym w skład pakietu LUFA1): http://www.fourwalledcubicle.com/AVRISP.php Natomiast płytka została zaprojektowana przeze mnie.

Zalety tego programatora

  • Dzięki wbudowanemu bootloaderowi USB nie jest konieczne posiadanie innego programatora w celu jego uruchomienia.
  • Umożliwia zasilenie układu docelowego
  • Zastosowanie elementów SMD eliminuje konieczność wiercenia (chyba najbardziej uciążliwy proces podczas wytwarzania płytek).
  • Tylko 4 elementy wymagają odpowiedniej polaryzacji + mikrokontroler (trudniej o pomyłkę).
  • Pracuje z avrdude lub z AVR Studio (w zależności od wybranego firmware)
  • Niski koszt (20÷25 PLN październik 2011)
  • Małe wymiary
  • Posiada generator 4MHz (do ratowania zablokowanych układów przez złe ustawienie fusebitów źródła taktowania)
  • Programuje układy korzystające z interfejsów Interfejs, PDI, TPI (Układy AVR32 i xMega)
  • Prawdziwe USB (nie przekombinowane jak w przypadku np. USBASP)

Schematy

TODO zdjęcie - wzór

Lista elementów

Element Wartość Opis
IC1 AT90USB162 Mikrokontroler
USB - Pola lutownicze do podłączenia przewodu USB
F1 500 [mA] Bezpiecznik polimerowy
R1 R2 22 [Ω] Rezystory linii USB
C1 1 [uF] Kondensator stabilizatora napięcia 3V3 2)
C3 C4 33 [pF] Kondensatory oscylatora
Y1 16 [MHz] Oscylator kwarcowy
C2 100 [nF] Kondensator szyny zasilania
C5 10 [uF] Kondensator szyny zasilania
R3 1 [kΩ] Rezystor ustalający stan nieaktywny (wysoki) na sygnale reset uC
R4 1 [kΩ] Rezystor ustalający stan nieaktywny (wysoki) na sygnale hardware bootloader uC
R5 R6 x [kΩ] Rezystory ograniczające prądy w diodach sygnalizacyjnych
LED1 LED2 Diody sygnalizacyjne
Złącza szpilkowe typu goldpin

Wykonanie

  1. Laminat należy przyciąć do odpowiednich wymiarów
  2. Krawędzie laminatu należy zaokrąglić za pomocą pilnika do metalu lub papieru ściernego
  3. Laminat należy dokładnie oczyścić z zabrudzeń
  4. Na laminat należy przenieść obraz ścieżek układu dowolną metodą
  5. Laminat należy wytrawić
  6. Obraz ścieżek należy zmyć
  7. Wszystkie ścieżki należy sprawdzić pod kątem przerw i zwarć z pobliskimi ścieżkami
  8. Płytkę należy zabezpieczyć roztworem kalafonii
  9. Pobielamy pady układu scalonego
  10. Jako pierwszy montujemy układ scalony, po dokładnym spozycjonowaniu i sprawdzeniu poprawności pozycji. Przylutowywujemy dwa naprzeciw położone wyprowadzenia cały czas przytrzymując układ. Po unieruchomieniu układu przylutowywujemy pozostałe wyprowadzenia.
  11. Sprawdzamy każde wyprowadzenie układu pod kątem zwarć i przerw
  12. Przylutowywujemy kolejne elementy zaczynając od najmniejszych.
  13. Diody oraz kondensatory tantalowe muszą być odpowiednio spolaryzowane.
  14. Przylutowywujemy przewody USB
  15. Przewody przylutowywujemy do pól lutowniczych (:!: w złączu linie MOSI i MISO muszą być zkrosowane!)

Uruchomienie

Sprawdzenie poprawności działania i troubleshooting

  1. Sprawdzamy polaryzację kondensatorów
  2. Sprawdzamy poprawność połączeń
  3. Sprawdzamy czy nie ma zwarcia pomiędzy masą a szyną zasilania
  4. Sprawdzamy czy kryształ jest połączony z uC i czy nie ma zwarć
  5. Sprawdzamy czy nie ma zimnych lutów (matowe połączenie zamiast błyszczącego)
  6. Podłączamy urządzenie do komputera
  7. Sprawdzamy napięcie na kondensatorach tantalowych: na większym powinno wynosić 5±0.5 [V] na mniejszym (regulator 3V3 dla szyny danych USB) 3.3±5 [V]
  8. Sprawdzamy czy linie MOSI i MISO są skrosowane

Oprogramowanie

1. Ściągamy potrzebne narzędzia:

Osoby korzystające z Linuksa powinny pobrać odpowiednie dla siebie narzędzia i odpowiednio dostosować następujące kroki.

:!: Kod z pakietu LUFA wymaga modyfikacji: pin PB4 musi być w czasie pracy nieaktywny. Najnowszy kod posiada błąd uniemożliwiający poprawną prace (reset aktywny stanem wysokim) :!:

2. Sprawdzony układ podłączamy do komputera, za pomocą menedżera urządzeń lub programu USBView powinniśmy zaobserwować pojawienie się nowego urządzenia. (Pod Linuksem można użyć narzędzia lsusb)

3. Instalujemy sterowniki które znajdują się w katalogu instalacyjnym narzędzia Atmel FLIP.

4. Jeżeli skompilowaliśmy program samodzielnie, do zaprogramowania układu możemy wykorzystać makro znajdujące się w pliku makefile. Jeżeli wgrywamy prekompilowany program należy:

  1. uruchomić narzędzie Atmel FLIP
  2. wybrać opcje z menu głównego: DeviceSelect…→AT90USB162→OK
  3. wybrać opcje z menu głównego: SettingsCommunicationUSB
  4. w momencie pojawienia się okna USB Port Connection wybieramy opcje Open
  5. wybrać opcje z menu głównego: FileLoad HEX File… i otworzyć odpowiedni plik
  6. w zakładce Operations Flow klikamy przycisk Run
  7. zamykamy narzędzie Atmel FLIP

5. Resetujemy urządzenie poprzez ponowne podłączenie do portu USB. W śród urządzeń USB powinno się pojawić nowe urządzenie, sterowniki instalujemy z katalogu instalacji libUSB-win.

6. Jeżeli nasz system nie chce uruchomić niepodpisanego sterownika musimy jeszcze wygenerować odpowiednie pliki INF za pomocą narzędzia inf-wizard należącego do pakietu libUSB-win.

Możliwe problemy

  • Jeżeli na komputerze zainstalowano AVRStudio to w systemie będą zainstalowane sterowniki Jungo WinDriver, urządzenie nie będzie działało poprawnie dopóki nie zostanie zainstalowany sterownik libUSB. Pomoc

Korzystanie z programatora

Jeżeli programujemy za pomocą avrdude należy korzystać z następującego schematu:

avrdude -pXX -cavrispmkii -P usb

gdzie pod XXX wstawiamy nazwę układu do programowania (np. -pm8 dla ATmega8). Użytecznym argumentem linii poleceń jest

-B 4

który ustala okres trwania sygnału taktującego (w tym przypadku 4 [us]: 250 [kHz] )

Aktualizacja oprogramowania

Kiedy kupujemy MCU ma on wgrany jedynie bootloader znajdujący się na końcu pamięci programu. Po resecie PC3) “przelatuje” przez całą pamięć (wypełnioną rozkazem NOP4) ) aż trafia na program bootloadera. Po wgraniu oprogramowania MCU, bootloader nie jest automatycznie aktywowany. Można jednak wymusić uruchomienie bootloadera już po wgraniu programu. Należy:

  • Podciągnąć linię HWB5) do minusa [1]
  • Zresetować układ poprzez linię reset [2] (tutaj wystarczy ułamek sekundy zwarcia z masą, ale linia HWB musi być w tym czasie również zwarta)

Aby to zrobić należy zewrzeć następujące punkty do masy (układ ma być podłączony do komputera).

TICK Do zwarcia linii z masą konieczne jest metalowe narzędzie. Jedna z ścieżek może zostać zwarta za pomocą czarnego przewodu wyprowadzonego z płytki.

:!: Należy zwrócić szczególną ostrożność podczas procedury, można spowodować zwarcie linii zasilania komputera. Kolorem czerwonym oznaczyłem ścieżki szyny zasilania, niebieskim masę a fioletowym ścieżki do zwarcia z masą.

Pliki

1)
Lightweight USB Framework for AVRs by Dean Camera
2)
Dla modułu USB układu
3)
program counter
4)
NO Opearation
5)
HardWare Boot
pl/avrc/programator.txt · Last modified: 2012/11/17 20:17 by mkucia