Jste zde

Víceprocesorová komunikace s AT89C2051 na rozhraní RS-232/TTL bez použití devíti

Multiprocesorová komunikace je obsažena podporou 9bitového formátu přímo v x51. Jak to ale řešit,

když ji potřebujete obládat PC, které 9bitovou komunikaci nepodporuje ?

    Úvod aneb princip víceprocesorové komunikace
    Mikroprocesor AT89C2051 je vybaven jedním sériovým kanálem, který je schopen pracovat v plném duplexním režimu. Elektrické vlastnosti výstupního kanálu (otevřený kolektor) umožňují sběrnicové uspořádání vodičů. Této vlastnosti se maximálně využívá v klasické multiprocesorové konfiguraci (Maste-Slave). Sériový kanál je však nutné nastavit do módu 2 nebo 3, kde se přijímá devět datových bitů, z nichž devátý bit se ukládá do řídícího registru sériového kanálu (SCON). Sériový kanál je možné naprogramovat s pomocí bitu SM2 tak, aby se při přijmu stop bitu aktivovalo přerušení od sériového kanálu jen tehdy, je-li devátý přenosový bit roven jedné. Je-li přenos devíti bitů chápán jako adresa podřízeného mP, pak při přenosu 8-mi bitových informací bude příjem těchto dat aktivován jen u toho podřízeného mP, který byl v prvním 9-ti bitovém slově správně naadresován a proběhla nová inicializace sériového kanálu v modu 1 na přenos 8-mi bitů. Po ukončení přenosu dat je nutné opětovně inicializovat sériový kanál na přenos 9-ti bitů. Tento princip lze použít všude tam, kde lze lehce nastavit devítibitovou komunikaci na sériové lince. Pokud použijeme klasické PC jako řídící počítač, což v praxi často bývá, vzniká problém realizace tohoto 9-ti bitového přenosu. Běžně používané UARTy v PC totiž nedokáží přímý 9-ti bitový přenos a proto není možné výhody tohoto principu přenosu pro multiprocesorové řízení použít.
     
     

    Blokové schéma víceprocesorové komunikace
    Blokové schéma víceprocesorové komunikace

    Na obrázku je naznačen princip multiprocesorové komunikace, který nevyužívá devátého bitu jako adresy. Veškerý přenos je uskutečněn jen v módu 1 (8 bitů). Chce-li nadřízený procesor (master) přenášet data do jednoho z podřízených procesorů (slave) vyšle blok dat, který je opatřen jednoznačnou adresou, která stanoví, komu jsou data určena. Všechny podřízené procesory (slave) blok dat přijmou, ale zpracovávat tato data bude jen ten procesor, u kterého souhlasí vyslaná adresa s adresou vlastní. Ostatní podřízené procesory vyslaná data nezpracovávají. Pro případ vysílání dat z podřízených procesorů (slave) k procesoru nadřízenému (master) je nutné zabezpečit takový režim na sběrnici, aby byla vysílána data pouze z jednoho podřízeného procesoru (slave). 

    Pro zajištění bezchybné komunikace na lince RS-232 je nutné, použít takový komunikační protokol, který jednoznačně určí komu je zpráva zasílána. V 9-ti bitové komunikaci byla adresa dána jedničkou v devátém bitu, tento stav v osmibitové komunikaci chybí, je proto nutné “rozdělit” tabulku ASCII znaků na znaky určené pro adresy, znaky určené pro přenos dat a případně jiné (pomocné) znaky. V praxi se již několikrát osvědčil předkládaný komunikační protokol, který vychází ze základní myšlenky tj. vše co jde po sběrnici RS-232 lze jednoduše monitorovat jako běžné “tisknutelné” znaky z ASCII tabulky. Proto se pro přenos dat používají běžné hexaznaky (09, AF). Těmito znaky je možné přenést jakoukoliv informaci z nadřízeného mP (tedy i PC) do podřízeného mP, samozřejmě za cenu vysílání 2x více bytů. 

    Pro volbu režimu činnosti podřízeného mP byly zvoleny znaky pokračující v abecedě za F tj. GZ. Takto máme k dispozici 20 režimů činnosti, což je v praxi více než dostačující. 

    A nyní k volbě adresy podřízeného mP. Zde nám velmi dobře poslouží malá písmena celé abecedy tedy az (celkem 26 znaků). Teoreticky lze připojit až 26 podřízených mikroprocesorů, přičemž i toto číslo je pro praxi dostačující. Pokud by to někomu nestačilo je v ASCII tabulce k dispozici ještě celá horní polovina. Pro zajištění spolehlivého přenosu adresy se tato adresa na počátku vysílání zprávy dvakrát zopakuje.
     

    Popis komunikačního protokolu
    V tab. 1. je uveden tvar vysílané zprávy z nadřízeného mP (PC) k podřízenému. První dva znaky obsahují adresu podřízeného mP, tak je zajištěno, že na další znaky ve zprávě bude reagovat jen jeden podřízený mP. Třetím znakem je znak volby režimu činnosti podřízeného mP a od 4 znaku jdou data v podobě dvojic ASCII hexa znaků. Ve zvoleném příkladu jde o 4 znaky, tedy o přenos 16-ti bitového čísla. Posledním znakem přenosového protokolu je zvolený koncový znak, v našem případě je to kód 0DH tj. “CR” tedy přesun na nový řádek / linku. Na monitoru sériové linky nebo i ve vytvořeném programu (Pascal, C ...) tento znak způsobí odřádkování. Pokud by vysílaná zpráva měla být delší, a pokud bychom chtěli zvětšit i spolehlivost přenosu dat, lze před koncový znak “CR” vložit i jednobytový CRC součet. Z praxe však mohu konstatovat, že je to zcela zbytečné, neboť přenos je dostatečně spolehlivý i při relativně velkém rušení.

     

    tab. 1.  Tvar komunikačního protokolu pro přenos dat od PC k podřízeným mP

     Pořadí 
     
    8 - bitů 
     
    Význam
    Tvar dat / poznámka 
    1.
    a
    adresa podřízeného mP Modul "a" až "z"
    2.
     
    a
      adresa podřízeného mP Modul "a" až "z"
    3.
     
    G
      nastavení režimu podřízeného mP Příkaz "G" až "Z"
    4.
     
    DATA_001
      přenos 16-ti bitového "0" až "F" hexadecimálně
    5.
     
    DATA_002
      slova v hexadecimální  "0" až "F" hexadecimálně
    6.
     
    DATA_003
      podobě jako ASCII "0" až "F" hexadecimálně
    7.
     
    DATA_004
      znaky "0" až "F" hexadecimálně
    8.
     
    0DH
      koncový znak přenosu CR ! je povinný !

     

    V tab. 2. je uveden tvar vysílané zprávy z podřízeného mP (tedy odpovědi na dotaz). Je vhodné aby zpráva zase začínala dvěma znaky adresy a jedním znakem režimu činnosti. Tím se totiž dostatečně potvrdí přenesený režim činnosti. Od 4 znaku jsou vysílána data opět v ASCII hexakódu. Posledním znakem je povinný koncový znak “CR”.

     

    tab. 2. Tvar komunikačního protokolu pro přenos dat z podřízeného mP k PC

     Pořadí 
     
    8 - bitů 
     
    Význam
    Poznámka
    1.
     
    a
      adresa podřízeného mP Modul "a" až "z"
    2.
     
    a
      adresa podřízeného mP Modul "a" až "z"
    3.
     
    G
      nastavený režim podřízeného mP Příkaz "G" až "Z"
    5.
     
    DATA_001
      Přenos 16-ti bitového čísla ASCII znaky
    6.
     
    DATA_002
      nebo běžného textu jako  ASCII znaky
       
    ......
      ASCII znaky ASCII znaky
    n-2.
     
    DATA_nnn-1
        ASCII znaky
    n-1.
     
    DATA_nnn
        ASCII znaky
    n.
     
    0DH
      koncový znak přenosu CR ! je povinný !

    Postřehy z praktického používání:

    Uvedený komunikační protokol byl je již delší dobu používán na několika aplikacích k plné spokojenosti uživatelů a bez výskytu chyb. Lze tedy konstatovat jeho dostatečnou spolehlivost a především jednoduchost, zvláště když řídícím mP je klasické PC a sériové rozhraní RS-232. Jednoznačnou adresou a definovaným režimem činnosti je osloven jediný podřízený procesor k akci a případně k odezvě na sběrnici. Nemůže tedy dojít k již zmíněné kolizi ve vysílání. 

    Pokud podřízený mP nemá na zvolený režim činnosti reagovat odpovědí, lze nadefinovat “společnou” adresu a přes tuto adresu zadávat úkoly všem podřízeným mP najednou (např. uvedení do počátečního stavu, změna komunikační rychlosti, přechod do sleep režimu atd.).

    Nesmírnou výhodou takto zavedené komunikace je skutečnost, že lze sériovou linku monitorovat jednoduchým prográmkem ( např. TTY nebo PPP) a vše co tam běží je jasně čitelné na obrazovce. 

    Další nespornou výhodou této komunikace je skutečnost, že je možné jednu stranu (přijímací nebo vysílací) nahradit tímto monitorem a tak postupně odlaďovat programy pro vysílání nebo příjem zprávy.
     

Hodnocení článku: