| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Импулсчета (бившо RC филтри) http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=194 |
Страница 1 от 5 |
| Автор: | ToHu [ Сря Дек 01, 2004 7:51 pm ] |
| Заглавие: | |
Ами защото ако само семплираш и предаваш добре, ама ако правиш още 10 неща кога ще ги рпавиш като през цялото време броиш кога да гопуснеш, просто стил на писане .. като сисвикнеш трябва не трябва така го правиш, ако нямаш други задачи в основната програма ще въритш един цикъл while(1) { if(adc_data) { adc_data=0; printf("%5lu",data); } ----- drugi uslowia switch(state) ---- State machine ----- } и в това по горното, като видиш че има валидни дани ги правиш каквото правиш и си продължазваш с програмата, дали ще ес машина на състоянията или не няма значение. Всички подобни условия ги подреждаш така ... също и комуникацията, в примера съм писал printf, но реално не бих го направил така. Бих сложил един флаг send_to_rs и ако го видя вдигнат сендвам пакет, а пакета ще се получи там където обработвам данните, така няма да се бавиш и с това printf, щото то си е доста мудно, а ще си ги рпащаш с putch и ще ползваш прекъсване при bufer empty ..... абе вс.зависи как си организираш програмата |
|
| Автор: | Реконструктор [ Сря Дек 01, 2004 11:08 pm ] |
| Заглавие: | |
Целият проблем се състои в това, че нямам свободен таймер - и трите са ми заети. Явно ще трябва да пусна софтуерен брояч за АЦП-то, пък да се надяваме, че ще имам някаква печалба. |
|
| Автор: | Dimitar [ Чет Дек 02, 2004 11:00 am ] |
| Заглавие: | |
С какво си ги заел и 3-те - дай малко подробности. |
|
| Автор: | Реконструктор [ Чет Дек 02, 2004 12:00 pm ] |
| Заглавие: | |
Ами един за основния часовник, един за комуникации и един за диагностиката. По принцип диагностиката така или иначе е слой над комуникациите, така че мога двете да сложа на един таймер. |
|
| Автор: | bateAz [ Чет Дек 02, 2004 12:05 pm ] |
| Заглавие: | |
Хората цял Windows са направили само е два таймера, а на теб 3 не ти стигат! |
|
| Автор: | Dimitar [ Чет Дек 02, 2004 12:13 pm ] |
| Заглавие: | |
Колегата е прав - ползвай този за RTC-то. Ако ти дава прекъсване през достатъчно малко време, можеш да навържеш доста процеси чрез броячи и флагове. |
|
| Автор: | Реконструктор [ Чет Дек 02, 2004 12:14 pm ] |
| Заглавие: | |
Ами основния ми часовник е на 100 KHz. Без друго обработката му ми яде над 80% от процесорното време, та се наложи да оверклоквам горкото чипче. Но бачка стабилно - слава на Atmel! Иначе си прав, че за всичко останало мога да ползвам втория таймер и третия да остане резерва. Въпрос на оптимизации. По принцип не исках да се захващам с тях преди да съм подкарал устройството на практика, но май ще се наложи. |
|
| Автор: | Dimitar [ Чет Дек 02, 2004 12:18 pm ] |
| Заглавие: | |
Вътре можеш да сложиш само флагчета и всичко да става извън него. А защо ти е да прекъсва през толкова малко време - на 10 микросекунди. |
|
| Автор: | Реконструктор [ Чет Дек 02, 2004 12:27 pm ] |
| Заглавие: | |
Е, по-важни от флагчетата са броячите по принцип. Но за щастие, работя с истински процесор (за разлика от продуктите П. на фирмата М.), който си има аритметични операции с пренос. Така че инкрементирането и сравнението на един 16 бит брояч ще става в рамките на 5-6 инструкции. Иначе тази точност е необходима за управлението. |
|
| Автор: | bateAz [ Чет Дек 02, 2004 12:32 pm ] |
| Заглавие: | |
Не познавам AtMega и е възможно да пиша глупости, ама не е необходимо да правиш обработките в процедурата на таймера. Доста по-добра практика е, особено за дълги процеси, да поставиш в стека адреса на "дългата" процедура и да излезеш. От този момент нататък тръгва да се изпълнява тя, като прекъсванията ти се запазват и се обработват. след като "дългата" свърши, с един RET се връщаш на онова, което си бил прекъснал първоначално. За съжаление, горната техника "минава" само на истински процесори. На PIC16 например на ще. |
|
| Автор: | Реконструктор [ Чет Дек 02, 2004 12:42 pm ] |
| Заглавие: | |
Обработката е необходима именно в прекъсването, тъй като ти трябва дискретна точност, а не плаваща. На изхода дължината на импулсчетата трябва да е точно кратна на 10 uS, ако почне да плава се губи смисъла на цялото предприятие. Но който измисли по-читав начин за твърда точност при тези 100 килохерца и по-малко процесорно време, направо да го водя на запой и преяждане. |
|
| Автор: | Dimitar [ Чет Дек 02, 2004 12:57 pm ] |
| Заглавие: | |
Тоя прехвален |
|
| Автор: | bateAz [ Чет Дек 02, 2004 1:03 pm ] |
| Заглавие: | |
Заинтересува ме ти с този запий и преяж. Ти какво искаш : да си генерираш импулс с точно отределена продължителност с точност до 10 us ли? И с точно определена пауза между тях? Кажи какво е заданието, ша та упрайм. Това може да се реализира по много начини, ама първо кажи какви са изискванията и ограниченията. P.S. Почвам да тренирам за запоя. |
|
| Автор: | Реконструктор [ Чет Дек 02, 2004 1:15 pm ] | |||||||||
| Заглавие: | ||||||||||
Ами може да се генерира прекъсване при препълване на регистъра или при сравнение, ако това е "компаер". |
||||||||||
| Автор: | Реконструктор [ Чет Дек 02, 2004 1:20 pm ] | |||||||||
| Заглавие: | ||||||||||
Точно за това става въпрос. |
||||||||||
| Страница 1 от 5 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|