PIC18F2331

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.

:arrow_right: administrator: přesunuto ze sekce "Zprávy od moderátorů (vývěsní tabule)"

Omlouvám se, já to špatně zařadil. :cry: :cry: Smazat to nejde!! :blush: :blush: :blush:

Nešlo by to třeba takhle?

**config ** setting=value , setting=value]

#include p18f452.inc ;Include standard header file ;for the selected device. ;code protect disabled CONFIG CP0=OFF ;Oscillator switch enabled, RC oscillator with OSC2 as I/O pin. CONFIG OSCS=ON, OSC=LP ;Brown-OutReset enabled, BOR Voltage is 2.5v CONFIG BOR=ON, BORV=25 ;Watch Dog Timer enable, Watch Dog Timer PostScaler count - 1:128 CONFIG WDT=ON, WDTPS=128 ;CCP2 pin Mux enabled CONFIG CCP2MUX=ON ;Stack over/underflow Reset enabled CONFIG STVR=ON

Pokud ti pro parametry nestačí soubor p18f452.inc, tak si najdi následující dokument: PIC18 Configuration Settings Addendum (DS51537).

Ř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).

PIC18 Configuration Settings Addendum (DS51537) máš tady.

Na microchip.com ho nehledej, protože Microchip ho přestal vydávat jako PDF, protože ho má v on-line nápovědě k MPLABu

Díky za odpovědi.

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?

Takhle to vypadá v C
#pragma config WDT = OFF, MCLRE = ON, OSC = HS, LVP = OFF
#pragma config PBADEN = OFF, PWRT = ON, BOREN = OFF, STVREN = OFF

Asm je na prd, nauč se Céčko, nic na tom není.

:slight_smile:

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ď.
Bez názvu.JPG

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.

S tím Céčkem jsem si dělal legraci z XiXaa.

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 :slight_smile:

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.

Asi to fakt moc zkoumám. Jdu zkusit psát program.
Ale stejně mě štve, že to tam je :blush: