logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Przykłady programów dla PIC 16C505: ustawienia wyjść po czasie

AGL 21 Gru 2003 23:37 5977 36
Najlepsze odpowiedzi

Jak napisać najprostszy program dla PIC16C505, który ustawia wyjścia na 1 na określony czas, a potem je zeruje?

Najprościej zrobić to w BASIC-u (np. Proton Plus) i użyć `DELAYMS` albo, jeśli zależy Ci na dokładniejszym odmierzaniu, timera TMR1 z kwarcem 32,768 kHz [#453544][#449745] Przykład dla 16C505: `device = 16c505`, `DECLARE XTAL 4`, `All_digital = true`, ustaw RB0 i RB1 jako wyjścia, a potem w pętli włącz RB0, odczekaj `delayms 60000`, wyłącz go, włącz RB1, odczekaj `delayms 30000` i wyłącz go [#453544] Wersja z asemblerem też jest możliwa, ale do tak prostych ćwiczeń lepiej zacząć od migającej diody, przycisku i prostych opóźnień, bo liczenie milionów cykli na 8-bitowym PIC-u jest niepotrzebnie kłopotliwe [#449714][#450684] Jeśli zostajesz przy ASM, do precyzyjnych czasów lepiej użyć przerwań lub timera niż ręcznie zliczać pętle [#449745][#454017]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
  • #1 446244
    AGL
    Poziom 11  
    Posty: 37
    potrzebuje pomocy w napisaniu najprostrzych programow na pic np 16c505 bo takie mam!
    typu:
    -ustaw 1 na wyjsciu B po 1min zmien z 1 na 0
    natepnie ustaw 1 na wyjsciu B2 i po 30s zmien na 0

    chodzi mi o najprosztrze przyklady do nauki pisania sie programow dla uP PIC.
  • #2 447449
    marmur99
    Poziom 17  
    Posty: 285
    Pomógł: 5
    Ocena: 4
    30 sekund? Żartowniś :) A musi być dokładnie tyle? Trzeba się nakombinować, żeby do tylu doliczyć chyba, że użyjesz kwarcu 32,768kHz.

    banksel trisb ; przeskakuje do banku, w ktorym jest rejestr kierunkowy
    bcf portb,0 ; ustawiam kierunek B0 na wyjściowy
    bcf portb,2 ; i B2 tez
    banksel portb ; wracam do banku 0
    bsf portb,0 ; i ustawiam "1" na B0

    Mam gdzieś kilka prostych programików, które pisałem, żeby opanować PICa. Przypomnij sie później to Ci podeślę. Teraz niestety nie mogę.

    Pozdrawiam,

    Marmur99
  • #3 449342
    AGL
    Poziom 11  
    Posty: 37
    zartownis? szczeze mowiac nie wiem co za problem z tego 30s-go odliczania, czyzby pic nie dal rady, to 1minuty tez nie odliczy albo 2 godzin?

    :D Wesolych swiat i szczesliwego nowego roku :D
  • #4 449514
    marmur99
    Poziom 17  
    Posty: 285
    Pomógł: 5
    Ocena: 4
    Nie, no jasne, że da rade, ale to wszystko zależy od użytego kwarcu. Jeśli wykorzystasz. Np. 4MHz to długość cyklu rozkazowego będzie wynosiła 1us a co za tym idzie potrzeba milion cykli, żeby uzyskać sekunde a 30 milionów żeby 30 sekund. Oznacza to, że trzbe będzie wykorzystać kawał pamięci aby to zliczać.
    Zawsze możesz użyć wolniejszego kwarcu, ale wtedy spadnie ilość MIPSów. Zależy na czym komu zależy.

    Pozdrawiam i również życzę wesołych świąt.

    Marmur99
  • #5 449714
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    AGL napisał:
    zartownis? szczeze mowiac nie wiem co za problem z tego 30s-go odliczania, czyzby pic nie dal rady, to 1minuty tez nie odliczy albo 2 godzin?
    Problem jest taki że to jest procesor 8bitowy, a Ty chcesz zliczać miliony cykli, więc musisz umieszczać pętle w pętli...... gdy każda liczy w zakresie 8bit, albo stosować arytmetyke o liczbie bitów większej niż rozmiar akumulatora. To jest wykonalne ale więcej czasu zajmie samo wymyślenie jak to zrobić niż to jest warte, polecam coś prostrzego dla kolegi, może przycisk włączający i wyłączający diode LED, najpierw bez eliminacji drgań zestyków.
  • #6 449745
    diag
    Poziom 29  
    Posty: 1401
    Pomógł: 45
    Ocena: 209
    Sprawa łatwa i przyjemna PIC16f629 TMR1 i kwarc 32768Hz jedna zmienna i czaas do 512 sek. Na wewn. zegar 4MHz czas do 128 s. ale mniejsza dokladność.
    Wesołych Świąt i Szęśliwego Nowego Roku.
  • #7 450684
    marmur99
    Poziom 17  
    Posty: 285
    Pomógł: 5
    Ocena: 4
    Też myślę, że łatwiej będzie zacząć od migającej diody, potem przycisku, potem wyświetlacza 7seg (albo dwóch, żeby się nauczyć multipleksowania), potem rs232 itd.
    Marmur99
  • #8 453544
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    device = 16c505
    DECLARE XTAL 4
    All_digital = true
    output portb.0
    output portb.1
    symbol led1 = PORTb.0
    symbol led2 = PORTb.1
    start_programu:
    high led1
    delayms 60000
    low led1
    high led2
    delayms 30000
    low led2
    goto start_programu
    end


    Proponuję od razu zacząć od języka wyższego poziomu.
    po co cofać się w czasie i tracić tygodnie na napisanie programu?
    To co chciałeś zajęło mi około 2 minut. Polecam program Proton Plus
    (basic dla pica)
    piszę w tym od pewnego czasu i oceniam go wysoko.
    kompiluje za pomocą MP-asma , kod jest bardzo oszczędny ( w przeciwieństwie do bascoma)
    Wersja darmowa jest do 30 linijek kodu , to mało, ale można coś niecoś na tym zrobić.
    pozdrawiam.
    PS.
    Ludzie robią narzędzia by żyło się lżej... nauczcie się ich używać i nie mówcie że programy pisane w asm są lepsze i szybciej działające ( to argumenty piszących w asm.(ja też pisałem w asm ))
    dobre narzędzie to cały sukces , zapytajcie stolarza....
    Załączniki:
    • przykł~1.rar (318 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
  • #9 453984
    marmur99
    Poziom 17  
    Posty: 285
    Pomógł: 5
    Ocena: 4
    Ja i tak mam zaufanie tylko do tego, co sam napiszę. Wiadomo, że kompilatory języków piszą program w asm za Ciebie. Nie wmówisz mi, że masz pełną kontrolę nad tym co napiszesz a jeżeli nawet masz to samemu można to napisać lepiej.
    Jeżeli pisałeś w asm i przeskoczyłeś na wysoki poziom ta bardzo dziwne zjawisko. Ludzie zwykle idą w drugą stronę. Może Ci nie szło w asm ?

    Marmur99
  • #10 454017
    genetix
    Poziom 24  
    Posty: 669
    Pomógł: 42
    :arrow: marmur99

    zgodze sie z toba, ale nie do konca. asm sie przydaje przy pisaniu najnizszej warstwy programu. np. funkcje obslugujace programowo i2c, czy precyzyjne czasowo sterowanie portami. jednakze jak masz do napisania potezny program, to szybciej to zrobisz piszac w C.
    i masz ten komfort, ze zawsze mozesz wstawic funkcje w asm...

    i niewazne, czy zaczniesz od C, BASICA, asembler po prostu wypada znac.
  • #11 454153
    euromatic
    Poziom 21  
    Posty: 422
    Pomógł: 17
    Ocena: 14
    Ja w swoim protonie mam możliwość wstawek z ASM , mam wygenerowanego asma do wglądu, i wiele innych plików jak chociażby ten poniżej:

    16C505,84,9,
    Warning! Line [3] In file [PRZYKŁ~1.BAS] *** No analogue ports on this device. ALL_DIGITAL Command ignored! ***
    PROGRAM COMPILED WITH WARNINGS. 84 Words used
    9 Variables used in the 16C505 from a possible 72
    THERE ARE WARNINGS!

    który mówi że niepotrzebnie wyłączałem różne cudeńka takie jak "adc" bo ten procek ich nie ma....
    Ja piszą głównie wcelach zarobkowych, kidyś była to zabawa , hobby, ale byłem na garnuszku u mamusi i mogłem nawet trzy miesiące siedzieć nad ASM. Ale teraz jest inaczej, jest zapotrzebowanie na oprogramowanie ? siadam i zanim ty wypijesz kawę to ja mam gotowy wstępny programik którego wystarczy wbić do procka i sprawdzić.Nie ważne jest jak bardzo jest on skomplikowany... Czy ma LCD czy ma transmisję szeregową... Czy mnożysz lub dzielisz liczby 32 bitowe przez 32 bitowe. Jest mi to wszystko jedno, a ty w asemblerze musisz się nieźle napocić zanim to osiągniesz zwłaszcza ,że program twój będzie coraz dłuższy i dłuższy i w pewnym momencie sam zaczniesz się w nim gubić...i popełniać błędy.
    Reasumując:
    Mam zaufanie do ludzi którzy swoją wiedzę o procesorach wykorzystali do napisania oprogramowania do tworzenia nowego oprogramowania (dziś buduje się samochody przy pomocy oprogramowania a nie jak przed laty "empirycznie " i dlaczego jeżeli cały świat idzie w tym kierunku to ja mam się cofać do alfabetu morsa?)
    zrobili to naprawdę porządnie, zadbali o wszystko i napewno nie zajęło im to mało czasu. Wyciskając z procesora wszystko to o czym wielu z nas nie marzyło. Są oczywiście i słabsze narzędzia, to jak wiertarka firmy "Toya" i "Bosch" kupisz tą pierwszą to zaraz powiesz że wszystkie wiertarki są do dupy...

    Wiem że post mój wywoła następną wojnę która nigdy nie wyjaśni i nie rozstrzygnie kto ma rację a już napewno człowiek proszący o pomoc dostanie zawrotu głowy. Dam Ci radę kolego który pytałeś o pomoc:
    Spróbuj wszystkiego i sam oceń gdzie pływasz najlepiej i co jest twoim zdaniem dla ciebie najlepsze i nie słuchaj innych że... " tu bity ustawisz lepiej" a tam to "masz kontrolę nad kodem"

    Ważne jest abyś poznał mikrokontroler od strony jego budowy i możliwości. Asm sam do ciebie przyjdzie i poznasz go nie pisząc w nim specjalnie (trafią ci się wstawki w asemblerze)

    Zacznij od asm i po pewnym czasie weź się za basica lub C

    sam ocenisz różnicę , a swoją opinię podaj wtedy tu na forum


    To co ja polecam ci na początek znajdziesz na stronie:
    http://www.picbasic.org/
    pozdrawiam
  • #12 478205
    AGL
    Poziom 11  
    Posty: 37
    Jak juz pisalem w innym temacie:
    https://www.elektroda.pl/rtvforum/topic92406.html

    Teraz postanowilem wziasc sie za PIC, mam ksiazke a BTC o pic16f84, ale bym potrzebowal pomocy w postaci zrodel programow dla poczatkujacego z przypisami.
    Programy typu zalacz port, odczytaj klawisz i zalacz port, odmierz czas i zalacz port, timery!
    co oznacza opis
    np:
    led equ 10h ; przypisanie zminnej wartosci 10 (hex)
    a widze czesto opisy
    np.
    led equ 0x00h ; co to oznacza
    albo cos jeszcze dziwnego
    movlw.12

    z gory dzieki
  • #13 478328
    Pandor
    Poziom 14  
    Posty: 74
    Pomógł: 6
    Ocena: 8
    Jeśli masz cierpliwość i chęć przeczytania książki z BTC to najlepiej spróbuj to zrobić "od dechy do dechy". W kolejnych rozdziałach opisane jest wszystko w miarę łopatologicznie, czego nie zrozumiesz za pierwszym razem wróci to do ciebie w jednym z następnych rozdziałów i albo zrozumiesz to tam, albo wrócisz i bogatszy o nową wiedzę w końcu zrozumiesz za n-tym razem. Jeśli zaczynasz czytanie książki od przykładów praktycznych to faktycznie sporo może być niejasności, w końcu trzeba znać chociaż pobieżnie wnętrze takiego mikrokontrolera no i poleceniia asemblera (jest ich tylko 32). Książka nie jest pozbawiona błędów, ale jak poczytasz ją to jest szansa, że sam je wyłapiesz. A jeśli nie zawsze masz elektrodę :)
  • #15 520881
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    vidmo napisał:
    CO to za ksiazka BTC ???
    BTC to nazwa wydawnictwa.
  • #16 521329
    diag
    Poziom 29  
    Posty: 1401
    Pomógł: 45
    Ocena: 209
    By daleko nie szukać, zajrzyj w datashet pica, zawsze jest opis komend a jeszce szybciej w help MPLAB, assembler.
  • #17 527578
    vidmo
    Poziom 14  
    Posty: 166
    Ocena: 18
    no i mam problem.
    z odczytem EEprom niebylo problemu w pdf znalazlem przyklad ale znalazlem tez przyklad zapisu DO EEPROM
    no i procedurka wyglada tak:
    bsf status,rp0
    bcf intcon,gie
    bsf eecon1,wren
    movlw 55h
    movwf eecon2
    movlw aah
    movwf eecon2
    bsf eecon1,wr
    bsf intcon,gie
    testuje pod MPLAB i problem jest taki ze zucajac rejest w do eecon2 nic sie niedzieje
    reczne wpisanie do rejestru eecon2 tez jest niemozliwe moze to blad konfiguracji MPLAB ?
    ma ktos jakis pewna procedurke do zapisania jednej komorki w pamieci eeprom 16f84a ?
  • #18 527598
    diag
    Poziom 29  
    Posty: 1401
    Pomógł: 45
    Ocena: 209
    Niestety MPLAB nie w pełni obsługuje symulacje dla wewnetrznej EEPROM. Jest to opisane w helpach dla simulinka.
  • #19 527638
    vidmo
    Poziom 14  
    Posty: 166
    Ocena: 18
    kurde te wszystkie programy to jedynie do wora i na szrot !
    mplab tego nie inny zas tamtego czy niema jakiegos programu ktory by mialk wszystko w sobie i niebylo by problemu przy pic16f84 ?
    zalezy mi najbardzej na deburgerze moze jest jakis tylko pod pic?
  • #20 527701
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    vidmo napisał:
    zalezy mi najbardzej na deburgerze moze jest jakis tylko pod pic?
    Chyba proteus ma nieco lepszą symulacje, ja jednak wole hardcorowo wgrywać program do procka i testować na żywca ;)
  • #21 528440
    vidmo
    Poziom 14  
    Posty: 166
    Ocena: 18
    zgadzam sie tak kiedys robilem na 89cx ale teraz sie ucze pic'a i jest masa oprogramowania wiec czemu nie?
    ale widze ze i tak pic zostal nieco spartaczony bardzej juz to wyglada jak jecyk C a nie Asm
    niewiem co sie to dzieje ze wszyscy wola isc za niby prosciejszym rozwiazaniem dlamnie to skomplikowane a na doadtek utrudnia zycie
    ale wracajac do tematu
    napewno da sie ten prioblem jakos rozwiazac w MPLAB ludze !!!!!!!!! to tyl;ko SOOFT ! napewno ktos sie juz natknol na ten problem i tak bardzo go to gryzlo ze cos z tym zrobil
    poszukuje jakiegos softu ktory bedze niezawodny przy PIC16f84a
  • #22 528801
    diag
    Poziom 29  
    Posty: 1401
    Pomógł: 45
    Ocena: 209
    Sprawa nie jest tak spartaczona jak myślisz. Do nowszych prcków jest ICD i ICD2, tylko to wymaga zestawu prototypowego, ostatecznie trzeba jakoś zarabiać pieniądze skoro soft jest za free.
  • #24 529024
    diag
    Poziom 29  
    Posty: 1401
    Pomógł: 45
    Ocena: 209
    Robi się to tak:
    ;-------------------------------------------------------------------------;
    org 2100 ; this is location of EEPROM data
    de "program jest chroniony prawem autorskim ",0
    ;************************************************************
    po kompilacji przy programowaniu to pojawi ci się w EEprom.
  • #26 529147
    diag
    Poziom 29  
    Posty: 1401
    Pomógł: 45
    Ocena: 209
    Jak często ma wpisywać dane do EEprom?
  • #27 529158
    vidmo
    Poziom 14  
    Posty: 166
    Ocena: 18
    hmm a czy to ma jakies znaqczenie ? bo niebardzo wiem
    chodzi mi o kod ktory moge wykozystac w swoim programie
    np
    program1:
    ..
    ..
    ..
    ..
    ..
    ;teraz mam w komorkach od np. 10h do 20h moje dane ktore chce zapisac do eeprom
    procedurka_zapisu do eeprom:
    ...
    ...
    koniec zapisu:
    ..
    ..
    koneic_mojego_programu:
  • #28 529172
    diag
    Poziom 29  
    Posty: 1401
    Pomógł: 45
    Ocena: 209
    Ma znaczenie .Przeczytaj note katalogową. Ile czasu ma trawać prcedura zapisu, czy nie bedzie kolizji z odśierzaniem wyświetlacza lub przerwaniem?
  • #29 529656
    elektryk
    Poziom 42  
    Posty: 11029
    Pomógł: 439
    Ocena: 241
    Z helpa mplab:
    MPLAB SIM is a discrete-event (as opposed to real-time) simulator.

    Interrupt latency may not be accurate.

    Weak pull-ups on ports not implemented.

    Depending on device:

    Timer1 increments on RC0, not RC1, for Timer1 enabled.

    Serial I/O (i.e., USART, I2C, SPI) is not supported in simulation. As a result, the SSPSTAT register has been made readable and writable.

    A/D conversion time is not completely simulated across frequencies.

    PWM output resolution is limited to 1 Tcy.

    Programmable Switch-Mode Controller (PSMC) is not simulated.

    Brown-out detection (BOD) and low voltage detection (LVD) are not simulated.

    Vref is not simulated.

    Note: If you have trouble with I/O pins on processors that have A/D (PIC16C74, PIC16F877, etc.), make certain that the ADCON registers are configuring those pins for digital I/O rather than for analog input. For most processors, these default to analog inputs and the associated pins cannot be used for I/O until the ADCON (or ADCON1) register

    Jakoś nic tam nie ma o eepromie, ale jest za to jeszcze komentarz:

    The two most-significant (MS) bits of the EEDATH register and the three MS bits of the EEADRH register may be set, resulting in incorrect data values and addressing. These bits should be maintained clear.

    A tak jeszcze sobie popatrzyłem na Twój program i czy Ty gdziekolwiek podajesz dane i adres do zapisu?

Podsumowanie tematu

✨ Dyskusja dotyczy pisania prostych programów dla mikrokontrolera PIC16C505, w szczególności realizacji ustawiania stanów na wyjściach portu B z opóźnieniem czasowym (np. ustawienie stanu wysokiego na RB0 na 1 minutę, a następnie na RB2 na 30 sekund). Poruszono kwestie ograniczeń 8-bitowego procesora w zliczaniu długich czasów, konieczności stosowania pętli zagnieżdżonych lub arytmetyki wielobitowej oraz wpływu częstotliwości kwarcu na dokładność i długość odliczania. Zaproponowano użycie kwarcu 32,768 kHz lub timerów (np. TMR1) do precyzyjnego odmierzania czasu. Wskazano, że dla początkujących lepiej zacząć od prostych przykładów, takich jak migająca dioda czy obsługa przycisku. Przedstawiono przykładowy kod w języku wysokiego poziomu (Proton Plus BASIC) realizujący zadanie z opóźnieniami. Omówiono zalety i wady pisania w asemblerze versus językach wysokiego poziomu, podkreślając, że asembler jest przydatny do niskopoziomowych funkcji, ale dla większych projektów wygodniejszy jest C lub BASIC z możliwością wstawek ASM. Poruszono także temat programowania i odczytu pamięci EEPROM w mikrokontrolerach PIC, w tym problemy z symulacją w MPLAB oraz przykładowe procedury zapisu danych do EEPROM w asemblerze. Wskazano, że czas zapisu EEPROM i obsługa przerwań mają znaczenie dla poprawności działania. Dyskutowano o narzędziach programistycznych, takich jak MPLAB, Proton Plus, Bascom, Proteus oraz debugerach ICD i ICD2. Wspomniano o dostępności materiałów edukacyjnych, m.in. książek wydawnictwa BTC oraz dokumentacji datasheet i helpów MPLAB.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA