Forum: Mikrocontroller und Digitale Elektronik Problem: Siemens C35 per Mikrocontroller steuern funktioniert nicht?


von Panik (Gast)


Angehängte Dateien:

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
};

von Panik (Gast)


Lesenswert?

Need help!

von Panik (Gast)


Lesenswert?

Muss man zweischen den einzelnen Zeichen eine Pause machen oder ist das 
Handy schnell genug?

Ist schwierig ohne Oszi da was zu machen...

Muss man doch noch ein Paritätsbit hinzufügen???

von Panik (Gast)


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

von Avr N. (avrnix) Benutzerseite


Lesenswert?


von Panik (Gast)


Lesenswert?

Nein, mir fehlen die Bauteile dafür.
Ich habe aber auch schon kleinere Baudrate ausprobiert.

von Avr N. (avrnix) Benutzerseite


Lesenswert?

Der C35 arbeitet nur mit 19200 Baud, vielleicht liefert deine 
Kommunikation diese nicht - C kann ich leider nicht.

Hatte das mit Bascom gemacht http:\\www.comwebnet.de

von Panik (Gast)


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.

von Eddy Current (Gast)


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.

von Panik (Gast)


Lesenswert?

Du hast Recht, jetzt funktioniert es!!! Vielen Dank! :D

Man muss ohl wirklich sehr genau auf die Baudrate achtene.

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.