В Siemens MC35i команда дозвона без точки-запятой - это дозвон по протоколу CSD, передача данных. Он не подключен по умолчанию во всех операторах, в МТС например отключен. Команда с точкой-запятой - это и есть "обычная команда дозвона" в голосовом режиме. И после установки соединения тоже ничего не пишется.
Теперь моя проблемма:
(очень схожая с тем, о чем писал топикстартер)
- микроконтроллер Atmega8,
- GSM-модем Siemens MC35i,
- микросхема MAX232, кварцевый резонатор 12МГц.
Задача: по команде микроконтроллера модем должен позвонить на указанный номер.
Детально: в микроконтроллер зашита АТ-комманда для модема. Через микросхему МАХ232 подключаюсь к СОМ-порту, и вижу, что АТ-команды проходят как и должно, - не крокозябрами а нормальным текстом, с заданными интервалами, на частоте 9600, каждая с новой строки.
Подключаю модем к СОМ-порту, вбиваю через гипертерминал те же АТ-комманды и вижу, что модем на них реагирует корректно.
Подключаю микроконтроллер к модему через МАХ232, и... облом.
В инете конкретных примеров решения этой задачи не нашел. В англоязычных статьях тоже, только куски кода, на словах все просто. Подскажите, пожалуйста, где я допустил ошибку.
Код прошивки, последний абзац: сначала задержка 7 сек., потом комманда АТ, потом варианты дозвона - через плюсик (выход на международный уровень) и без плюса, с пробелом после ATD и без, с разными вариантами перехода на новую строку. Звонки разделены паузами по 7 секунд, которых модему хватит чтобы установить соединение, а мне - чтобы сбросить.
Кроме того, в другом варианте прошивки я задавал прерывания через Wizzard (Interrupt Rx, Tx).
Программу собрал с использованием Code Vision AVR, фьюзы выставленны под внешний кварц.
Показать скрытый текст// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x4D;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
while (1)
{
// Place your code here
delay_ms(7000);
printf("\r\nAT\r\n");
delay_ms(7000);
printf("\r\nATD **********;\r\n");
delay_ms(7000);
printf("ATD **********;\r\n");
delay_ms(7000);
printf("ATD +**********;\r\n");
delay_ms(7000);
printf("ATD+**********;\r\n");
delay_ms(7000);
printf("ATD+**********; \r \n");
delay_ms(7000);
printf("ATD+**********;\n");
delay_ms(7000);
};
}
Скрыть текст