PIC12F509 - w czym napisać program? początkujący

Nov 16, 2008 69 Replies

Witaj Ja jak stanąłem przed potrzbą użycia bardzo małego procka to zainteresowąłem się właśnie PIC10F200. W związku z tym musiałem kupić programator (nie tani) oraz przejściówkę do programowania SOT23. Może słabo szukalem jakiejś alternatywy programatora.

W kazdym razie to, że masz procek za darmo nie znaczy, że całość będzie finalnie tania.

Jeśli chodzi o coś małego i prostego w programowaniu od strony programatora, to poleciłbym jakiegoś AVRa z rodziny Tiny.

To fakt, punkt widzenia jest inny gdy ma się narzędzia. Mam w szufladzie stary programator (klon ICD2) który programuje 10F, a przejściówkę zrobiłem sobie sam. Całość nie powinna przekroczyć 100zł z przesyłkami.

Adam Dybkowski snipped-for-privacy@45wp.pl napisał(a):

Dlaczego mieliby to robić? Na krótką metę oczywiście będą produkować "AVR by Microchip", ale wkrótce tak ustawią politykę cenową, że AVR będzie tylko dla bogatych, czyli w praktyce dla nikogo.

Nie pójdzie, protokoły programowania dla wersji C i F są diametralnie różne.

Możesz spróbować WinPic'em, nie ma go na liście ale istnieje plik konfiguracyjny i można go samemu pewnie zdefiniować. Do tego jakiś interfejs pod RS czy LPT (np. PicLoad, zerknij na moją stronę jest schemat).

Pozdrawiam, sword

To była jedyna swego rodzaju hybryda i faktycznie tutaj zastosowali podobny protokół ale to wyjątek.

Pozdrawiam, sword

Użytkownik "mk" <reverse snipped-for-privacy@myzskm.remove napisał w wiadomości news:gfq75u$489$ snipped-for-privacy@news.wp.pl...

hmm, kwarc wewnętrzny 4MHz i instrukcja 1us, czyli taki decrement ze skokiem jeśli '0' DECFSZ który operuje na wartości max ?? 31 ?? czyli mając pętlę

32us będzie musiała być uruchamiana przy 2 sekundach... 62 i pół tysiąca razy. Czyli zmniejszając powie. nic innego w tym czasie nie robiąc. aa, kapuje, z a12 bitów 7 zabrała mi operacja i 5 argument stąd wartość 32. Kurde, to jest procesor 5-cio bitowy. Niech co te 32 pętla zwiększy sobie o jeden jakąś wartość i wróci spowrotem, ale ona znowu zwiększy do max 32.

No prymityw straszny, gdyby miał przerwania chociaż... a tu widzę, że się w pętlach zakopię. Idę się przeprosić Atmelkiem i starym dobrym asemblerkiem :)

Pozdrofka

Chyba nie wypuści bo była jakaś akcja MC z opatentowaniem ilości pinów mniejszej od szerokości magistrali. Ch0oć już nie pamiętam jak się to skończyło.

sword

Eee, marudzisz. Prymityw jest ale też da się z tego procesora coś wyciągnąć. Zrobiłem na tym pozytywkę (3.5 oktawy plus długość nuty) więc nie jest tak źle. Jasne, że przerwanie by się przydało, szczególnie od timera no ale przez polling też da się coś w końcu odmierzać.

Ja ustawiłem podział prescalera tak aby przy sprawdzaniu nie zdarzył się poślizg czyli podział zegara minimum przez 4. Na tego typu procesorach da się nawet zrobić PIDa trzeba tylko pogłówkować jak ułożyć program.

Przy czasach o jakich piszesz to w ogóle nie ma o czym rozmawiać i da się to zrobić z palcem w nosie. Ustaw jakiś duży podział na prescalerze i dodatkowo zliczaj czas na programowym liczniku.

Pozdrawiam, sword

Stronicowanie jest co 2K, a to jest kosmiczna ilość pamięci jak na program w asmie więc przeskakiwanie tej granicy to rzadkość. Bankowanie RAMu jest kijowe to wiadomo ale też da się jakoś żyć. Fajnie by było mieć całą przestrzeń adresowa liniową... tymczasem adresowanie pośrednie obejmuje dwa banki, a więcej pamięci danych jest rzadko potrzebne - jeśli natomiast jest to się bierze inną rodzinę.

A propos ciekawostek to powstaje nowa rodzina procków PIC16F1XXX, która będzie pozbawiona większości tych wad.

Pozdrawiam, sword

No da się, siedzę na pętelce i czekam na zmianę stanu rejestru.

max 256.

4MHz przez 256 i licznik do 256 daje mi przy 2 sekundach 61 przeładowań timera do zliczenia czyli dwie pętle DECFSZ.. dobrze liczę?

Czyli miałbym ponad 65ms w kodzie programu na sprawdzenie stanu przeładowania timera. Czyli można wklepać w to jeszcze jakiś kod, który pozwoli mi wyskoczyć z pętli jeśli wcześniej zostanie spełniony warunek na wejściach Może się udać?

Teraz zakupić PIC18F2550 na aledrogo i zrobić klona PICKIT2 czy też PIC-Brenner8 i będzie na przyszłość.

Albo stary dobry Atmelek ;)

Pozdrawiam.

Dokładnie. Mi raz zdarzyło się wyjść na drugą stronę (w asm) - ale lepiej to wcześniej przewidzieć, bo potem jest gnój.

A dsPIC nie ma już jednolitej pamięci? Czy to stronicowanie miało jakieś uzasadnienie?

- Dus

Tak, ma w pełni liniową przestrzeń adresową zarówno FLASH jak i RAM, tylko to już procesory 16 bitowe z 24 bitową instrukcją.

To wynika z szerokości słowa programu (12 lub 14 bitów - 10F, 12F, 16F), nie da się tam pomieścić wszystkiego, szczególnie, że każda instrukcja jest wykonywana w jednym cyklu (oprócz zmiany PC, skoki wywołania).

Pozdrawiam, sword

Tak, ale czekasz jak jak jest blisko do przepełnienia, wcześniej możesz poukładać procedury, które wykonają wszystko co trzeba.

Częstotliwość zegara dzielisz najpierw przez 4 (tyle trwa cykl maszynowy), a potem tak jak piszesz przez prescaler i timer. To wyjdzie ~15 przepełnień na sekundę przy maksymalnych podziałach, poślizg wynikający z dzielenia w tym wypadku nie będzie miał żadnego znaczenia.

W kodzie wartości możesz obliczyć automatycznie:

#define _XTAL 4000000 ;XTAL connected [Hz] #define _PRE0 111b ;prescaler value #define _TIMER0 256 ;TIMER0 capacity

OSC4 set (_XTAL / 4) ;MIPS PRE_VAL set (1 << (_PRE0 + 1)) ;prescaler transformation INT_VAL set ((OSC4 / PRE_VAL) / _TIMER0)

Potem w kodzie tylko trzeba jeszcze wpisać wartość tego prescalera do rejestru:

movlw 11000000b iorlw _PRE0 option

czekanie na przepełnienie:

movf TMR0, W jnz main

a tu tutaj masz makra, które pewnie Ci się przydadzą jak się przesiadasz z '51

formatting link
wystarczy je wciągnąć w kodzie i można się bawić ;)

#include <makra.inc>

Dokładnie, wykonać wszystko co trzeba i dopiero czekać na przepełnienie.

Czasem można zaatakować zniżki, które otrzymuje się na seminariach MC i kupić oryginalne narzędzie od 20% do 60% taniej (w zależności na co trafisz).

Pozdrawiam, sword

Adam Jurkiewicz pisze:

Program, którym musiałem zajmować się w firmie był napisany w 100% w ASM i z czasem rozrósł się do kilkunastu KB pliku binarnego (czyli z 6-7K rozkazów). PIC sux.

EM pisze:

AFAIK algorytm programowania PICów 10Fxx jest dokładnie opisany i programator (super tanio) można sobie wydziergać samemu. O ile ktoś jest na tyle zdesperowany - zamiast wydać 100-200 zł i zaoszczędzić kupę czasu.

Adam Jurkiewicz pisze:

Ale jakiej niby magistrali? AVRki 8-pinowe mają conajwyżej 6 nóg I/O. Że niby nie mogą zejść poniżej 8 pinów? Niby co to ma do rzeczy...

No to zrobią wersję 4-bitową i zakasują PICa procesorem 4-nóżkowym. ;-)

W stanach wymyślają różne dziwne patenty więc nie ma się czemu dziwić.

Dlaczego nie, w drewnie zawsze można rzeźbić ;)

Program, który od początku nie jest napisany pod takie stronicowe rozwiązanie nigdy nie zostanie optymalnie napisany. Jeśli taka sytuacja wystąpi to trzeba albo przepisać od nowa albo przejść na wyższy procesor (w sensie architektury).

Jak na razie MC jest na pierwszym miejscu w sprzedaży uC 8 bitowych więc o czymś to również świadczy. Wyciąganie samych minusów architektury nie ma za bardzo sensu.

Użytkownik "mk" napisał:

jak to nie ma przerwań?!!!

są przerwania zewnętrzne, wewnętrzne i od pamięci EPROM, przynajmniej w serii 16Fxx (a 12Fxx prawdopodobnie architektórą się nie rózni, tylko długościa słowa rozkazowego?:O) tylko nie ma priorytetów, wszystkie przerwania mają tą samą wagę:O)

nie widziałem architektury AVRów (moze jest lepsza, nie wiem) ale jak dla mnei PICe to super procesorki wielkości paznokcia, mają wszystko co trzeba, pamięci RAM, EPROM, liczniki przetworniki i takie tam, jedyną wadą w programowaniu jest rozdzielenie pamięci programu od danych, ale dzięki temu można w tym samym czsie korzystać z obu pamięci, co pewnie się przekłada na szybkość działania, w końcu te maleństwa wykonują jedną insttrukcję w takcie zegarowym, pewnie śmigają szybciej od peceta?:O)

czy może powinienem się zainteresować AVRami?

...prawdopodobnie to najlepiej będzie jak doczytasz dokumentację o rodzinie baseline :P

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required