Elektroda.pl
Elektroda.pl
X
CControls
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Rozwiązano] Rozpoczęcie przygody z PIC'ami

kacpo1 06 Mar 2018 19:31 2133 40
  • #1 06 Mar 2018 19:31
    kacpo1
    Poziom 29  

    Witam.

    Swoją przygodę z uC zacząłem stosunkowo niedawno, kilka miesięcy temu. Do tej pory, potrafię już pisać bardziej lub mniej skomplikowane programy na AVR, przeważnie są to płytki Arduino lub same ATmegi. Niestety, potrafię programować tylko w Arduino IDE... Po kilku miesiącach czegoś zaczynało mi brakować. W ostatnim czasie natrafiłem na grubą ścianę, a mianowicie mierzenie wysokich częstotliwości...

    Większość przeszkód dało się łatwo ominąć, ale postanowiłem, że nadszedł czas, na coś bardziej wszechstronnego. Więc moim pytaniem jest, czy ktoś tu z obecnych może się wypowiedzieć na temat tego, w czym pisać, czym programować, czy może ktoś wie skąd można się nauczyć języka C/C++ dla PIC'ów (najlepiej z internetu)?

    0 29
  • CControls
  • #2 06 Mar 2018 19:49
    excray
    Poziom 39  

    Skoro szukasz czegoś bardziej wydajnego niż AVR to powinieneś skierować się w stronę ARM.

    0
  • #3 06 Mar 2018 20:24
    kacpo1
    Poziom 29  

    Nie do końca o to mi chodziło. Wybór padł na PIC'a głównie z przyczyn możliwości mierzenia wysokich częstotliwości, a "przy okazji" nauczenia się bardziej wszechstronnego C/C++

    0
  • #4 06 Mar 2018 20:28
    ghost2000
    Poziom 18  

    kacpo1 napisał:
    Nie do końca o to mi chodziło. Wybór padł na PIC'a głównie z przyczyn możliwości mierzenia wysokich częstotliwości, a "przy okazji" nauczenia się bardziej wszechstronnego C/C++

    A jakie to te wystokie czestotliwości? Jakiej precyzji pomiaru oczekujesz?
    Też bym sugerował ARM ale skoro się upierasz.

    0
  • #5 06 Mar 2018 20:47
    2675900
    Użytkownik usunął konto  
  • #6 06 Mar 2018 20:51
    inot
    Poziom 21  

    Programować można na przykład w środowisku MPLAB.

    0
  • #7 06 Mar 2018 20:52
    kacpo1
    Poziom 29  

    ~50 MHz + szybki komparator. Precyzja jak największa, będzie to miernik indukcyjności i pojemności. ARM również może mierzyć wysokie częstotliwości niezależnie od zegara taktującego? Jeśli tak, to może być również coś o programowaniu ARM'ów w C/C++

    0
  • CControls
  • #8 06 Mar 2018 21:00
    2675900
    Użytkownik usunął konto  
  • #9 06 Mar 2018 21:04
    ghost2000
    Poziom 18  

    kacpo1 napisał:
    ~50 MHz

    AVR to max Fclk/2 czyli 10MHz gdy taktowany 20Mhz. Niektóre AVR mają PLL i peryferia moga byc taktowane 64MHz. Można więc wnioskować, że max da się mierzyć 32MHz. Naturalnie zawsze mozna dac preskaler (dzielnik).


    kacpo1 napisał:

    Precyzja jak największa

    0,1ppm wystarczy? Precyzyjny oscylator 0,1ppm kosztuje 1000...1500zł.

    0
  • #10 06 Mar 2018 21:09
    inot
    Poziom 21  

    Cytat:
    Mają także płatne narzędzia, a ich wersje bezpłatne mają ograniczenia.

    Niekoniecznie. Dla MPLAB istnieje C compiler w wersji dla studentów prawie bez ograniczeń.

    0
  • #11 06 Mar 2018 21:19
    ghost2000
    Poziom 18  

    inot napisał:
    Cytat:
    Mają także płatne narzędzia, a ich wersje bezpłatne mają ograniczenia.

    Niekoniecznie. Dla MPLAB istnieje C compiler w wersji dla studentów prawie bez ograniczeń.

    Co znaczy prawie?
    A jak @kacpo1 nie jest studentem, to co?

    0
  • #12 06 Mar 2018 21:27
    inot
    Poziom 21  

    Tą wersję przy odrobinie chęci można znaleźć w internecie .

    0
  • #13 06 Mar 2018 21:44
    2675900
    Użytkownik usunął konto  
  • #14 06 Mar 2018 21:46
    Freddie Chopin
    Specjalista - Mikrokontrolery

    inot napisał:
    Niekoniecznie. Dla MPLAB istnieje C compiler w wersji dla studentów prawie bez ograniczeń.

    Parafrazując - istnieje wersja dla studentów z ograniczeniami. No to faktycznie - nie jest prawdą twierdzenie że bezpłatne wersje narzędzi mają ograniczenia.

    inot napisał:
    Tą wersję przy odrobinie chęci można znaleźć w internecie .

    W sensie że co? Warezy? <:

    0
  • #15 06 Mar 2018 23:01
    ghost2000
    Poziom 18  

    Widzę, że częstotliwość mierzona zwiększyła się o 10MHz https://www.elektroda.pl/rtvforum/topic3438737.html.. Jak nie potrafi się mierzyć AVR-em, to i PIC-em też nie da się zmierzyć. Zasady pomiaru sa takie same we wszystkich uC, tyle, że na jednych łatwiej to zrobić, na innych trudniej.

    Dodano po 14 [minuty]:

    Piotrus_999 napisał:
    kacpo1 napisał:
    Nie do końca o to mi chodziło. Wybór padł na PIC'a głównie z przyczyn możliwości mierzenia wysokich częstotliwości
    Prosiłbym o uświadomienie jakież to specjalne właściwości mają PIC-e w tym zakresie?

    Widziałem projekt miernika częstotliwości na PIC, zdaje się F628. Mierzy do 50MHz a oscylator ma 8Mhz. Nie wiem czy tam jest PLL czy licznik asynchroniczny ale jakoś to działa.

    0
  • #16 08 Mar 2018 14:21
    arturavs
    Poziom 39  

    ghost2000 napisał:
    Widziałem projekt miernika częstotliwości na PIC, zdaje się F628. Mierzy do 50MHz a oscylator ma 8Mhz. Nie wiem czy tam jest PLL czy licznik asynchroniczny ale jakoś to działa.

    Mam zrobiony naście lat temu w/g projektu znalezionego w sieci na F84 z kwarcem 4MHz, i też mierzy do 50MHz.

    0
  • #17 08 Mar 2018 15:24
    ghost2000
    Poziom 18  

    arturavs napisał:
    ghost2000 napisał:
    Widziałem projekt miernika częstotliwości na PIC, zdaje się F628. Mierzy do 50MHz a oscylator ma 8Mhz. Nie wiem czy tam jest PLL czy licznik asynchroniczny ale jakoś to działa.

    Mam zrobiony naście lat temu w/g projektu znalezionego w sieci na F84 z kwarcem 4MHz, i też mierzy do 50MHz.

    Aż z ciekawości zerknąłem w notę. Chyba wiem dlaczego to działa:
    Rozpoczęcie przygody z PIC'ami
    Synchronizacja jest za preskalerem. W AVR synchronizacja jest na pinie wejściowym, dlatego może mierzyć tylko do Fclk/2.

    0
  • #18 08 Mar 2018 15:46
    Urgon
    Poziom 36  

    AVE...

    Do pomiaru częstotliwości używa się zwykle modułu Capture/Compare/PWM, który posiada preskaler 1:2/4/16. Przykładowo precyzyjny miernik pojemności na PIC16F628A:
    http://www.romanblack.com/onesec/CapMeter.htm

    PICe programuje się programatorem PICKit 3 na przykład, klony na alledrogo po 60-100 złotych. Środowiskiem jest MPLAB-X IDE, a kompilatorami XC8, XC16 i XC32, zależnie od wybranej rodziny PICów. Ograniczeniem wersji darmowej każdego kompilatora jest celowe "psucie" wynikowego kodu ASM by przez dodanie nadprogramowych skoków i pętli zwiększyć ilość zajmowanego miejsca i trochę spowolnić kod. Dodatkowo ta wersja wyłącza też możliwości zaawansowanej optymalizacji kodu...

    Porady typu "weź ARMa" traktuj z przymrużeniem oka - koledzy sobie żartują, albo nie potrafią programować...

    1
  • #19 08 Mar 2018 16:07
    ghost2000
    Poziom 18  

    Urgon napisał:
    Porady typu "weź ARMa" traktuj z przymrużeniem oka - koledzy sobie żartują, albo nie potrafią programować...

    Tak, bo na ARM jest kompilator bez ograniczeń i nie ma problemów typu:
    Urgon napisał:

    Ograniczeniem wersji darmowej każdego kompilatora jest celowe "psucie" wynikowego kodu ASM

    I co da, że będę super programistą, jak kompilator "zepsuje" mój kod? Wolę więc ARM czy AVR, tam problemu nie ma (GCC). Jak kto lubi może pisać w C++, też za darmo i bez "psucia".
    Zresztą autor sam nie wie czego chce, o pomiar częstotliwości na AVR już pytał https://www.elektroda.pl/rtvforum/topic3438737.html.. Można się spodziewać kolejnych tematów związanych z pomiarem częstotliwości na ARM, 8051 i inne uC (na Elektrodzie jest wątek oo CA-80 na Z-80, potrafi on mierzyć częstotliwość przy użyciu Z80-CTC). Pewnie myśli, ze na PIC jest instrukcja "get_frquency" i nie trzeba umieć skonfigurować i obsłużyć timera aby zmierzyć częstotliwość. Prawda jest jednak inna a zasada pomiary częstotliwości na różnych uC taka sama.

    0
  • #20 11 Mar 2018 10:08
    Marico
    Poziom 19  

    Jak już chcesz się bawić 8bitowymi picami to nie na Boga 16F, to jest stara architectura. Od 25 lat rasowana furmanka. Jak tylko jest dyskusja o picach to zaraz ktoś wyciąga staroć 16f84 jako przykład, no ręce opadają. 18F mają nowoczesniejszą architekturę, przyjaźniejszą do programowania w C, mają więcej RAM (do 4KB) i flash.
    Jest darmwowy kompilator SDDC, aczkolwiek nie ma (jeszcze) zbyt dobrej optymalizacji pod kątem rozmiaru. Uwaga nie wolno używać tego nowego środowiska mplabX w wersji darmowej, ono generuje celowo "popsuty" kod (dodatkowe instrukcję by zwolnić i zwiększyć kod).
    Pamiętaj, że:
    - core kazdego pic (18f) taktowany jest Fosc/4 , dotyczy to również taktowania perferiów (z niewielkimi wyjątkami)
    - źródłem Fosc może być zew. kwarc(e) lub wew. oscylator(y)
    - 18f posiadają super precyzyjne wew. oscylatory działające w szerokim zakresie temperatur, np. 26j50 może taktować USB z wew. oscylatora bez konieczności użycia kwarcu w ogóle (praktycznie nigdy nie używam kwarc z picami, nie ma takiej potrzeby).
    - 18F posiadają PLL do mnożenia x4 częstotliwości kwarcu i tą częstotliwością taktować core i peryferia, wtedy Fosc = Fkwarc *4, oczywiście nadal działa zasada Fosc/4 . PLL daje możliwość taktowania core z tą samą częstotliwością co oscylator.
    - 18f można programować starym pickit2 (nie tylko pickit3) aktualizując mu plik z definicjami (nowszych) układów, można też zrobić programator samemu, bo cykl programowania jest prosty.
    - serie K (np. 26k22) są układami nanoWatt, pobierają bardzo mało prądu
    - tak wielka różnorodność dostępnych ukladow 18f wynika z dostępności tego samego układu pod kątem zawartych perferiów z różną ilością dostępnej RAM i flash oraz obudowy, małe,y na to zwrócić uwagę. De facto jest tylko kilka serii (np. K J LF), każda seria ma wiele wersji RAM/FLASH/obudów lub napięć pracy.
    - Niektóre 18F (np. seria J ) mają remapowane piny dla perferiów, np. rx i tx uarta możesz podłączyć do różnych pinów, nie ma przypisania na sztywno. Kazde peryferie ma grupę dostepnych pinów we/wy które możesz wybrać programowo.
    - każda seria ma wersję w DIP, co ułatwia prototypowanie

    Jeśli chcesz zaczac, proponuję układ 18f26k22 (4kB RAM, 64kB flash, 1k eeprom), działa od 1.8V do 5V, max Fosc 64Mhz przy wew. oscylatorze 16MHz i włączonym PLL

    0
  • #21 11 Mar 2018 10:20
    bolek
    Specjalista - oświetlenie sceniczne

    Kacpo, bierz PICe-to fajne procki. Jeśli chodzi o pomiary czasów to mają one do tego specjalne moduły, jak pamietam to mogą działać z impulsami na poziomie piko sekund. Na początek wystarczy Ci pickit3. Staraj się jednak wybierać nowsze procki bo dinozaury mogą wymagać przejściówki do debugowania. Środowisko (MPLAB X) oraz kompilatory masz od producenta. Ograniczeń w licencji pewnie nie odczujesz, spokojnie wystarczy Ci to co oferują za friko, bez najwyższego stopnia optymalizacji. Na tym możesz spokojnie produkować i sprzedawać. Tak jak było wspomnie, taka inwestycja to jest wydatek max w okolicy 100zl.
    Tu też jest kilka osób które mają pojęcie o picach. Z resztą microchip ma swoje forum z dobrym wsparciem. Ja mam wrażenie że tutaj od armów jest sporo osob ale zamiast sensownej odpwiedzi można się dowiedzieć jakim się durniem nie jest. Przyjdzie czas to łykniesz i ARMa, a znać kilka rodzin (choćby pobierznie) to tylko zaleta.

    0
  • #22 11 Mar 2018 11:11
    Urgon
    Poziom 36  

    AVE...

    @Marico

    Pisanie, że 16F to stara architektura i że nie należy ich używać jest cokolwiek głupie, biorąc pod uwagę, jak wiele nowych układów jest w tej rodzinie. Przykładowo rodzina PIC16F15386 z zeszłego roku jest równie dobra, co zachwalane przez Ciebie układy 18F. Nawet układy 10F i 12F są rozwijane.
    Darmowa wersje kompilatorów XC dodają tylko dodatkowe skoki przy skokach do funkcji. Na upartego można to wyedytować w plikach ASM. Jednak jeszcze nie udało mi się stworzyć projektu, który by nie miał dość pamięci Flash z powodów używania darmowego kompilatora. Jak komuś zależy mieć na własne potrzeby pełną wersję, to może obejść zabezpieczenie bez większych problemów. Twórca projektów komercyjnych i tak kupi oryginalny kompilator, bo za piractwo firmy u nas są dość mocno ścigane...

    0
  • #23 11 Mar 2018 12:22
    kolgreen
    Poziom 14  

    Ciekawym rozwiązaniem dla PIC jest CCS C. Naprawdę opłaca się wydać te "parę złotych" i kupić chociaż sam kompilator bez środowiska (które moim zdaniem jest średnie). Wygoda programowania spora, bez niskopoziomowych zabaw. Trochę jak Arduino ale profesjonalnie.

    0
  • #24 11 Mar 2018 12:37
    ghost2000
    Poziom 18  

    kolgreen napisał:
    Trochę jak Arduino ale profesjonalnie.

    Arduino profesjonalnie to HAL dla ARM :-)
    Problemem autora nie jest PIC czy AVR, za którego się zabierał wcześniej, tylko pomiar częstotliwości (przypomnę link https://www.elektroda.pl/rtvforum/topic3438737.html).. Wystarczy opisać jak zmierzyć częstotliwość (praktycznie tak samo jak na AVR , ARM czy innym uC) i autor będzie szczęśliwy.

    AVR i PIC sa bardzo podobne. Każdy z nich ma wady i zalety. W Europie rozpowszechniły sie AVR, PIC za oceanem. Przyznam, że w przypadku pomiaru częstotliwości rzędu 50MHz PIC ma przewagę, bo nie wymaga zewnętrznych układów w postaci dzielnika. Dzielnik taki jest wymagany w przypadku AVR (ARM chyba nie).

    0
  • #25 11 Mar 2018 12:48
    Marico
    Poziom 19  

    Urgon napisał:
    AVE...
    Pisanie, że 16F to stara architektura i że nie należy ich używać jest cokolwiek głupie, biorąc pod uwagę, jak wiele nowych układów jest w tej rodzinie.


    To, że są wydawane nowe układy nie zmienia faktu, że architektura pic16 jest przestarzała. To jest smutne, bo zamiast promować bardziej nowoczesne układy Microchip wyhodowal grupę klientów archeo, co gorsza często programuajcych w asm. I na dodatek jeszcze maluje te furmanki na nowe kolory wmawiając jakie to nowoczesne. Oczywiscie pod pewnymi założeniami ekonomicznymi i produkcji na dużą skalę producentom opłaca sie budować na tańszych układach (bo takie są 16F) mimo ich ograniczeń. 5 centow różnicy ceny na sztuce przy milionach sztuk oczywiście dla zarządu ma znaczenie. To jest jedyny powód wpychania na rynek tych układów, ale nie zmienia faktu, że furmanka nawet pieknie pomalowana, nadal pozostanie furmanką (nawet na sterydach).
    Z punktu widzenia hobbysty używanie 16F mija się z celem, bo kiedy znudzi mu się miganie ledem i będzie chciał zrobić coś bardziej ambitnego to zderzy się ze ścianą braku odpowiedniej ilości RAM, flasha, czy wsparcia dla odpowiedniego stosu na zachowanie kontekstu, o odpowiednim wsparciu dla już C nie wspominając. I albo dzielnie, niczym socjalizm, bedzie rozwiazywal problemy nieistniejące w innych systemach (czyt. innych mcu) albo przesiadzie się na nowocześniejsze układy z lekkim poczuciem żalu za straconym czas zawracania głowy sobie furmanką na sterydach.

    0
  • #26 11 Mar 2018 13:30
    bolek
    Specjalista - oświetlenie sceniczne

    Marico. Może i hoduje archeo, ale i sieje nowych (zbadaj co będzie wychodzić w najbliższym czasie na rdzeniu ARM). Co jak co, ale chyba Microchip jak większość firm nie ładuje kasy w błoto i bez powodu nie rozwija tych "furmanek". Z resztą, czy furmanką nie można nazwać choćby attiny?, czy stare ARMy, a co z 51?. Jeśli się rozbijasz o takie rzeczy jak brak RAMu to raczej Twoja wina, a nie ich. Oni idą Ci nawet na ręke, bo bez większego trudu sięgasz po model w "większym rozmiarze"- chyba że zapędziłeś się w róg biorąc na starcie projektu najwyższy model z danego typu.
    Trzeba jeszcze powiesić psa na PIC12 i PIC10, to już się w ogóle do niczego nie nadaje bo co to za procek z sześcioma nogami, 16 batami RAMu i 375 bajtami na kod. I to jeszcze można coś w C na tym zrobić.
    Paranoja, czy ustawowo jest zakazane brać procki takie jakie komuś pasują?. To że coś dla Ciebie jest nieprzydatne, nie oznacza od razu że dla innych także. Więc to że producent ma szerokie portfolio jest raczej zaletą.

    0
  • #27 11 Mar 2018 13:52
    2675900
    Użytkownik usunął konto  
  • #28 11 Mar 2018 14:29
    Marico
    Poziom 19  

    bolek napisał:

    Trzeba jeszcze powiesić psa na PIC12 i PIC10, to już się w ogóle do niczego nie nadaje bo co to za procek z sześcioma nogami, 16 batami RAMu i 375 bajtami na kod. I to jeszcze można coś w C na tym zrobić.
    .


    PIC10/PIC12 mają swoją godną niszę zastosowań. Z nimi problemu nie ma. Problem jest z mentalnością i świadomością użytkowników, którzy na pytanie "jaki pic zamiast ATmega" Odpowiadają "16F", a niektórzy nawet próbują porównywać je z AVR Atmega. Problem jest w tym, że w świadomości p.t. nowoczesny 8 bit mcu nadal pokutuje pic16, a nie powinien. Przez bezsensowne porównywanie 16F i Atmega dostaje się niesłusznie PICom jako ogółowi.

    0
  • #29 11 Mar 2018 14:35
    Urgon
    Poziom 36  

    AVE...

    Marico napisał:
    Urgon napisał:
    Pisanie, że 16F to stara architektura i że nie należy ich używać jest cokolwiek głupie, biorąc pod uwagę, jak wiele nowych układów jest w tej rodzinie.


    To, że są wydawane nowe układy nie zmienia faktu, że architektura pic16 jest przestarzała. To jest smutne, bo zamiast promować bardziej nowoczesne układy Microchip wyhodowal grupę klientów archeo, co gorsza często programuajcych w asm.

    Nigdy nie używałem ASM, bo kompilator XC8 w obrębie samych funkcji tworzy przyzwoity kod. Nie masz pojęcia, o czym piszesz...

    Marico napisał:
    I na dodatek jeszcze maluje te furmanki na nowe kolory wmawiając jakie to nowoczesne. Oczywiscie pod pewnymi założeniami ekonomicznymi i produkcji na dużą skalę producentom opłaca sie budować na tańszych układach (bo takie są 16F) mimo ich ograniczeń. 5 centow różnicy ceny na sztuce przy milionach sztuk oczywiście dla zarządu ma znaczenie.

    Nie każdy projekt potrzebuje ośmiordzeniowego ARMa i 4GB RAMu by działać. Niektóre urządzenia używają nawet czterobitowych mikrokontrolerów, bo osiem bitów to rozrzutność. I nikt nie ma z tym problemów oprócz kiepskich programistów...

    Marico napisał:
    To jest jedyny powód wpychania na rynek tych układów, ale nie zmienia faktu, że furmanka nawet pieknie pomalowana, nadal pozostanie furmanką (nawet na sterydach).

    Dobrą furmanką dobry furman zajedzie dalej, niż jakiś cieć w beemce...

    Marico napisał:
    Z punktu widzenia hobbysty używanie 16F mija się z celem, bo kiedy znudzi mu się miganie ledem i będzie chciał zrobić coś bardziej ambitnego to zderzy się ze ścianą braku odpowiedniej ilości RAM, flasha, czy wsparcia dla odpowiedniego stosu na zachowanie kontekstu, o odpowiednim wsparciu dla już C nie wspominając.

    Buahahahaha! I to jest dowód, żeś troll, a nie znawca tematu. Kończ już, i sobie wstydu oszczędź, bo się tylko ośmieszasz.
    Projekt, nad którym teraz pracuję jest na PIC16F1827. 4 kilosłowa pamięci flash i 384 bajty RAMu. Mój program napisany w XC8 bez optymalizacji zajmuje 3278 kilosłów pamięci i używa tylko 87 bajtów RAMu. Jest w tym obsługa enkodera, LCD, sporo tekstu do wyświetlenia i liczne operacje matematyczne (mnożenia i dzielenia) na dużych liczbach, a także komunikacja po SPI z peryferiami. Furmanka daje radę. Mogłem mniejszą użyć, ale tę miałem pod ręką...
    Dla porównania odpaliłem wersję PRO kompilatora i oto wynik: 2686 kilosłów i 83 bajty RAMu...

    Marico napisał:
    I albo dzielnie, niczym socjalizm, bedzie rozwiazywal problemy nieistniejące w innych systemach (czyt. innych mcu) albo przesiadzie się na nowocześniejsze układy z lekkim poczuciem żalu za straconym czas zawracania głowy sobie furmanką na sterydach.

    Jakieś przykłady problemów, które nie istnieją w innych rodzinach? Bo nie wiem, czy powinienem coś rozwiązywać w swojej furmance, czy nie...

    0
  • #30 11 Mar 2018 14:37
    bolek
    Specjalista - oświetlenie sceniczne

    -> Piotrus. No, dla hobbystów to tylko arduino, malina i ESP :) Pełna błędów to jest seria 32MZ, a to po pierwsze jakiś kawałek ich produkcji, a po drugie jakie są erraty w Twoich ulubionych ARMach.
    Nie widzę też powodu dla którego trzeba kolejny raz porównywać jedne procki z drugimi. Kolejny temat rozwalony. Ty się jakoś panicznie boisz tego Microchipa.

    1