. : New eShop! - Mobilní verze - Pandatron.cz - Pandatron.sk - Diskuzní fórum - Zakázkový vývoj : .
 
UART na PIC - jednovodičový RS232
24. října 2008 | Pandatron | UART na PIC - jednovodičový RS232 | Komentářů: 19  

UART na PIC - jednovodičový RS232

Jednovodičový softwarový UART na procesorech PIC. Článek obsahuje dvě verze pro nejoblíbenější procesory a samozřejmě veškeré zdrojové kódy volně ke stažení.

I když většina moderních procesorů PIC má již implementovaný hardwarový UART (sériovou linku), najde se řada především menších procesorů, které jsou o takovou výbavu ochuzeny. V tom případě nezbývá než si napsat její softwarovou verzi.

RS232:
RS232 je rozhraní pro přenos informací vytvořené původně pro komunikaci dvou zařízení do vzdálenosti 20 m. Tímto rozhraním je již mnoho let vybaven téměř každý osobní počítač, případně je možné zakoupit za pár korun převodníky USB <> RS232 pro doplnění či rozšíření těchto portů v PC.

Napěťové úrovně pro vstup linky RS232 jsou na obrázku č.1.


Obr. 1: Úrovně přijímače RS232

Z hodnot je patrné, že i když je linka určena pro přenos dat na vyšších napěťových úrovních, je možné použít napětí již od 3V. Nic tedy nebrání vynechání klasických převodníků RS232/TTL a u jednodušších konstrukcí připojit linku přímo k procesoru. Pouze za použití jediného omezovacího rezistoru na přijímací lince (přijímací z pohledu procesoru).

RS232 a PIC:
Na následujících řádcích jsou popsány dvě verze firmware. Ta první umí data pouze vysílat a je tedy velice jednoduchá na implementaci ve kterémkoliv procesoru. Druhá verze umožňuje i příjem dat, který je tvořen pomocí interruptu (což je jediné kvalitní řešení) a je tak mírně složitější.

Ve všech níže uvedených zdrojových kódech je možné upravit přenosovou rychlost a to v rozsahu 2400 až 38400 Baudů. Pro použití nižších rychlostí by bylo potřeba mírně upravit časovací smyčku, použit naopak vyšších přenosových rychlostí již není vhodné z dúvodu nízké stability interních hodin.

SPEED equ 34 	; SPEED -  Baud
		;  145  -  2400
		;   71  -  4800
		;   33  -  9600
		;   21  - 14400
		;   15  - 19200
		;    5  - 38400

1.verze - pouze vysílání dat
Nejjednodušší je pouhé vysílání dat. V tom případě není (kromě blokovacího kondenzátoru) zapotřebí již žádná externí součástka či převodník.

PIC12F629/675
Pokud je v zařízení s procesorem PIC12F629/675 potřeba data pouze vysílat, je možné použít toto velice jednoduché zapojení.


Obr. 2: PIC12F629/675 pouze TxD

V podstatě je signál z výstupního pinu GP0 veden přímo na přijímací pin konektoru PC.

Firmware pro toto zapojení je ke stažení zde: uart-pic-1_12f_txonly.zip

V případě požadavku na použití jiného pinu než je GP0 stačí pouze upravit hodnotu na desátém řádku zdrojového kódu. Místo nuly (červeně zvýrazněno) zde stačí napsat nové číslo pinu GPx.

10: #define UART GPIO,0		; UART pin

PIC16F630/676
Shodně jako v předchozím případě je možné program pro procesor pouze mírně upravit a použít například s obvody PIC16F630/676.


Obr. 3: PIC15F630/676 pouze TxD

Firmware pro toto zapojení je ke stažení zde: uart-pic-1_16f_txonly.zip

V případě požadavku na použití jiného pinu než je RA0 stačí pouze upravit hodnotu na desátém řádku zdrojového kódu:

10: #define UART PORTA,0 	; UART pin

Obdobně je možné jeden z těchto dvou zdrojových kódů snadno modifikovat na libovolný jiný procesor PIC, který není vybaven obvodem UART již z výroby, nebo kde je zapotřebí jejich větší množství.


2.verze - vysílání i příjem dat

Jak bylo zmíněno v úvodu, pro možnost příjmu dat je kód již mírně složitější. Navíc, aby procesor nemusel neustále po desítkách mikrosekund testovat vstupní pin, je celý příjem obsloužen v interruptu. Tím je navíc umožněno, jak je v následujících zdrojových kódech i předvedeno, uspání procesoru v době kdy není žádný požadavek na přenos dat.
Jakmile PC začne směrem k procesoru vysílat data, procesor se probudí a zahájí jejich příjem. Poté dojde k vyhodnocení dat a jako demonstraci správné funkce procesoru inkrementuje každý přijatý byte a odešle ho zpět do PC (tento kód si samozřejmě každý uživatel nahradí svým).

PIC12F629/675
Jako první je opět použit procesor typu PIC12F629/675.


Obr. 4: PIC12F629/675 TxD i RxD

Obvod byl oproti obrázku č.2 doplěn o rezistor omezující napěťové úrovně přijímané směrem z počítače. Vlastní omezení úrovní se poté děje na ochranných diodách příslušného pinu procesoru.

Firmware pro toto zapojení je ke stažení zde: uart-pic-1_12f_full.zip

V případě potřeby použítí jiného pinu než je GP0 je potřeba modifikovat jejich hodnotu na dvou místech zdrojového kódu.

na řádku č.14:

14: #define UART GPIO,0	; UART pin

a na řádku č.44:

44: BSF IOCB,0

PIC16F630/676
Obdobně je možné použít vysílání i příjem tvořený interruptem i pro tyto procesory.


Obr. 5: PIC16F630/676 TxD i RxD

Zde je však omezení spočívající v možnosti nastavení přerušení od pinu pouze na PORTA (RAx). Piny z druhého portu (PORTC) zde tedy není možné použít.

Firmware pro toto zapojení je ke stažení zde: uart-pic-1_16f_full.zip

V případě potřeby použítí jiného pinu než je RA0 (pouze tedy z řady RAx) je potřeba modifikovat jejich hodnotu na dvou místech zdrojového kódu.

na řádku č.14:

14: #define UART PORTA,0	; UART pin

a na řádku č.45:

45: BSF IOCA,0

Závěr
Všechny zde uvedené kódy jsou vyladěné a ověřené již v několika různých konstrukcích. Navíc bylo zjištěno, že obvod komunikuje obousměrně bez problémů již od napětí 2V.
Sice se z odborného pohledu nejedná o příliš profesionální provedení a v zařízeních vyráběných profesionálně či ve větších sériích by rozhodně měli být klasické převodníky RS232/TTL, jde však o plně funkční a již mnohokráte ověřené, rychlé připojení procesoru k počítači.


Obr. 6: Ladící zapojení s programátorem a logickým analyzátorem firmy Asix

Všechny uvedené programy nechávám volně k dispozici a případně k dalším modifikacím.

Odkazy & Download:
Zdrojové kódy jsou ke stažení uvnitř článku přímo u jednotlivých verzí.







GooglePlus1 FaceBook Twitter del.icio.us DiGG Google StumbleUpon Google Buzz Email RSS PDF Tisk

Komentáře (19):

Zobrazit starší 30 dnů (19)...

host
19. Dne 01. 10. 2011 v 18:17 zaslal host
Ako sa určuje časovací smyčka.
Dobrý den! Řekněte mi, ako sa určuje časovací smyčka pro předávání informací. Zjistil jsem, že zpoždění 34, pre 9600 nefunguje, místo toho som musel dát 32 a potom to islo!


Název příspěvku: Vaše jméno: host
                 
  Zakázat formátování [Zakáže kódování a nahrazování smajlíky.]
Připojit soubory
reklama:
USB I/O modul s MCP2200
Malý modul USB I/O a UART s obvodem Microchip MCP2200
Skladem od 243 Kč

Informace uvedené v článcích jsou platné v době jejich vydání a samotné články jsou určeny pouze jako zdroj informací. Autor článku ani správce webu nenesou žádnou zodpovědnost za případné újmy na majetku a zdraví. Názvy společností a výrobků, loga a další multimediální materiál mohou být ochrannými známkami příslušných společností.
RSS kanály: | |
+420 723 846 377
info@pandatron.cz
Všechna práva vyhrazena | mobilní verze | © Copyright 2000 - 2016 ISSN 1803-6007