RS-485 Kom­mu­ni­ka­ti­ons­soft­ware

Hier soll nun kurz die Soft­ware beschrie­ben wer­den, über die ein Win­dows PC mit den Bus­teil­neh­mern über RS-485 kom­mu­ni­ziert. Es wur­de das freie und weit ver­brei­te­te Mod­bus-RTU-Pro­to­koll ver­wen­det. Es ist gut doku­men­tiert, wegen Pari­ty und 16-bit CRC hin­rei­chend feh­ler­re­si­stent und es gibt mit QMod­Ma­ster ein frei­es Win­dows-Pro­gramm, das bei der Imple­men­tie­rung und Feh­ler­su­che sehr hilf­reich ist. Sowohl für den Win­dows-PC wie auch für das Ardui­no Bio­top gibt es fer­ti­ge Software.

Vor­be­mer­kun­gen

Mit Ardui­no habe ich selbst nichts zu tun, ein­fach weil es das noch nicht gab, als ich zum ersten­mal mit Atmel Bau­stei­nen gear­bei­tet habe. Gele­gent­lich wer­de ich mir das mal anschau­en. Die Mod­bus-Biblio­thek für Win­dows habe ich mir einen hal­ben Tag lang ange­schaut und sie nicht zum Lau­fen bekom­men. Sie ist sicher gut und kann alles, aber die paar Funk­tio­nen die ich brau­che, habe ich dann doch sel­ber geschrie­ben. Das schien mir schnel­ler zu gehen, zumal die Funk­tio­nen auf der Gegen­sei­te, dem Atmel Bau­stein, schon fer­tig war und sich nicht grund­sätz­lich unter­schei­det. Damit ist nun die kom­plet­te Soft­ware sowohl auf der Host- wie auf der Device-Sei­te selbst­ge­schrie­ben und kann hier ohne Ein­schrän­kun­gen im Quell­text ver­öf­fent­licht werden:

Quell­text der Host-Software

Quell­text der Device-Soft­ware für den ATMEGA644PU

Wer will, kann bei­des ger­ne unein­ge­schränkt wei­ter­be­nut­zen, eine Garan­tie für die feh­ler­freie Funk­ti­on gibt’s natür­lich nicht. Es sind sicher­lich hier und da noch Feh­ler ein­ge­baut. Außer­dem ist nur ein Sub­set des Mod­bus-Pro­to­kolls imple­men­tiert, auch die eine oder ande­re Funk­ti­on, die in der Spec als „man­da­to­ry“ bezeich­net wird, ist nicht vor­han­den (z.T. imple­men­tiert, aber aus­kom­men­tiert da ungetestet).

Als Ent­wick­lungs­um­ge­bung für Atmel ver­wen­de ich „Atmel Stu­dio 7.0“, für Win­dows „VS Express 2013“. Bei­de Ver­sio­nen sind etwas älter, Atmel gehört inzwi­schen zu Micro­chip, und von VS Express gibt es neue­re Ver­sio­nen, die aber nicht mehr mit Win­dows 7 lau­fen, son­dern Win­dows 10 benö­ti­gen. Soll­te ich jemals auf Win 10 umstei­gen, wer­de ich mir eine neue­re Ver­si­on besor­gen. Es gibt im Moment für mich kei­nen Grund zum Umsteigen.

Bei­de Pro­gram­me sind sehr spe­zi­fisch für mei­nen Anwen­dungs­fall geschrie­ben, daher habe ich auch kei­ne aus­führ­ba­re Datei bei­gefügt. Die Quell­tex­te sol­len als Muster die­nen, wie man es machen kann, aber nicht muß. Das Win­dows Pro­gramm mag gleich­zei­tig als Bei­spiel die­nen, wie man die seri­el­le Schnitt­stel­le mit Win­dows-Funk­tio­nen bedient.

Alle Pro­gram­me sind in ANSI‑C geschrie­ben, der ATMEGA nutzt ein paar win­zi­ge Assem­bler-Funk­tio­nen. Für Win­dows wird ledig­lich das Win32-API ver­wen­det und ResE­dit als Res­sour­cen Edi­tor, weil die kosten­lo­se Ver­si­on von VS Express zumin­dest bis 2013 kei­nen Res­sour­cen Edi­tor dabei hatte.

Host-Soft­ware

Ganz phan­ta­sie­los habe ich die Host-Soft­ware Ser­Com genannt. Da zur Zeit nur der Anten­nen­um­schal­ter ange­schlos­sen ist, ist dies der erste Tab, der nach dem Start ange­zeigt wird:

Tab Antennenumschalter
Die Bedie­nung des Antennenumschalters

Hier wird ledig­lich eine der bis zu sechs Anten­nen aus­ge­wählt. Die Namen sind in der Regi­s­try kon­fi­gu­rier­bar und oben nur Bei­spiel ohne rea­le Bedeu­tung. Die momen­tan akti­ve Anten­ne wird mit dem Icon ange­zeigt, nur eine kann zu einem Zeit­punkt aktiv sein. Port Sta­tus ist eigent­lich eine ver­zicht­ba­re Dia­gno­se­mel­dung. Hier wird der phy­si­ka­li­sche Sta­tus des Ports A ange­zeigt, der die Relais ansteu­ert. Die bei­den Tabs „Rotor“ und „Anten­nen­tu­ner“ sind leer und hier nur Platz­hal­ter für zukünf­ti­ge Steue­run­gen, die am sel­ben Bus hän­gen sollen.

Mit dem Con­fig-Tab wird einer der Bus­teil­neh­mer konfiguriert:

SerCom Config
Ser­Com Config

Beim Start ohne Para­me­ter wer­den hier die Kon­fi­gu­ra­ti­ons­da­ten des PCs und des aus­ge­wähl­ten Devices ange­zeigt, also Baud­ra­te, Device ID und ver­wen­de­ter COM-Port. Wird Ser­Comm mit dem Par­am­ter „-c“ gestar­tet, läuft es im Kon­fi­gu­ra­ti­ons­mo­dus und die hier dun­kel geschal­te­ten Fel­der wer­den weiß und kön­nen geän­dert wer­den. In die­sem Tab wird ein Zäh­ler gezeigt, der angibt, wie oft das EEPROM pro­gram­miert wur­de, denn die Anzahl der Pro­gram­mier­zy­klen ist end­lich (aller­dings wer­den min­de­stens 100k-Zyklen garantiert).

Auch eine Uhr ist imple­men­tiert, deren Datum und Uhr­zeit hier gesetzt und aus­ge­le­sen wer­den kön­nen. Mit dem Wert bei „RTC cor­rec­tion“ kann im Con­fig-Modus ein Kor­rek­tur­wert ein­ge­ge­ben wer­den, mit dem eine Fre­quenz­ab­wei­chung des Quar­zes für die Uhr­zeit kom­pen­siert wird. Mit „Restart Device“ wird auf dem Device ein Watch­dog Reset pro­vo­ziert, also ein ech­ter Hard­ware-Reset. „Refresh“ liest die ange­zeig­ten Daten erneut aus dem Device aus.

Der Dia­gno­se-Tab zeigt eini­ge Daten an, die etwas über den Gesund­heits­zu­stand des Devices aussagen:

SerCom Diagnose
Ser­Com Diagnose

Zunächst wird der Typ des Moduls, sei­ne Takt­fre­quenz und die Ver­si­on der imple­men­tier­ten Soft­ware ange­zeigt. Ver­schie­de­ne Zäh­ler zei­gen dann die Anzahl der unter­schied­li­chen Resets, die Anzahl feh­ler­frei emp­fan­ge­ner eige­ner und frem­der Nach­rich­ten und die Anzahl von Kom­mu­ni­ka­ti­ons­feh­lern an. Auch die Ver­sor­gungs­span­nung und die Tem­pe­ra­tur auf der Device-Sei­te wer­den ange­zeigt. Trotz des nur etwa 30mA gro­ßen Ver­sor­gungs­stroms erwärmt sich das Board merk­lich. Nun­ja, bei 12V sind es ja auch immer­hin 360 mW. Der Tem­pe­ra­tur­sen­sor (TMP275) hat übri­gens eine Genau­ig­keit von 0.5 K und 116 K Auf­lö­sung. Daß drei Stel­len hin­ter dem Kom­ma ange­zeigt wer­den, deu­tet eine höhe­re Genau­ig­keit an.

Außer­dem wer­den die Namen und Zeits­tem­pel der Quell­da­tei­en und der Zeit­punkt des Com­pi­ler­laufs ange­zeigt. Auch hier lässt sich mit der Refresh-Taste der ange­zeig­te Inhalt erneu­ern. Durch Anklicken der „Con­ti­nuous“ Check­box wird der Refresh dau­er­haft aus­ge­führt. Das ist für Dau­er­tests hilf­reich. Ein über Nacht aus­ge­führ­ter Dau­er­test brach­te kei­nen ein­zi­gen Feh­ler her­vor. Daß die Feh­lerzäh­ler funk­tio­nie­ren, zeig­te aller­dings ein erster Test mit 100 W HF auf dem Antennenumschalter.

Seit eini­gen Tagen und Näch­ten ist die Soft­ware im Ein­satz und hat sich bewährt. Für das Inter­face zwi­schen dem USB-RS485-Wand­ler und dem Bus habe ich auch zum Ein­kop­peln der 12V Ver­sor­gungs­span­nung eine klei­ne Box gebaut:

RS485-PC-Box
RS485 PC-Inter­face Box.

Sie fügt noch­mal klei­ne Tief­päs­se in die Kom­mu­ni­ka­ti­ons­lei­tung ein und ent­stört die Ver­sor­gungs­span­nung eines exter­nen Stecker­netz­teils. Das Gehäu­se ist übri­gens ein sehr preis­wer­tes Euro­box-Gehäu­se, das ich auch für ande­re Din­ge ger­ne verwende.

Free Soft­ware Utilities

Here you can down­load some of my uti­li­ties. This site replaces the for­mer down­load page as of now. I will publish any new ver­si­on or new uti­li­ty here. It is just easier to maintain.

Par­Ser:

Par­Ser is a uti­li­ty to con­struct a non-stan­dard resi­stance or capa­ci­tance value from a set of stan­dard resi­stors or capa­ci­tors. Par­Ser sup­ports dif­fe­rent topo­lo­gies of up to three indi­vi­du­al com­pon­ents. Par­Ser can also cal­cu­la­te vol­ta­ge divi­ders and find a set of sui­ta­ble resi­stors. The mini­mum and maxi­mum shunt cur­rent can be spe­ci­fied as well as the nomi­nal load current.

Here is the Par­Ser Online Help.

ParSer_Executables (Ver. 1.03)

ParSer_Source (Ver. 1.03)

The name Par­Ser is mis­lea­ding. It stands for parallel/serial con­nec­tion of resi­stors or capa­ci­tors. I’m not very hap­py myself with this name, but now it’s out and I’m not going to chan­ge it.

Bin2C:

Bin2C is a uti­li­ty to con­vert bina­ry files to C source code. It pro­vi­des a simp­le way to inclu­de bina­ry files (e.g. images or audio files) in embed­ded pro­jects, which often do not sup­port any file system.

Here is the Bin2C Online Help.

Bin2C Exe­cu­ta­bles (Ver. 2.10)

Bin2C Source Files (Ver. 2.10)

Gene­ral Comments:

All uti­li­ties are writ­ten for Win­dows and should run on all cur­rent ver­si­ons. Plea­se let me know if you encoun­ter any pro­blems or if you have any recom­men­da­ti­on for impro­ve­ments. None of the uti­li­ties needs to be instal­led. Just copy the .exe file to your pre­fer­red path and remo­ve the file for unin­stal­ling it.
The uti­li­ties store some para­me­ters in the regi­s­try or in an ini-file. See the respec­ti­ve help file for details.

All files are com­pres­sed with 7‑zip.

I/O Board mit RS485 Schnittstelle

Es hat mich mal wie­der in den Fin­gern gekrib­belt. Nach­dem wir die ver­gan­ge­nen zwei Jah­re nur mit unse­rem neu­en Haus beschäf­tigt waren, muss­te ich mal wie­der ein klei­nes Board entwickeln.

Ich habe ja wie­der mit dem Ama­teur­funk ange­fan­gen und zwei Trans­cei­ver von Icom gekauft. Die Anten­nen­an­la­ge lässt aller­dings sehr zu wün­schen übrig. Ich will ver­schie­de­ne Anten­nen auf­bau­en, für Kurz­wel­le vor­läu­fig nur Mono- und Dipo­le. Da nicht jede Anten­ne ein eige­nes Kabel bekom­men kann, wer­de ich also einen Anten­nen­um­schal­ter instal­lie­ren müs­sen, der von der Sta­ti­on aus elek­trisch schalt­bar sein soll. Sowas kann man fer­tig kau­fen oder auch sel­ber­bau­en, aber auch die gekauf­ten brau­chen eine Steuerung.

Zur Kom­mu­ni­ka­ti­on zwi­schen Anten­nen­um­schal­ter und Shack bie­tet sich die RS485 Schnitt­stel­le an. Sie setzt auf einer asyn­chro­nen seri­el­len Schnitt­stel­le auf und unter­stützt Lei­tungs­län­gen von vie­len hun­dert Metern (bis 1,2 km nach der Norm) bei Baud­ra­ten bis 12 MBd. Durch die Ver­wen­dung eines Lei­tungs­paars im Gegen­takt wird eine hohe Stör­si­cher­heit erreicht. Ein Lei­tungs­paar gestat­tet die Kom­mu­ni­ka­ti­on im Halb­du­plex-Mode, für Voll­du­plex sind zwei Lei­tungs­paa­re nötig. RS485 ermög­licht auch den Auf­bau eines Bus­systems, bei dem bis zu 32 Teil­neh­mer ange­schlos­sen wer­den kön­nen. Bei der hier geplan­ten Anten­nen­um­schal­tung könn­ten also meh­re­re Anten­nen­um­schal­ter über ein ein­zi­ges Lei­tungs­paar ange­schlos­sen werden.

Weil ich gera­de noch eini­ge Exem­pla­re des Mikro­con­trol­lers in der Kiste lie­gen hat­te, habe ich ein klei­nes Board mit dem ATtiny1634 und einem RS485-Trans­cei­ver gebaut. Hier die KiCad 3D-Vorschau:

ATTINY1634
Unter­sei­te des RS485 Moduls mit einem ATtiny1634.
Oberseite
Ober­sei­te des RS485 Moduls.

Da die Umschalt­re­lais des Anten­nen­schal­ters typi­scher­wei­se mit 12V arbei­ten, ist auf der Ober­sei­te ein ein­fa­cher Line­ar­reg­ler imple­men­tiert. Es pas­sen 3V- und 5V-Typen. Da der 1634 bei 3V nur bis 8 MHz getak­tet wer­den kann, habe ich auf dem Pro­to­ty­pen 5V-Reg­ler ein­ge­lö­tet. Damit läuft der Con­trol­ler mit bis zu 12 MHz. Hier ist der Schalt­plan, es gibt kei­ner­lei erwäh­nens­wer­te Besonderheiten.

In der Wahl des Kom­mu­ni­ka­ti­ons­pro­to­kolls ist man ziem­lich frei, aber war­um etwas eige­nes erfin­den, wenn es schon weit­ver­brei­te­te Stan­dards gibt. Ich habe mich für den Mod­bus ent­schie­den, der auch bei­spiels­wei­se bei der Kom­mu­ni­ka­ti­on mit PV-Wech­sel­rich­tern ver­wen­det wird. Es gibt ein schö­nes Uti­li­ty für Win­dows, QMod­Ma­ster, das Mod­bus-Nach­rich­ten sen­den und emp­fan­gen kann. Das war sehr hilf­reich bei der Imple­men­tie­rung des Mod­bus Pro­to­kolls in den ATtiny1634. Ich bin noch nicht kom­plett mit der Imple­men­tie­rung fer­tig, daher will ich die Soft­ware im Moment noch nicht hier ver­öf­fent­li­chen. Das hole ich nach, wenn’s fer­tig ist. Da die wesent­li­chen Din­ge aber bereits funk­tio­nie­ren, hier mal nur kurz der Ressourcenverbrauch: 

Pro­gram Memo­ry Usa­ge : 2892 bytes 17,7 % Full
Data Memo­ry Usa­ge : 85 bytes 8,3 % Full
EEPROM Memo­ry Usa­ge : 2 bytes 0,8 % Full

Dar­an wird sich im End­aus­bau nicht mehr viel ändern. Viel­leicht braucht er mit wei­te­ren Funk­tio­nen 25 – 30% Flash Spei­cher, aber die vor­han­de­nen 16 kB wer­den auf jeden Fall aus­rei­chen. Wenn genü­gend Platz bleibt, wer­de ich die Sen­de- und Emp­fangs­puf­fer etwas ver­grö­ßern, was dann den Daten­spei­cher Ver­brauch um ein paar Pro­zent anstei­gen las­sen wird. Auch hier wird das 1 kB SRAM alle­mal ausreichen.

Über ein 25m Kabel lief die Kom­mu­ni­ka­ti­on bei 38 kBd wie erwar­tet meh­re­re Stun­den feh­ler­frei, aller­dings kann QMod­Ma­ster auch lei­der nur eine Nach­richt pro Sekun­de abset­zen. Das ist also nicht wirk­lich ein hoher Durch­satz. Auf der PC-Sei­te ver­wen­de ich übri­gens einen „WaveSha­re USB TO RS232 RS485 TTL Indu­stri­al Iso­la­ted Con­ver­ter“, der bis­her zuver­läs­sig funktioniert.