Title: SMS
1SMS über Festnetz
- Teil2 praktische Realisierung
- Christian Ellenberg, Frank Siewert
- Labor RST, SS2001
2Das Konzept
GSM-Netz
Fest- Netz
GSM Modem
Modem
3Aufbau(1)
4Aufbau(2)
b0
b0
MT8880
0
PCF8574
CRA CRB Status Receive Transmit
I2C Data
b1
1
b2
2
b3
3
DTMF
IRQ
7
PHI2 (Takt)
6
RS0
5
4
5 Register Control_A (Control_B)
Status Receive Transmit
1
0
1
1
1
0
0
0
5Timing(1) MT8880C DTMF in
6Timing(2) MT8880C Data I/O
7Timing(3) I²C-Baustein
8Beispiele(1)
b0
Data in/out
MT8880
PCF8574
I2C Data
DTMF in/out
IRQ
PHI2 (Takt)
Register Select
Tonausgabe 5 über I2Clt-gtIO-Steuerung
i2c.start(112) //Schreib-ADR, Startbedingung
SCLHIGH,SDA HgtL i2c.write(x0101101) //CRA
CRBenable,IRQenable,DTMFmode,TONEenable
i2c.write(x1101101) //wie oben jedoch steigende
Taktflanke i2c.write(x0101101) //Taktflanke
wieder absenken -gt Zyklus beendet
i2c.write(x010x000) //CRB C/R,
DualTone,NoTest,BURSTenable i2c.write(x110x000)
//wie oben mit Steigender Taktflanke
i2c.write(x010x000) // Taktflanke fällt -gtZyklus
beendet i2c.write(x0000101) // 5 ins
Transmit-Register schreiben i2c.write(x1000101)
// ... Taktflanke steigt... i2c.write(x0000101)
// ...und fällt -gt Ton für 50ms erzeugen
i2c.stop() // Stopbedingung SCLHIGH,SDA LgtH
9Beispiele(2a)
MT8880
PCF8574
I2C Data
DTMF in/out
Data in/out IRQ PHI2 (Takt) Register Select
Beispiel Tonerkennung über I2Clt-gtIO-Steuerung
i2c.start(112) // Schreib-Adresse, Startbedingung
erzeugen i2c.write(10111111) // Status-Register
auswählen i2c.write(11111111) // wie oben
jedoch Taktflanke setzen i2c.start(113) //
Lese-Adresse Werti2c.readlast() // I2C-Port
auslesen (nur ein Byte lesen, dann STOP)
i2c.stop() // Lesen abschliessen (zur
Sicherheit) i2c.start(112) // Schreib-Adresse,
Startbedingung erzeugen i2c.write(10111111) //
Takt beenden i2c.stop() // I2C-Zyklus
abschliessen --------------------------- IRQ
auswerten oder Polling ---------------------------
----- Dann ...
10Beispiele(2b)
Falls IRQ oder Polling Dateneingang erfasst,
Receive-Wert auslesen i2c.start(112) //
nochmal schreiben i2c.write(10011111) //
Receive-Register wählen i2c.write(11011111) //
wie oben mit positiver Taktflanke
i2c.start(113) // Auf Lesen umschalten
Werti2c.readlast() // I2C-Port auslesen (nur ein
Byte lesen, dann STOP) i2c.stop() // Lesen
beenden... i2c.start(112) // Schreiben...
i2c.write(10011111) // Taktflanke fällt -gtZyklus
beendet i2c.stop() // I2C-Zyklus
abschliessen Wert enthält dann (hoffentlich
richtigen) dekodierten DTMF-TON
11Das SoPOTS-Protokoll (1)
Sendet...
Empfängt...
SMS-Unit
SMS-Server
Anrufen RING
Voicemodus DTMF-Dauer setzen
Warten auf
DTMF 12 senden
Triggertimer starten
ZielNr. SendenSMS
Auflegen
. . .
Auflegen nach Timeout
12Das SoPOTS-Protokoll (2)
Sendet...
Empfängt...
SMS-Unit
SMS-Server
Voicemodus DTMF-Dauer setzen
RING Anrufen
Warten auf
DTMF 12 senden
Triggertimer starten
AbsendeNr. SendenSMS
. . .
Auflegen
Auflegen nach Timeout