Заголовок сообщения: пробема: ATmega16, UART и загадочное 128...
Добавлено: Пн май 07, 2012 17:00:33
Первый раз сказал Мяу!
Зарегистрирован: Ср мар 07, 2012 17:42:43 Сообщений: 30
Рейтинг сообщения:0
*СМОТРИМ ПОСЛЕДНЕЕ МОЁ СООБЩЕНИЕ* и немного это первое.
Перечисляю составлящие: Вот в этой теме расписано, включая фотографии, каким оборудованием пользуюсь viewtopic.php?f=20&t=71244 Осваиваю сейчас AVRStudo 4.17. Для связи ноута и платы использую переходник USB-RS232(модель ORIENT USS-101), т.е. на одном конце USB, на другом Ком-порт-папа. До этого им не пользовался. Для приёма сообщений использую самодельную прогу, которая ни разу не подводила до этого, но тестилась на компах с реальными ком портами. Но не думаю что дело в ней. Простенькая прошивка с оф сайта: (прошивка с того же сайта "поморгать диодами" встала как влитая)
Код:
/* Sample program for Olimex AVR-P40 with ATMega16 processor * Echoes back the received characters on the uart. In order to work, * connect the RX pad with PD1(pin 15) and TX pad with PD0(pin 14) * Compile with AVRStudio+WinAVR (gcc version 3.4.6) */
#define __AVR_ATmega16__ 1 #define OSCSPEED 8000000 /* in Hz */
int main() { unsigned char ch; int i; Initialize(); UARTInit(9600); while (1) { ch = UARTReceive(); if (ch) { UARTTransmit(ch);
} } }
т.е. принимаем символ и его же отсылаем. Проблема: При отсылке любого символа возвращается неизменно десятичное число "128". Скачал и ещё одну тестовую прошивку с оф сайта - результат тот же. Ощущение, что любой отсылаемый символ принимается ноутом(или ещё на стадии отсылки заменяется) как число "128". Есть предположения где ошибка?
_________________ "И потому безвестным будешь ты." (с) Троя
Последний раз редактировалось Ksar13th Вт май 08, 2012 12:53:49, всего редактировалось 2 раз(а).
Заголовок сообщения: Re: ATmega16, UART и загадочное 128...
Добавлено: Вт май 08, 2012 04:05:06
Первый раз сказал Мяу!
Зарегистрирован: Ср мар 07, 2012 17:42:43 Сообщений: 30
Рейтинг сообщения:0
Перепробовал всё, ничерта не помогает. Вместо нужных символов - получаю 128 0 128 0 128 и тп... попробую достать шнур для комп порта, подключу к стационарному компу с реальным ком портом и посмотрю что получится...
_________________ "И потому безвестным будешь ты." (с) Троя
Перепробовал всё, ничерта не помогает. Вместо нужных символов - получаю 128 0 128 0 128 и тп... попробую достать шнур для комп порта, подключу к стационарному компу с реальным ком портом и посмотрю что получится...
Может не то, но попробуйте вместо unsigned int BaudRate = OSCSPEED / (16 * Baud) - 1; поставить уже расчетное unsigned int BaudRate = 51;
Заголовок сообщения: Re: ATmega16, UART и загадочное 128...
Добавлено: Вт май 08, 2012 12:48:04
Первый раз сказал Мяу!
Зарегистрирован: Ср мар 07, 2012 17:42:43 Сообщений: 30
Рейтинг сообщения:0
Не помогло. Продолжаю вести репортаж с места событий: Со шнуром все нормально. С преобразователем на плате всё нормально(замкнул rx и tx - эхо превосходно!). Остаётся микроконтроллер, кварц и прошивка.
Микроконтроллер мигает лампочками как надо, реагирует на подключённую кнопку как надо, плюс у меня их было два, так что это уже второй - не думаю(чисто логически), что дело в нём.
Остаётся кварц и прошивка. Прошивка качалась с оф сайта и я не нашёл где либо упоминаний, что она не рабочая. Плюс скаченная прошивка "поморгать диодом" работала как надо. Плюс я заливал ещё одну прошивку, написанную в CodeVisionAvr, которую юзал на работе с Амегой16, но в другом корпусе - эффект тот же - принимает только 0 и 128. И так понял, что можно заливать проги скомпиенные в кодевижионе через авр студио - т.е. hex он и в Африке hex. Так что отодвинем пока прошивку на задний план.
Остаётся кварц - тобишь частота. Чёт с ней не так. Почему я так думаю? Потому что стандартная библиотечная _delay_ms(1000) - длится гораздо больше секунды! Плюс до этого я пихал в плату по не знанию Амегу8358(или типа того) - мог пожечь. Что делать? Как решить!? ААААА! На плате стоит маленькая блистящая фигня с надписью T8.000(на фотке видно - см.первое сообщение темы). Энибади, хелп ми, айм даинг.((
_________________ "И потому безвестным будешь ты." (с) Троя
Заголовок сообщения: Re: пробема: ATmega16, UART и загадочное 128...
Добавлено: Вт май 08, 2012 13:14:23
Первый раз сказал Мяу!
Зарегистрирован: Ср мар 07, 2012 17:42:43 Сообщений: 30
Рейтинг сообщения:0
МЕТОД ТЫКА РЕШАЕТ!!! =D Да, ошибка была в частоте. Похоже что то с кварцем или подскажите в чём может быть дело. В прошивке, как видно из первого сообщения, стоит частота 9600. Тестил плату и на реальном компе с реальным компортом и на нетбуке с виртуальным копортом - везде была беда. Щас начал снижать частоту конекта к порту на нетбуке: 9600, 5000, 1000 - и эврика - заработало! На 1000 работает! Принимает и отсылает всё как надо! Почему так? =( Таааак мееедлеееннно!))
Ну, по крайней мере заработало.)) *хотя мне что то говорит что я просто сжёг кварц)))*
_________________ "И потому безвестным будешь ты." (с) Троя
Щас начал снижать частоту конекта к порту на нетбуке: 9600, 5000, 1000 - и эврика - заработало! На 1000 работает! Принимает и отсылает всё как надо! Почему так? =( Таааак мееедлеееннно!))
1. Либо он работает не от внешнего кварца, а от внутреннего на меньшую частоту. 2. Либо все таки дело в инициализации. Ща попробывал, IAR на строку ругается, мол overflow батенька для unsigned int. 9600 * 16 уже не int.
хи. CVAVR тоже самое предупреждает... так что, попробуте вот сейчас пока выводит правильные данные, вывести содержимое UBRRL+UBRRH. Должно быть 51 в десятичном виде.
Project : Version : Date : 08.05.2012 Author : Ksar13th Company : Lost paradise Comments:
Chip type : ATmega16 Program type : Application Clock frequency : 8,000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *****************************************************/
// USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On // USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 19200 UCSRA=0x00; UCSRB=0xD8; UCSRC=0x86; UBRRH=0x00; UBRRL=0x19;
// Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00;
// Global enable interrupts #asm("sei")
while (1) { buf=getchar(); i=buf; if (i==13) {putchar('1');PORTB=0b00000000;} if (i==14) {putchar('2');PORTB=0b11111111;} if (i==15) {putchar(UBRRL);delay_ms(10);putchar('+');delay_ms(10);putchar(UBRRH);} if (i==16) {putchar(UBRRL+UBRRH);} } }
Тут если присмотреться частота уже 19200, но по прежнему подсоединяюсь с меньшей частотой. Теперь она 3000. Всё работает правильно, кроме этого чёртового феномена с частотой.((( Где то видать как то и правда не задействован внешний кварц.(((
ps: кстати, шепотом и не по теме - буду рад если в двух словах расскажет кто как подключить датчик температуры к моей плате. =) Три провода, протокол - некий wire. Собственно через часика два сам буду гуглить - ну буду рад совтам, ссылкам и тп.))
_________________ "И потому безвестным будешь ты." (с) Троя
Сейчас этот форум просматривают: Google [Bot] и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения