|
sim300dz. Проблема с приемом данных на мк, USART&sim300dz |
|
|
|
Aug 27 2010, 07:09
|

Группа: Новичок
Сообщений: 7
Регистрация: 27-08-10
Пользователь №: 59 132

|
С первой задачей, а именно взаимодействие sim300dz и RS232(комп), я отлично справился. Посылаю данные через терминал, модуль адекватно реагирует, отвечает и выполняет команды. А вот с взаимодействием sim300dz и mega16 возникла проблема. Команды с контроллера успешно "доходят до жсм модуля" и выполняются (проверял, к примеру командой выключения AT+CPOWD=1 - модуль вырубается). Но на контроллер ответы приходят искаженные  . Ответы с sim300dz вывожу на LCD на базе hd44780. Вместо "OK" выводится "cPU", а на команду "AT+CSMINS?" приходит ответ "PCMM", ну и т.д. Причем это не наводки и не случайный мусор - ответы каждый раз одинаковые. Совсем в ступоре, почему на комп приходят нормальные ответы, а на контроллер кракозябры. По первому впечатлению ошибка в программной части, но я ничего не смог исправить. Очень надеюсь на вашу помощь. Напряжение на max3232 - 2.8V, кондеры 0.1 мкф, подключение по даташиту. Относительно mega16: 1) пробовал скорости обмена 9600, 115200 бод - ответы одинаковые и нечитаемые. 2) пробовал кварцы 4MHz и 7.3728Mhz - ответ на "AT" в первом случае был "b", во втором "cPU" Фьюзы(avr studio): CKOPT установлен, SUT_CKSEL = "Ext. Crystal/Resonator High Freq.; Start-up time: 16K CK + 64 ms" Далее привожу часть проги: CODE #define USART_BAUDRATE 9600 #define BAUD_PRESCALE ((F_CPU/(USART_BAUDRATE * 16UL)) - 1)
int main (void) { cli();
lcd_init(LCD_DISP_ON); lcd_puts("!LCD Test"); _delay_ms(1000); lcd_clrscr();
UCSRB |= (1 << RXEN) | (1 << TXEN); // Turn on the transmission and reception circuitry UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // Use 8-bit character sizes
UBRRL = BAUD_PRESCALE; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register UBRRH = (BAUD_PRESCALE >> 8); // Load upper 8-bits of the baud rate value into the high byte of the UBRR register
UCSRB = ((1<<TXEN)|(1<<RXEN) | (1<<RXCIE)); // Enable receiver and transmitter and receive complete interrupt sei(); // Enable the Global Interrupt Enable flag so that interrupts can be processed
USART_Transmit("AT\r\n");
lcd_puts("!z"); //debug message _delay_ms(1000);
USART_Transmit("AT+CSMINS?\r\n"); lcd_puts("!z"); //debug message
for (;;) {} }
ISR(USART_RXC_vect) { char ReceivedByte; ReceivedByte = UDR; // Fetch the recieved byte value into the variable "ByteReceived"
lcd_putc(ReceivedByte);
/*if(ReceivedByte=='O'||ReceivedByte=='o') lcd_puts("(o)"); if(ReceivedByte=='K'||ReceivedByte=='k') lcd_puts("(k)"); - и это писал, т.к. даже в кодировке LCD засомневался*/ }
Сообщение отредактировал Aleksey N. - Aug 27 2010, 07:13
|
|
|
|
|
Aug 27 2010, 10:52
|

Группа: Новичок
Сообщений: 7
Регистрация: 27-08-10
Пользователь №: 59 132

|
Цитата(CADiLO @ Aug 27 2010, 13:28)  А мега что, тоже через MAX3232 подключена ?
Как Вы мегу согласовываете с модулем ? Да, мега через MAX3232: 14 ножка макса (Т1out) -> Rx меги, 13-ая(R1in) -> Tx меги 12-ая макса (R1out) -> RXD жсм модуля 11-ая макса (T1in) -> TXD жсм модуля Конденсаторы 0.1 мкф по даташиту
Сообщение отредактировал Aleksey N. - Aug 27 2010, 10:54
|
|
|
|
|
Aug 27 2010, 10:57
|

Группа: Новичок
Сообщений: 7
Регистрация: 27-08-10
Пользователь №: 59 132

|
Цитата(kovz @ Aug 27 2010, 13:58)  1. "AT\r\n" - в командах отсылаемых модему \n не нужен 2. ответ "OK" от модема будет прислан как "\r\nOK\r\n". Это касается всех ответов за очень редким исключением. 3. успевает ли вывестись символ на экран, до того как будет получен новый(зависит от реализации lcd_putc() )? Это можно узнать проверив флаг переполнения буфера приема перед чтением очередного байта. Спасибо, kovz, внесу коррективы в программу и проверю еще раз
|
|
|
|
|
Aug 27 2010, 11:13
|

Группа: Новичок
Сообщений: 7
Регистрация: 27-08-10
Пользователь №: 59 132

|
Цитата(Slonofil @ Aug 27 2010, 16:53)  Ай-ай-ай, надо же документацию читать внимательно! МАХ нужна только при подключении SIM к ПК, при соединении модема с МК нужно лишь согласовать уровни при питании МК свыше 3В. А МК у меня питается от 5В Цитата(CADiLO @ Aug 27 2010, 16:59)  Да уж - выход макса который может быть до 12 вольт подать на мегу..... Жестоко.....
Изучаем форум - вопрос согласования разбирался неоднократно. Ээ, мда, я думал выход макса3232 ~5В, а макса232 ~12В. Извините если не прав, щас возьму даташит CADiLO, спасибо за замечание. Я очень жестоко ошибся с уровнем T_OUT
|
|
|
|
|
Aug 27 2010, 11:45
|

Местный
  
Группа: Участник
Сообщений: 327
Регистрация: 6-10-09
Из: РФ :: Ленинград
Пользователь №: 52 781

|
В принципе, подавая на МЕГУ напряжение с выхода МАХ, ничего страшного произойти не должно. У драйверов RS-232 выходное напряжение не превышает удвоенного напряжения питания (внутри стоит DC/DC удвоитель, для чего снаружи обычно подключаются конденсаторы). Поэтому для МАХ3232 напряжение на выходе не должно быть больше 6В. Плюс к этому, входы МЕГИ должны иметь ограничительные диоды на землю и питание. Это я к тому, что сжечь контроллер Вы, конечно, не сожгли, но такая схема включения не будет работоспособна. Модем имеет входные-выходные уровни в ТТЛ, т.е. 0...0,3В - это лог.0, 0,8*VCC...VCC - это лог.1. У интерфейса RS-232 всё по-другому.
|
|
|
|
|
Aug 27 2010, 12:09
|

Гуру
     
Группа: Свой
Сообщений: 6 023
Регистрация: 26-08-05
Из: Днепр
Пользователь №: 7 988

|
Добавлю что дело даже не в повышеном напряжении. На RS-232 ведь формируется еще и отрицательное напряжение. А по спецификации может гулять от 3 до 12 вольт как в плюс так и в минус. Вобщем товарищу нужно сделать просто нормальное согласование из 5 в 2.8 и большая часть проблем пропадет. Посмотреть можно тут. http://microchip.ua/simcom/GSM-GPRS-GPS/Ap...seminar2009.pptстраничка 24 и потом здесь http://microchip.ua/simcom/GSM-GPRS-GPS/Ap...0%20seminar.pptстраничка 16 Ну и вообще полезно оба семинара прочитать....
--------------------
Не можна втрачати надію. Не можна здаватися до останньої миті. Можливо саме вона, остання мить, принесе весну, яка стане початком нового життя.
|
|
|
|
|
Aug 27 2010, 12:26
|

Группа: Новичок
Сообщений: 7
Регистрация: 27-08-10
Пользователь №: 59 132

|
Спасибо всем за помощь, буду разбираться...
|
|
|
|
|
Aug 27 2010, 16:23
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 13-03-07
Пользователь №: 26 123

|
Вопрос к CADiLO.
Так можно ли подключаться к SIM300 от контроллера с питанием 3.3В с использованием последовательных резисторов? Недавно на форуме вы вроде бы говорили, что только 3В допустимо. Теоретически, по аналогии с микроконтроллерами с защитными диодами, работать с 3.3В сигналами и резисторами модуль должен, но как происходит реально в жизни, сталкивались ли вы (или ваши клиенты) с проблемами при 3.3В питании?
|
|
|
|
|
Aug 28 2010, 09:24
|

Группа: Новичок
Сообщений: 7
Регистрация: 27-08-10
Пользователь №: 59 132

|
1. Цитата(CADiLO @ Aug 27 2010, 18:09)  Добавлю что дело даже не в повышеном напряжении. На RS-232 ведь формируется еще и отрицательное напряжение. А по спецификации может гулять от 3 до 12 вольт как в плюс так и в минус. Вобщем товарищу нужно сделать просто нормальное согласование из 5 в 2.8 и большая часть проблем пропадет. CADiLO, повторюсь еще раз, что команды, передаваемые с контроллера на sim, успешно выполняются модулем. Проблема только с приемом ответа, т.е. с цепочкой MAX T_OUT <-> MEGA RX. Я взял осциллограф и подцепился к T_OUT макса. Высокий уровень сигнала составил ~5.5 В, низкий ~ -3.5 В. Помойму даже при прямом подключении MAX T_OUT <-> MEGA RX контроллер должен корректно обработать уровни напряжений и выдать читаемый ответ(, но у меня вместо "ОК" - "PC"). - или я не прав? 2. Цитата(Slonofil @ Aug 27 2010, 17:45)  Модем имеет входные-выходные уровни в ТТЛ, т.е. 0...0,3В - это лог.0, 0,8*VCC...VCC - это лог.1. У интерфейса RS-232 всё по-другому. Честно говоря, поиском не утруждал себя, поскольку щас немного тороплюсь, поэтому задам вопрос: у меня в голове небольшая нестыковка между утверждениями * Все нижеперечисленные(TXD, RXD,...) сигналы (кроме ADC) имеют логический уровень 2.8V (SIM300 seminar.ppt, 12 page) * Цитата(Slonofil @ Aug 27 2010, 17:45)  Модем имеет входные-выходные уровни в ТТЛ, 0,8*VCC...VCC - это лог.1 - т.е. примерно 3.2В - 4.0 В. Будьте добры, разъясните, если не сложно.
Сообщение отредактировал Aleksey N. - Aug 28 2010, 09:24
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|