Отговори на тема  [ 6 мнения ] 
Въпроси за връзка между АТМЕГА8 и РС чрез UART 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение Въпроси за връзка между АТМЕГА8 и РС чрез UART
Колеги,за вас това може да е рутина но аз никога не съм се занимавал с UART-а.Първият ми въпрос е мога ли да ползвам програмата Hyper terminal -WindowsXP за монитор и ще работи ли коректно със стандартните функции от Codevision AVR ,printf,puts,putchar.Другият ми въпрос е ще мога ли да ползвам вътрешния осцилатор на 8MHz,понеже пишеше че има 3% нестабилност на честотата,това ще обърка ли UART-а.Става дума за около 450 байта които трябва да се предадат към РС-то.Третият ми въпрос е ще мога ли да сверявям един часовник закачен към контролера от РС-то.Примерно написвам времето в прозореца на терминала и го пращам към контролера.Опитах се да симулирам с Протеус такава схема.Успях да пратя това което искам на терминала,но обратното терминала да предава към контролера не ще да стане.Трябва ли да се разреши прекъсване на ресивера за да може да приема от терминала,има ли някакъв особен формат за пращане на данни чрез терминала.Това така и не можах да го направя.Настройките на терминала за скорост и режим са еднакви стези на UART-а.Давайте идеи,предварително благодаря


Чет Май 24, 2007 10:00 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
Можеш да ползваш HyperTerminal-а на Windows, препоръчвам ти да ползваш RealTerm, доста повече контрол имаш с нея. Можеш да ползваш вътрешния осцилатор, тия 3% не те бъркат, тъй като бодрейта на UART-a се получава с делене на този такт и реално в бодрейта ще имаш по-малко от 1% колебания (плюс това тези 3% се отнасят за целия температурен обхват, в който работи чипа).
На въпроса с часовника - може да сверяваш, няма как ние да знаем ти дали ще можеш :D Формата който се ползва в терминала е ASCII - вероятно това те бърка. Като пратиш числото "3" от клавиатурата в терминала, процесора получава 0x33, "5" изпраща 0x35 и т.н това са основни неща, с които трябва да се запознаеш ако още не си (питай Google).
Прекъсването в процесора не е задължително да го включваш, въпрос на реализация - ако си включиш прекъсването и си напишеш функция RX_ISR() ще ти е по-лесно да хващаш приетите символи по UART-a, отколкото в главния цикъл на програмата да проверяваш дали има нещо в буфера - това е и идеята на прекъсването, процесора може да прекъсне някаква задачка, която изпълнява (мига диоди, управлява LCD-та или каквото и да е) и при приет символ влиза в прекъсване - обработва приетата информация и пак се връща в главния цикъл.

Можеш да покажеш малко код, ще е по-лесно да ти се помогне :)


Чет Май 24, 2007 12:13 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 11:31 pm
Мнения: 10088
Мнение 
ако ще ползваш вътрешния осцилатор и ти трябва относително вярна честота,
трябва да записваш OSCCAL. как става? ами пише го в книгата.
с какъв компилатор/среда работиш?


Чет Май 24, 2007 12:36 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение 
Работя с Codevision AVR.Ще се опитам да конвертирам данните от РС-то с някаква готова функция и чак тогава ще сверявам часовника(DS1307). Не ми е ясно как да пратя данните от терминала към контролера.Има ли някаква команда която се пише.Като напиша нещо в терминала ,функцията
gets(lcd_buffer, 10),не приема нищо.Ако предварително е записано нещо на LCD-то просто го изтрива до десетия символ


Чет Май 24, 2007 12:57 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
gets би трябвало да изчете символите от UART-а...ако има такива, първо би трябвало да правиш проверка за приет символ.
Пак ти казвам - ползвай RealTerm - натискаш клавиш върху терминала и той се праща директно по RS232, HyperTerminal-a не е удобен за такива цели


Чет Май 24, 2007 3:39 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
Е няма да стане чак толкова просто както си го представяш. Най-добре си го направи с прекъсване, но си измисли нещо което да ти казва че "Ей от тук нататък" ти е информация, нещо като АТ командите на модемите, щото нали се сещаш че проц. няма от къде да знае коя информация е требната. И изхождайки от тук ще ти трябва и някакъв буфер. Примерно правиш така : при прекъсване си пишеш във буфера, като засечеш символ за край, проверяваш буфера, анализираш и изпълняваш.


Пон Май 28, 2007 3:59 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 6 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни