RS-232-IO-Board für ProfiLab

mit Atmel-Mikrocontroller ATmega32

bearbeitet 30.06.2007

(Software by ExpertProfi 2007)

Mit einem handelsüblichen USB-RS232-Adapter auch per USB zu betreiben.

Mit digitalen IO´s, ADC, Timer/Counter, etc. ist der Controller als preiswertes Interface für ProfiLab recht interessant.

Man nehme...

- Das Controllerboard von Deltawave-Computer (Ebay ca. 30 Euro) oder ein ähnliches Board mit Grundschaltung

- Das Datenblatt (engl.) des ATmega 32 und ein einfaches Tutorial

- Bascom AVR Basic (kostenlose Demo) zum Compilieren der 'Firmware'

- Atmel AVR Studio 4 zum Flashen des Controllers (kostenlose Registrierung erforderlich)

- Eine einfache Firmware und ein paar ProfiLab 4.0-Beispiele für IO, ADC und Timer

Zum Anschluss des DeltaWave-Boards braucht man noch ein Nullmodemkabel (GND, TxD und RxD gekreuzt reicht). Alle Deltawave-Boards die ich bekommen habe waren übrigens auf 9600 Baud eingestellt, statt 1200 Baud wie auf dem Beipackzettel angegeben. Einen Programmierdongle braucht man bei Deltawave-Boards nicht unbedingt, weil schon ein Bootloader installiert ist, so dass man den Controller einfach über RS232 neu programmieren kann. Ein RESET-Taster ist dabei sehr hilfreich. Nach einem Reset ist der Bootloader ca. 5 Sekunden aktiv.

________________________________________________________________________________________________________________________________________________

Die 'Firmare'

Die Idee ist per RS-232 direkt die Hardware-Register des Controller zu lesen und zu beschreiben (ähnlich Peek und Poke). Man braucht dazu nur nachstehendes Programm in den Controller zu übertragen und kann dann mit ProfiLab (oder einer Programmiersprache) direkt auf die Register (ADC,MUX,PORTS,TIMER, etc.) zugreifen. Leider habe ich das Datenblatt nicht in deutscher Sprache gefunden. Das Verständnis der Funktionsweise der Register ist aber unerlässlich!

Die Registertabelle ist auf Seite 327 des Datenblatts zu finden.  Spalte 1 der Tabelle nennt die Adressen der Register.  Es müssen die Adressen in Klammern verwendet werden, z.B. ($3B) für Register PORTA.

' Peek und Poke für AVR-Hardwareregister per RS232 (19200,8,N,1)
' Zum Setzen eines Registers vier <Byte> per RS232 an den AVR senden:
' <"P"> + <"O"> + <Adresse> + <Wert>
' Zum Lesen eines Registers drei <Byte> per RS232 an den AVR senden:
' <"P"> + <"E"> + <Adresse>
' Der AVR sendet dann ein <Byte> mit dem angeforderten Registerwert.


$regfile = "m32def.dat"   ' ATmega32
$crystal = 8867239        ' Quarzfrequenz 8.867239 MHz ggf. anpassen !
$baud = 19200             ' Die Baudrate
$hwstack = 32             ' default use 32 for the hardware stack
$swstack = 10             ' default use 10 for the SW stack
$framesize = 40           ' default use 40 for the frame space

Config Serialin = Buffered , Size = 20 ' RS232 input buffer
Enable Interrupts         ' für RS232 buffer

Dim Adr As Byte   ' Registeradresse
Dim Dat As Byte   ' Registerinhalt
Dim Cmd As String * 1  ' Kommando

Do    ' Endlos-Schleife:

   If Waitkey() = "P" Then ' "P" empfangen?
      Cmd = Waitkey()
      If Cmd = "E" Then         ' "E" empfangen? -> Peek
         Adr = Waitkey() ' Registeradresse empfangen
         Dat = Inp(adr)  ' Register auslesen
         Print Chr(dat); ' und zum PC senden
      End If
      If Cmd = "O" Then         ' "O" empfangen? -> Poke
         Adr = Waitkey() ' Registeradresse empfangen
         Dat = Waitkey() ' Wert empfangen
         Out Adr , Dat  ' Wert ins Register schreiben
      End If
   End If

Loop

End

_______________________________________________________________

Zum Deltawave-Board:

Da die Anleitung zum Board für Anfänger ein bischen kurz geraten sein könnte, hier ein kleiner Wegweiser. So kann man vorgehen (muss man aber nicht):

- Versorgung: z.B. mit Steckernetzteil (9V, 500mA, DC). Der Anschluss ist auf dem Foto mit Krokoklemmen zu sehen. Weiss=Plus, Schwarz=Masse. Ca. 5 Sekunden nach dem Einschalten sollte auf dem Display eine Laufschrift 'DeltaWave...' usw. erscheinen.

- Resettaster: Links unten auf dem Board ist ein Pfostenanschluss mit nur 2 Pins. Hier einen Resettaster anschliessen.

- Verbindung zum PC: Dei Verbindung muss mit einem Nullmodemkabel hergestellt werden. Die Verbindung lässt sich leicht prüfen, in dem man ein Terminalprogramm startet (.z.B. Hyperterminal). Solange die Laufschrift im Display läuft, wird der Text auch auf die RS-232 ausgegeben. Die Einstellung 9600,8,n,1, kein Handshake funktioniert bei allen Boards, die ich von Deltawave habe. Auf dem Beipackzettel steht zwar 1200 Baud, aber das ist wohl ein Tippfehler. Sobald der Text lesbar im Terminalprogramm ausgegeben wird, hat man die richtige Einstellung gefunden. :-) Damit ist die erste Inbetriebnahme abgeschlossen. (Nicht vergessen die Terminalverbindung danach wieder zu schliessen!)

- BASCOM: Installieren, starten und obigen Quelltext (Peek_Poke.bas) öffnen. In die Zeile $crystal = 8867239 muss unbedingt die richtige Quarzfrequenz eingetragen werden! Die sollte auf dem Quarz aufgedruckt sein. Der Quarz ist die kleine, silberne Konservendose, die ganz unten in der Mitte auf dem Board eingelötet ist ;-). Dann kann man das Programm mit der Taste F7 kompilieren. Das Ergebnis einer erfolgreichen Kompilation ist eine Datei PEEK_POKE.HEX, die ím gleichen Ordner wie die Quelldatei liegen müsste. (Anhand von Datum und Zeit der HEX-Datei sollte man nochmals überprüfen, dass die Datei wirklich neu kompiliert worden ist.)

- Atmel AVR Studio 4: Mit diesem Programm kann nun die HEX-Datei in den Controller übertragen werden. Dabei kommt der Bootloader des Boards zum Einsatz. Dieser Weg hat den Vorteil, dass man einerseits keinen Programmierdongle braucht. Ausserdem braucht man sich nicht um die Fusebits zu kümmern und es besteht somit nicht die Gefahr, sich mit falsch gesetzen Fusebits den Controller zu 'zerschiessen'.

AVT Studio starten. Den WELCOME-Dialog kann man canceln. Jetzt muss man den Controller resetten und hat danach etwa 5 Sekunden Zeit den Menüpunkt "Tools->AVR Prog..." aufzurufen (<Alt><T>, <A> per Tastatur). Nur in dieser Zeit (5 Sek. nach einem Controller-RESET) kann eine Verbindung mit dem Bootloader hergestellt werden. Wenn dies gelungen ist, muss sich der Dialog 'AVRProg' öffnen.

In der Rubrik 'HEX-FILE' wählt man nun mit dem Knopf 'BROWSE...' die frisch kompilierte Datei PEEK_POKE.HEX aus. Dann braucht man nur noch in der Rubrik 'FLASH' den Knopf 'PROGRAM' zu drücken, und zu warten bis die Übertragung zum Controller abgeschlossen ist. Zum Schluss muss man den Dialog nur noch schliessen(!) und den Controller abermals resetten. Damit ist dann das 'ProfiLab-Interface' bereit für den Einsatz.

Zu den ProfiLab-Beispielen schreib' ich dann vielleicht später nochmal ein paar Zeilen.

 

Eigene Homepage, kostenlos erstellt mit Web-Gear

Verantwortlich für den Inhalt dieser Seite ist ausschließlich der Autor dieser Webseite. Verstoß anzeigen