| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
Глючит uasart в mega16
11.06.2013, 11:32
|
|
|
Прописка
Регистрация: 04.11.2007
Сообщений: 100
Сказал спасибо: 61
Сказали Спасибо 173 раз(а) в 33 сообщении(ях)
|
Re: Глючит uasart в mega16
У меня на 2313 такое было разок - либо кварц ставить либо контролер менять, от внутреннего генератора этот мк так и не получилось связать с терминалом Упсс пропустил что от кварца... Может все таки кварц подглючивает?
Последний раз редактировалось igor351; 11.06.2013 в 11:35.
|
|
|
|
11.06.2013, 13:55
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
|
Re: Глючит uasart в mega16
1. Причина смены IDE? Был ли перенос на другой ПК/другая ОС? - возможно причина кракозябр кроется в ОС (кодовая страница терминала)
2. Модем с МК работает то? кракозябры только в терминале?
3. Очень редко, но бывает - какая либо опция оптимизации линковщика убирает из програмы код, по её мнению "не обязательный"
|
|
|
|
11.06.2013, 14:15
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
|
Re: Глючит uasart в mega16
внимательнее посмотрел на "буфер" и исходник... судя по содержимому буфера это не кодировка терминала, а всё таки или частота кварца или настройки UART (чтоб лишний раз убедиться - посылать по одному символу и смотреть эхо ответ модема)
1. почему скорость 9600? у модемов она обычно 57200
2. почему кварц 8МГц? лучше уж 11059200Гц, или другой с % ошибок 0!
3. в функцию USART_Init настоятельно рекомендую добавить код проверки пуст ли приёмник и передатчик (иначе UART однажды может просто заткнуться, поможет только выключение питания)
4. и очень, очень внимательно читать DataSheet на все устройства
|
|
|
|
11.06.2013, 15:14
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Глючит uasart в mega16
Сообщение от TechMike
|
|
Глючит uasart в mega16
|
Прочтите наконец инструкцию.
|
|
|
|
11.06.2013, 16:00
|
|
|
Временная регистрация
Регистрация: 12.11.2008
Адрес: LT
Сообщений: 69
Сказал спасибо: 12
Сказали Спасибо 33 раз(а) в 23 сообщении(ях)
|
Re: Глючит uasart в mega16
Сообщение от TechMike
|
|
Второй день бьюсь с проблемой обмена mega16 с siemens tc35
|
Скорости явно не совпадают - в буфере, что ни число, то несколько нулей подряд в бинарном виде. И символов в два раза больше - скорость usart МК примерно в два раза больше. Смотрите отладчиком что в UBRR, правильно ли установлен бит U2X. Наконец, сделайте вставку с постоянной посылкой 0x55 и осциллографом гляньте.
|
|
|
|
11.06.2013, 22:02
|
|
|
Вид на жительство
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Глючит uasart в mega16
По порядку:
1. заменил МК на заведомо рабочий - не помогло, симптомы теже.
2. из терминала дал модему команды:
|
Код:
|
AT+IPR=9600
OK
AT+IPR?
+IPR: 9600
OK
AT&W0
OK |
Передернул питания всего, теперь модем выдает
Т.е. команду модем понял - проблему это не решило.
3. настраиваю usart вот так:
|
Код:
|
void USART_Init(unsigned int ubrr)
{
/* Set baud rate */
UBRRH = 0b00000000;
UBRRL =0b00110011;
/* Enable receiver and transmitter */
UCSRB = (1‹‹RXEN)|(1‹‹TXEN)|(1‹‹RXCIE);
/* Set frame format: 8data, 1stop bit, Parity Disabled, Asynchronous Operation*/
UCSRC = (1‹‹URSEL)|(0‹‹USBS)|(3‹‹UCSZ0);
} |
Смотрю в отладке и датащит конечно, все верно, но проблема остается.
4. пытаюсь всю настройку usart переделать на побитное присвоение вот так:
|
Код:
|
void USART_Init(unsigned int ubrr)
{
/* Set baud rate */
UBRRH = 0b00000000;
UBRRL =0b00110011;
/* Enable receiver and transmitter */
//UCSRB = (1‹‹RXEN)|(1‹‹TXEN)|(1‹‹RXCIE);
UCSRA=0b00000011;
UCSRB = 0b00011011;
/* Set frame format: 8data, 1stop bit, Parity Disabled, Asynchronous Operation*/
//UCSRC = (1‹‹URSEL)|(0‹‹USBS)|(3‹‹UCSZ0);
UCSRC =0b01100001;
} |
Не помогло но теперь МК не выдает ничего в модем. Пока разбираюсь, но судя по отладке, не ставится бит RXEN в UCSRB, хотя присваиваю его =1.
5. проверяю монтаж, передергиваю провода на макетке - результат нулевой, проблема та же.
|
|
|
|
12.06.2013, 10:42
|
|
|
Прописка
Регистрация: 25.02.2011
Сообщений: 122
Сказал спасибо: 61
Сказали Спасибо 23 раз(а) в 19 сообщении(ях)
|
Re: Глючит uasart в mega16
Возможен и глюк компилятора. У меня раз были траблы в 6-ой атмеловской студии с мегой 32. Когда в мейк-файле была прописана ATmega32A, код неправильно работал с прерываниями (кажется...точно не помню). Нужно было исправить на ATmega32(без буквы А), и всё заработало.
|
|
|
|
12.06.2013, 17:09
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 02.03.2011
Адрес: Россия, КБР
Сообщений: 629
Сказал спасибо: 108
Сказали Спасибо 596 раз(а) в 334 сообщении(ях)
|
Re: Глючит uasart в mega16
Внимательно смотрим секцию Include...
Я не увидел подключения необходимого файла с описанием специфики данного конкретного чипа (регистр=адрес, бит=номер). Файл должен имеет название iom16.h или наподобие (WinAvr не пользуюсь). Подключить к проекту просто io.h не достаточно.
я инициализацию делаю так (Mega162, 11059200Hz):
void uart0_init(void) //UART0 initialisation 9600bps
{
unsigned char a;
UCSR0B = 0x00; //disable while setting baud rate
while( (UCSR0A & (1‹‹RXC0)) ) a=UDR0;
while( (UCSR0A & (1‹‹TXC0)) ) ;
UCSR0A = 0x00; //0x02
UCSR0C = 0xA6; //parity: Even, char size: 8 bit
UBRR0L = 0x47; //set baud rate lo
UBRR0H = 0x00; //set baud rate hi
UCSR0B = 0xD8; //
}
Последний раз редактировалось vynt; 12.06.2013 в 17:37.
|
|
|
|
12.06.2013, 22:22
|
|
|
Вид на жительство
Регистрация: 02.11.2008
Сообщений: 319
Сказал спасибо: 17
Сказали Спасибо 11 раз(а) в 11 сообщении(ях)
|
Re: Глючит uasart в mega16
Сообщение от vynt
|
Внимательно смотрим секцию Include...
Я не увидел подключения необходимого файла с описанием специфики данного конкретного чипа (регистр=адрес, бит=номер). Файл должен имеет название iom16.h или наподобие (WinAvr не пользуюсь). Подключить к проекту просто io.h не достаточно.
я инициализацию делаю так (Mega162, 11059200Hz):
void uart0_init(void) //UART0 initialisation 9600bps
{
unsigned char a;
UCSR0B = 0x00; //disable while setting baud rate
while( (UCSR0A & (1‹‹RXC0)) ) a=UDR0;
while( (UCSR0A & (1‹‹TXC0)) ) ;
UCSR0A = 0x00; //0x02
UCSR0C = 0xA6; //parity: Even, char size: 8 bit
UBRR0L = 0x47; //set baud rate lo
UBRR0H = 0x00; //set baud rate hi
UCSR0B = 0xD8; //
}
|
Подключено все правильно, это рекомендации GCC(WinAvr) нужно подключить io.h и потом в makefile описать тип МК.
Попробовал как вы рекомендовали инициализировать usart - не помогло.
|
Код:
|
void USART_Init(unsigned int ubrr)
{
unsigned char a;
UCSRB = 0x00; //disable while setting baud rate
while( (UCSRA & (1‹‹RXC)) ) a=UDR;
while( (UCSRA & (1‹‹TXC)) ) ;
UCSRA = 0x00; //0x02
UCSRC = 0xA6; //parity: Even, char size: 8 bit
UBRRL = 0b00110011; //set baud rate lo
UBRRH = 0x00; //set baud rate hi
/* Enable receiver and transmitter */
UCSRB = (1‹‹RXEN)|(1‹‹TXEN)|(1‹‹RXCIE);
/* Set frame format: 8data, 1stop bit, Parity Disabled, Asynchronous Operation*/
UCSRC = (1‹‹URSEL)|(0‹‹USBS)|(3‹‹UCSZ0);
} |
|
|
|
|
12.06.2013, 23:45
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.06.2005
Сообщений: 942
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
|
Re: Глючит uasart в mega16
Сообщение от TechMike
|
//UCSRC = (1‹‹URSEL)|(0‹‹USBS)|(3‹‹UCSZ0);
UCSRC =0b01100001;
|
Хинт: это вовсе не равнозначные записи. Даже если оно и запишется в правильный регистр, в чём сомневаюсь, т.к. бит7, урсел который, равен 0, и значит значение пойдёт не в управляющий регистр, а в битрейт(убрраш), делая его далеко не 9600, то ты получишь синхронный режим, евен парити, символ 5 бит, и вдобавок поменяешь полярность клока.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:26.
|
|