Forum: Mikrocontroller und Digitale Elektronik Siemens S35 Kommunikation über RS232 (STK500)


von Bastian F. (bastian_f)


Lesenswert?

Ich versuche einen Atmega8, der in einem STK500 steckt, mit meinem S35 
reden zu lassen, was leider nicht so richtig funktioniert.
Benutzt wird ein billiges ebay Datenkabel (P5=GND, P2=TxD, P3=RxD), 
welches dann auch genau so an das STK500 verbunden wurde, also direkt an 
PD0 bzw PD1 und GND.
Spreche ich das Telefon via Hterm und aktiviertem DTR an funktioniert 
dies auch, nur über den Mikrocontroller kommt nichts an, was anscheinend 
an DTR liegt, da ich nicht verstehe, wie ich das im Programm 
"aktivieren" kann.
http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART#Hardware_Handshake
Hier habe ich gelesen, dass ich den Handshake mittels 0x11 herstellen 
kann, aber entweder habe ich das ganze nicht verstanden, es falsch 
eingesetzt oder (am ehesten) beides zusammen.
Ich benutzte die UART Bibliothek von Peter Fleury.

Um genau zu sein, wird zwar was auf dem LCD ausgegeben (Kommunikation 
scheint zu gehen), aber das Handy reagiert nicht auf die AT Befehle.
ZB ausschalten (AT^SMSO), was via Hterm funktioniert).

Eventuell kann mir ja jemand auf die Sprünge helfen.
Danke!
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <inttypes.h>
4
#include <avr/io.h>
5
#include <avr/interrupt.h>
6
#include <avr/pgmspace.h>
7
#include <util/delay.h>
8
#include "lcd-routines.h"
9
#include "includes.h"
10
#include "uart.h"
11
#define UART_BAUD_RATE      19200
12
13
int main () {
14
15
  unsigned int c;
16
  char buffer[7];
17
  DDRD  &= ~(1<<PD3);
18
  PORTD &= ~(1<<PD3);
19
20
  lcd_init();
21
  uart_init(UART_BAUD_SELECT(19200,4000000L));
22
  sei();
23
24
  while (1) {
25
    c = uart_getc();
26
27
    if ( c & UART_NO_DATA ) {
28
      /*
29
       * no data available from UART
30
       */
31
    }
32
33
    else {
34
      itoa( c, buffer, 10);
35
      lcd_string(buffer);
36
    }
37
38
    if (debounce( PIND, PD3 )) {
39
      uart_putc(0x11);
40
      uart_puts("AT^SMSO");
41
      uart_putc(13);
42
      uart_putc(10);
43
    }
44
  }
45
}

von Beobachter (Gast)


Lesenswert?

benutztz mit Hterm auch das ebay-Kabel ?
Wenn ja, wie kommst Du darauf das es DTR ist ?
Einfach mal ein vollbelegtes RS232-Kabel nehmen und
den DTR entsprechend setzen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das "Datenkabel" des S35 benutzt eine parasitäre Spannungsversorgung für 
die im Kabel verbauten RS232-Pegelwandler. Daher genügt es nicht, dieses 
Kabel nur mit RxD/TxD und Masse zu verbinden, sondern es müssen zwingend 
die anderen Handshakeleitungen auf korrektes Potential gelegt werden, 
was für einen PC kein Problem darstellt.

Einfacher wäre es hier, auf das Datenkabel komplett zu verzichten und 
das Telephon komplett ohne Pegelwandler mit dem µC zu verbinden -- wenn 
ich mich recht erinnere, nutzt das Telephon 3V-TTL-Pegel, die direkt mit 
der UART eines µC verbunden werden können, wenn der auch mit 3V 
betrieben wird.

von Bastian F. (bastian_f)


Angehängte Dateien:

Lesenswert?

Danke erstml für die Hinweise.
Ich dachte, da nur diese drei Leitungen am Handy ankommen, würde es auch 
reichen nur diese zu beschalten.
Na ja.
Da ich den Atmega mit 5V betreibe, kann ich das Handy ja nicht einfach 
so anschließen, sondern wohl so wie in der angehängten Schaltung.
Nur habe ich aber leider grade keine 2.7V Zenerdioden da.
Kann ich diese mit 3.6V Zenerdioden ersetzen (ansonsten habe ich noch 
1N4148 und 1N4001 da)?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

D1 und den Widerstand kannst Du weglassen - der mit 5V betriebene µC hat 
keine Probleme mit einem niedrigeren Spannungspegel (solange der nicht 
unter der unteren Schaltschwelle für einen High-Pegel liegt).

Ansonsten ist das Thema Pegelwandlung 3V<->5V in diesem Forum gewiss 
schon etliche tausend Mal ausgekippt worden ...

von Harald Wilhelms (Gast)


Lesenswert?

Bastian F. schrieb:

> Nur habe ich aber leider grade keine 2.7V Zenerdioden da.

Nimm doch blaue LEDs. die haben zur Stabilisierung teilweise bessere
Daten als Z-Dioden.
Gruss
Harald

von Bastian F. (bastian_f)


Lesenswert?

Nur Grün, Gelb und Rot vorhanden.

von cskulkw (Gast)


Lesenswert?

Hallo Bastian,

bei mir hatte ich nur einen der Steuerleitungen auf 5 Volt gelegt und 
schon funktioniert es.

cskulkw

von Bastian F. (bastian_f)


Lesenswert?

Falls es jemanden interessieren sollte, so habe ich es nun erfolgreich 
hinbekommen:
1
                ____
2
AVR/RX o-------[____]--------o S35 Pin 5
3
                100ohm
4
                ____
5
AVR/TX o-------[____]----+---o S35 Pin 6
6
                100ohm   |
7
                        -+-
8
                        / \ 3.6V Z-Diode
9
                        -+-
10
                         |
11
AVR/GND o----------------+---o S35 Pin 1

Jetzt muss ich es nur noch hinkriegen, die Ausgabe vom Handy an das LCD 
in Klartext umzuwandeln...

von Bastian F. (bastian_f)


Lesenswert?

Bastian F. schrieb:
> Jetzt muss ich es nur noch hinkriegen, die Ausgabe vom Handy an das LCD
> in Klartext umzuwandeln...

Anstatt lcd_string und Variablen-/Arrayverwurschtelei einfach lcd_data 
verwenden hat was ;)

Nun gibt es aber folgendes Problem.
Das Handy reagiert brav auf uart_puts("AT^SMSO\r"); und geht aus, bei 
allen anderen Befehlen wie zB uart_puts("AT+CGMI\r");  bekomme ich immer 
einen ERROR ausgegeben. Woran liegt das denn nun?

von Beobachter (Gast)


Lesenswert?

wahrscheinlich daran das der Befehl vom Handy nicht unterstützt wird
oder ein Syntax-Fehler im Befehl. Eventuell gibt es ja eine
AT-Befehlsliste des Handys im www.

von Bastian F. (bastian_f)


Lesenswert?

Ja, die gibt es. Und genau daher habe ich den Befehl.
Unterstützt wird er auch, da der selbe Befehl via Hterm mit einem OK und 
entsprechender Ausgabe quittiert wird.

von cskulkw (Gast)


Lesenswert?

Beim S25 antwortet das Telefon bei 19200 kBaud sauber, wie man es vom 
Hyperterminal etc. gewohnt ist. Bei anderen Baudraten mußte ich immer 
Byteweise mit einer wartezeit zw. den Bytes senden. Das Autobauding hat 
bei dem Handy wohl seine Grenzen.

Aber Du solltest besser \r\n (0x0D, 0x0A) beim Senden benutzen. Bei 
manchen Befehlen funktioniert die Akzeptanz auch bei mir nicht.

Mit dem S25 kodiere und dekodiere ich SMS, die im PDU-Format gesendet 
werden. Bei eine SMS von 160 Zeichentext, mußte der Controler schnell 
mal 500 Byte verarbeiten können. Deshalb habe ich mir dann einen Mega 
mit mehr RAM ausgesucht. Wenn Du mehr vorhaben solltest, könnte Dir der 
RAM im mega8 irgendwann zu eng werden.

Der ATmega644P (DIP) kann noch im STK500 betrieben werden, hat 4 k RAM, 
kostet ca. 6-7 Euro bei Reichelt und hat ein OCD zum Debuggen on Chip. 
Außerdem kannst Du den mit 20Mhz betreiben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.