NWT-500 - programowanie procesora PIC

programowanie
Foto 1: Procesor PIC przed przylutowaniem do płytki musi być zaprogramowany.

Mikrokontrolery PIC można programować na wiele sposobów. W NWT-500 autor DL1ALT zdecydował się na programowanie przez port szeregowy komputera PC. Jest to rozwiązanie bardzo wygodne i umożliwiające aktualizację firmware'u z poziomu aplikacji przez użytkownika.
Aby mieć możliwość programowania przez port szeregowy układ PIC musi mieć załadowany program do obsługi tej metody – tzw. bootloader. Niestety autor nie przewidział możliwości wgrywania bootloader'a w systemie, wobec czego mikrokontroler musi być wstępnie zaprogramowany przed przylutowaniem.

Szybka analiza dokumentacji do PIC16F876 umożliwia opracowanie minimalnego schematu niezbędnego do zaprojektowania układu. W rozwiązaniu tym korzystamy z wewnętrznego oscylatora mikrokontrolera a odpowiednie sygnały niezbędne do programowania są wyprowadzone na złącze sześciopinowe zgodnie ze standardem programatora PICKIT2.

interfejs-schemat
Foto 2: Schemat najprostszego interfejsu umożliwiającego zaprogramowanie mikrokontrolera.

Pewnym problemem jest zapewnienie dobrego styku elektrycznego wyprowadzeń mikrokontrolera (programujemy przed wlutowaniem) w trakcie programowania - fabryczne podstawki do układów w obudowie SOIC28 są bardzo drogie i trudno dostępne. Ja poradziłem sobie z tym problemem tak:

interfejs
Foto 3: Interfejs zmontowany na uniwersalnej płytce drukowanej. Mikrokontroler jest umieszczony w złączach pinowych o rastrze identycznym z nóżkami układu scalonego. Prawe złącze jest przylutowane do elastycznej taśmy czternastożyłowej.

Po zmontowaniu prowizorycznego interfejsu umieściłem w nim mikrokontroler i całość podłączyłem do programatora. W tym momencie mogłem przejść do drugiego etapu, czyli zainstalowania oprogramowania i skonfigurowania Linuxa (Ubuntu 10.04).

pickit2
Foto 4: Interfejs podłączony do programatora PICKIT2

Programowanie mikrokontrolerów PIC w systemie Linux (Ubuntu 10.04)

  1. Ze strony Microchip'a pobieramy archiwum pic2cmd, rozpakowujemy i kompilujemy zgodnie z instrukcją.
  2. Dodajemy grupe microchip i dopisujemy się do niej: sudo addgroup microchip
    sudo addgroup microchip
  3. Za pomocą polecenia sudo nano /etc/udev/rules.d/026_microchip.rules tworzymy plik z następującą zawartością: #PICKit
    SYSFS{idVendor}=="04d8", SYSFS{idProduct}=="0032", MODE="0660", GROUP="microchip"
    #PICKit2
    SYSFS{idVendor}=="04d8", SYSFS{idProduct}=="0033", MODE="0660", GROUP="microchip"
    #ICD2
    SYSFS{idVendor}=="04d8", SYSFS{idProduct}=="8000", MODE="0660", GROUP="microchip"
    #ICD21
    SYSFS{idVendor}=="04d8", SYSFS{idProduct}=="8001", MODE="0660", GROUP="microchip"
  4. Restartujemy komputer.
  5. Aktualizujemy oprogramowanie programatora PICKIT2 pk2cmd -d PK2V023200.hex
  6. Sprawdzamy poprawność pracy programatora poleceniem pk2cmd -?V. Jeżeli wszystko jest sprawne to zobaczymy trzy trzy linie z numerami wersji. Powinno to mniej więcej wyglądać tak: djj@djj-laptop:~/Pobrane/pk2cmdv1.20LinuxMacSource$ pk2cmd -?V

    Executable Version: 1.20.00
    Device File Version: 1.55.00
    OS Firmware Version: 2.32.00


    Operation Succeeded
    Jeżeli któraś z wersji się nie wykryje, to mamy błąd i musimy sprawdzić co go powoduje. Tak długo jak wszystkie trzy wersje poprawnie się nie wykryją nie ma sensu przechodzić do kolejnego punktu.
  7. Sprawdzamy czy programator komunikuje się z mikrokontrolerem. Jeżeli wszystko jest OK to zobaczymy identyfikator układu, numer jego wersji i nazwę. djj@djj-laptop:~/Pobrane/pk2cmdv1.20LinuxMacSource$ pk2cmd -PPIC16F876A -I
    Device ID = 0E00
    Revision = 0008
    Device Name = PIC16F876A
  8. Na wszelki wypadek czyścimy mikrokontroler ze starego kodu pk2cmd -PPIC16F876A -E i wgrywamy kod bootloader'a pk2cmd -PPIC16F876A -Fbootloader_GHF9.hex Po programowaniu powinniśmy zobaczyć coś takiego: djj@djj-laptop:~/Pobrane/pk2cmdv1.20LinuxMacSource$ pk2cmd -PPIC16F876A -Fbootloader_GHF9.hex -M
    PICkit 2 Program Report
    12-5-2010, 0:44:03
    Device Type: PIC16F876A

    Program Succeeded.

    Operation Succeeded
  9. Wreszcie możemy złapać za lutownicę i wlutować układ na płytkę :-)