| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Въпроси за връзка между АТМЕГА8 и РС чрез UART http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=4224 |
Страница 1 от 1 |
| Автор: | Ugeen [ Чет Май 24, 2007 10:00 am ] |
| Заглавие: | Въпроси за връзка между АТМЕГА8 и РС чрез UART |
Колеги,за вас това може да е рутина но аз никога не съм се занимавал с UART-а.Първият ми въпрос е мога ли да ползвам програмата Hyper terminal -WindowsXP за монитор и ще работи ли коректно със стандартните функции от Codevision AVR ,printf,puts,putchar.Другият ми въпрос е ще мога ли да ползвам вътрешния осцилатор на 8MHz,понеже пишеше че има 3% нестабилност на честотата,това ще обърка ли UART-а.Става дума за около 450 байта които трябва да се предадат към РС-то.Третият ми въпрос е ще мога ли да сверявям един часовник закачен към контролера от РС-то.Примерно написвам времето в прозореца на терминала и го пращам към контролера.Опитах се да симулирам с Протеус такава схема.Успях да пратя това което искам на терминала,но обратното терминала да предава към контролера не ще да стане.Трябва ли да се разреши прекъсване на ресивера за да може да приема от терминала,има ли някакъв особен формат за пращане на данни чрез терминала.Това така и не можах да го направя.Настройките на терминала за скорост и режим са еднакви стези на UART-а.Давайте идеи,предварително благодаря |
|
| Автор: | Predator_MF [ Чет Май 24, 2007 12:13 pm ] |
| Заглавие: | |
Можеш да ползваш HyperTerminal-а на Windows, препоръчвам ти да ползваш RealTerm, доста повече контрол имаш с нея. Можеш да ползваш вътрешния осцилатор, тия 3% не те бъркат, тъй като бодрейта на UART-a се получава с делене на този такт и реално в бодрейта ще имаш по-малко от 1% колебания (плюс това тези 3% се отнасят за целия температурен обхват, в който работи чипа). На въпроса с часовника - може да сверяваш, няма как ние да знаем ти дали ще можеш Прекъсването в процесора не е задължително да го включваш, въпрос на реализация - ако си включиш прекъсването и си напишеш функция RX_ISR() ще ти е по-лесно да хващаш приетите символи по UART-a, отколкото в главния цикъл на програмата да проверяваш дали има нещо в буфера - това е и идеята на прекъсването, процесора може да прекъсне някаква задачка, която изпълнява (мига диоди, управлява LCD-та или каквото и да е) и при приет символ влиза в прекъсване - обработва приетата информация и пак се връща в главния цикъл. Можеш да покажеш малко код, ще е по-лесно да ти се помогне |
|
| Автор: | ДедоБоре [ Чет Май 24, 2007 12:36 pm ] |
| Заглавие: | |
ако ще ползваш вътрешния осцилатор и ти трябва относително вярна честота, трябва да записваш OSCCAL. как става? ами пише го в книгата. с какъв компилатор/среда работиш? |
|
| Автор: | Ugeen [ Чет Май 24, 2007 12:57 pm ] |
| Заглавие: | |
Работя с Codevision AVR.Ще се опитам да конвертирам данните от РС-то с някаква готова функция и чак тогава ще сверявам часовника(DS1307). Не ми е ясно как да пратя данните от терминала към контролера.Има ли някаква команда която се пише.Като напиша нещо в терминала ,функцията gets(lcd_buffer, 10),не приема нищо.Ако предварително е записано нещо на LCD-то просто го изтрива до десетия символ |
|
| Автор: | Predator_MF [ Чет Май 24, 2007 3:39 pm ] |
| Заглавие: | |
gets би трябвало да изчете символите от UART-а...ако има такива, първо би трябвало да правиш проверка за приет символ. Пак ти казвам - ползвай RealTerm - натискаш клавиш върху терминала и той се праща директно по RS232, HyperTerminal-a не е удобен за такива цели |
|
| Автор: | Cekins [ Пон Май 28, 2007 3:59 pm ] |
| Заглавие: | |
Е няма да стане чак толкова просто както си го представяш. Най-добре си го направи с прекъсване, но си измисли нещо което да ти казва че "Ей от тук нататък" ти е информация, нещо като АТ командите на модемите, щото нали се сещаш че проц. няма от къде да знае коя информация е требната. И изхождайки от тук ще ти трябва и някакъв буфер. Примерно правиш така : при прекъсване си пишеш във буфера, като засечеш символ за край, проверяваш буфера, анализираш и изпълняваш. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|