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

"Hello world" dla PIC16F628A , język C, MPLAB X IDE v3.50, PICKIT 3

pisulski 10 Mar 2017 13:15 2631 9
  • #1 10 Mar 2017 13:15
    pisulski
    Poziom 9  

    Witam
    Pomóżcie uruchomić tak prosty program, oraz ocenić czy to działa i dlaczego nie.
    Jest to może temat dla początkujących i proszę go tak potraktować, ponieważ moje doświadczenie z programowania jest małe, a z uruchamiania układów jeszcze mniej miałem doczynienia. Także proszę o prosty sposób przedstawiania odpowiedzi, nawet jasnych jak słońce dla Was.

    Rozwiązanie sprzętowe:
    Na pająku złożyłem zasilanie z układu L7805ABV. Zasilanie poszło na nóżki 5, 14 mikrokontrolera PIC16F628A.

    Szeregowo do wejścia portu RB2 podłączyłem diodę OSM5YK39B1B przez rezystor 120ohm do masy.

    Programator PICKIT3 jest podpięty następująco:
    Pin 1(od programator, ten ze strzałką) - RA5 (procesor)
    Pin 2 - VCC (5V)
    Pin 3 - pin5 (VSS) - czyli masa układu.
    Pin 4 - RB7
    Pin 5 - RB6
    Pin6 - not used.

    Rezonator chcę wykorzystać wewnętrzny.

    Program:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Po zaprogramowaniu dioda świeci przymrużona, a na porcie RB2 nie mam 5V, tylko sygnał PWM o nieznanym współczynniku wypełnienia. Jest to zobrazowane przez oscyloskop Hantek 6022BE:
    "Hello world" dla PIC16F628A , język C, MPLAB X IDE v3.50, PICKIT 3

    Oscyloskop zmierzył sygnał o częstotliwości 50Hz, czyli okres 20ms. Wartość średnia napięcia 1,21V. Wartość od szczytu do szczytu 5V. Z przebiegu można wnioskować, że stan wysoki na porcie jest przez około 2 do 4 ms.

    Pomiar napięcia miernikiem na RA2 wskazuje około 0.32V , czego można się spodziewać przy takim przebiegu napięcia.

    Oceniając powyższe przebiegi i pomiary sądzę, że coś resetuje ten mikroprocesor.
    Osobiście przy takim programie spodziewałem się, że na wyjściu RB2 mierze +5V i będzie wszystko fajnie, ale...

    Teraz pytanie do forumowiczów.

    Jakie rejestry i jakie bity konfiguracyjne należy poustawiać, żeby otrzymać na porcie RB +5V jeżeli chciałbym stan wysoki.

    Jeżeli chciałbym kontrolować częstotliwość rezonatora, to jakie rejestry ustawiać?

    Czy może być to problem z zasilaniem układu? Pytam, bo L7805ABV ma tylko elektrolity na wejściu 3.3uF i na wyjściu 1uF, a napięcie na zasilaniu mikroprocesora wygląda tak:

    "Hello world" dla PIC16F628A , język C, MPLAB X IDE v3.50, PICKIT 3

    Nie umiem jeszcze obsługiwać tego oscyloskopu, więc jeżeli są tam niewidoczne skoki lub zapaści napięcia, to się nie dowiem. Nie wiem czy ten oscyloskop ma możliwości.

    Jak uda się uruchomić PORTB oraz PORTA jako wyjście, będę próbował zmieniać stan diody na podstawie stanu na którymś pinie.

    Forumowiczów lubiących skrót RTFM chciałbym ostrzec, że czytam i angielski nie jest mi obcy, tylko proszę o zrozumienie, bo ja nie rozumiem wszystkiego.

    Z góry dziękuję za pomoc.

    0 9
  • Szkolenia elektronika Udemy
  • Pomocny post
    #2 10 Mar 2017 14:27
    Sparrowhawk
    Poziom 21  

    Podejrzewam działający Watchdog. Mikrokontrolery PIC należy skonfigurować poprzez ustawienie określonych bitów konfiguracyjnych.

    Dlaczego do nauki wybrałeś ten model mikrokontrolera? Opierasz się o jakiś tutorial, książkę? Kod, który zamieściłeś wskazuje na jakieś stare materiały.

    Spróbuj tego kodu:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • Szkolenia elektronika Udemy
  • Pomocny post
    #3 10 Mar 2017 14:54
    sajmosia
    Poziom 15  

    Hejka,

    Z Autopsji, kiedy odpalasz PIC za pierwszym razem to stan modulow niekoniecznie jest znany.

    Takze zrob tak:
    1. Wylacz komparatory (CMCON = 0x07; )
    2. Wylacz Voltage Reference (VRCON = 0x00;)
    3. Wylacz CCP (CCP1CON = 0x00;)

    Zobacz co sie stanie.

    Pozdro.

    Dodano po 3 [minuty]:

    PS.

    Jezeli dopiero zaczynasz z PIC to propopnuje PIC16F1455 albo PIC16F1459.

    Sa bardzo podobne do PIC16F628A ztym, ze maja USB.

    Tutaj znajdziesz ktok po korku jak zbudowac urzadzenie USB na jednym z nich.

    https://www.codeproject.com/Articles/830856/Microchip-PIC-F-USB-Stack

    0
  • #4 10 Mar 2017 16:21
    pisulski
    Poziom 9  

    Witajcie.
    Rozwiązaniem jest:
    1. Resystor podciągający MCLR do napięcia zasilającego, oraz
    2. Dwie linie kodu #pragma należy dodać do programu. Daje to ustawienie WDTE oraz LVP:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Po takich zmianach w sprzęcie i w programie, napięcie jest stabilne na wyjściu RB2.

    Dodano po 23 [minuty]:

    Sparrowhawk napisał:
    Podejrzewam działający Watchdog. Mikrokontrolery PIC należy skonfigurować poprzez ustawienie określonych bitów konfiguracyjnych.

    Dlaczego do nauki wybrałeś ten model mikrokontrolera? Opierasz się o jakiś tutorial, książkę? Kod, który zamieściłeś wskazuje na jakieś stare materiały.

    Spróbuj tego kodu:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Wybrałem, bo nie znam się na zaletach i wadach mikrokontrolerów. Ma przerwania, pwm, timery, no i był niedrogi. W sumie ma wszystko, co mi będzie potrzebne.
    Innych przyczyn nie było. Spędziłem troszkę czasu na szukaniu i padło na niego.

    Aby cokolwiek ruszyć w tym temacie, opieram się tylko o informacje zawarte w internecie. Forum elektrody, elbord i inne.

    Kod, który zamieściłem jest kodem testowym. Jak nie działa, to trzeba podzielić problem na części. Część programową na chłopski rozum zrobiłem najprostszą jak się da. Przecież od razu widać z kodu, co się stanie, a zapis
    Kod: c
    Zaloguj się, aby zobaczyć kod


    jest nieco skomplikowany i częściowo niezrozumiały dla mnie. Na podstawie tego zapisu nie mam 100% pewności, że to nie wina programu (początkujący programista).

    Odnośnie tutorial i książek, to chciałbym powiedzieć, że mnóstwo kodu jest w internecie. Można próbować przez kopiowanie, jednak albo jest to kod który nie można skompilować z powodu jakieś biblioteki lub jest pisana pod jakiś fizyczny układ, gdzie zewnętrzny oscylator i inne takie. Ciężko jest korzystać z takich kursów i rozwiązań.

    Na przykład nie znalazłem znaczenia bitów konfiguracyjnych, tzn opisu konsekwencji. Wszyscy tylko kopiują informację z dokumentacji. Czy jest to takie oczywiste, że nie trzeba tłumaczyć?

    Ty opierasz kod o klasy?. Powiesz, w jakim pliku mógłbym znaleźć ten zapis :TRISBbits.TRISB2??

    No i jecze jedno ostatnie pytanie:
    Mając bibliotekę
    Kod: c
    Zaloguj się, aby zobaczyć kod

    W jaki sposób można ustawić RBPU?

    Może jednak podasz link do jakiegoś dobrego tutoriala, gdzie można opanować twój sposób programowania pic w C?

    Pozdrawiam

    Dodano po 3 [minuty]:

    sajmosia napisał:
    Hejka,

    Z Autopsji, kiedy odpalasz PIC za pierwszym razem to stan modulow niekoniecznie jest znany.

    Takze zrob tak:
    1. Wylacz komparatory (CMCON = 0x07; )
    2. Wylacz Voltage Reference (VRCON = 0x00;)
    3. Wylacz CCP (CCP1CON = 0x00;)

    Zobacz co sie stanie.

    Pozdro.

    Dodano po 3 [minuty]:

    PS.

    Jezeli dopiero zaczynasz z PIC to propopnuje PIC16F1455 albo PIC16F1459.

    Sa bardzo podobne do PIC16F628A ztym, ze maja USB.

    Tutaj znajdziesz ktok po korku jak zbudowac urzadzenie USB na jednym z nich.

    https://www.codeproject.com/Articles/830856/Microchip-PIC-F-USB-Stack


    Ja na razie zostanę przy tym procesorze. Generalnie na dzień dzisiejszy nie mogę powiedzieć, czy to jest dobry wybór czy nie, ale opanować go chciałbym. Chociaż z powodu takiego, że już zacząłem.

    Będę pamiętał o konfiguracji tych rejestrów.

    Dziękuję,
    Pozdrawiam

    0
  • Pomocny post
    #5 10 Mar 2017 20:33
    trol.six
    Poziom 30  

    pisulski napisał:
    Ty opierasz kod o klasy?. Powiesz, w jakim pliku mógłbym znaleźć ten zapis :TRISBbits.TRISB2??

    W katalogu kompilatora są pliki nagłówkowe, mają one rozszeżenie *.h. Tam są definicje peryferii i rejestrów.
    Jeśli są tam definicje w oparciu o pola bitowe, to wtedy można użyć powyższego zapisu.

    Z tego co kojarzę, słowa konfiguracyjne są w innych plikach. Najlepiej samemu przeglądnąć, i zobaczyć.

    pisulski napisał:
    Wybrałem, bo nie znam się na zaletach i wadach mikrokontrolerów. Ma przerwania, pwm, timery, no i był niedrogi.

    Jeśli chodzi o PIC'e to szukaj takich co mają więcej instrukcji niż 35 :)
    Tzn. żeby miał takie jak ADDWFC, i najlepiej minimum dwa rejestry INDF (INDF0 INDF1). Ma to znaczenie przy większych programach, oraz operacjach na danych większych niż 8-bitowe. Niemniej jednak praktyka na różnych mikrokontrolerach, się przydaje.

    0
  • Pomocny post
    #6 10 Mar 2017 22:05
    Sparrowhawk
    Poziom 21  

    pisulski napisał:
    W jaki sposób można ustawić RBPU?
    Zajrzałem do noty katalogowej tego mikrokontrolera: PIC16F627A/628A/648A Data Sheet, odszukałem rejestr, który zawiera wspomniany bit i ustawiam go tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod
    Polecam zapoznać się również z dokumentem: MPLAB® XC8 C Compiler User’s Guide.

    pisulski napisał:
    Ty opierasz kod o klasy?. Powiesz, w jakim pliku mógłbym znaleźć ten zapis :TRISBbits.TRISB2?
    Ja nie opieram kodu o żadne klasy, tylko korzystam z gotowych definicji struktur/unii, które dostarczone są wraz z kompilatorem. Po to właśnie na samym początku dołączam plik xc.h. Jeżeli struktury, unie i wskaźniki są dla Ciebie jeszcze tajemnicą, to proponuję naukę zacząć od podstaw języka C.

    Co do wyboru mikrokontrolera to zwróć uwagę, że wybierając stary model, który był popularny np. 10 lat temu znajdziesz tutoriale i informacje z tamtego okresu. A świat, komputery, IDE i kompilatory idą cały czas naprzód.

    Na koniec zalecam też poznać możliwości samego IDE, kod konfiguracyjny został wygenerowany przez samo IDE: Window -> PIC Memory Views -> Configuration Bits.

    0
  • Pomocny post
    #7 11 Mar 2017 11:05
    Urgon
    Poziom 36  

    AVE...

    Jeśli nie używasz kompilatora Hi-Tech C, to nie dołączaj pliku htc.h. A raczej nie używasz, bo domyślnym kompilatorem jest XC8. Zatem używaj

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Dalej, w przypadku kompilatora XC8 (XC16 i XC32 też) możesz uzyskać dostęp do indywidualnych bitów każdego rejestru z noty katalogowej za pomocą formy:
    <nazwa rejestru>bits.<nazwa bitu>
    Stąd zapis
    Kod: c
    Zaloguj się, aby zobaczyć kod

    RB2 to nazwa trzeciego bitu w rejestrze PORTB. Ponadto pisząc na przykład PORTBbits. MPLAB-X sam wyświetli listę możliwych bitów w tym rejestrze.
    Po trzecie, poniżej głównego okna w MPLAB-X masz kilka zakładek, w tym jedną o nazwie Configuration bits - używaj tego by ustawiać konfigurację mikrokontrolera, a następnie wygenerować kod źródłowy do wklejenia do programu...

    0
  • #8 11 Mar 2017 22:18
    pisulski
    Poziom 9  

    Ok. Zrozumiałem, przetestowałem. Fajnie, że rozwija się lista. Całkiem sprytne. Miałem pisać Wam, że po co tak długie nazwy wpisywać, jednak ma to sens.
    Przejrzę również pliki nagłówkowe.

    A co do tego procesora, to jest to 'stary model' ?

    Ja jeszcze zapytam Was o sam proces symulacji, ale do tego założę oddzielny wątek.

    Dziękuję za podpowiedzi.

    0
  • #9 16 Mar 2017 22:18
    mariomario
    Poziom 18  

    pisulski napisał:
    Ok. Zrozumiałem, przetestowałem. Fajnie, że rozwija się lista. Całkiem sprytne. Miałem pisać Wam, że po co tak długie nazwy wpisywać, jednak ma to sens.
    Przejrzę również pliki nagłówkowe.

    A co do tego procesora, to jest to 'stary model' ?

    Ja jeszcze zapytam Was o sam proces symulacji, ale do tego założę oddzielny wątek.

    Dziękuję za podpowiedzi.


    Tak PIC16F628A jest bardzo starym modelem istniejącym już ok 15 lat. Nie posiada też ADC (przetwornika analogowo-cyfrowego), który często się przydaje. Do tego ma bardzo mało pamięci flash i RAM.

    Polecam coś z nowszych:
    PIC16F1455 / PIC16F1459 (oba mają USB)
    PIC16F1825 / PIC16F1829 (dobrze nadają się do projektów gdzie steruje się pracą silników - rozbudowane tryby CCP/PWM)
    PIC18F25K50 / PIC18F45K50
    PIC16F1778 (opamp'y, przetworniki cyfrowo-analogowe DAC, 2 piny o wydajności prądowej 100mA - np do sterowania MOSFET'ami, CLC)

    A z najnowszych to:
    PIC16F18326 / PIC16F18346
    PIC18F27K40
    PIC16F18857
    mają dużo pamięci flash i RAM

    2