Skocz do zawartości
BlackJack

[Programowanie] Mikrokontrolery Microchip PIC. Część 1

Pomocna odpowiedź

Witam

Cieszę się, że ktoś porusza temat PICów. Mikrokontrolery o takich samych jak nie większych możliwościach jak AVRki. Jest tylko jedna - według mnie - duża wada. Programator. O ile do AVR wystarczy prosty kabelek na LPT, który zawsze działa lub sprawdzone usbasp, to z picami nadal się męczę jeżeli chodzi o zaprogramowanie. Większość tanich programatorów opartych jest na port COM i napięcia panujące na nim. Potrzeba śmiesznego napięcia 12,7 v (bodajże) na linii MCLR, aby wprowadzić uC w stan programowania. Chciałem wykonać klona PICkita2, aby mieć spokój, gwarancję działania i coś, czego nie uświadczyłem u rodziny AVR - czyli debugger. Ale cały czas męczę się z zaprogramowaniem uc (ten, który jest w programatorze - podobna sytuacja jak w USBASP). Możesz polecić jakiś prosty, ale sprawdzony programator (lpt lub com)?

Udostępnij ten post


Link to post
Share on other sites

Całkiem ciekawy opis, czekam na kolejne części. Łap piwo 😉

Udostępnij ten post


Link to post
Share on other sites
Możesz polecić jakiś prosty, ale sprawdzony programator (lpt lub com)?

Odpowiedz, na twoje pytanie po części znajdzie się w 2 części artykułu (na razie w edycji), gdzie zrobiłem taki mały przegląd rynku i cen. Przy czym oryginalny sam PIC kit2 to chyba niecałe 130zł.

Co do problemów z programowaniem to sprawdź sobie czy twój procesor nie ma przypadkiem trybu LVP (Low Volotage Programing) wtedy nie trzeba tych upierdliwych 12V do programowania, ale trzeba poświecić jeden dodatkowy pin CPU.

Udostępnij ten post


Link to post
Share on other sites

jeżeli chodzi o amatorski programator piców to najlepszym wyborem jest chyba brenner:

http://www.sprut.de/electronic/pic/projekte/brenner8mini/index.htm

Posiada on tylko 2 wady. Po pierwsze cała dokumentacja jest po niemiecku, a po drugie na znajdujący się w nim procek trzeba jakoś wgrać wsad. Najlepiej chyba wykorzystać do tego jakiegoś kolegę który już ma programator.

Udostępnij ten post


Link to post
Share on other sites

Ostatnio na http://www.hackaday.com albo http://www.dangerousprototypes.com widziałem programator PICów na Atmedze 🙂 Zaraz poszukam, jak znajdę to wrzucę...

Nie wiem czy zaprogramujesz tym wszystkie PICi bo nie czytałem dokładnie tego artykułu, ale proszę: http://hackaday.com/2011/12/25/using-an-atmega8-to-program-pic24fj-chips/ może się komuś przyda...

Udostępnij ten post


Link to post
Share on other sites

Najprostszym jest chyba Si-prog na RS232, który pozwala zasilać się z zewnetrznego źródła.

http://www.lancos.com/siprogsch.html.

Współpracuje z PonyProg 2000.

PS. Im bardziej przeglądam schematy alternatywnych programatorów/klonów tym więcej mam wątpliwości czy warto się w to bawić. Sam PICKKIT2 to koszt 118 zł + vat, zestaw z płytką demonstracyjną 139zł +vat.

Ja osobiście po przygodach z programatorami dla AVR startując do PICów, powiedziałem sobie, lepiej odłożyć więcej i mieć porządny programator, niż bawić się sklecanie samemu programatora, co wątpię aby wyszło mnie taniej niż gotowy produkt.

Udostępnij ten post


Link to post
Share on other sites

BlackJack bardzo dobry artykuł, ale szczerze mówiąc liczyłem na coś o programowaniu PIC-ów 😉 Wiem, że będzie w następnych częściach, ale narobiłeś mi takiego apetytu 🤣

Mam SiProga i wcale nie trzeba zasilać go z zewnętrznego źródła. Mój zasila się sam z portu RS232. Co prawda kupiłem go, ale za 7zł na znanym portalu aukcyjnym 😉 Mankament jest jeden - układ docelowy trzeba zasilać już napięciem zewnętrznym - z programatorem jest tylko wspólna masa.

Udostępnij ten post


Link to post
Share on other sites
Chciałem wykonać klona PICkita2, aby mieć spokój, gwarancję działania i coś, czego nie uświadczyłem u rodziny AVR - czyli debugger.

Hmmm? AVRStudio ma nie dość, że debuggowanie to jeszcze symulator (genialna rzecz). JTAG do AVRów można albo samemu tanim kosztem wykonać (ATmega16+rezystory+FT232+ew. bufor, w sumie koszt 30zł+płytka) albo kupić za około 90zł.

Z tego co widzę, PICi i AVRy to jedyne mikrokontrolery o szerokim zakresie napięć zasilania. Miłe 🙂

Udostępnij ten post


Link to post
Share on other sites
Chciałem wykonać klona PICkita2, aby mieć spokój, gwarancję działania i coś, czego nie uświadczyłem u rodziny AVR - czyli debugger.

Hmmm? AVRStudio ma nie dość, że debuggowanie to jeszcze symulator (genialna rzecz). JTAG do AVRów można albo samemu tanim kosztem wykonać (ATmega16+rezystory+FT232+ew. bufor, w sumie koszt 30zł+płytka) albo kupić za około 90zł.

Z tego co widzę, PICi i AVRy to jedyne mikrokontrolery o szerokim zakresie napięć zasilania. Miłe 🙂

Tak, symulator jest świetny, sam ostatnio go używałem do projektu w asmie. Ale wracając do debbugera. Popularna ATMega8 nie zna takiego słowa, uc z serii Attiny mają DebugWire, ale ten nie jest udokumentowany, więc trzeba kupić drogi programator. Zostaje Atmega16/32 ze swoim JTAGiem - faktycznie, fajne rozwiązanie. Ale porównując to z PICami to wygląda marnie. Tam można debugować praktycznie każdy mikrokontroler i to dodatkowo przez ten sam interfejs (lista dla pickit2, pickit3 ma jeszcze większą: http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en027813 ).

Możesz polecić jakiś prosty, ale sprawdzony programator (lpt lub com)?

Odpowiedz, na twoje pytanie po części znajdzie się w 2 części artykułu (na razie w edycji), gdzie zrobiłem taki mały przegląd rynku i cen. Przy czym oryginalny sam PIC kit2 to chyba niecałe 130zł.

Co do problemów z programowaniem to sprawdź sobie czy twój procesor nie ma przypadkiem trybu LVP (Low Volotage Programing) wtedy nie trzeba tych upierdliwych 12V do programowania, ale trzeba poświecić jeden dodatkowy pin CPU.

Tak, właśnie klona PICkita2 chcę wykonać, schemat jest udostępniony przez producenta więc to nie problem. Dla mnie każda złotówka się liczy (a 100 zł to dla mnie mnóstwo pieniędzy). Dla porównania USBaspa można zrobić kosztem <20zł. Tutaj myślę, że da się zmieścić w 50zł (a posiadając sampla jeszcze taniej). Ale muszę jakoś zaprogramować pic18f2550, który jest sercem tego układu.

Nie wiem czy zaprogramujesz tym wszystkie PICi bo nie czytałem dokładnie tego artykułu, ale proszę: http://hackaday.com/2011/12/25/using-an-atmega8-to-program-pic24fj-chips/ może się komuś przyda...

Dzięki! Znając życie, to takie kryzysowe rozwiązanie zadziała niebo lepiej, niż te kiczowate klony JDM 😉 Co prawda mam do zaprogramowania procek z rodziny 18f, ale może ruszy. W weekend spróbuje i zdam raport 🙂

Udostępnij ten post


Link to post
Share on other sites

Nie będę się spierał o to co lepsze - PICit3 kosztuje tyle co AVRDragon (przynajmniej w Polsce, więc koszt jest zbliżony, chociaż rzeczywiście Atmel jest drogi - dość dziwne podejście, bo zyski z narzędzi są na pewno niewielkie w stosunku do zysków z produkcji, a potrafią zniechęcić ludzi do siebie, a potem Ci ludzie trafiają do firm i uczestniczą w wyborze sprzętu.

Każdy układ ma w sobie coś ciekawego.

Mają mniejszą wydajność w porównaniu do AVRów, jest ona ok. 4x mniejsza przy tym samym taktowaniu.

Ale jak wygląda porównanie jeśli weźmiemy pod uwagę wydajność właśnie w szybkości wykonywania porównywalnego kodu?

Noty katalogowe Microchipa mają bardzo nierówny poziom, i wymagają czytania od deski do deski, bo często istotne informacje o jednym module są porozrzucane po całym dokumencie, lub ich tam po prostu nie ma ? Np. opisu systemu przerwań w nocie PIC16F690.

Do jakich innych not byś je porównał? Z własnego doświadczenia powiem, że Atmel ma świetne noty (chociaż AVR32 już są sporo gorsze niż starszych układów), podobnie NXP (przynajmniej dla LPC2000), natomiast STM ma bardzo słabe noty.

Udostępnij ten post


Link to post
Share on other sites
Mają mniejszą wydajność w porównaniu do AVRów, jest ona ok. 4x mniejsza przy tym samym taktowaniu.

Ale jak wygląda porównanie jeśli weźmiemy pod uwagę wydajność właśnie w szybkości wykonywania porównywalnego kodu?

Chodzi o architekturę. Na 4 cykle zegara przypada jedna instrukcja. Dla AVRków na jeden cykl przypada jedna instrukcja. Czyli w teorii AVR są 4 razy szybsze. Ale to tylko teoria, bo nie każda instrukcja wykona się jeden cykl, bardziej zaawansowane zajmują nawet po 3 cykle (dla AVR). Nie wiem jak to wygląda w nowszych PICach.

➕ Piąty argument, to bardzo prosty asembler, bo najprostsze 8-bitowe PICi mają zaledwie 35 instrukcji, których łatwo się nauczyć.

Nie rozumiem tego argumentu. Pisałem ostatnio dość duży projekt w całości w assemblerze AVR i ilość instrukcji jest plusem, a nie minusem. A poza tym ilość instrukcji wcale nie jest duża. Jedną trzecią z nich zajmuje odmiana instrukcji BRANCH/JUMP (jak zwał tak zwał) takiej jak breq, brle, brsh (po kolei: Branch if equal, branch if less or equal, branch if same or higher), których nie trzeba się uczyć, a używamy po prostu tej której potrzebujemy. Drugą trzecią z nich zajmują instrukcje operacji na pamięci czyli odmiany instrukcji Load i Store. Różnią się wykorzystywanym rejestrem adresowym (przykładowo LD Rd, X i LD Rd, Y są zapisane jako 2 oddzielne instrukcje mimo, iż robią to samo). Pozostała część instrukcji to instrukcje operacji na rejestrach (arytmetyczne, logiczne), przenoszenia, operacje na bitach, porównywanie.

Nauka? Bezsensu, nie jesteśmy w szkole, aby kuć na pamięć. Drukujemy sobie kartkę z instrukcjami z pdfa procesora i już możemy programować. 32 rejestry robocze, sprzętowe mnożenie, wsparcie dla liczb 16bitowych, ogólnie miła architektura (porównując AVR do x86, to ten drugi jest piekielnie niewygodny i skompilowany).

Udostępnij ten post


Link to post
Share on other sites

Drobne uwagi:

PORÓWNYWALNA WYDAJNOŚĆ PIC vs AVR

Mają mniejszą wydajność w porównaniu do AVRów, jest ona ok. 4x mniejsza przy tym samym taktowaniu.
Chodzi o architekturę. Na 4 cykle zegara przypada jedna instrukcja. Dla AVRków na jeden cykl przypada jedna instrukcja. Czyli w teorii AVR są 4 razy szybsze.

AVRy nie są 4x szybsze od PICów, ponieważ większość PICów posiada wewnętrzne układy PLL pozwalające zwielokrotnić częstotliwość pracy 4x. Innymi słowy Atmega 16MHz i PIC 16MHz (16MHz x 4 PLL / 4 takty na rozkaz = 16MHz), pracują z taką samą prędkością 16MHz. Drobne różnice wynikać mogą z różnej realizacji poszczególnych rozkazów, ale to nie ma znaczenia dla 99,9% projektów. W zależności od typu jest to bardzo różnie rozwiązane, więc trzeba dobrze sprawdzić w datasheet.

PICKIT 2 vs PICKIT 3

A propos PICKIT 3 - rok temu w Farnellu kupiłem go za 178zł. Nie kupowałem PICKIT 2 ponieważ Microchip oficjalnie oświadczył, nowe układy PIC będą wspierane już tylko przez PICKIT 3.

PRZERWANIA

Gdy wziąłem do ręki perwszy datasheet PICa mając przyzwyczajenia z datasheet i struktury AVRów, straciłem mnóstwo czasu na zrozumienie PICów i ich datasheetów. Ale gdy już poznałem sposób podejścia Microchipa do swoich mikrokontrolerów i pisania datasheetów, to takich problemów już nie mam:

Noty katalogowe Microchipa mają bardzo nierówny poziom, i wymagają czytania od deski do deski, bo często istotne informacje o jednym module są porozrzucane po całym dokumencie, lub ich tam po prostu nie ma ? Np. opisu systemu przerwań w nocie PIC16F690.

W datasheet PIC16F690 o którym piszesz, jest rozdział : 14.3 Interrupts

Od siebie dodam:

Istotną różnicą w przypadku przerwań, jest to, że nie mają tak zorganizowanych i rozbudowanych wektorów i priorytetów przerwań jak AVRy. We wspólnej funkcji przerwania trzeba sprawdzać, co wywołało przerwanie i natychmiast zgasić jego flagę. To wada i zaleta jednocześnie, ponieważ daje nam możliwość ustalania prawie dowolnych kolejności priorytetów:

interrupt isr()
{

//*** RTCC  ******************************
//przerwanie 
if(PIR3bits.RTCCIF){
	PIR3bits.RTCCIF		=	0;	//zgaś flagę przerwania
	RTCC_interrupt();
}

//*** Timer1 przepełnienie  ******************************
if(PIR1bits.TMR1IF){
	PIR1bits.TMR1IF	=	0;	//zgaś flagę przerwania
	jakas_funkcja();

}

//*** Timer0 ******************************
//przerwanie od przepełnienia TIMER0
if(INTCONbits.TMR0IF){
	INTCONbits.TMR0IF	=	0;	//zgaś flagę przerwania
	jakas_funkcja_2();
}

//*** TimerOkres - CCP7 compare  ******************************
if(PIR4bits.CCP7IF){
	PIR4bits.CCP7IF	=	0;	//zgaś flagę przerwania
	MB_skanowanie();
}

// ... i tak dalej
}

Udostępnij ten post


Link to post
Share on other sites

Z tą wydajnością to jest różnie... Dla przykładu:

PIC16F628A - 4 cykle zegara na instrukcję

PIC16F1847 - 4 cykle zegara na instrukcję, pętla PLL

dsPIC33FJ64MC204 - 1 cykl zegara na instrukcję, PLL, ale ma sprzętowy dzielnik Fosc/2, czyli częstotliwość dla CPU i peryferiów to połowa częstotliwości oscylatora

Dodatkowo tak jak wspomniał dondu, można użyć PLL i uzyskać wyższe taktowanie niż dołączony oscylator.

Nie można wrzucić wszystkich PICów do jednego worka, poszczególne rodziny znacznie różnią się od siebie!

Mimo że najnowsze układy są obsługiwane tylko przez PICkit3, to jakoś bardziej przypadł mi do gustu PICkit2, głownie ze względu na dodatkowe oprogramowanie. Oprócz standardowej funkcjonalności jako programator i debugger, PICkit2 może służyć jako analizator logiczny i UART! Programowanie i odczyt pamięci EEPROM I2C też nie są dla niego problemem. Jest nawet solucja, dzięki której wykrywany jest jako AVRISP i można nim programować mikrokotrolery AVR http://pickit2.isgreat.org/

Udostępnij ten post


Link to post
Share on other sites

O widzisz ... nawet nie wiedziałem, że są też jednotaktowce, co potwierdza to, na co razem zwracamy uwagę, czyli że trzeba czytać datasheet dokładnie przed decyzją o wykorzystaniu danego mikrokontrolera.

Udostępnij ten post


Link to post
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »

×