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