ADA/IO

Aus c't-Lab
Wechseln zu: Navigation, Suche
Bild des ADA/IO

Das ADA/IO dient als Trägerplatine für bis zu fünf Module (Tochterplatinen) gleichzeitig. Mit diesen Modulen ist es dann z. B. möglich, bis zu 32 Digitale I/O Leitungen bereitzustellen, 8 Spannungen mit 16 Bit Auflösung zu messen, 8 Spannungen mit 12 oder 16 Bit Genauikeit auszugeben, Netzspannungen mittels Relais zu schalten u.v.m...

Funktionsbeschreibung

Zur Funktion ist nicht viel zu sagen, da die Platine nur als Träger dient. Herzstück ist wie auf den anderen Platinen der ATMega32, dessen Ports A, B und C (inkl. I²C) parallel an den fünf Steckverbindern für die Tochterplatinen liegen. Natürlich sind an den Steckverbindern auch alle Spannungen (5V, +15V und -15V) und die Referenzspannug 2,56V vom ATMega32 angeschlossen. Der Prozessor läuft mit einem 16 MHz Quarz, ist über den Optobus mit den anderen Modulen verbunden und lässt sich über den ISP-Stecker programmieren. LED1 dient vorerst nur als Betriebsanzeige und blinkt beim Starten der Platine. Versorgt wird die ADA/IO Platine entweder von dem IFP- oder einem halben PS3-2-Modul. Außerdem ist es möglich das Bedienpanel PM8 anzuschließen. Damit kann man dann die Werte der A/D-Kanäle anzeigen und die Werte der D/A-Kanäle einstellen. Nach dem Anschluss des Panels ist es jedoch nicht mehr möglich die beiden A/D-Kanäle 0 und 1 des ATMega32 zu verwenden, da diese zum Auslesen des Inkrementalgebers gebraucht werden.

Schaltplan, Layouts und Bestückungsplan

Schaltplan des ADA-IO, © Carsten Meyer
Bottom Layout des ADA-IO, © Carsten Meyer
Top Layout des ADA-IO, © Carsten Meyer
Bestückungsplan des ADA-IO, © Carsten Meyer

Stückliste

Schaltungs-
bezeichnung
Bauteilbezeichnung Stückzahl Bemerkungen
U1 ATmega32-16 DIL 1 40pol DIL Gehäuse
Sockel für U1 40 polig 1
U2 6N137 1 8pol DIP Gehäuse
Sockel für U2 8 polig 1
LED1 LED 3mm rot 1
C1 4u7 25V Tantal 1
C2..C5 100n keramik RM5 4
C6, C7 22p RM2,5 2
R1, R2 220R 2
R3 0R 1
R4,R5 2k2 2
R6 4k7 1
R7 470R 1
R8 2k7 1
JP1..JP5 Jumper 2-pol. 5
L1 10uH axial RM10 1
PL1 Pfostenleiste 14-pol. 1
PL2..6 Pfostenleiste 10-pol. 5
XTAL1 Quartz 16MHz HC49U 1
CONN1..5 VG-Federleisten 64-pol. a/b 5

Aufbauhinweise

R3 ist als Drahtbrücke zu bestücken und verbindet die digitale- mit der analogen Masse. Im Gegensatz zur IFP-Platine muss die Brücke aber eingelötet bleiben, sonst ist es z.B. nicht möglich mit der IO8-32-Tochterplatine Spannungen zu messen.

Tochterplatinen

  • IO8-32 Platine: Bietet 32 digitale Ein-/Ausgänge zum Messen und Erzeugen verschiedener Zustände. Verwendet außerdem die acht A/D-Wandler-Kanäle des ATMega32 zum Messen von Spannungen mit einer Auflösung von 10bit, in einem Bereich von 0 bis 10V.
  • AD16-8 Platine: A/D-Wandler-Platine zum Messen von acht Spannungen in einem Bereich von -10V bis +10V und mit einer Auflösung von 16bit.
  • DA12-8 Platine: D/A-Wandler-Platine welche acht Spannungen von -10V bis +10V mit einer Auflösung von 12- oder 16bit liefert.
  • REL8 Platine: Schaltet in Verbindung mit der IO8-32 Platine acht konventionelle Relais (besser zum Schalten von induktiven Lasten).
  • OUT8 Platine: Schaltet in Verbindung mit der IO8-32 Platine acht, über Optokoppler isolierte, Darlington-Transistoren.
  • OUT8 Netz Platine: Schaltet in Verbindung mit der IO8-32 Platine acht Halbleiter-Relais.

Opto-Bus Befehle

ADA-IO Version 1.74 (Stand vom 4.5.2009)
Kommando Argument SubCh Wertebereich Beispiele
(für Adresse 0)
Beispiel-Antwort Erläuterung
VAL 0..7 0..7 Float VAL 0?, 0:7? #0:2=0.0 ATmega-interner ADC 10 Bit, unipolar 0..10V
VAL 10..17 10..17 -10 bis +10 10? #0:10=10.002 AD16-8, 16-Bit-Wandler, 8 Kanäle, -10..+10V
VAL 20..27 20..27 -10 bis +10 0:VAL 20=5.0!, 24=1.2345! #0:20=5.0000 Ausgabewerte DA12-8 oder DA16-8, 8 Kanäle
OFS* 0..27 100..127 Integer 0:OFS 20=37!, OFS 10? #0:255=0 [OK], #0:110=302 Wandler-Offset in Raw-Digits (Integer-Wert)
SCL* 0..27 200..227 Float 0:SCL 20=1.0!, SCL 10? #0:255=0 [OK], #0:210=1.0123 Skalierungen AD- oder DA-Wert
SCL* 9 209 Float 0:SCL 9=100!, SCL 9? #0:255=0 [OK], #0:209=100.0 Grundskalierung interner AD-Wandler des ATmega32 (nominal 100)
SCL* 19 219 Float 0:SCL 19=3185!, SCL 19? #0:255=0 [OK], #0:219=3185 Grundskalierung AD16-8-Wandler LTC1684 (nominal 3185)
SCL* 28, 29 228..229 Float 0:SCL 28=200!, SCL 29? #0:255=0 [OK], #0:229=3200 Grundskalierung DA12-8-Wandler, SCL 28 für 12 Bit LTC1257 (nominal 200), SCL 29 für 16 Bit LTC1655 (nom. 3200)
RAW** 0..17 50..67 Integer RAW 17? #0:67=31548 Rohdaten direkt vom Wandler ohne Skalierung und Offset
RAW** 20..27 70..77 Integer RAW 27? #0:77=32767 Rohdaten, die D/A-Wandler nach Skalierung und Offset erhält
PIO 0..7 30..37 Byte 0:PIO 0?, 30?, 0:31=255!, 0:VAL 30? #0:30=123 IO-Port 0..7 Datenbyte
DIR* 0..7 40..47 Byte DIR 0=255!, 40=255! #0:40=255 IO-Port 0..7 Richtung, Bit auf 1 = Ausgang
DSP 0..9 80..89 Display/Panel-Parameter, 2 bis 8 derzeit unbenutzt
DSP 0 80 Byte DSP 0=20!, DSP=20!, DSP?, 0:80? #0:80=20 Panel-Messwertanzeige, bringt Messwert-Kanal (0..27) auf Display
DSP* 1 81 0..27 [bel.Text] DSP 1=20 [Volt]!, 81=10 [Fuellstd]!, 81=11 []! #0:255=0 [OK] Text unter dem auf Display angezeigten Messwert, nichtflüchtig, Wert steht korrespondierenden VAL-SubCh, String mit max. 8 Zeichen in [Klammern], [] stellt Default wieder her (Value xx)
DSP* 9 89 Byte DSP 9=4!, 0:89=2! #0:255=0 [OK] Inkrementalgeber Impulse pro Rastpunkt (12er/24er haben meist 4, 30er/32er haben meist 2)
OPT* 6 156 0..1 OPT 6=1! #0:255=0 [OK] Gleiche Funktion wie REF (SubCh 246)
OPT* 7 157 0..1 OPT 7=1! #0:255=0 [OK] Integrier-Modus für AD16-8 (ruhigere Anzeige, etwas langsamere Reaktion, default Aus=0)
OPT* 9 159 Float OPT 9=4! #0:255=0 [OK] Gleiche Funktion wie DSP 9 (SubCh 89)
ALL** 0..4 95..99 -- ALL 4?, 0:95? (Liste mit Werten) 0=VAL 0..7 (AD10), 1=VAL 10..17 (AD16), 3=VAL 30..37 (Ports), 4=Alle verfügbaren
TRM* 0..3 240..243 Byte TRM 0=31!, TRM1? #0:255=0 [OK], #0:241=7 Trigger-Masken für AD-Ports 0..7 (TRM0) und 10..17 (TRM1) sowie I/O-Ports 30..37 (TRM3)
TRT* -- 247 0, 20..31767 TRT=0, 0:247=2000 #0:255=0 [OK] Autom. Trigger-Timing in ms, 0=Aus, Werte ab 20 ms möglich
TRT* 0 248 0..1 TRL=1!, TRL?, 248=0!, 248? #0:255=0 [OK], #0:248=1 Trigger-Edge PB2, neg. = 0, pos. = 1, Impuls an diesem Pin liefert Messwerte wie in Trigger-Maske definiert
TRG -- 249 -- TRG!, TRG?, 249? #0:255=0 [OK] (Liste mit Werten) manuelle Trigger-Auslösung, liefert Messwerte wie in Trigger-Maske definiert
REF* -- 246 0..1 REF=1!, REF?, 246? #0:255=0 [OK], #0:246=0 Umschaltung interne (1) / externe (0) Referenz, Default = 1, intern
ICB -- 230 Byte ICB=0!, 0:230? #0:255=0 [OK], #0:230=255 Generische I2C-Befehle, Byte Lesen/Schreiben, Bausteinadresse mit ICA eingestellt
ICW -- 231 Word/Integer #0:255=0 [OK], #0:231=1024 Generische I2C-Befehle, Word Lesen/Schreiben, Bausteinadresse mit ICA eingestellt
ICS -- 232 Word (swapped) #0:255=0 [OK], #0:232=32412 Generische I2C-Befehle, Word mit vertauschten Bytes Lesen/Schreiben, Bausteinadresse mit ICA eingestellt
ICT** 0..1 233, 234 Float ICT?, ICT 0?, 0:ICT 1?, 234? #0:255=0 [OK], #0:233=24.5 Temperatur-Sensor auslesen, "0"=LM75, "1"=DS1621/1631
ICA -- 239 ICA=72! #0:255=0 [OK] I2C-Hardware-Bausteinadresse einstellen, 7 Bit (0..127) ohne R/W-Bit, z.B. 72 für LM75

Gesamte c't-Lab Syntax als .xls-Datei.

Nachbauten

Weblinks