Отговори на тема  [ 69 мнения ]  Отиди на страница 1, 2, 3, 4, 5  Следваща
Импулсчета (бившо RC филтри) 
Автор Съобщение
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Ами защото ако само семплираш и предаваш добре, ама ако правиш още 10 неща кога ще ги рпавиш като през цялото време броиш кога да гопуснеш, просто стил на писане .. като сисвикнеш трябва не трябва така го правиш, ако нямаш други задачи в основната програма ще въритш един цикъл :) .. как се прави, ами имаш две прекъсвания, от таймер на всеки 10 ms и от ADC след валидни данни. Като ти даде от таймер пускаш ADC, като ти даде от ADC вдигаш флаг че данните са ти готови, то това може и да не го чакаш на прекъсване, зависи как си организирал нещата, може да полираш флага за валидни данни в тялото, примерно
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 ..... абе вс.зависи как си организираш програмата :) на мен так ами е по добре, много левсно се коригира, допълва ..... стремя се да пиша отворени алгоритми, примерно както е в примера постоянно въртя тялото на while, като вътре никъде нямам друг while или нещо което да зацикля, ако искам времезадръжка позлвам таймери, нулирам и чакам да станат колкото ми трябва, е при много малки времена трябва да е прекъсване иначе може да мине много време преди пак да стигнеш до него .... и така .. това е смисъла


Сря Дек 01, 2004 7:51 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Целият проблем се състои в това, че нямам свободен таймер - и трите са ми заети. ](*,) Явно ще трябва да пусна софтуерен брояч за АЦП-то, пък да се надяваме, че ще имам някаква печалба. :rolleyes:


Сря Дек 01, 2004 11:08 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
С какво си ги заел и 3-те - дай малко подробности.


Чет Дек 02, 2004 11:00 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Ами един за основния часовник, един за комуникации и един за диагностиката. По принцип диагностиката така или иначе е слой над комуникациите, така че мога двете да сложа на един таймер.


Чет Дек 02, 2004 12:00 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
Хората цял Windows са направили само е два таймера, а на теб 3 не ти стигат! :P Ползвай един за няколко процеса. Не е трудно. :P . Като хардуерист ти го казвам :wink:


Чет Дек 02, 2004 12:05 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
Колегата е прав - ползвай този за RTC-то. Ако ти дава прекъсване през достатъчно малко време, можеш да навържеш доста процеси чрез броячи и флагове.


Чет Дек 02, 2004 12:13 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Ами основния ми часовник е на 100 KHz. Без друго обработката му ми яде над 80% от процесорното време, та се наложи да оверклоквам горкото чипче. Но бачка стабилно - слава на Atmel! :prayer: Та ако сложа още някви обработки на тоя таймер, кво мислиш ще се получи? :)
Иначе си прав, че за всичко останало мога да ползвам втория таймер и третия да остане резерва. Въпрос на оптимизации. По принцип не исках да се захващам с тях преди да съм подкарал устройството на практика, но май ще се наложи. :roll:


Чет Дек 02, 2004 12:14 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
Вътре можеш да сложиш само флагчета и всичко да става извън него. А защо ти е да прекъсва през толкова малко време - на 10 микросекунди.


Чет Дек 02, 2004 12:18 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Е, по-важни от флагчетата са броячите по принцип. Но за щастие, работя с истински процесор (за разлика от продуктите П. на фирмата М.), който си има аритметични операции с пренос. Така че инкрементирането и сравнението на един 16 бит брояч ще става в рамките на 5-6 инструкции.

Иначе тази точност е необходима за управлението.


Чет Дек 02, 2004 12:27 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
Не познавам AtMega и е възможно да пиша глупости, ама не е необходимо да правиш обработките в процедурата на таймера. Доста по-добра практика е, особено за дълги процеси, да поставиш в стека адреса на "дългата" процедура и да излезеш. От този момент нататък тръгва да се изпълнява тя, като прекъсванията ти се запазват и се обработват. след като "дългата" свърши, с един RET се връщаш на онова, което си бил прекъснал първоначално.
За съжаление, горната техника "минава" само на истински процесори. На PIC16 например на ще. 8O


Чет Дек 02, 2004 12:32 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Обработката е необходима именно в прекъсването, тъй като ти трябва дискретна точност, а не плаваща. На изхода дължината на импулсчетата трябва да е точно кратна на 10 uS, ако почне да плава се губи смисъла на цялото предприятие. :) При 20 МХц честота на ядрото за всяко прекъсване имаш примерно 160 инструкции за обработка (80% от времето), другите 20% остават за други цели (и са достатъчни).
Но който измисли по-читав начин за твърда точност при тези 100 килохерца и по-малко процесорно време, направо да го водя на запой и преяждане. :)


Чет Дек 02, 2004 12:42 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
Тоя прехвален :D процесор няма ли кепчър/компаери и PWMи. Щото така - хубаво, ама само такива импулсчета да генерираш и нищо друго.


Чет Дек 02, 2004 12:57 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
Заинтересува ме ти с този запий и преяж. Ти какво искаш : да си генерираш импулс с точно отределена продължителност с точност до 10 us ли? И с точно определена пауза между тях? Кажи какво е заданието, ша та упрайм. Това може да се реализира по много начини, ама първо кажи какви са изискванията и ограниченията.
P.S. Почвам да тренирам за запоя. :D


Чет Дек 02, 2004 1:03 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Dimitar написа:
Тоя прехвален :D процесор няма ли кепчър/компаери и PWMи. Щото така - хубаво, ама само такива импулсчета да генерираш и нищо друго.


Ами може да се генерира прекъсване при препълване на регистъра или при сравнение, ако това е "компаер". :) Сравнението е идеално ако става дума за 1 канал или N незастъпващи се канала за управление, което не е моят случай. А какво е PWM?


Чет Дек 02, 2004 1:15 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
bateAz написа:
Заинтересува ме ти с този запий и преяж. Ти какво искаш : да си генерираш импулс с точно отределена продължителност с точност до 10 us ли?


Точно за това става въпрос. :) Да речем, 8 канала през 595, със застъпване по между им. :)


Чет Дек 02, 2004 1:20 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 69 мнения ]  Отиди на страница 1, 2, 3, 4, 5  Следваща

Кой е на линия

Потребители разглеждащи този форум: Google [Bot] и 16 госта


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

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