Zdravím
Potřeboval bych menší radu, nebo spíš nakopnutí správným směrem. Programy píši a simuluji v MPLABu. Programátor mám PICQUICK.
Do teď jsem používal PIC 16F87XA, ale dostal se mi náhodou do ruk PIC18F2331.
U PIC 16F se psal na konfiguraci řádek __CONFIG atd, ale u PIC18F se to píše jinak a to je můj problém.
Neví tady někdo, jak správně napsat konfiguraci pro PIC 18F?
Díky.
administrator: přesunuto ze sekce "Zprávy od moderátorů (vývěsní tabule)"
Řada 18F už nemá jedno velké konfigurační slovo, ale má sedm konfiguračních registrů CONFIG1L, CONFIG1H, CONFIG2L, atd. Máš to popsané v datasheetu na straně 267 (kapitola 22.1 Configuration Bits).
Mám to takhle
CONFIG OSC = HS ;HS
CONFIG FCMEN = OFF ;Disabled
CONFIG IESO = OFF ;Disabled
CONFIG PWRTEN = ON ;Enabled
CONFIG BOREN = ON ;Enabled
CONFIG BORV = 42 ;4.2V
CONFIG WDTEN = OFF ;Disabled
CONFIG WINEN = OFF ;Disabled
CONFIG WDPS = 1 ;1:1
CONFIG T1OSCMX = OFF ;Active
CONFIG HPOL = LOW ;Active low
CONFIG LPOL = LOW ;Active low
CONFIG PWMPIN = OFF ;Disabled
CONFIG MCLRE = OFF ;Disabled
CONFIG STVREN = OFF ;Disabled
CONFIG LVP = ON ;Enabled
CONFIG DEBUG = ON ;Enabled
CONFIG CP0 = OFF ;Disabled
CONFIG CP1 = OFF ;Disabled
CONFIG CPB = OFF ;Disabled
CONFIG CPD = OFF ;Disabled
CONFIG WRT0 = OFF ;Disabled
CONFIG WRT1 = OFF ;Disabled
CONFIG WRTB = OFF ;Disabled
CONFIG WRTC = OFF ;Disabled
CONFIG WRTD = OFF ;Disabled
CONFIG EBTR0 = OFF ;Disabled
CONFIG EBTR1 = OFF ;Disabled
CONFIG EBTRB = OFF ;Disabled
Ale proč se mi při této konfiguraci zapíše do registru např. 07F název registru _CPD_ON_5H
A obsazených registrů v uživatelské paměti je tam víc, obsazení přesně odpovídá souboru p18f2331.inc od řádku CONFIG1H Options.
Dle mého názoru tam ještě něco chybí,ale nemůžu přijít na to CO
To tam nemá být, když je to místo pro moje registry.
Nebo se pletu?
Pleteš se. Je to naprosto v pořádku a nic tam obsazené není. Už obrat : “zapíše do registru název registru _CPD_ON_5H” tě měl trknout. Kdyby jsi se pořádně podíval, tak s obsahem se nic neděje. Pouze se naprosto správně přiřadí symbolická návěští k adresám podle předchozích definic.
Takhle to vypadá v assembleru:
config WDT = OFF, MCLRE = ON, OSC = HS, LVP = OFF
config PBADEN = OFF, PWRT = ON, BOREN = OFF, STVREN = OFF
Kdo nezvládne assembler, tak holt musí programovat v Céčku
Díky,ale je to podle mého názoru nesmysl co psal jankop.
Posilám obrázek z MPLABu
V okně File Registers jsou zmiňované registry. když vemu ten první co je vidět, _WDPS_32_2H, tak je to nastavení WDT 1:32 v nastavení CONFIG2H, což, dle mého názoru, je nastavení konfiguračních bitů a ne registrů. A to tam nemá co dělat, když adresa konfigurační paměti je 0x30000X.
A když chci registr, konkrétně 0xEB, využít,tak to nejde, protože se tam nacpal název _WDPS_32_2H, který tam nemá co dělat, když je to součást CONFIG2H.
Mám pravdu?
A ještě k Céčku. Rozhodoval jsem se mezi assemblerem a jiným, vyšším programovacím jazykem a po přečtení různých názorů zvítězil assembler.
Nikdy jsem problémy s assemblerem neměl až teď.
Podle mě pravdu nemáš a problém si jen vytváříš. To přiřazení symbolů je stejné i u PIC16FXXX. K dané adrese se zobrazuje Symbol Name, který byl pro danou hodnotu definován pomocí EQU jako první, ale to ti může být naprosto jedno. Ty mluvíš o nějakých hodnotách a omezeních, ale ty tam prostě nejsou. Ty si pouze domýšlíš. Co ti brání využívat registr OxEB. Vůbec nic. Chceš ho mít symbolický? Tak napiš
HATAPATA EQU OxEB
a používej v programu HATAPATA.
Pokud ho chceš vidět ve WATCH? Tak si ho tam přidej.
HATAPATA EQU OxEB nejde použít, protože je obsazen a jmenuje se pořád _WDPS_32_2H. A název _WDPS_32_2H je součást CONFIGu!!! A ne název registru. Ten název _WDPS_32_2H a ani ty ostatní tam prostě nemají co dělat! Systémové registry jsou od adresy 0XF60.Si to zkus v MPLABu. A proč to přidává názvy registrů i na 0x00,0x01 až 0x07.
A HATAPATA se lépe pamatuje než _WDPS_32_2H!! Od 0x000 do 0x2FF jsou uživatelské registry, tak nějaký _WDPS_32_2H a jemu podobné tam nemají co dělat.
A u řady 16FXXX, konkrétně, co jsem používal já, 16F877X se mi registry nikdy nepletly tam, kam nepatří. 0x00 - 0x1F system, 0x20 - 0x7F pro mě, posledních 16 přístupné ze všech bank. Nebudu vypisovat všechny banky. A tak to bylo a je, ale u PIC 18F2331 jsou asi jiná pravidla.
Až na to přijdu, tak to sem napíšu. A když na to nepřijdu, tak asi bude pravda toto “problém si jen vytvářím”.
A co je lepší, C nebo ASM?
Kdo nezvládne assembler, tak holt musí programovat v Céčku
Jde to i obrátit?
Kdo nezvládne Céčko, tak holt musí programovat v assembleru?
Můj osobní dojem je, že assembler je dobrý programovací jazyk, nic proti tomu.
Ale v Céčku programovat je jedna báseň, protože Microchip má bohaté knihovny na všechny možné operace.
Třeba v assembléru dělat složitou matematickou operaci si nedokážu ani představit.
A efektivita programování z hotovýma knihovnama je úžasná.
Ale záleží jenom na vás co si vyberete.
Přeji hodně úspěchu
Mužeš definovat bezpočet symbolických jmen. Mohou být různá jména, která mají stejný obsah. Pořád tvrdíš, že vzniklá situace něčemu brání, ale to není pravda. To je jen zobrazení, hodnota obsahu se nemění. WDPS_32_2H není součástí žádného configu. Je to symbolická konstanta definovaná direktivou EQU v souboru p18f2331.inc. Můžeš si ji libovolně předefinovat. Kdybys začal psát program, tak bys zjistil, že nemáš problém. Moc to zkoumáš. Zkus si třaba tohle:
#include p18f2331.inc
HATAPATA EQU 0x7F
CONFIG CPD = ON ;Disabled
END
A podívej se do File Registers na adresu 0x7F
Co to je složitá matematická operace?
Já jsem zase slyšel, že Céčko neumí šetřit prostorem. A za druhé, na C jsem na netu nic nenašel, na asm je toho dost. Proto jsem začal s assemblerem.