|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 7:49 pm
Импулсчета (бившо RC филтри)
| Автор |
Съобщение |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Като начало, за да спестиш клокове, ще трябва да го пуснеш на хардуерен SPI. Второ, по-добре ще е да си подготвиш някъде какво ще подаваш във всеки един "квант" от време, така че само да четеш от таблицата и да го пращаш навън. Не мога да си представя как това ще е повече от 20 команди.
- захвърляш един-два регистъра в стека;
- четеш указателя към таблицата;
- четеш байта;
- записваш го в SPI предавателния буфер;
- докато се точи бит по бит по SPI, инкрементираш указателя;
- ха строб надолу, ха строб нагоре - фиксираш изходите;
- спасяваш оноя един-два регистъра от стека;
- УРАААА
Нещо такова.
|
| Чет Дек 02, 2004 1:29 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Абе не е чак толкова просто.
1. Има вход. Т.е. събитие, което инициира импулсчетата
2. Има огледална променлива, която съответства на състоянието на изхода на 595
3. Всяко импулсче започва някакво време след събитието, и завършва някакво време след него. Т.е. алгоритъма вътре в прекъсването е такъв:
4. Горното се извършва 8 пъти.  Със забележката че изхода към 595 е след като минат всички проверки, а не след всяка - схемата е за нагледност.
|
| Чет Дек 02, 2004 1:45 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Hm. Не може да не може.
|
| Чет Дек 02, 2004 2:07 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
То че може, може. Че е направено, направено е.  Само дето зор с процесорното време.
|
| Чет Дек 02, 2004 2:09 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
ako тези времена за активиране / деактивиране са фиксирани, какъв е проблемът? Идва събитието - нулираш указателя и пускаш простотийката, която ти написах по-рано. След време всичко ще се извърти и ще стигне до края на таблицата, където ще го спреш.
|
| Чет Дек 02, 2004 2:22 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Хм, нещо не те разбирам. Таблиците в случая не виждам какво отношение може да имат. Приеми, че времената са константни винаги.
|
| Чет Дек 02, 2004 2:27 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Аз си го представям така:
начало : "00000000"
след напр. 170 us : "00010000"
... "00010110"
...
...
... "11010111"
...
...
...
край "00000000" // след напр. 12340 us
Най-бламската реализация е таблица с 1234 елемента.
|
| Чет Дек 02, 2004 2:33 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Имам само 1К памет.  А и сетването на битовете не е чак такъв проблем. Сравнението на таймера със съответните стойности яде по-голямата част от времето.
|
| Чет Дек 02, 2004 2:45 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
E, не! По-"мек" начин е да си фиксираш 16 стойности на таймера - по една за вкл и по една за изкл. и таблицата ти е с 16 стойности. Пак си имаш указател, за да проверяваш само с една, а не с 16-те стойности. И на всеки съвпъдък записваш съответното число в 595 и инкрементираш поинтера. Като стигне 17 : УРААА
|
| Чет Дек 02, 2004 3:05 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Не можем да се разберем.  Вече споменах, че има застъпване, т.е. няколко канала едновременно могат да се включват или изключват. Няма как да стане с една проверка.
|
| Чет Дек 02, 2004 3:11 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
|
| Чет Дек 02, 2004 3:23 pm |
|
 |
|
Mozfet
Ранг: Ориентиран
Регистриран на: Съб Сеп 25, 2004 4:33 pm Мнения: 273 Местоположение: София
|
Ок мерси много Тони.
Оплакването ми от миналата седмица беше за липсата на точно такива коментари (достатътчи като обем, конкретност и полезност) във форума. Да се нядяваме, че този не беше инцидентен и ще виждаме и други подобни за напред 
_________________ Adios
Mozfet
|
| Чет Дек 02, 2004 4:18 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Няма за какво , не мисля че съм написал нещо мн. гениално, не е и мое изобретение ...
Реконструкторе ... какво си правиш бре ... как успяваш да заемеш 80% са един таймер ..... нещо ми се струва не много наред в твоя алгоритъм ..... ама много .... поне така ми изглежда .. струва ми се че не оползотворяваш рационално възможностите на процесора .. с две думи . пишеш за контролер както се пише за РС .... а не бива така 
|
| Чет Дек 02, 2004 9:17 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Нали точно за това става въпрос. Който успее да ме светне как да си оптимизирам проверките, ще се върне пиян у тях още същата вечер. Ама ми се струва, че е излишно от хардуеристи да искам софтуерен съвет. 
|
| Чет Дек 02, 2004 9:51 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Хайде да не си мерим писалките. Мога да ти кажа само, че специално за embedded софтуер нямаш шанс срещу мен. За Windows - евентуално боза данни, за останалото май пак нямаш.
Та на въпроса. Наистина, както ти каза Tonu, има нещо гнило в начина, по който си организираш нещата. Когато са ти малко ресурсите начините общо взето са свеждат до това :
1. Не изчислявай по време на изпълнение това, което може да се изчисли по време на дизайна.
2. Избягвай сложните сметки в ISR.
3. Не ползвай общи ресурси.
Мисля си, че има какво да се оправи при тебе.
|
| Чет Дек 02, 2004 10:20 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|