Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: SMS vom M20-Terminal einlesen Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Volker - 28.03.2007 17:59)
 Als Antwort auf SMS vom M20-Terminal einlesen von Volker - 28.03.2007 17:29
> Hallo allerseits,
>
> ich möchte eine Anlage per SMS AN- und AUS- schalten. Nach vielem testen habe ich es geschafft. Mein unten angefügtes Programm lief über 24 Stunden stabil durch...
> ABER meine Lösung wirf viele Fragen bezüglich des Timings auf.
>
> Nur in der Konstellation des unten angefügten Programms ist mir das Einzulesen und Auszuwerten der SMS möglich.

.... leider zu früh abgeschickt.

 
Ich kann nicht einmal mit RXD prüfen ob etwas einzulesen ist, da diese Abfrage schon zu lange dauert, geschweige denn andere Routinen wie z.B. "I2C" oder  "Extended Ports" mit einbinden, da dann das PRG die Bytes der SMS nicht mehr korrekt einliest.
Dann habe ich die 8MHZ-Routinen von Dietmar eingebunden, aber erst bekam ich Probleme mit dem LCD-Display und als ich die im Griff hatte wurden die Bytes falsch gelesen.

Ich habe auch andere Kontroller (Open MIDI + Open MACRO) probiert, da ich ein größeres Programm benötige.
Die Open Midi funktioniert mit den o.g. Einschränkungen.
Die Open Macro scheint für diese zeitkritische Angelegenheit zu langsam zu sein.


Bitte schaut euch das PRG mal an. Ich bin für konstruktive Kritik dankbar.

Viele Grüße
Volker


ps. Leider verfüge ich über keine Assembler-Kenntnisse



'-------------------------------------------------------------------------------
' INCLUDE
'-------------------------------------------------------------------------------
INCLUDE "om.def"            'Definitionen fuer Open-Micro und Open-Mini

'-------------------------------------------------------------------------------
' DEFINITIONEN
'-------------------------------------------------------------------------------
define LED_AN      port[6]
define LED_AUS     port[5]

define LCD_Port    byteport[2]
define LCD_RS      port[14]
define LCD_RW      port[13]
define LCD_e       port[15]

define z0          byte[1]
define z1          byte[2]
define z2          byte[3]
define n           byte[4]
define pos         byte[5]
define anz         byte[6]
define zeile       byte[7]
define temp        byte[8]


Define Line1 &H80 : Define Line2 &HC0  'Für 2x16 LCD

'-------------------------------------------------------------------------------
' INITIALISIERUNGEN
'-------------------------------------------------------------------------------
#main
lcd_init                              'LCD Initialisieren
pause 25
lcd_cls

print "ATE"                           'Das Echo des M20-Terminals ausstellen
pause 50
print "AT+CPIN=2684"                  'Den Pin eingeben, damit sich das M2-Terminal einloggen kann
for n = 1 to 4
pause 200                             'Zeit zum einloggen
next n

'-------------------------------------------------------------------------------
' HAUPTPROGRAMM
'-------------------------------------------------------------------------------

#loop                                 'Hauptschleife
for n = 0 to 4                        'Die Zugriffshäufigkeit auf das M20-Terminal einstellen
  pause 250
next n
goto sms_auswerten                    'zur SMS-Auswertung springen
goto loop

#sms_auswerten                        'SMS-Auswertung Erst schauen ob eine SMS vorhanden ist, wenn nicht >Rüchgabe "OK"
gosub rxdleeren                       'SERIAL-Puffer leeren
print "AT+CMGR=2"                     'SMS in Speicher 1 des M20-Terminals lesen
get z0                                'Die 2 ersten Bytes reichen um das "OK" vom Terminal zu erkennen
get z1

if z0 = 79 and z1 = 75  then          'Prüfen auf "OK"
  goto loop
  LED_AN  = on
  Pause 50
  LED_AN = off                        '"OK" erkannt. Keinen SMS an Speicherstelle 1 des M20-Terminals. Zurück zur Hauptschleife
else
  goto weiter                         '"OK" nicht erkannt also weiter, da SMS eine SMS im Speicher ist
end if


#weiter
pause 50                              'Vor dem erneuten einlesen eine kurze Pause

DBNZCTR=61                            'Zähler für DBENZ
                                      'Eine FOR - NEXT Schleife zum Empfang hat sich als zu langsam erwiesen,
                                      'deshalb nutze ich DBENZ. Damit habe ich die empangenen Bytes schnell genug einlesen können.
gosub rxdleeren                       'SERIAL-Puffer leeren
print "AT+CMGR=1"                     'SMS an Speicherstelle 1 des M20-Terminals lesen
#schleife                             'DBENZ-Schleife
get z0                                'liest die ersten 61 Bytes der vom M20-Terminal gesendeten SMS ein. Die werden nicht gebraucht,
DBNZ schleife                         'da es der Header der SMS ist.
get z0                                'Ab Byte 62 fängt der Text der SMS an (ich habe nur 2 Standardtexte "AN oder AUS")
get z1                                'Deshalb speichere ich nur die 3 Bytes
get z2
if z0 = 65 and z1 = 78  then goto angeschaltet                'SMS-Text "AN" erkannt
if z0 = 65 and z1 = 85 and z2 = 83 then goto ausgeschaltet    'SMS-Text "AUS" erkannt
goto loop

#angeschaltet                         'Ausgewertete SMS Anzeigen ( Anlage AN )
LED_AN=on                             'SMS-Auswertung per LED anzeigen
zeile =1 : pos=32 : anz=15            'positionieren auf die Tabellen Texte
gosub ausgabe                         'und ausgeben
zeile =2 : pos=0 : anz=15             'positionieren auf die Tabellen Texte
gosub ausgabe                         'und auf LCD-Display ausgeben
pause 150                             '3 Sekunden warten
lcd_cls                               'und das Display wieder löschen
'print "AT+CMGD=1"                    'Die augewertete SMS an Speicherstelle 1 des M20 Terminals löschen
LED_AN= off                           'LED wieder ausschalten
goto loop

#ausgeschaltet                        'Ausgewertete SMS Anzeigen ( Anlage AUS )
LED_AUS = on                          'SMS-Auswertung per LED anzeigen
zeile =1 : pos=32 : anz=15            'positionieren auf die Tabellen Texte
gosub ausgabe                         'und ausgeben
zeile =2 : pos=16 : anz=15            'positionieren auf die Tabellen Texte
gosub ausgabe                         'und auf LCD-Display ausgeben
pause 150                             '3 Sekunden warten
lcd_cls                               'und das Display wieder löschen
'print "AT+CMGD=1"                    'Die augewertete SMS an Speicherstelle 1 des M20 Terminals löschen
LED_AUS = off                         'LED wieder ausschalten
goto loop

#rxdleeren                            'Serial-Puffer leeren
IF not RXD THEN GET z0
IF RXD THEN return
GOTO rxdleeren

#ausgabe
if zeile = 1 then lcd_writecmd &h80   'Ausgabe in Zeile 1 des Display´s
if zeile = 2 then lcd_writecmd &hc0   'Ausgabe in Zeile 2 des Display´s
for n =pos to pos + anz               'Zeichen der Tabelle auslesen und
 lcd_writechar LOOKTAB(de, n )        'auf dem Display anzeigen
next n
return

END

'-------------------------------------------------------------------------------
' LCD-Routinen
'-------------------------------------------------------------------------------
PROCEDURE lcd_init
  'Vorgeschriebene Verzoegerung fuer das LCD
  PAUSE 5

  '8-Bit-Modus aktivieren
  lcd_writecmd &h38

  'mit 8-Bit-Command in 4-Bit-Modus umschalten
  lcd_port=&b01000010                   'EN auf high
  lcd_e=OFF
  pause 5
  'ab jetzt 4-Bit-Modus
  lcd_writecmd &h28
  lcd_writecmd &h0c

  'LCD loeschen
  lcd_cls

  RETURN
END PROCEDURE

PROCEDURE lcd_cls
  lcd_writecmd &h02
  pause 5
  lcd_writecmd &h01
  RETURN
END PROCEDURE

PROCEDURE lcd_writecmd(temp)
  lcd_port=temp shr 4    or &b01000000  'High-Nibble, EN auf high
  lcd_e=OFF
  lcd_port=temp and &h0f or &b01000000  ' Low-Nibble, EN auf high
  lcd_e=OFF
  RETURN
END PROCEDURE

PROCEDURE lcd_writechar(temp)
  lcd_port=temp shr 4    or &b01100000  'High-Nibble, EN auf high
  lcd_e=OFF
  lcd_port=temp and &h0f or &b01100000  ' Low-Nibble, EN auf high
  lcd_e=OFF
  RETURN
END PROCEDURE

' ---------------------------------------------------------------------------
' Tabellen
' ---------------------------------------------------------------------------
table de byte
"** ANLAGE EIN **"
"** ANLAGE AUS **"
" SMS-MITTEILUNG "
tabend

 Antwort schreiben

Bisherige Antworten:

Re: SMS vom M20-Terminal einlesen (von Dietmar - 28.03.2007 21:29)
    Re: SMS vom M20-Terminal einlesen (von Volker - 1.04.2007 13:50)
        Re: SMS vom M20-Terminal einlesen (von Dietmar - 5.04.2007 14:58)
    Re: SMS vom M20-Terminal einlesen (von Dieter - 29.03.2007 13:50)
        Re: SMS vom M20-Terminal einlesen (von Volker - 1.04.2007 12:16)