Zusätzlich wird mit den 120 Leuchtdioden auf einer Ping-Pong-Platine während des ganzen Vorgangs die jeweilige Anzahl der Spielsteine angezeigt.
Mit SW1(rechts) lässt sich die „Anlage" z. B. bei auftretenden Störungen zurücksetzen (beide Motoren aus, Auf dem LED-Display werden die Anfangswerte 0 angezeigt.
...
Anfang:
'beide Motoren aus
Reset Portb.0
Reset Portb.2
Reset Portb.3
Reset Portb.0
B_hell = 0
B_dunkel = 0
Put #1 , B_hell
Put #1 , B_dunkel
If Pind.2 = 0 Then
Goto Anfang
Else
Goto Grund_pos
End If
...
Beim Betätigen des Starttasters SW2 auf der oben erwähnten Experimentierplatine fährt der Schieber vor und befördert dabei den gerade im Magazin an unterster Stelle liegenden Spielstein bis unter einen optischen Sensor.


Aus den Datenblättern des Bauteils ist zu entnehmen, dass die Ausgangsspannung in einem bestimmten Bereich vom Abstand des Sensors zu einer reflektierenden Fläche abhängig ist.
Die Spannung zwischen dem Emitter des Fototransistors und Masse(GND) wird mit einem Operationsverstärker vergrößert. Die am Ausgang desselben anstehende Spannung wird dem Eingang ADC6 des Atmega88 auf der oben genannten Experimentierplatine angeboten.
Der CNY70 befindet sich auf einer kleinen rechteckigen Platine, die so zwischen Bausteinen von Fischertechnik eingeklemmt ist, dass sie nach unten „sieht".
Am Ausgang des Operationsverstärkers liest der Atmeag88 bei einem Abstand von 10mm zu einer weißen Fläche einen ADC-Wert etwa 90 ein. Dies wurde zuvor mit einem kleinen Programm in Bascom-AVR herausgefunden. Liegt ein Spielstein unter dem Sensor, verringert sich der Abstand desselben zum reflektierenden Objekt.
Bei einem ADC-Wert von etwa 340 wird vom Mikrocontroller ein heller Stein „erkannt" und bei einem Wert von kleiner als 40 ein dunkler Stein.
...
Adw = Getadc(6)
Ad_test = Adw
'Fall 1
'Wenn Bereich unter Sensor leer, dann Schieber
'wieder in Grundposition fahren
If Ad_test < 300 And Adw > 60 Then
Goto Grund_pos
End If
'Fall 2
'dunkler Stein, Adw < 40
Ad_test = Adw
If Ad_test < 40 Then
Goto Schritt3a
End If
'Fall 3
'heller Stein
Ad_test = Adw
If Ad_test > 300 Then
Goto Schritt3b
'sonst zurück zum Beginn
End If
...
In einem weiteren Schritt wird für einen dunklen Spielstein ein Merker_h zurückgesetzt und ein Merker_d gesetzt. Außerdem wird die Variable B_dunkel um eins erhöht (inkrementiert).
...
Schritt3a:
If Pind.2 = 0 Then
Goto Anfang
End If
'Variable B_dunkel um 1 erhöhen
Incr B_dunkel
Reset Merker_h
Set Merker_d
'schieber weiter nach links
Goto Schritt4
...
Die Programmzeilen für den Ablauf nach dem Erkennen eines hellen Spielsteins sind ähnlich gestaltet.
Der Spielstein, der gerade unter dem optischen Sensor überprüft worden ist, wird nun vom Schieber bis auf das Förderband vorgeschoben.
Dieser wird bis an seine Grundposition zurückgezogen. Ein möglicherweise noch im Magazin vorhandener Stein kann so auch nach unten fallen und „warten", bis er selbst vom Schieber „erfasst" wird.
Handelte es sich bei dem gerade überprüften Spielstein um ein helles Exemplar, wird dieses mit einem Förderband (Motor M1) bis zu einem dafür vorgesehenen Behälter transportiert.
Ein dunkler Spielstein wird in entgegengesetzter Richtung zu einem zweiten Behälter transportiert.
Der ATMEGA88 veranlasst zusätzlich zu seinen anderen Steuerungs- und Überwachungsaufgaben den Mikrocontroller auf einer Ping-Pong-Platine, die Anzahl der hellen und der dunklen Spielsteine jeweils aktuell anzuzeigen.
Der Mikrocontroller auf einer Ping-Pong-Platine empfängt über seine serielle Schnittstelle (Portd.0) vom Atmega88 über dessen Pin Portb.4 (Software UART) zwei Bytes, von denen das eine oben und das andere unten auf dem LED-Display im HEX-Format dargestellt wird.
..
Anfang:
Dat1_byte = 0
Dat2_byte = 0
'Reihenfolge wichtug!
Gosub Hex2_dat
Gosub Hex1_dat
Do
Inputbin Dat1_byte
Inputbin Dat2_byte
Gosub Hex2_dat
Dat = Dat1_byte
Gosub Hex1_dat
Loop
'Darstellung von Byte1 oben im HEX-Format
Hex1_dat:
'in den Spalten 1 - 6 oben "H:" und unten "D:" darstellen
Leds(1) = 30 + 960
Leds(2) = 4 + 576
Leds(3) = 30 + 384
Leds(4) = 0 + 0
Leds(5) = 20 + 640
Leds(6) = 0 + 0
H2 = Dat1_byte And 240
Shift H2 , Right , 4
Zeichen_o = H2
Gosub Zeichen_zo
Leds(7) = Splt1o + Leds7u
Leds(8) = Splt2o + Leds8u
Leds(9) = Splt3o + Leds9u
H1 = Dat1_byte And 15
Zeichen_o = H1
Gosub Zeichen_zo
Leds(10) = Splt1o + Leds10u
Leds(11) = Splt2o + Leds11u
Leds(12) = Splt3o + Leds12u
Return
'Darstellung von Byte2 unten im HEX-Format
Hex2_dat:
Dt_h2 = Dat2_byte And 240
Shift Dt_h2 , Right , 4
Dt_h1 = Dat2_byte And 15
Zeichen_u = Dt_h2
Gosub Zeichen_zu
Leds7u = Splt1u
Leds8u = Splt2u
Leds9u = Splt3u
Zeichen_u = Dt_h1
Gosub Zeichen_zu
Leds10u = Splt1u
Leds11u = Splt2u
Leds12u = Splt3u
Return
...
Es folgen nun u. a. Unterprogramme für die jeweilige Darstellung der Zeichen im HEX-Format. Die Zeichen wurden mit dem Programm „Supermustergenerator" entworfen, das hier heruntergeladen werden kann.
Die gesamte „Anlage" ist mit Bausteinen von Fischertechnik aufgebaut. Der Gleichstrom-Getriebemotor , der das Förderband bewegt sowie derjenige der Schiebeeinrichtung sind ebenfalls von diesem Hersteller. Die beiden elektronischen Schaltungen für die Steuerung der Motoren sind gleich aufgebaut. Sie beinhalten in Anlehnung an einen Schaltplan in einem ELO-Sonderheft „Roboter selbst steuern" eine „elektronische Verriegelung" mit NOR-Gattern des Bausteins CD4001. Diese verhindert, dass die Relais versehentlich gleichzeitig schalten und damit einen Kurzschluss der Batterien verursachen.
Die Bewegung des Schiebers im Bild soll durch den Atmega88 kontrolliert erfolgen, also sind für die linke und die rechte End-Position gerade vorhandene Mikroschalter vorgesehen. Diese wurden zwischen Bausteinen von Fischertechnik befestigt.
Die Gatter des NAND-Schmitt-Triggers CD4093 dienen zur Entprellung der Mikroschalter-Signale.
Ein Spielstein wird, wie dies oben erwähnt worden ist, zunächst nur bis unter einen optischen Sensor geschoben, damit überprüft werden kann, ob es sich bei ihm um ein helles oder dunkles Exemplar handelt. Diese Position wird durch eine Gabellichtschranke überwacht. Die Lichtschranke befindet sich auf einer kleinen rechteckigen Platine, die zwischen Bausteinen von Fischertechnik eingeklemmt ist.
Die elektronischen Schaltungen zur Steuerung und Überwachung passen auf ein Steckboard. Das kleine Exemplar kann eventuell entfallen, wenn man auf eine „Handsteuerung" verzichtet.
Dies ist ein Bild des gesamten Projekts zum Sortieren und Zählen von Spielsteinen aus einem Spielemagazin, bei dem ein Mikrocontroller auf einer ATmega88-Experiemnetierplatine und ein Atmega8 auf einer Ping-Pong-Platine zusammenwirken.
Möglicherweise dient dieser Beitrag ähnlich wie andere ELO-Artikel als Anregung für die Gestaltung und Programmierung eigener kleiner Projekte.
Listings Bascom-AVR für den ATmega88 und den ATmega8 hier herunterladen und eventuell für eigene Zwecke umgestalten.
| |  | Lernpaket Mikrocontroller Technik mit Bascom Lieferumfang: Platine, 17 Bauteile, CD-ROM, Handbuch 220 Seiten ISBN 978-3-7723-4605-7 Versandkostenfrei* direkt beim Verlag bestellen
79,95 € 
|