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.
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.
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ę.
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.
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.
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.
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
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.
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 ?
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.
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
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
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ę
CO to za ksiazka BTC ??? gdze ja mozna zdobyc ?
ja niemam zadnych pomocy dotyczacych PIC a tez mam zamiar sie pomeczyc moze zna ktos jakas strone najlepiej w jezyku "pl" o programowaniu PIC16 ??
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 ?
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?
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
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.
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.
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:
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?
✨ 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.