- Wymagane materiały:
- Pamięć flash:
- ICSP (w programowaniu szeregowym w obwodzie):
- Obwód i sprzęt:
- Wypalanie kodu za pomocą MPLAB IPE:
W naszych poprzednich dwóch samouczkach omówiliśmy, jak rozpocząć pracę z PIC przy użyciu kompilatora MPLABX i XC8, stworzyliśmy również nasz pierwszy program migania diod LED z PIC i zweryfikowaliśmy go za pomocą symulacji. Teraz nadszedł czas, abyśmy zajęli się sprzętem. W tym samouczku zbudujemy mały obwód na płycie perf do migania diody LED za pomocą PIC. Zrzucimy program do naszego mikrokontrolera PIC i zweryfikujemy miganie diody LED. Aby zaprogramować MCU PIC, będziemy używać MPLAB IPE.
Wymagane materiały:
Jak omówiliśmy w naszym poprzednim samouczku, będziemy potrzebować następujących materiałów:
- PicKit 3
- PIC16F877A IC
- 40 - uchwyt na pin IC
- Płyta Perf
- Crystal OSC 20 MHz
- Żeńskie i męskie szpilki Bergstick
- Kondensator 33pf - 2Nos, 100 uf i 10 uf cap.
- Rezystor 680 omów, 10 K i 560 omów
- LED dowolnego koloru
- 1Zestaw do lutowania
- IC 7805
- Adapter 12V
Co się stanie, gdy "spalimy" mikrokontroler !!
Zwykłą praktyką jest przesyłanie kodu do MCU i uruchamianie go wewnątrz MCU.
Aby to zrozumieć, spójrzmy na nasz program
Jak widzimy ten kod jest napisany w języku C i nie będzie miał sensu dla naszego MCU. W tym miejscu pojawia się część naszego kompilatora; Compiler to taki, który przekształca ten kod na maszynie czytelnej formie. Ten formularz do odczytu maszynowego nazywa się kodem HEX, każdy projekt, który tworzymy, będzie miał kod HEX, który będzie znajdował się w następującym katalogu
** Twoja lokalizacja ** \ Blink \ Blink.X \ dist \ default \ production \ Blink.X.production.hex
Jeśli tak bardzo chcesz wiedzieć, jak wygląda ten kod HEX, po prostu otwórz go za pomocą notatnika. W przypadku naszego programu Blink kod HEX będzie wyglądał następująco:
: 060000000A128A11FC2F18: 100FAA008316031386018312031386018312031324: 100FBA0086150D30F200AF30F100C130F000F00BB1: 100FCA00E42FF10BE42FF20BE42F0000831203133A: 100FDA0086110D30F200AF30F100C130F000F00B95: 100FEA00F42FF10BF42FF20BF42F0000DB2F830107: 060FFA000A128A11D52F36: 02400E007A3FF7: 00000001FF
Istnieją sposoby na to, jak to czytać oraz jak rozumieć i odwracać to z powrotem do języka asemblera, ale jest to całkowicie poza zakresem tego samouczka. A więc, mówiąc po prostu w pigułce; HEX to ostateczny wynik oprogramowania naszego kodowania i to właśnie zostanie wysłane przez MPLAB IPE w celu wypalenia MCU.
Pamięć flash:
Kod HEX jest przechowywany w MCU w miejscu o nazwie pamięci Flash. Pamięć flash to miejsce, w którym nasz program będzie przechowywany wewnątrz MCU i stamtąd wykonywany. Gdy skompilujemy program w naszym MPLABX, uzyskalibyśmy następujące informacje o typie pamięci na konsoli Output
Ponieważ właśnie skompilowaliśmy mały program migający diodami LED, podsumowanie pamięci pokazuje, że właśnie zużyliśmy 0,5% dostępnego miejsca na program i 1,4% miejsca na dane.
Pamięć mikrokontrolera PIC16F877 dzieli się zasadniczo na 3 typy:
Pamięć programu: ta pamięć zawiera program (który napisaliśmy) po jego wypaleniu. Dla przypomnienia Licznik Programów wykonuje kolejno polecenia zapisane w pamięci programu. Ponieważ napisaliśmy bardzo mały program, zajęliśmy tylko 0,5% całkowitego miejsca. Jest to pamięć nieulotna, co oznacza, że przechowywane dane nie zostaną utracone po wyłączeniu zasilania.
Pamięć danych: Jest to typ pamięci RAM, który zawiera specjalne rejestry, takie jak SFR (Rejestr funkcji specjalnych), które zawierają zegar Watchdog, Reset Brown Out itp. Oraz GPR (Rejestr ogólnego przeznaczenia), który zawiera TRIS i PORT itp. Zmienne, które są przechowywane w pamięci danych w trakcie programu są kasowane po wyłączeniu MCU. Każda zmienna zadeklarowana w programie będzie znajdować się w pamięci Data. To także ulotna pamięć.
Data EEPROM (elektrycznie kasowalna programowalna pamięć tylko do odczytu): Pamięć, która umożliwia przechowywanie zmiennych w wyniku wypalenia napisanego programu. Na przykład, jeśli przypiszemy zmienną „a”, aby zapisać w niej wartość 5 i zapisać ją w pamięci EEPROM, dane te nie zostaną utracone, nawet jeśli zasilanie zostanie wyłączone. To jest pamięć nieulotna.
Pamięć programu i EEPROM są pamięcią nieulotną i nazywane są pamięcią Flash lub EEPROM.
ICSP (w programowaniu szeregowym w obwodzie):
Będziemy programować nasz PIC16F877A przy użyciu opcji ICSP, która jest dostępna w naszym MCU.
Co to jest ICSP?
ICSP to prosty sposób, który pomaga nam zaprogramować MCU nawet po umieszczeniu go na naszej tablicy projektu. Nie ma potrzeby posiadania oddzielnej płytki programatora do programowania MCU, wystarczy 6 połączeń z programatora PicKit3 do naszej płytki w następujący sposób:
1 |
VPP (lub MCLRn) |
Wejście w tryb programowania. |
2 |
Vcc |
Pin zasilania 11 lub 32 |
3 |
GND |
Masa PIN 12 lub 31 |
4 |
PGD - dane |
RB7. PIN40 |
5 |
PGC - zegar |
RB6. PIN 39 |
6 |
PGM - LVP włączone |
RB3 / RB4. Nieobowiązkowe |
ICSP jest odpowiedni dla wszystkich pakietów PIC; wszystko, czego potrzebujemy, to wyciągnąć te pięć pinów (6-ty pin PGM jest opcjonalny) z MCU do Pickit3, jak pokazano na poniższym obrazku.
Obwód i sprzęt:
Teraz mamy gotowy kod HEX i wiemy również, jak podłączyć nasz PicKit 3 do naszego PIC MCU za pomocą ICSP. Więc przejdźmy dalej i przylutujmy obwód za pomocą poniższych schematów:
W powyższym obwodzie użyłem 7805 do regulacji wyjścia 5V do mojego MCU PIC. Ten regulator będzie zasilany przez adapter ścienny 12V. CZERWONA dioda LED wskazuje, czy PIC jest zasilany. Złącze J1 służy do programowania ICSP. Piny są połączone zgodnie z opisem w powyższej tabeli.
Domyślnie pierwszy pin MCLR musi być utrzymywany wysoko przy pomocy 10k. Uniemożliwi to zresetowanie MCU. Aby zresetować MCU, pin MCLR musi być uziemiony, co można zrobić za pomocą przełącznika SW1.
Dioda LED jest podłączona do styku RB3 przez rezystor o wartości 560 omów (patrz kalkulator rezystora LED). Jeśli po załadowaniu programu wszystko jest w porządku, dioda LED powinna migać w zależności od programu. Cały obwód jest zbudowany na płycie Perfboard poprzez lutowanie wszystkich komponentów na nim, jak widać na obrazku u góry.
Wypalanie kodu za pomocą MPLAB IPE:
Aby wypalić kod, wykonaj poniższe czynności:
- Uruchom MPLAB IPE.
- Podłącz jeden koniec PicKit 3 do komputera, a drugi koniec do pinów ICSP na płycie perf.
- Połącz się ze swoim urządzeniem PIC, klikając przycisk Połącz.
- Wyszukaj plik Blink HEX i kliknij Program.
Jeśli wszystko pójdzie zgodnie z planem, na ekranie powinien pojawić się komunikat o powodzeniu. Sprawdź poniższy kod i wideo, aby uzyskać pełną demonstrację, i skorzystaj z sekcji komentarzy, jeśli masz jakiekolwiek wątpliwości.
Dziękuję Ci!!!
Spotkajmy się w następnym samouczku, w którym będziemy bawić się większą liczbą diod LED i przełącznikiem.