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.
|
|