|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 7:49 pm
Импулсчета (бившо RC филтри)
| Автор |
Съобщение |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Аз пак питам - а какво е PWM и за какво служи?
Иначе ЕКУ-то на дедо Нисан освен процесора има и много други неща. Ама наистина много.  Така че натоварването на процесора е сведено до минимум. Пък при мен е обратно - освен процесор нямам нищо друго. Пък и Нисана се съмнявам да работи с точност 1/100 ms.
|
| Пет Дек 03, 2004 10:44 am |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
PWM е Pulse Width Modulation - демек процесора си генерира едни импулсчета без да си дава много зор. Ти май имаш 2 такива изхода, а версията TQFP (SMD корпуса) май имаче 8, ама несъм много сигурен сега. Та така нещата се случват някак си автоматично, но тия преместващи регистри май ще спънат работата. Не се засягай - но ти не използваш и 30% от възможностите на тоя процесор, а и с само със C++ май няма да минеш. Хайде да почнем отначало - какво ще кажеш?
|
| Пет Дек 03, 2004 10:52 am |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
хм, PWM е едно за всеки таймер.
|
| Пет Дек 03, 2004 11:08 am |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Здравей, скъпи ми Реконструкторе!
Както то обещах, ще ти помогна с ЦРУ ( ценни ръководни указания ) как да си подкараш Устройството. Снощи като си легах, дълго се въртях в леглото и си мислех за твоя софтуер. И колкото повече си те мислех, толкова по-хардуерен характер придобиваха мислите ми. Хайде сега да видим дали моите твърд-уерни умения ще те направят толкова щастлив, та да черпиш?
За да бъде успешна моята мисия, аз като начало се опитах да си представя какво мислиш и си представяш ти. Да умееш да вникнеш в желанията и фантазиите на партньора - това е задължително условие за успешно и харминично протичане на съвместната развойна дейност.
И какво си представих аз: ти имаш примерно два масива, ей такива:
unsigned int on_delay[8], on_duration[8];
Вероятно твоят ForeGround ги поддържа актуални, отчитайки обороти, натоварване, температури и какво ли още не, това не е толкова важно. Така представени нещата ( от софтуерна гледна точка ) са много нагледни, но трудни за ползване. Какво вероятно правиш ти : имаш един брояч на прекъсвания и при всети тик на часовника го увеличаваш с едно, проверяваш дали на съвпада с някой от първите 8, ако съвпадне - вдигаш съответния бит. После проверяваш дали не съвпада с някой от първи+втори ( 24 или 32 битово сумиране + сравнение ! ) и сваляш съответния бит. Зареждането на регистъра за мен са технически подробности.
От дълбините на моето хардуерно съзнание обаче като червена нишка се усука прозрението ! Та ти си софтуерист ! Затова не си представил нещата по най-удобния начин, а по най-очевадния ! Как трябва да се представят нещата.
Според мен, твоят ForeGround трябва да подготви следните масиви :
unsigned int next_delay[16];
char next_state[16];
K'во е туй, да му *** ****** ? Ако се позамислиш, ше видиш, че след всеки event ти имаш 16 интервенции в изходите. Разстоянието между две съседни интервенции е < 65536. След всяка интервенция имаш ново състояние в изхода. Подготовката на горните 2 масива ( дори като функция на "твоите" масиви ) се извършва еднократно при промяна на параметрите от основния процес, не в прекъсване. Няма да ти пиша текста за това, щото ша земеш да се засегнеш, и без това много ти понаписах. Обърни внимание, че next_delay не бива да е =0, но това не е проблем да се излъже.
Имаш следните работни променливи :
char curr_step; // 0 - 15 или 0xFF, - коя точка от процеса чакаме да дойде
unsigned int curr_delay; // N - 0 - време, което остава, за да дойде
Event-ът прави следното :
curr_step = 0;
curr_delay = next_delay[0];
Процедурата за обработка прекъсването от таймера :
if (curr_step == 0xFF) return;
curr_delay--;
if (curr_delay == 0) {
spi_output(next_state[curr-step]); // пускаш да се предава състоянието
next_step++;
if (next_step != 16) {
curr_delay = next_delay[curr_step];
spi_latch(); // latch на '595
} else {
curr_step = 0xFF;
}
}
процедурите spi_output и spi_latch си ги пиши ти!
Както виждаш, в основния си режим ще имаш едно 8 - битово сравнение, 16 битов декремент ( с автоматична проверка за = 0)
В по-тежкия случай имаш едно индексно четене, 8 - битов инкремент, 8 - битово сравнение, малко регистрова еквилибристика и това е. Какви 160 цикъла ?!
|
| Пет Дек 03, 2004 12:17 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Перфектно, бате, наистина много добре.  Отлична идея е да се разглежда процеса на стъпки, като на всяка стъпка отговаря определено състояние. Остава да измисля(ме) как да се пълни масива на състоянията.  Само ще уточня, че стъпките може да са по-малко от 16, тъй като на един delay може да има повече от 1 промяна на състоянието.
Пък след ~2 седмици взимам заплата, и ще си правя подарък за нова година (осцилоскоп), та ще те завлеча с мене да гледаме някви, да не взема нещо да се прееба. Пък после, яко - 
|
| Пет Дек 03, 2004 1:02 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Това, че стъпките са < 16 не е проблем. Това, че имаш проблеми как да попълниш масива, и то не е проблем. Ама сега се каня да се настройвам да започвам работа и ще ти напиша какво мисля по въпроса по-късно, вероятно не днес. А що касае черпенето - не го приемай като задължение, не държа особено.
И повее никакви забележки от рода "От хардуеристи не искам .." 
|
| Пет Дек 03, 2004 1:09 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Е, ся, няма да нарушаваме древния обичай.
Сега си мисля, че с декрементиране и после проверка за 0 не е най-удачно, по-добре брояч и проверка с него. Щото при пълненето на масива ще се наложи сортиране и изваждане едно от друго.
|
| Пет Дек 03, 2004 1:13 pm |
|
 |
|
Mozfet
Ранг: Ориентиран
Регистриран на: Съб Сеп 25, 2004 4:33 pm Мнения: 273 Местоположение: София
|
Реконструкторе после да кажеш какъв осцилоскоп си взел и дали е добър. Пък може и назаем да го дадеш за няколко месеца

_________________ Adios
Mozfet
|
| Пет Дек 03, 2004 1:16 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Не е така, ама е дълго за обяснени. И утре е ден, а точно днес синът прави 15 години и довечера няма да съм във форма. ама хич!
|
| Пет Дек 03, 2004 1:17 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Да му е честит юбилея!  Жив и здрав да е, наздраве!
Пък утре ще подновим евентуално дискусията. 
|
| Пет Дек 03, 2004 1:21 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Ми аз как да позная дали е добър?  Осцилоскоп съм виждал само от далеч, не съм работил никога с такова. 
|
| Пет Дек 03, 2004 1:22 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Сега всъщност си мисля, че няма как да се мине без сортиране... 
|
| Пет Дек 03, 2004 1:47 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
А ако питаш мен .. вместо да се занимавап с SPI и др. подобни глупости, я сложи едно CPLD, направи си вътре таймерите и хардуерно сравняване, зареждай си го през процесора и да ти е мирна главата, винаги ще работи а и може да си разшириш периферията. Чао за сега че тярвба да тръгвам
|
| Пет Дек 03, 2004 3:15 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Така ... а я сега кажи .. какви са тея сигнали ... събития де ... паленето на всеки цилиндър и другото .. впръскването може би ? Интересно ми е какво точно правиш ....
|
| Съб Дек 04, 2004 12:01 am |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Ами трябва да изпиша доста страници, за да ти обясня как работи всичко. На този сайт всичко е обяснено простичко и подробно.
|
| Съб Дек 04, 2004 10:48 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|