Start

Experimente

Grundlagen

Produkte
- ES-M32
-- Erster  Test -- USB
-- Bascom
-- RAM
-- ADC 
-- Ports  
-- Relais  
-- Morsen
-- Datenlogger -- SIOS  
-- ASCII  
-- mV-Logger 
-- I/O12/24 V
-- Bootloader  

Neues

Impressum

ES-M32

SIOS-Emulation



Das SIOS-Interface hatte viele Freunde, wird aber leider nicht mehr gebaut. Ein Nachfolger auf der Basis eines ATmaga32 ist schon in der Entwicklung. Aber auch mit dem ES-M32 steht eine passende Hardware-Basis zur Verfügung, um ein SIOS-kompatibles Interface bauen. Das Gerät kann nun wahlweise über die RS232 oder über den USB gesteuert werden. 

Im Einzelnen sollen die SIOS-Kommandos nach der folgenden Tabelle umgesetzt werden. Dabei wurden gewisse Einschränkungen und Doppelbelegungen notwendig. Der digitale Ausgangsport D wird nur mit insgesamt 6 Bit zugänglich, weil D4 und D5 für die PWM-Ausgabe verwendet werden. Die analogen Ausgänge sind hier PWM-Ausgänge mit einer Auflösung von 8 Bit. Man kann jedoch über den Funktionsumfang des SIOS hinaus auch eine 10-Bit-Ausgabe definieren.

 

Kommando

Parameter

Antwort

Funktion

1

 

10

Interface-Kennung

16

Bitmuster

 

Digitale Ausgabe, Port D

32

 

Bitmuster

Digitale Eingabe, Port C

48

 

8-Bit-Ergebnis

Analogeingang A, ADC0

49

 

8-Bit-Ergebnis

Analogeingang B, ADC1

usw.

 

 

 

51

 

8-Bit-Ergebnis

Analogeingang D, ADC3

56

 

Highbyte

Analogeingang A, ADC0),

1

 

Lowbyte

10 bit

usw.

 

 

 

59

 

Highbyte

Analogeingang D, ADC3,

1

 

Lowbyte

10 bit

64

8-Bit-Wert

 

Analogausgang A, PWM1A (PD5)

65

8-Bit-Wert

 

Analogausgang B, PWM1B (PD4)



'--------------------------------------------------------------
' ESM32 SIOS
' ATMEGA32, 11,0592 MHz
'--------------------------------------------------------------

$regfile = "m32def.dat"
$baud = 19200
$crystal = 11059200
$hwstack = 32
$swstack = 64
$framesize = 64


Dim Command As Byte
Dim N As Byte
Dim L As Byte
Dim H As Byte
Dim D As Byte
Dim Dd As Word

Open "com1:" For Binary As #1

Config Portd = Output
Portc = 255


Config Adc = Single , Prescaler = Auto , Reference = Off ' Pre 8...32
Start Adc

Config Timer1 = Pwm , Prescale = 8 , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Start Timer1

Do
Get #1 , Command
'SIOS Device 10
If Command = 1 Then Put #1 , 10

'Firmware V2.1
If Command = 2 Then Put #1 , 21

'Output Port D
If Command = 16 Then
Get #1 , D
Portd = D
End If

'Input Port C
If Command = 32 Then
D = Pinc
Put # 1 , D
End If

'ADC 8 Bit
If Command = 48 Then
Dd = Getadc(0)
Shift Dd , Right , 2
D = Dd
Put #1 , D
End If
If Command = 49 Then
Dd = Getadc(1)
Shift Dd , Right , 2
D = Dd
Put #1 , D
End If
If Command = 50 Then
Dd = Getadc(2)
Shift Dd , Right , 2
D = Dd
Put #1 , D
End If
If Command = 51 Then
Dd = Getadc(3)
Shift Dd , Right , 2
D = Dd
Put #1 , D
End If
If Command = 52 Then
Dd = Getadc(4)
Shift Dd , Right , 2
D = Dd
Put #1 , D
End If
If Command = 53 Then
Dd = Getadc(5)
Shift Dd , Right , 2
D = Dd
Put #1 , D
End If


'ADC 10 Bit
If Command = 56 Then
Dd = Getadc(0)
D = High(dd)
Put #1 , D
Get #1 , D
D = Low(dd)
Put #1 , D
End If

If Command = 57 Then
Dd = Getadc(1)
D = High(dd)
Put #1 , D
Get #1 , D
D = Low(dd)
Put #1 , D
End If

If Command = 58 Then
Dd = Getadc(2)
D = High(dd)
Put #1 , D
Get #1 , D
D = Low(dd)
Put #1 , D
End If

If Command = 59 Then
Dd = Getadc(3)
D = High(dd)
Put #1 , D
Get #1 , D
D = Low(dd)
Put #1 , D
End If

If Command = 60 Then
Dd = Getadc(4)
D = High(dd)
Put #1 , D
Get #1 , D
D = Low(dd)
Put #1 , D
End If

If Command = 61 Then
Dd = Getadc(5)
D = High(dd)
Put #1 , D
Get #1 , D
D = Low(dd)
Put #1 , D
End If

'PWM Output 8 Bit
If Command = 64 Then
Get #1 , H
Dd = 4 * H
Pwm1a = Dd
End If
If Command = 65 Then
Get #1 , H
Dd = 4 * H
Pwm1b = Dd
End If

'PWM Output 10 Bit
If Command = 72 Then
Get #1 , H
Dd = 256 * H
Get #1 , L
Dd = Dd + L
Pwm1a = Dd
End If
If Command = 73 Then
Get #1 , H
Dd = 256 * H
Get #1 , L
Pwm1b = Dd
End If
Loop

End

Download: ESM32SIOS.zip  (22 KB)

Die schnelle 8-Bit-Analogmessung führt zunächst eine Messung mit der Auflösung 10 Bit aus und reduziert dann die Daten auf acht Bit. Bei der Messung in voller Auflösung müssen die Daten in zwei Bytes zurückgeschickt werden. Zwischen dem Highbyte und dem Lowbyte wird ein Byte zur Synchronisierung empfangen. Der PC sendet hier laut Protokoll ein Byte 1, ein beliebiges anderes Byte würde jedoch ebenfalls funktionieren.

Die analogen Ausgaben mit einer Auflösung von 8 Bit multiplizieren den Ausgabewert mit vier und steuern den PWM-Ausgang mit 10 Bit an. Zusätzlich gibt es hier die neuen Kommandos 72 und 73 für eine PWM-Ausgabe mit der vollen Auflösung von 10 Bit.



Ein einfaches Benutzerprogramm für dieses Interface lässt sich mit Visual Basic realisieren. Das VB-Projekt ist ebenfalls im Projekt-ZIP enthalten Der Anwender sieht die Spannung an den vier analogen Eingängen in 10-Bit-Auflösung in Balkenanzeigen und als digitale Anzeige. Die digitalen Eingänge werden einzeln und als Byte angezeigt. Beide PWM-Ausgänge lassen sich über Schieberegler einstellen, wobei die mittlere Ausgangsspannung in Volt angezeigt wird. Die digitalen Ausgänge können durch Anklicken umgeschaltet werden. Es werden jeweils acht digitale Ein- und Ausgänge angezeigt. Die Software kann verwendet werden um angeschlossene Versuche oder Modelle direkt zu testen.

Außerdem kann nun die gesamte Bandbreite der SIOS-Software eingesetzt werden. Dazu gehört z.B. auch Compact Definition und ProfiLab Expert.

Literatur: B. Kainka, Basiskurs BASCOM-AVR, Elektor-Verlag, 2011