von Marc Niggemann

Dieses ist ein Projekt aus den Projektwochen meiner Schulzeit. Auf diesem baut unser Jugend forscht Projekt "Langzeit- Datenerfassung in einem chemischen Experiment" auf. Die C-Control ist vom Elektronik Versand Conrad. 

 

Inhaltsverzeichnis

 

Einleitung

2 Beschreibung C-Control

3. Zur Meßwerterfassung

4. Entwicklungsumgebung

4.1 Aufbau der Entwicklungsumgebung

4.2 Compilieren und Testen des Programms

 

5. Treiberbaustein ULN 2803 zur Verstärkung der Ausgänge

6. Programmieren einer Datenaufzeichnung

7. Aufbau zur Aufzeichnung mit dem c-Controller

7.1 Ausgabe der aufgezeichneten Werte im Hyperterminal

7.2 Auswertung mit Excel

 

8.  Aufzeichnung mit anderen Sensoren

9. Ungelöste Probleme

10.  Literaturverzeichnis

 

 

 

1 Einleitung

In diesem Projekt soll mit Hilfe der c-Control/Basic der Firma Conrad-Elektronic eine Spannungskurve aufgezeichnet werden. Dazu wird in dieser Arbeit zunächst der Controller erläutert. Im darauffolgenden Teil soll näher auf den logischen Aufbau des Programmes eingegangen werden. Weiter wird die Umsetzung in die Basic-Programmiersprache erklärt und in Beispielen angewendet. Das eigentliche Programm zur Datenaufzeichnung ist so weit mit Hinweisen aufbereitet, daß es sich auch von Unerfahrenen umschreiben läßt.

Diese Arbeit ist jedoch nicht als vollständige c-Control Einweisung gedacht. Sie beschäftigt sich primär mit der Langzeit-Datenerfassung.

 

 

2 Beschreibung C-Control

 

Der c-Controller ist ein eigenständiger Computer mit einer Taktfreqenz von 4 Mhz. Er hat einen 8k-byte EEPROM als Speicher. In ihm wird das Steuerprogramm gespeichert und bleibt somit auch bei einem Stromausfall erhalten. Im Speicher können auch Daten abgespeichert werden, die später an den PC übertragen werden sollen. Die 8k Speicher reichen normalerweise aus, da auch große Programme selten über 1k Speicherplatz kommen.

 

Als Eingänge besitzt der c-Controller 16 Digitalports, die eine Spannung <1V als L (low) und 5V als H (high) ausgeben. Ferner sind 8 8-Bit Analog-Eingänge vorhanden. Das bedeutet, daß ein analoger Wert im Bereich von 0V bis 5V erfaßt werden kann. Dabei wird das Intervall in 256 Schritte aufgeteilt; es ist als kein echter analoger Wert, sondern immer nur eine Annäherung.

 

Als Ausgänge können auch die 16 Digitalports benutzt werden. Dies ist davon abhängig, ob man im Programm einen Port als Ein oder Ausgang definiert. Allerdings hat der c-Controller nur 2 analoge Ausgänge, die wie die 8 analogen Eingänge aufgebaut sind. Wichtig ist, daß die Ausgänge nur mit 10 mV belastet werden dürfen. Es ist also meistens notwendig einen Transistorverstärker einzuschalten. Darauf wird in den nachfolgenden Kapiteln näher eingegangen.

Mit einem Applicationboard kann man den Controller aufrüsten. Auf diesem Board sind die Ausgänge als Pins im 2.54-Raster ausgeführt. Zusätzlich sind eine Tastatur und ein Display vorhanden. Die Tastatur belegt nur einen analogen Eingang, während das Display die Hälfte der Digitalports in Anspruch nimmt. Das LCD Display kann 2x 16 Zeichen darstellen.

Ein Nachteil des genannten Boards ist, daß die Ports auf sehr engem Raum ausgeführt sind und die analogen Ausgänge gar nicht vertreten sind. Die Ausgänge müssen direkt am Board angelötet werden. Dies stellt aber keinen großen Aufwand dar (Es sind an der unteren Steckreihe der 3. und 4. Ausgang).

Es gibt auch eine zweite Variante des Boards, auf dem die Ports alle getrennt aufgeführt sind. Anstelle des Displays und der Tastatur sind hier zwei Relais vorhanden. Auf beiden Boards ist aber ein Spannungseingang, der den Anschluß einer Versorgungsspannung von 8 bis 12V ermöglicht. Bei Betrieb ohne die Boards muß die Versorgungsspannung eine stabile 5V-Quelle sein.

Zur Übertragung der Daten ist eine serielle Schnittstelle vorgesehen. Die Verbindung kann entweder über ein mitgeliefertes Nullmodem-Kabel oder über eine Telemetrieeinheit, die eine Funkverbindung erlaubt, hergestellt werden.

 

 

3. Zur Meßwerterfassung

Das Programm soll über einen bestimmten Zeitraum eine Spannung erfassen, in eine andere Größe umrechnen und sie schließlich im EEPROM speichern. Nach Abschluß der Messung soll der c-Controller auf einen Tastenbefehl warten, bevor er die Daten über die serielle Schnittstelle ausgibt. Zudem soll der Controller eine Status-LED über einen Digitalport ansteuern.

Zur Sicherung, z.B. von Akkus bei einer Entladung, soll ein Relais bei definierten Werten abfallen. Dadurch kann man entweder den c-Controller vor zu hohen Spannungen oder den Akku vor Tiefenentladung schützen.

 

4. Entwicklungsumgebung

Das Programm muß mit dem dem c-Controller beiliegenden Basic-Entwicklungsprogramm geschrieben werden. Es ist nicht möglich eine niedrigere oder höhere Programm-Version zu benutzen. Dazu gehört auch, daß man einen Basic c-Controller nicht mit der Plus-Version programmieren kann. Die Plus-Version ist die ursprüngliche Programmiersprache, mit der der c-Controller von Conrad programmiert wurde. In ihr verwendet man keine Basic Befehle, sondern arbeitet mit Symbolen, die man logisch miteinander verknüpfen kann. Mit Plus ist prinzipiell all das möglich, was auch mit dem Basic c-Controller möglich ist. Die Plus Version ist einfach und kann auch von Anfängern schnell verstanden werden. Manche Probleme lassen sich einfacher in Basic programmieren, andere dagegen einfacher in Plus. Es kommt auf die Anwendung an, für die man den c-Controller benötigt sowie auf die eigenen Vorkenntnisse.

 

4.1 Aufbau der Entwicklungsumgebung

In der Entwicklungsumgebung hat man ein Fenster, in dem die Befehlszeilen stehen. In Hochkommata (‘’)eingeschlossen sind Hinweise, die nur zur Information des Betrachters dienen und keinen Speicher im Chip beanspruchen.

 

4.2 Compilieren und Testen des Programms

Compilieren ist das Umsetzen aus der Basicsprache in die Maschinensprache, die der c-Controller versteht. An dieser Stelle möchte ich erwähnen, daß der c-Controller auch in Assembler programmiert werden kann. Dies beschleunigt die Berechnung des geschriebenen Programmes um den Faktor 1000. Aber dies kommt nur für sehr weit fortgeschrittene Programmierer in Frage und ist für den Normalanwender zu komplex.

Jedes in Basic verfaßte Programm in der Entwicklungsumgebung muß compiliert werden. Erst dann kann es auf den c-Controller übertragen werden. Nach diesem Schritt ist es auch möglich, das Programm zunächst virtuell in der Entwicklungsumgebung zu testen. Das hat den Vorteil, daß ein Logikfehler vorzeitig erkannt werden kann. So muß nicht mühsam im Programm nach einem Fehler gesucht werden, der dann schließlich am Versuchsaufbau lag wie z.B. durch Benutzung eines falschen Ports.

Benutzt man nun den Befehl "Ausführen" in der Entwicklungsumgebung, geschieht zunächst nichts Sichtbares. Um den Programmablauf verfolgen zu können, muß man sich erst die entsprechenden Fenster auf den Bildschirm holen. Es gibt für jede Funktion ein eigenes Fenster (Digitalports, Analogports, Datenaufzeichnung, und Datenausgabe)

Die Digitalports können angeklickt werden und leuchten grün, während Ausgänge einen roten Rand haben und bei einem H-Wert rot leuchten. Die Analogwerte können mit der Maus geändert werden. Die analogen Ausgänge werden dann mit einem roten Balken dargestellt. So ist es möglich, alle Reaktionen visuell und übersichtlich zu testen.

 

 

5. Treiberbaustein ULN 2803 zur Verstärkung der Ausgänge

 

Die Ausgänge des c-Controller können nur mit 10 mA belastet werden. Um Glühbirnen, Motoren oder Relais anzusteuern, muß eine Transistorverstärkerschaltung aufgebaut werden. Das IC ULN2803 ist eine Verstärkerschaltung, die es erlaubt, die Spannung vom Controller in eine Spannung von bis zu 20 V umzuwandeln. Es können maximal 8 Geräte geschaltet werden, die aber zusammen nicht mehr als 1A benötigen.

 

6. Programmieren einer Datenaufzeichnung

Das nachfolgende Programm kann direkt in der Entwicklungsumgebung compiliert werden und auf den c-Controller übertragen werden.

 

 

 

'Aufzeichnung mit Ausgabe version 10.1'

 

 

'Programm starten: Port 1 und 2 müssen high sein '

' der AD-Port [1] muß über 10 und unter 250 Einheiten sein'

' max 3250 Werte'

define port port[1]

define reset port[2]

define relais port[3]

define schutzanzeige port[4]

define schutzanzeigeII port[5]

define ein AD[1]

define ein2 AD[2]

define zeit word[1]

define zeit2 word[2]

define wert word[3]

define wert2 word[4]

define sekunden word[5]

zeit = 0

relais =1

open# for write

#loop1

pause 50 'Aufzeichnungs Zyklus 50 =1s'

if zeit > 300 then goto warte

if ein > 250 then schutzanzeige = 1

if ein2 > 250 then schutzanzeige = 1

if ein > 250 then goto schutz

if ein2 > 250 then goto schutz

'if ein < 10 then schutzanzeigeII = 1'

'if ein < 10 then goto schutz'

if reset>= 0 then goto schutz

zeit = zeit +1

looktab xTab, ein, wert 'aufzeichnung der Werte'

print# wert

looktab xTab, ein2, wert2

print# wert2

goto loop1

#schutz

relais =0

beep 300,10,3

if port < 0 then goto schutz

#warte

beep 800, 10, 70

if port < 0 then goto warte

close#

open# for read

print "Es wurden ";zeit-1;" Werte aufgezeichnet"

print "Wert von Sensor I [mV]"

zeit2 = 0

#loop2

input# wert

print wert

input# wert2

zeit2 = zeit2 +1

if zeit2 <zeit then goto loop2

close#

print "Wert von Sensor II [mV]"

open# for read

zeit2 = 0

#loop3

input# wert

input# wert2

print wert2

zeit2 = zeit2 +1

if zeit2 < zeit then goto loop3

relai = 0

end

table xTab "mV.tab" ' Tabelle'

table yTab "yA.tab"

'by M. Niggemann A. Koslowski und B. Trzcinski aus dem Technik LK 13 der Friedensschule Hamm'

Erläuterungen:

Mit den im Programm eingestellten Parametern zeichnet der c-Controller 300 Sekunden im Intervall von 1 Sekunden zwei Werte auf, die an Analogeingang 1 und 2 anliegen.

Zunächst wurde mit dem Befehl define jedem im Programm benutztem Ein- und Ausgang ein Name zugewiesen. Es ist nicht möglich, die Namenszuweisung im Verlauf des Programms zu ändern!

In unserem Fall ist der Analogeingang 1 (AD[1]) als "ein" definiert, der Digitalport 1 als "port" und der Digitalport 2 als " reset". Auch alle Variablen müssen als byte oder word und zusätzlich mit einem Namen definiert werden. Im diesem Programm ist die Variable, die die Zeit zählt, mit dem Namen "zeit" und als word definiert. Der Unterschied zwischen byte und word ist die Größe. Byte-Variablen können nur Werte von 0-255 haben, währen die Wordvariablen (Integer) Werte von -32768 bis 32767 aufnehmen können. Da dieses Programm aber eine maximale Zeit von 600 darstellen soll, muß sie als word definiert sein.

In dem geschriebenen Programm ist es unwichtig, wie viele Leerzeichen zwischen den Befehlen stehen. Aber eine Befehlskette kann nicht über zwei Zeilen gehen!

In der folgenden Zeile ist die Variable "zeit" gleich 0 gesetzt worden. Die folgende Zeile setzt den Port, der mit der Variablen "Relais" definiert ist H, das bedeutet, ein Relais, das an diesem Port angeschlossen ist, wird zu Programmbeginn aktiviert. Damit kann z.B. ein Akku mit dem Verbraucher verbunden werden, der aber bei bestimmten Schutzverletzungen im System getrennt werden kann.

Mit dem Befehl "open# for write" wird der c-Controller auf eine Datenaufzeichnung vorbereitet.

Der Befehl "# ..." markiert Programmpunkte, die mit dem Befehl "goto" angesprungen werden. Der Name, der nach der Raute folgt, muß nicht noch einmal definiert werden.

Nun wird die Berechnung des Programmablaufes mit dem Befehl "pause..." unterbrochen. Die 250 bedeutet eine Pause von 250 mal 20ms also 5s. Die kleinste Pause beträgt also 20ms.

Als nächstes wird zur Variablen "zeit" die Zahl 5 addiert. Diese Zeit sollte immer gleich der der Pause sein, da ansonsten die Ausgabe nicht mit den aufgezeichneten Werten übereinstimmt.

Befehle, die mit "if" anfangen, sind Bedingungsbefehle. Die Zeile "if zeit > 605 then goto warten" bedeutet "wenn die Variable ´zeit´ größer als 605 ist, dann gehe zum Punkt `warte`". Mit dem Befehl wird erreicht, daß der Schreibvorgang nach 600s abgebrochen wird.

Die nächste if-Zeile bewirkt, daß die Variable "Schutzanzeige" geschaltet wird, eine LED könnte über den angesprochenen Port zum Leuchten gebracht werden. Durch die nächste Zeile wird der Aufzeichnugsvorgang unterbrochen und zum Punkt "schutz" gesprungen.

Durch den letzten If-Befehl wird der Port "reset" abgefragt. Ist dieser H, wird der Ablauf ebenfalls unterbrochen.

Erst danach wird mit dem Befehl "looktab Tabellenname, Eingangswertname, Aufzeichnungswertname" der am AD[1] anliegende Wert gemäß einer Tabelle umgerechnet und in einem Wert wie mV einer weiteren Variablen zugeordnet. In diesem Programm wird der Wert "ein", der zwischen 0 und 255 liegt, in die physikalische Große mV umgerechnet. Der folgende Befehl "print#..."schreibt den "wert" in das EEPROM der c-Control.

Es folgt der Befehl "goto" ohne if-Bedingung. Er schließt den Kreislauf und läßt den c-Controller solange Daten aufzeichnen, bis eine if-Bedingung erfüllt ist.

Ist der c-Controller nun mit der Aufzeichnung fertig, so wartet er solange bis der "port" L geworden ist und gibt dann erst die Daten aus. Daß der Port L anstelle von H werden muß, hat den Vorteil, daß alle Ports des c-Controllers durch einen Pull-up-Widerstand H sind, solange sie nicht mit Minus verbunden sind. Ein Taster, der den Port mit Minus verbindet, kann dann die Bedingung erfüllen.

Zu der Datenausgabe muß gesagt werden, daß man das Datenende auch mit einem anderem Befehl überprüfen kann.(siehe Hilfe). Wir haben dieses Verfahren so konzipiert, daß die Variable Zeit wieder Null ist und nach einer Datenausgabe um 5 erhöht wird. Das hat den Vorteil, daß man die Zeit auch mit ausgeben lassen kann, wenn bei dem Befehl "Print" hinter wert mit einem Komma "zeit" steht. Das Problem ist, daß bei einer späteren Bearbeitung mit Excel die Zeit nicht in einer extra Spalte aufgeführt ist.

Bevor der c-Controller die Daten ausgeben kann, muß die Aufzeichnung mit dem Befehl "close#" geschlossen werden. Anschließend muß die Aufzeichnung mit dem Befehl "open# for read" für die Ausgabe vorbereitet werden.

Die Befehle "input# wert" und "print#" sorgen dafür, daß die Daten nacheinander über die serielle Schnittstelle ausgegeben werden. Dabei werden nicht alle Daten auf einmal übertragen, sondern einzeln. Nachdem alle ausgegeben worden sind, ist das Programm beendet.

Der letzte Befehl verweist auf die Umrechnungstabelle. Sie muß sich im gleichen Verzeichnis wie das geschriebene Programm befinden. Eine Beispieldatei ist hier downzuloaden. Sie ist für den Spannungssensor 20V ausgelegt und gibt die Spannung mit einer Genauigkeit von 16 mV wieder.

 

 

 

7. Aufbau zur Aufzeichnung mit dem c-Controller

Wenn der c-Controller mit den Jumpern richtig konfiguriert ist, sollte es kein Problem darstellen, das Programm zu übertragen. Wenn der PC den c-Controller nicht finden sollte, kann es daran liegen, daß der Comport falsch angegeben ist, oder das Kabel ist falsch herum aufgesteckt worden. In keinem Fall wird die Einheit aber dabei beschädigt.

Für den ersten Test sollten keine Sensoren angeschlossen werden. Wenn die rote LED auf dem Controller blinkt, ist der Controller in Ordnung.

Nach dem Test wird als nächstes der Spannungssensor angeschlossen oder direkt an einem AD-Eingang eine Information anlegt. Hierbei muß darauf geachtet werden, daß die Spannung auf keinen Fall die maximale Spannung von 5V überschreitet. Wenn man den Sensor nun mit einem Labornetzgerät anspricht, kann durch Verändern der Spannung an Netzgerät eine Ladekurve simuliert werden.

Hat der c-Controller die Versuchsmessung abgeschlossen, können die Ergebnisse ausgegeben werden.

 

7.1 Ausgabe der aufgezeichneten Werte im Hyperterminal

Die Daten, die der c-Controller über die serielle Schnittstelle ausgeben kann, werden im Hyperterminal von Windows 95 empfangen. Das Programm befindet sich unter Zubehör/Hyperterminal. Öffnet man den Button Hypertrm, wird man gefragt, ob man ein neues Modem einrichten möchte. Verneint man diese Frage, erscheint eine neues Fenster ihm wir nach einer Bezeichnung für die Verbindung gefragt. Geben Sie dort einen Namen ein und bestätigen Sie. Nun stellen sie bei dem Feld "Verbindung über" den entsprechenden Com-Port ein. Es erscheint ein Fenster, in dem die Einstellungen zur Übertragung eingegeben werden müssen. Im Normalfall muß man nur die Bits pro Sekunde auf 9600 stellen.

Wenn nun der c-Controller angeschlossen ist, baute er eine Verbindung auf. Sollen nun die Daten aus dem Speicher ausgegeben werden, muß der Port 1 des c-Controllers mit Ground verbunden werden. Darauf gibt er die Daten aus, und sie erscheinen im nächsten Augenblick auf dem Bildschirm. Es ist wichtig, daß die Daten untereinander ausgegeben werden, da sie ansonsten nicht mit Excel verarbeitet werden können. Ist dies nicht der Fall kann man im Hyper-Terminal mit dem Befehl Eigenschaften/Einstellungen/ASCII-Konfiguration den Zeilenvorschub einstellen. Mit dem Befehlen "Alles markieren" und "Kopieren" lassen sich die Daten in die Zwischenablage des PCs ablegen.

 

7.2 Auswertung mit Excel

Excel eignet sich besonders gut für die Auswertung, da es als Tabellenkalkulation vielseitige Möglichkeiten bietet.

Um die kopierten Daten aus der Zwischenablage in Excel zu bringen, benutzt man den Befehl "Bearbeiten/Einfügen". Es sollten nun alle Daten untereinander in Excel stehen. Markiert man sie und öffnet eine entsprechende Tabelle, erscheint das gewünschte Diagramm. Es ist auch möglich, mit einem Programm die Daten direkt aus dem c-Controller in Excel zu importieren.

Die Abb. 7 und 8 zeigen 2 Diagramme, die mit dem c-Controller aufgezeichnet sind. In beiden Fällen war eine 1.2V Batterie an einen Motor angeschlossen. Der rapide Abfall der Spannung zeigt, daß der Akku sehr leer war und nach 30s keine ausreichende Spannung mehr lieferte. In diesem Fall hätte ein Relais den Akku trennen können.

Ist das Aufzeichnungsintervall ungleich 1, so muß neben der Datenreihe vom c-Controller eine zweite Reihe aufgezogen werden, die die Zeit zum jeweiligen Meßzeitpunkt angibt. Schreibt man in das erste Feld 0 und ins nächste 5, markiert diese und zieht sie nach unten, wird die Reihe weitergeführt. Somit lassen sich einfach die Werte erstellen. Dies würde einer Kurve entsprechen, die alle 5s einen Meßwert aufgezeichnet hat.

 

 

8.  Aufzeichnung mit anderen Sensoren

Es gibt eine Vielzahl von Sensoren, die an dem c-Controller angeschlossen werden können. Die meisten sind zu Erfassung von Wetterdaten gedacht und stammen ursprünglich von der Conrad Wetterstation, die mit dem gleichen Controller ausgestattet ist. Beim Luftdrucksensor wird der Luftdruck in eine Spannung von 0 bis 5V eingeteilt und über einen analogen Eingang an den c-Controller angelegt. Alle anderen Sensoren basieren auf dem gleichen Prinzip. Der c-Controller ordnet über eine Tabelle digitale und analoge Werte zu. Für die angebotenen Sensoren, bis auf den Strom- und Spannungssensor, sind Tabellen vorgegeben. Es ist auch möglich Sensoren selbst zu konstruieren. Sie müssen den erfaßten physikalischen Wert in eine Spannung von 0 -5V umsetzen.

Um die Tabelle anzupassen, haben wir den Inhalt der Tabelle kopiert und in Excel eingefügt. Sie besteht aus 256 Werten, die untereinander stehen. Nun haben wir eine Wertereihe aufgestellt, die auch 256 Werte enthält und diese anstelle der Werte der Barotabelle eingefügt und abgespeichert. Nach mehrmaliger Überprüfung der realen Werte und der aufgezeichneten haben wir eine Tabelle, die auf 16 mV genau ist. Mit diesem Verfahren lassen sich Tabellen für selbst gebaute Sensoren leicht erstellen.

 

9. Ungelöste Probleme

Während der Arbeit mit dem c-Controller sind Probleme aufgetreten, die bis jetzt nicht gelöst worden sind. Für den Fall, daß jemand Lösungen hat, bitten wir um Unterstützung.

 

Probleme:

Im Hyperterminal kann man die Daten empfangen, aber wie lösche ich die Daten? Eine Lösung ist der Aufbau einer neuen neue Verbindung, aber das ist unpraktisch.

Wir sind auch an jeder Art von Programmen interessiert, die für den Controller geschrieben worden sind!

 

10.  Literaturverzeichnis

Kainka: Messen, Steuern, Regeln mit c-Control/Basic, o.O., o.J.

 

 

Anhang: