UART logger

    Egy áramköröm fejlesztése okán szükségem volt arra, hogy az áramkörben helyet foglaló mikrovezérlő UART kommunikációját monitorozhassam. Mivel az áramkör egy autó motorterében kapott helyet így a szokásos módszer, miszerint rákötöm a laptopot egy UART/USB átalakítóval, nem működhetett. Egy külön kis elektronikára volt szükség, amely ott hagyható a figyelendő áramkör mellett.

    A soros-porti kommunikáció tárolására a legjobb megoldásnak egy microSD-kártyát gondoltam. Az interneten keresgélve találtam egy pontosan olyan áramkört amely megfelelne a célra. Ráadásul egy nyílt forrású, olcsón beszerezhető áramkörről van szó: https://learn.sparkfun.com/tutorials/openlog-hookup-guide
    Egyetlen, ám nagyon komoly hiányossága viszont van a fenti áramkörnek: mégpedig hogy csupán egy darab UART vezetéken szaladgáló karakterek loggolására alkalmas. Az elektronikám amelyhez a loggolásra szükségem volt, ott viszont a mikrovezérlő három modullal (GPS, GSM, WIFI) és egy másik mikrovezérlővel kommunikál négy külön UART-on. Mindenképpen szükségem volt arra hogy mind a négy UART loggolva legyen, ezért találtam ki a jelen áramkört.


    Sajnos a legkisebb lábszámú PIC amelyben négy UART periféria van, 44 lábú. A típusa (például): dsPIC33EP512GM304. A 44 láb ide, erre a célra bőven nagyon sok. Ráadásul valami hihetetlen oknál fogva sehogy sem tudtam működésre bírni ennek a típusnak az SPI perifériáját amely az SD-kártya kezeléséhez elengedhetetlen. Emiatt muszáj volt a jól bevált, kedvenc típuscsaládom egy példányát, a dsPIC33EP512MC806-ot használnom. Ennek még több lába van (64db), ezért az áramkör utánépítése sokaknak sajnos gondot okozhat, de csak ezzel a PIC-kel lehetett megoldani a négy soros port loggolását.

     


    Az áramkör működése különösebb magyarázatot úgy vélem nem igényel. Az áramkör a CS4 csatlakozón kapja a tápellátást amely 3V és 5,5V közti egyenfeszültség. 3,3V vagy kisebb bemeneti feszültség esetén R10-et (0Ohm) forrasszuk be, felette hagyjuk ki! A LED1-LED4 LED-ek az áramkör tápfeszültség alá kerülése után tízszer felvillannak, utána akkor villannak fel ha a CH1-CH4 csatornák valamelyikén karakterek érkeznek be. Értelem-szerűen a LED1 a CH1 csatornához tartozik, a LED2 a CH2-höz stb. A LED5 a LED1-LED4-ek villogása után kigyullad, majd ha minden SD-kártyával kapcsolatos művelet sikeresen lezajlott, akkor elalszik (gyakorlatilag csak egy pillanatra villan fel). Ha égve marad a LED5, az azt jelzi hogy valamilyen problémát észlelt az SD-kártya körül. Hogy pontosan mit, azt megmondja nekünk a mikrovezérlő! Mégpedig úgy, ha a TP1 mérőpontra (mely csak egy pici fóliasziget a panelon) ráakasztunk egy UART/USB átalakítót 115200 BAUD-ra állítva. Bekapcsoláskor ugyanis a PIC diagnosztikai üzeneteket küld ki magából a TP1 mérőpontra. Így néz ki egy hibamentes elindulás (példa):

     

    ##################################################
    Adjon az Isten, szebb jövőt!
    http://www.pa-elektronika.hu
    Release date: 2017.11.15.
    Program version: V0.3.8
    ##################################################
    SD-card detected
    SD-card initialized
    Open a configuration ("Log/config.dat") file...
    The configuration file is opened
    Configuration file read, processing ...
    CH1 on
    CH2 on
    CH3 on
    CH4 on
    CH1 timestamp on
    CH2 timestamp on
    CH3 timestamp on
    CH4 timestamp on
    CH1 baudrate=115200
    CH2 baudrate=115200
    CH3 baudrate=115200
    CH4 baudrate=115200
    Search for the last log file...
    The last logfile is 7.!
    Create a new log file...
    The new log file ("Log/Log_00008_CH1.txt") is created!
    The new log file ("Log/Log_00008_CH2.txt") is created!
    The new log file ("Log/Log_00008_CH3.txt") is created!
    The new log file ("Log/Log_00008_CH4.txt") is created!
    The main cycle starts!


    A négy csatorna baudrate-je külön-külön beállítható, és az egyes csatornák ki/be kapcsolhatóak ha esetleg nincs mindre szükségünk. (A CH1 nem kikapcsolható!) Sőt, minden csatornára (szintén külön-külön) bekapcsolható időbélyeg is! Mivel nincs RTCC a panelon, ezért az időbélyeg relatív, az áramkör tápfeszültség alá helyezése óta eltelt időt ([nap óra:perc:másodperc:millisec]) mutatja. Sajnos nem is túl pontosan, de a gyakorlatban teljesen használható.
    A SD-kátyának FAT fájlrendszerűnek kell lennie és létre kell rajta hoznunk egy „Log” nevezetű mappát (nagy L-betűvel!). Ebbe a mappába pedig egy „config.dat” fájlt kell létrehozni, melyben az UART logger beállításait adhatjuk meg az alábbi módon (példa):
    CH1_ON=1
    CH1_BAUDRATE=115200
    CH1_TIMESTAMP=1

    CH2_ON=0
    CH2_BAUDRATE=115200
    CH2_TIMESTAMP=0

    CH3_ON=1
    CH3_BAUDRATE=9600
    CH3_TIMESTAMP=1

    CH4_ON=1
    CH4_BAUDRATE=57600
    CH4_TIMESTAMP=0


    A baudrate esetében a következő értékek közül választhatunk: 300, 600, 1200, 1800, 2400, 4800, 7200, 9600, 14400, 19200, 38400, 57600, 78600, 115200, 128000, 230400, 460800 és 500000. Utóbbi három esetben azonban sajnos fals karaktereket loggol a PIC, ennek okára ha lesz időm majd rájövök és kijavítom egy újabb szoftververzióban (a hiba a V0.3.8-nál áll fenn). Ha nem adunk meg baudrate értéket vagy olyat adunk meg amely az előbbi felsorolásban nem szerepel, akkor az alapértékre áll be a baudrate amely 115200.
    A PIC a konfigurációs fájl beolvasása után megkeresi a CH1-hez tartozó legnagyobb sorszámú fájl amit a „Log” mappában talál, majd létrehoz minden bekapcsolt csatornának külön egy-egy, egyel nagyobb sorszámú txt kiterjesztésű fájlt. Tehát az egyes csatornákat külön-külön fájlokba loggolja. Mivel a CH1-et nem lehet kikapcsolni, ezért a CH1-nek minden bekapcsoláskor létrehoz egy új fájlt.


    A kis panelon nincs jelölve mert nem fért ki: A CH1 bemenet a CS2 csatlakozónak a nyák legközelebbi sarkától a második PIN (az első a GND!), a CH2 a következő, majd CH3 és CH4.
    Működés közben a LED5 kb tíz másodpercenként felvillan egy pillanatra, ekkor írja az adatokat ténylegesen az SD-kártyára a mikrovezérlő.


    A Chipcadben tudjuk beszerezni a mikrovezérlőt, az LDO-t és a microSD-kártya foglalatot. A passzív alkatrészeket pedig nagyjából bárhol. A nyáklap házilag (furatgalvanizálás nélkül) nem elkészíthető, ezért csak gyártatott panel jöhet szóba melyet tőlem (p.attila.mg[kukac]gmail.com) lehet beszerezni kemény 200Ft-os áron. A nyáklap egyébként mindössze 24,5x24,5mm méretű.

     

     

    A mikrovezérlő szoftvere pedig innen tölthető le:

    UART logger V0.3.8 (dsPIC33EP512MC806).hex


    Please publish modules in offcanvas position.