Hey Leute,ich weiß zu diesem Thema gibts schon viel zu viele Beiträge
aber ich häng absolut fest und hoffe jemand hat den entscheidenden Tip
für mich. Ich möchte mit nem uC eine SMS über ein Handy verschicken. Um
klein anzufangen,versuche ich zuerst mit dem uC einen Datenanruf übers
Handy einzuleiten...
Ich habe zwei verschiedene Handys zum basteln hier. Ein Nokia7110 und
ein Samsung SGH-M300. Für beide Handys hab ich je ein Serielles
Datenkabel. Wenn ich nun ein Handy an den Rechner anschließe und den
Com-Port öffne. Muss ich dort nur ATD und meine Nummer hinschicken und
das ganze mit h0D abschließen und der Datenanruf wird aufgebaut...
(Soweit so gut)
Habe jetzt nen uC (Atmega8) der auf nem STK500 sitzt so programmiert das
er die gleichen Daten rausschickt... Wenn ich den an den PC anschließe
klappt das auch wunderbar und es kommen am PC die Modembefehle vom uC
an...
Nur passiert halt leider nix wenn ich das STK500 an eins der Handys
anschließe. Habe das ganze schon mit nem gekauften Nullmodemkabel
getestet und mit nem 3 Poligen selbstgebastelten. Nix klappt!
Hier mal der Code vom uC:
1 | /* UART-Init beim AT90S2313 */
|
2 | #include <avr/io.h>
|
3 |
|
4 | #ifndef F_CPU
|
5 | /* In neueren Version der WinAVR/Mfile Makefile-Vorlage kann
|
6 | F_CPU im Makefile definiert werden, eine nochmalige Definition
|
7 | hier wuerde zu einer Compilerwarnung fuehren. Daher "Schutz" durch
|
8 | #ifndef/#endif
|
9 |
|
10 | Dieser "Schutz" kann zu Debugsessions führen, wenn AVRStudio
|
11 | verwendet wird und dort eine andere, nicht zur Hardware passende
|
12 | Taktrate eingestellt ist: Dann wird die folgende Definition
|
13 | nicht verwendet, sondern stattdessen der Defaultwert (8 MHz?)
|
14 | von AVRStudio - daher Ausgabe einer Warnung falls F_CPU
|
15 | noch nicht definiert: */
|
16 | #warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 8000000"
|
17 | #define F_CPU 8000000UL // Systemtakt in Hz - Definition als unsigned long beachten
|
18 | // Ohne ergeben sich unten Fehler in der Berechnung
|
19 | #endif
|
20 |
|
21 | #define BAUD 9600UL // Baudrate
|
22 |
|
23 | #include <util/delay.h>
|
24 |
|
25 |
|
26 | // Berechnungen
|
27 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
|
28 | #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
|
29 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) // Fehler in Promille, 1000 = kein Fehler.
|
30 |
|
31 | #if ((BAUD_ERROR<990) || (BAUD_ERROR>1010))
|
32 | #error Systematischer Fehler der Baudrate grösser 1% und damit zu hoch!
|
33 | #endif
|
34 |
|
35 |
|
36 | /* USART-Init beim ATmega8 */
|
37 |
|
38 | int main(void)
|
39 | {
|
40 | UCSRB |= (1<<TXEN); // UART TX einschalten
|
41 | UCSRC |= (1<<URSEL)|(3<<UCSZ0); // Asynchron 8N1
|
42 |
|
43 | UBRRH = UBRR_VAL >> 8;
|
44 | UBRRL = UBRR_VAL & 0xFF;
|
45 |
|
46 |
|
47 |
|
48 | while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */
|
49 | {
|
50 | }
|
51 |
|
52 | void long_delay(uint16_t ms) {
|
53 | for(; ms>0; ms--) _delay_ms(1);}
|
54 |
|
55 |
|
56 | UDR = 'A';
|
57 | long_delay(10);
|
58 | UDR = 'T';
|
59 | long_delay(10);
|
60 | UDR = 'D';
|
61 | long_delay(10);
|
62 |
|
63 | UDR = '0';
|
64 | long_delay(10);
|
65 | UDR = '2';
|
66 | long_delay(10);
|
67 | UDR = '4';
|
68 | long_delay(10);
|
69 |
|
70 | UDR = '1';
|
71 | long_delay(10);
|
72 | UDR = '4';
|
73 | long_delay(10);
|
74 | UDR = '0';
|
75 | long_delay(10);
|
76 |
|
77 | UDR = '0';
|
78 | long_delay(10);
|
79 | UDR = 'x';
|
80 | long_delay(10);
|
81 | UDR = 'x';
|
82 | long_delay(10);
|
83 |
|
84 |
|
85 | UDR = 'x';
|
86 | long_delay(10);
|
87 | UDR = 'x';
|
88 | long_delay(10);
|
89 | UDR = 13;
|
90 | long_delay(10);
|
91 |
|
92 |
|
93 | }
|
Ps: die letzten ziffern hab ich nur hier durch x ersetzt! Hoffe es weiß
jemand Rat... Vielen Dank schonmal für die Mühe, Rüdiger