pso
Petr Porazil
Návrh hardware
adr
bvh

Příklad použití knihovny RS232 pro PIC


Petr Porazil Home
peda
Linux a PIC
PIC32MX
Zavaděč (boot)
Programátor pprg
RS232 příklad
RS232 knihovna
TTL RS232
Solární systém
Ukázky aplikací PIC
Download

Úvod

Jak už jsem napsal jinde pro ladění programu a nastavování konstant různých regulátorů používám komunikaci RS232. Postupně jsem vytvořil "knihovnu" s jejíž pomocí se sériová komunikace realizuje poměrně snadno. Tady je příklad.

Uvedený příklad je velmi jednoduchý umožňuje řídit jas jedné LED pomocí pulzně šířkové modulace (PWM).

Hardware

Příklad je postaven na nejmenším procesoru řady PIC18 a to PIC18F1220. Zapojení je na obrázku
schema
Obsahuje pouze procesor, jednu LED, programovací konektor a konektor komunikace. RS232 je vyvedena na konektor přímo z procesoru, pro připojení k PC je potřeba převodník úrovní. Schémata několika takových převodníku jsou tady

Kompilace

Na stránce download si můžete stáhnout jak "knihovnu" tak i příklad jejího použití.

Slovo knihovna píšu schválně v uvozovkách, protože se vlastně o knihovnu nejedná. Ve skutečnosti je to jen jeden zdrojový soubor který se používá ve více projektech. Abych mohl soubor kompilovat pro různé procesory a různé nastavení a nemusel do něj zasahovat, vyřešil jsem konfiguraci přes soubor defs.h.

Příklad je možno zkompilovat dvěma způsoby, buď s použitím zavaděče, nebo bez něj. Pro kompilaci musíte mít k dispozici program make a nainstalovány gputils. Pro nahrání programu do procesoru potřebujete program pprg, nebo jiný obdobný program (viz. stránka Linux a PIC).

Postup kompilace je následující:

Spuštění

Abyste mohli program spustit, musíte jej nahrát do procesoru. Postup je následující: Nyní můžete s destičkou komunikovat pomocí jednopísmenných příkazů. Příkazy můžou mít číselný parametr a ukončují se klávesou ENTER. Příkazy jsou následující:
Jestli jste se dopracovali až sem, a všechno Vám funguje jak bylo popsáno, můžete přidávat další vlastní příkazy. Je to jednoduché, do tabulky CmdTab přidáte dva řádky. V prvním je znak kterým se příkaz vyvolá a počet paramerů, v druhém je adresa funkce která se má spustit. Pozor tabulka musí končit nulami.

Pak jen napíšete pro daný příkaz funkci. Paramtry mnůžou být max dva a předávají se přes CmdNL, CmdNH a CmdN1L, CmdN1H. Pokud chcete aby příkaz něco odpověděl na RS232 můžete použít funkci SendS. Je to taková velmi jednoduchá asemblerové obdoba funkce printf. Nadefinujete si řetězec, jehož součástí můžou být i proměnné a jeho adresu uložíte do TBLPTRL,TBLPTRH a TBLPTRU. Nakonec zavoláte SendS.

Například vypsání hodnoty všech časovačů příkazem t by vypadalo takto:

CmdTab
DB "v",0x0
DW VerCmd
DB "h",0x0
DW CmdHelp
DB "l",0x1
DW LEDCmd
DB "t",0x1    ;do tabulky CmdTab
DW TimerCmd  ;přidáme tyto dva řádky
DB 0x0,0x0
DW 0x0
;funkce pro příkaz
TimerCmd
CLRF TBLPTRU
MOVLW HIGH TimerStr
MOVWF TBLPTRH
MOVLW LOW TimerStr
MOVWF TBLPTRL
CALL SendS
RETURN
;definice řetězce
TimerStr
DATA "TMR0 hexa 0x"
DB fNum,dNZ | dSign
DW TMR0L
DB 0xD,0xA
DATA "TMR1 16 bit dekadicky se znamenkem "
DB fDec16b,dNZ | dSign
DW TMR1L
DB 0xD,0xA
DATA "TMR2 8 bit dekadicky bez znamenka "
DB fDec,dNZ
DW TMR2
DB 0xD,0xA,0,0


Po zadání příkazu t se pak vypíše následující výpis.

TMR0 hexa 0x24
TMR1 16 bit dekadicky se znamenkem 0
TMR2 8 bit dekadicky bez znamenka 174


Pokud příkaz t opakujeme, můžeme vidět, že hodnota čítače 2 se mění, zatímco u čítačů 0 a 1 je hodnota pořád stejná. Je to tím že tyto čítače nejsou spuštěny.



(C) Petr Porazil 2010-11, poslední úprava 28.04.2010