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

Interface 2 mit ASCII-Kommandos



Die meisten Interface-Protokolle wie z.B. das des SIOS oder des CompuLAB basieren auf dem Senden und Empfangen einzelner Bytes. In einigen Fällen ist es aber auch nützlich, ASCII-Texte zu senden und zu empfangen. Das macht es einfacher, ein Interface direkt über ein Terminalprogramm anzusprechen.  Auch einige Programmierumgebungen tun sich mit textbasierten Kommandos leichter.

Das hier vorgestellte Interface kann auf alle Ports, alle AD-Eingänge und die beiden PWM-Ausgänge des Mega32 zugreifen. Die Kommandos entsprechen dabei den Bezeichnungen der jeweiligen Anschlüsse bzw. der zugehörigen Register im Mega32.

Beispiele:
ADC0 fragt den ersten Analogeingang ab, das Ergebnis kommt als Textstring
PWM1A 1023 setzt den ersten PWM-Ausgang auf den Wert 1023
PORTB 255 schaltet alle Anschlüsse am Port B ein
PINB fragt den Port B als Eingang ab
DDRB 0 legt die Portrichtung am Port B als Eingang fest

Das komplette Bascom-Listing zeigt die weiteren Befehle. Der empfangene Textstring wird zuerst in Kommando1 und Kommando2 (= Daten) zerlegt und dann einer Interpreterschleife zugeführt.

Download: Interface2.zip (Quelltext und Hex-File, 3 KB)



'--------------------------------------------------------------
' ESM32 Interface 2, ASCII-Kommandos
' ATMEGA32, 11,0592 MHz, 19200 Baud
'--------------------------------------------------------------

$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 K As Byte
Dim D As Byte
Dim Dd As Word
Dim Kommando As String * 10
Dim Kommando1 As String * 6
Dim Kommando2 As String * 6
Dim Zeichen As String * 1
Dim Daten 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


Echo Off

Do
Input #1 , Kommando
K = 1
Kommando1 = ""
Kommando2 = ""
L = Len(kommando)
For N = 1 To L
Zeichen = Mid(kommando , N , 1)
If K = 1 Then
If Zeichen <> " " Then
Kommando1 = Kommando1 + Zeichen
End If
If Zeichen = " " Then K = 2
End If
If K = 2 Then
If Zeichen <> " " Then
Kommando2 = Kommando2 + Zeichen
End If
If Zeichen = " " Then K = 2
End If
Next N

If Kommando1 = "?" Then
Print #1 , "OK"
End If

If Kommando1 = "PORTA" Then
D = Val(kommando2)
Porta = D
End If

If Kommando1 = "PORTB" Then
D = Val(kommando2)
Portb = D
End If

If Kommando1 = "PORTC" Then
D = Val(kommando2)
Portc = D
End If

If Kommando1 = "PORTD" Then
D = Val(kommando2)
Portd = D
End If

If Kommando1 = "PINA" Then
D = Pina
Print #1 , D
End If

If Kommando1 = "PINB" Then
D = Pinb
Print #1 , D
End If

If Kommando1 = "PINC" Then
D = Pinc
Print #1 , D
End If

If Kommando1 = "PIND" Then
D = Pind
Print #1 , D
End If

If Kommando1 = "DDRA" Then
D = Val(kommando2)
Ddra = D
End If

If Kommando1 = "DDRB" Then
D = Val(kommando2)
Ddrb = D
End If

If Kommando1 = "DDRC" Then
D = Val(kommando2)
Ddrc = D
End If

If Kommando1 = "DDRD" Then
D = Val(kommando2)
Ddrd = D
End If


If Kommando1 = "ADC0" Then
Dd = Getadc(0)
Print #1 , Dd
End If

If Kommando1 = "ADC1" Then
Dd = Getadc(1)
Print #1 , Dd
End If

If Kommando1 = "ADC2" Then
Dd = Getadc(2)
Print #1 , Dd
End If

If Kommando1 = "ADC3" Then
Dd = Getadc(3)
Print #1 , Dd
End If

If Kommando1 = "ADC4" Then
Dd = Getadc(4)
Print #1 , Dd
End If

If Kommando1 = "ADC5" Then
Dd = Getadc(5)
Print #1 , Dd
End If

If Kommando1 = "ADC6" Then
Dd = Getadc(6)
Print #1 , Dd
End If

If Kommando1 = "ADC7" Then
Dd = Getadc(7)
Print #1 , Dd
End If

If Kommando1 = "PWM1A" Then
Dd = Val(kommando2)
Pwm1a = Dd
End If

If Kommando1 = "PWM1B" Then
Dd = Val(kommando2)
Pwm1b = Dd
End If

Loop
End

Download: ESM32SIOS.zip  (22 KB)

Mit dem Portkommandos lassen sich beliebige Eingänge und Ausgänge nutzen und definieren. Ein Beispiel: Der Port D ist beim ES-M32 über Jumper mit zwei LEDs und vier Tastschaltern verbunden.  Außerdem liegt an D0 und D1 die serielle Schnittstelle. Mit dem Kommando PIND kann der Port abgefragt werden. Mit gedrücktem Taster erhält man ein anderes Ergebnis.

Der Port A liegt zugleich an den analogen Eingängen und ist als hochohmiger Eingang  initialisiert.  Bei Bedarf kann man mit dem Befehl "PORTA 255" Pullup-Widerstände einschalten. Die Abfrage mit PINA liefert dann 255. Eine analoge Messung bringt bei offenem Eingang entsprechend das Ergebnis 1023.