Problem: Siemens C35 per Mikrocontroller steuern funktioniert nicht?

Gast #985000
Lesenswert?

Hi Gemeinde,

ich habe ein Problem beim Übertragen von Kommandos an ein Siemens C35.
Ich verwende einen ATtiny2313 der direkt mit dem Handy verbunden ist.
TxD (µC) --- Pin 6 (C35)
RxD (µC) --- Pin 5 (C35)
Dabei ist zusätzlich Pin4 mit einem Widerstand 5,5k nach Pin 6 verbunden 
wie hier beschrieben: http://www.heise.de/mobil/artikel/50892
Der Mikrocontroller wird mit 3,3V betrieben, externer Quarz 2MHz, 
Baudrate laut Datenblatt 19200.

Aber irgendwie macht das handy nichts, denn die LED blinkt nicht wenn 
ich uart_getchar() einfügen. Dass heißt ja dass kein Zeichen empfangen 
wird und deshalb ständig in der Funktion gewartet wird. lasse ich die 
Funktion weg, blinkt die LED natürlich.

Sieht jemand von euch den Fehler?

Muss man irgendwelche Initialisierung am Anfang durchführen bevor man 
dem Handy ein kommando schicken kann?
Ich habe nur das Dokument (siehe Anhang) zur Hand.

PS Die Telefonnummer hinter dem Kommando ATD ist wegen Datenschutz, für 
diesen Thread, einfach durch wahllose Kombination ersetzt worden.
1
#include <avr/io.h>
2
#include <stdint.h>
3
#include <util/delay.h>
4

5
void uart_puts (char *s);
6
int uart_putc(unsigned char c);
7
int uart_getchar (void);
8
void uart_clear(void);
9

10
int main(void)
11
{
12
  DDRD|=(1<<PD6);
13
  DDRB=0xff;
14
  char kommando[]="ATD053456786;"; 
15

16
  UBRRH=0;
17
  UBRRL=6;
18
  UCSRB|=(1 << TXEN) | (1<<RXEN);
19

20
  uart_clear();
21
  uart_puts(kommando);
22
  PORTB=uart_getchar();  //Antwort an Port ausgeben
23
  
24
  //Endlosschleife LED blinken lassen
25
  while(1)
26
  {
27
    for(char i=0;i<=100;i++)
28
      _delay_ms(10);
29
    PORTD^=(1<<PD6);
30
  }
31
  return 0;
32
}
33

34

35

36
int uart_putc(unsigned char c)
37
{
38
    while (!(UCSRA & (1<<UDRE)));  
39
    UDR = c;                     
40
    return 0;
41
};
42
 
43
void uart_puts (char *s)
44
{
45
    while (*s)
46
    {  
47
        uart_putc(*s);
48
        s++;
49
    }
50
  uart_putc('\r');
51
  uart_putc('\n');
52
};
53

54
int uart_getchar (void)
55
{
56
  while(!(UCSRA & (1<<RXC)));
57
  return(UDR);
58
};
59

60
void uart_clear (void)
61
{
62
  unsigned char a;
63
  for (char c=0;c<10;c++)
64
  {  
65
    a = UDR;
66
  }
67
};
Angehängte Dateien:
Gast #985585
Lesenswert?

Achso, Das Handy läuft mit dem original Akku. GND (Pin 1) ist mit GND 
vom Mikrocontroller verbunden.

Bin schon seid Stunden mit google und der Forumssuche beschäftigt was 
herauszufinden, aber einen passenden Beitrag habe ich noch nicht 
gefunden. :-(
Persönliche Seite #985590
Lesenswert?

Gast #985911
Lesenswert?

Also auf der seite war ich schon, aber leider ist diese nicht sehr 
hilfreich wenn man nur die Hex-Datei runterladen kann. :-(
Bringt einem ja wirklich nur was wenn man die Schaltung 1 zu 1 nachbaut.

Also eingetsellt habe ich 19200Baud.
Gast #985927
Lesenswert?

Dein Problem ist mindestens, dass dein exakter Wert für UBRR 5,5 wäre, 
daher hast Du eine zu grosse Abweichung mit demgerundeten Wert 6. Das 
kann nicht gehen.

Du must die UART mit x2 (Bit U2X in UCSRA) betreiben, womit der 
theoretische Wert 12,02 ist, womit der gerundete Wert 12 perfekt passt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren