Benni111
08.01.2008, 13:21
Aufgabenstellung:
Über meinen Microcontroller(ATmega32) mittels dem At-Befehlssatz eine
SMS mit meinem GSM-Modem(MC35i von Siemens) zu senden.
Problem:
Das SMS kommt einfach nicht an. Ich bin kein C Experte und verstehe
nicht wieso nichts funktioniert (Liegt wahrscheindlich am Coding).
Programmiert wird mittels PonyProg.
Dies ist ein Teil meiner Diplomarbeit und für mich eine sehr schwere
Hürde.
Hier mein Coding in AVR Studio 4:
#include <avr/io.h>
#include <util/delay.h>
int uart_putc(unsigned char c);
void SendeString (char *szBuf);
void long_delay(uint16_t ms);
int main(void)
{
int c=0;
UCSRA = 0x00; // MCU =ATMega32, F_CPU = 16Mhz, 9600 Baudrate
UCSRB = 0x18; //8 Bit , kein Parity, 1 Stopbit, Asynchron
UCSRC = 0x86;
UBRRH = 0x00;
UBRRL = 0x67;
if(c==0)
{
SendeString("at+cpin=0000\r\n"); //AT-Befehl zur Pineingabe
long_delay(2000); //2 sec warten //2 Sekunden Warteschleife
SendeString("at+cmgf=1\r\n"); //SMS-Ein und Ausgabe erfolgt
im 7Bit Klartext
long_delay(2000);
SendeString("at+cmgs=+436644209014\r\n"); //Zieladressnummer
nach Österreich A1
long_delay(2000);
SendeString("Test"); //SMS-Text
long_delay(2000);
uart_putc(0x1A); //Hex Code fuer Strg+Z wird gesendet
long_delay(5000);
c=1; // Überprüfung das SMS nur 1 mal gesendet wurde
}
return 0;
}
int uart_putc(unsigned char c)
{
while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */
{
}
UDR = c; /* sende Zeichen */
return 0;
}
void SendeString (char *szBuf) //Methode zum Senden
{
while (*szBuf++)
{
outp (*szBuf, UDR);
loop_until_bit_is_set (UCSRA, UDRE);
}
}
void long_delay(uint16_t ms) //Warteschleife
{
for(; ms>0; ms--) _delay_ms(1);
}
Über meinen Microcontroller(ATmega32) mittels dem At-Befehlssatz eine
SMS mit meinem GSM-Modem(MC35i von Siemens) zu senden.
Problem:
Das SMS kommt einfach nicht an. Ich bin kein C Experte und verstehe
nicht wieso nichts funktioniert (Liegt wahrscheindlich am Coding).
Programmiert wird mittels PonyProg.
Dies ist ein Teil meiner Diplomarbeit und für mich eine sehr schwere
Hürde.
Hier mein Coding in AVR Studio 4:
#include <avr/io.h>
#include <util/delay.h>
int uart_putc(unsigned char c);
void SendeString (char *szBuf);
void long_delay(uint16_t ms);
int main(void)
{
int c=0;
UCSRA = 0x00; // MCU =ATMega32, F_CPU = 16Mhz, 9600 Baudrate
UCSRB = 0x18; //8 Bit , kein Parity, 1 Stopbit, Asynchron
UCSRC = 0x86;
UBRRH = 0x00;
UBRRL = 0x67;
if(c==0)
{
SendeString("at+cpin=0000\r\n"); //AT-Befehl zur Pineingabe
long_delay(2000); //2 sec warten //2 Sekunden Warteschleife
SendeString("at+cmgf=1\r\n"); //SMS-Ein und Ausgabe erfolgt
im 7Bit Klartext
long_delay(2000);
SendeString("at+cmgs=+436644209014\r\n"); //Zieladressnummer
nach Österreich A1
long_delay(2000);
SendeString("Test"); //SMS-Text
long_delay(2000);
uart_putc(0x1A); //Hex Code fuer Strg+Z wird gesendet
long_delay(5000);
c=1; // Überprüfung das SMS nur 1 mal gesendet wurde
}
return 0;
}
int uart_putc(unsigned char c)
{
while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */
{
}
UDR = c; /* sende Zeichen */
return 0;
}
void SendeString (char *szBuf) //Methode zum Senden
{
while (*szBuf++)
{
outp (*szBuf, UDR);
loop_until_bit_is_set (UCSRA, UDRE);
}
}
void long_delay(uint16_t ms) //Warteschleife
{
for(; ms>0; ms--) _delay_ms(1);
}