mikrocontroller.net

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


Autor: Panik (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.
#include <avr/io.h>
#include <stdint.h>
#include <util/delay.h>

void uart_puts (char *s);
int uart_putc(unsigned char c);
int uart_getchar (void);
void uart_clear(void);

int main(void)
{
  DDRD|=(1<<PD6);
  DDRB=0xff;
  char kommando[]="ATD053456786;"; 

  UBRRH=0;
  UBRRL=6;
  UCSRB|=(1 << TXEN) | (1<<RXEN);

  uart_clear();
  uart_puts(kommando);
  PORTB=uart_getchar();  //Antwort an Port ausgeben
  
  //Endlosschleife LED blinken lassen
  while(1)
  {
    for(char i=0;i<=100;i++)
      _delay_ms(10);
    PORTD^=(1<<PD6);
  }
  return 0;
}



int uart_putc(unsigned char c)
{
    while (!(UCSRA & (1<<UDRE)));  
    UDR = c;                     
    return 0;
};
 
void uart_puts (char *s)
{
    while (*s)
    {  
        uart_putc(*s);
        s++;
    }
  uart_putc('\r');
  uart_putc('\n');
};

int uart_getchar (void)
{
  while(!(UCSRA & (1<<RXC)));
  return(UDR);
};

void uart_clear (void)
{
  unsigned char a;
  for (char c=0;c<10;c++)
  {  
    a = UDR;
  }
};

Autor: Panik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Need help!

Autor: Panik (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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???

Autor: Panik (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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. :-(

Autor: Avr Nix (avrnix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du mal dein Handy über einen MAX232 Pegelwandler am PC 
angeschlossen und über Hyperterm ATZ etc. eine Verbindung ausprobiert ob 
es mit 19200 Baud geht?

Und hier noch paar Infos:

http://www.google.de/custom?hl=de&safe=active&clie...

Autor: Panik (Gast)
Datum:

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

Autor: Avr Nix (avrnix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Panik (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Eddy Current (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Panik (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast Recht, jetzt funktioniert es!!! Vielen Dank! :D

Man muss ohl wirklich sehr genau auf die Baudrate achtene.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.