Aleksey N.
Aug 27 2010, 07:09
С первой задачей, а именно взаимодействие 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 засомневался*/
}
CADiLO
Aug 27 2010, 07:28
А мега что, тоже через MAX3232 подключена ?
Как Вы мегу согласовываете с модулем ?
1. "AT\r\n" - в командах отсылаемых модему \n не нужен
2. ответ "OK" от модема будет прислан как "\r\nOK\r\n". Это касается всех ответов за очень редким исключением.
3. успевает ли вывестись символ на экран, до того как будет получен новый(зависит от реализации lcd_putc() )? Это можно узнать проверив флаг переполнения буфера приема перед чтением очередного байта.
Aleksey N.
Aug 27 2010, 10:52
Цитата(CADiLO @ Aug 27 2010, 13:28)

А мега что, тоже через MAX3232 подключена ?
Как Вы мегу согласовываете с модулем ?
Да, мега через MAX3232: 14 ножка макса (Т1out) -> Rx меги, 13-ая(R1in) -> Tx меги
12-ая макса (R1out) -> RXD жсм модуля
11-ая макса (T1in) -> TXD жсм модуля
Конденсаторы 0.1 мкф по даташиту
Slonofil
Aug 27 2010, 10:53
Ай-ай-ай, надо же документацию читать внимательно! МАХ нужна только при подключении SIM к ПК, при соединении модема с МК нужно лишь согласовать уровни при питании МК свыше 3В.
Aleksey N.
Aug 27 2010, 10:57
Цитата(kovz @ Aug 27 2010, 13:58)

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

Ай-ай-ай, надо же документацию читать внимательно! МАХ нужна только при подключении SIM к ПК, при соединении модема с МК нужно лишь согласовать уровни при питании МК свыше 3В.
А МК у меня питается от 5В
Цитата(CADiLO @ Aug 27 2010, 16:59)

Да уж - выход макса который может быть до 12 вольт подать на мегу..... Жестоко.....
Изучаем форум - вопрос согласования разбирался неоднократно.
Ээ, мда, я думал выход макса3232 ~5В, а макса232 ~12В. Извините если не прав, щас возьму даташит
CADiLO, спасибо за замечание. Я очень жестоко ошибся с уровнем T_OUT
у max3232 нижний предел напряжений ниже.
Slonofil
Aug 27 2010, 11:45
В принципе, подавая на МЕГУ напряжение с выхода МАХ, ничего страшного произойти не должно. У драйверов RS-232 выходное напряжение не превышает удвоенного напряжения питания (внутри стоит DC/DC удвоитель, для чего снаружи обычно подключаются конденсаторы). Поэтому для МАХ3232 напряжение на выходе не должно быть больше 6В. Плюс к этому, входы МЕГИ должны иметь ограничительные диоды на землю и питание. Это я к тому, что сжечь контроллер Вы, конечно, не сожгли, но такая схема включения не будет работоспособна. Модем имеет входные-выходные уровни в ТТЛ, т.е. 0...0,3В - это лог.0, 0,8*VCC...VCC - это лог.1. У интерфейса RS-232 всё по-другому.
CADiLO
Aug 27 2010, 12:09
Добавлю что дело даже не в повышеном напряжении. На 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
Ну и вообще полезно оба семинара прочитать....
Aleksey N.
Aug 27 2010, 12:26
Спасибо всем за помощь, буду разбираться...
Mitsufan
Aug 27 2010, 16:23
Вопрос к CADiLO.
Так можно ли подключаться к SIM300 от контроллера с питанием 3.3В с использованием последовательных резисторов? Недавно на форуме вы вроде бы говорили, что только 3В допустимо. Теоретически, по аналогии с микроконтроллерами с защитными диодами, работать с 3.3В сигналами и резисторами модуль должен, но как происходит реально в жизни, сталкивались ли вы (или ваши клиенты) с проблемами при 3.3В питании?
Aleksey N.
Aug 28 2010, 09:24
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 29 2010, 14:57
Хотел было ехать за буферами К155ЛП9 (хотел сделать схему из семинара MCU 5.0V <-> SIM), но... Проблему решил 3-вольтовым питанием МК.
CADiLO
Aug 30 2010, 06:20
>>>Модем имеет входные-выходные уровни в ТТЛ, 0,8*VCC...VCC - это лог.1- т.е. примерно 3.2В - 4.0 В.
>>>Будьте добры, разъясните, если не сложно.
Не сложно. Обычная описка, потому как в даташите SIM300DZ_HD_V2.07.pdf (где и следовало посмотреть) сказано 0,7*2.93...2.93.
А для SIM300C 0,8*VDD_EXT...VDD_EXT Где VDD_EXT = 2.9v.
Кстати для SIM900 фокус с согласованием резисторами с процем на 3.3 вольта уже нежелателен. Потому как в 300й серии супрессоры защитные стояли на 3.6 вольта, а в 900й стоят на 3.3 вольта. Малейшее превышение и.....
ArtemKAD
Aug 30 2010, 07:36
Цитата
Малейшее превышение и.....
... через резистор потечет ток. В чем проблема? Типовая схема согласования часть которой внутри модуля. Главное что-бы резистор был. Иначе таки точно "Малейшее превышение и..."
Slonofil
Aug 30 2010, 07:43
На самом деле, это не описка. Это изложение принципа различения уровней ТТЛ. Вместо VCC для обычных мелкосхем подставляйте VDD_EXT для модема; 0,7 или 0,8 как множитель - не существенно, главное принцип. Надо иметь в виду, что внутри модема есть линейный стаб для питания цифровой части (те самые 2,9...3В), вот от них и надо отталкиваться. Питание модема 3,7...4,2В подаётся, насколько я понимаю, на радиочастотную часть.
Отличие RS-232 от ТТЛ состоит в том, что у него есть отрицательный потенциал (до -18В по стандарту). И пороговые уровни лог.0 и лог.1 тоже отличаются от ТТЛовских. Поэтому Вам в Вашей схеме МАХ вообще не нужна, следует лишь согласовать уровни модема и контроллера. Идеально, конечно, запитывать МК от 3В, тогда никаких дополнительных согласующих элементов не понадобится.
CADiLO
Aug 30 2010, 08:32
Согласен - я выбрал неудачное слово. Просто Вы дали общее описание, а товарищ понял его применимо к конкретному случаю. Бывает....
>>>>Идеально, конечно, запитывать МК от 3В, тогда никаких дополнительных согласующих элементов не понадобится.
Тем более что 3-вольтовые контроллеры сейчас на любой вкус выпускаются....
Ну и про резисторы на SIM900 - если на SIM300 работало 150-220 ом, то на SIM900 меньше 200ом уже открывается защита - порт не работает, а больше 220ом - искажается обмен на скорости выше 9600. Это то что мне попалось увидеть. Так что для массового выпуска я бы на резисторах не делал. Лучше поставить нормальный контроллер 3в. Не, ну можно еще 5% 200ом
Slonofil
Aug 30 2010, 08:41
Кстати, поскольку работаю с PIC от Microchip, хотел бы услышать рекомендацию. Где-то встречал, что под трёхвольтовое питание нужно брать PIC18LF. В то же время, в доках на тот же PIC18F4520 указано, что он спокойно будет работать от 3В (практика показала, что он только шьётся долго). Так как быть?
rx3apf
Aug 30 2010, 09:07
Цитата(CADiLO @ Aug 30 2010, 12:32)

то на SIM900 меньше 200ом уже открывается защита - порт не работает, а больше 220ом - искажается обмен на скорости выше 9600. Это то что мне попалось увидеть. Так что для массового выпуска я бы на резисторах не делал. Лучше поставить нормальный контроллер 3в. Не, ну можно еще 5% 200ом

Хм. У меня питание контроллера около 3.6, резисторы 1 кило последовательно просто как защита, и еще 4.7K на "землю" для снижения уровня. На 115200 - без проблем. Килоомные резисторы и на 4 MHz SPI проблем не вызывали. Ну тут да, супрессоры, емкость... Однако ж еще у меня там для отладки FT232 стоит, через те же резисторы - так флешер на 460800 тоже без сбоев работает. Я что-то не так делаю ?
P.S. Супрессоры, говорите ? И как тогда получается емкость порядка 20..30 pF по ноге (это я в макете глянул, там от монтажа и разъема еще 5...10 набежало как минимум)...
Prizrac
Aug 30 2010, 10:33
Я думаю если питание м.к. будет 4в и модуля тоже праблем недалжно быть и ненада мудрить можно даже напрямую уменя 4.8в общее питание и подключение зделал напримую нармально работает с (sim300).
Slonofil
Aug 30 2010, 10:37
Цитата(Prizrac @ Aug 30 2010, 14:33)

Я думаю если питание м.к. будет 4в и модуля тоже праблем недалжно быть и ненада мудрить можно даже напрямую уменя 4.8в общее питание и подключение зделал напримую нармально работает с (sim300).
Это из разряда "Вредные советы"

Скажите, как зовутся Ваши устройства... чтобы уберечься от покупки
Prizrac
Aug 30 2010, 10:48
<Это из разряда "Вредные советы"
Скажите, как зовутся Ваши устройства... чтобы уберечься от покупки >
это 3 года назат было ненайдете но работало нормално я думаю от 3 до 4 в если питание обшее будет нармально, что в этом нетак??
просто 4.8 мне нужно было.
Slonofil
Aug 30 2010, 11:12
Просто нужно ВНИМАТЕЛЬНО читать документацию на модуль. Её не просто так пишут. Может, это и будет работать, но стабильность и отказоустойчивость устройства, сделанного таким подходом, невероятно низка. Если написано, что на вход нужно подавать 3В, значит не 4,5 надо подавать, а 3. Это большая разница!
Prizrac
Aug 30 2010, 11:22
Там 3,2 + 0,7 а не 3 ...? насколько я помню.
CADiLO
Aug 30 2010, 11:40
Плохо помним - там абсолютное максимальное значение для цифровых входов 3.3 вольта. Номинальное 2.98
Вывод - в даташит даже не заглядывали.
Для SIM900 эти же параметры составляют соответственно 3.1 и 2.8 вольта.
Slonofil
Aug 30 2010, 11:41
Вот Вам выдержки из Hardware Design и семинара. Память может отказать, поэтому при проектировке почаще заглядывайте в документацию.
ArtemKAD
Aug 30 2010, 11:59
Цитата
это 3 года назат было ненайдете но работало нормално я думаю от 3 до 4 в если питание обшее будет нармально, что в этом нетак??
просто 4.8 мне нужно было.
Не так уровни от модуля к процессору и большие токи через порты если нет резистора от процессора к модулю.
Рекомендация из разряда "так делать очень плохо". Хорошо если повезет и неприятности вылезут сразу. А если пойдет в серию эта дрянь может вылезать к примеру при изменении температуры...
Prizrac
Aug 30 2010, 12:37
да уже прасматриваю, а за дезинфармацию извиняюсь...
Цитата
а для sim900 такое есть, или это и к sim900 относяца ?????
CADiLO
Aug 31 2010, 06:29
На 90% вышесказаное относится и к SIM900.
Естественно с учетом даташита на него.
Prizrac
Sep 1 2010, 04:26
я прасматрел дествительно я не так помнил у меня на сим300 было 3.8в а не 4.8в не так помнил, ето било давно.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.