Отговори на тема  [ 26 мнения ]  Отиди на страница Предишна  1, 2
SX1511B .. 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30755
Местоположение: София
Мнение Re: SX1511B ..
Ами кофти са времената, че не са и такива, 90% от ледовете не работят на тия времена :) Падна едно мерене и гадане докато докарах някакви при които повечето работят, общо взето 0-та няма значение колко ще е къса, при мен е около 100 nS, 1-цата обаче е по-големият проблем, там границата е малка. Да го правя с прекъсване не става, не мога да го изпълнявам толкова бързо, направо си оставам там, нали се сещаш че ще ми бичи прекъсвания всеки 200 nS да речем, това са ми има няма 10 инструкции, какво да направя по-напред за тия 10 инструкции в прекъсване, те не са и 10 ами с 8 и то ако всички са еднотактови, а има и дву и три ... могат да са на 1,25 uS, тогава е по-добре, ама и тогава започва да става критично. Все пак трябва да взема от някъде тоя бит, т.е. да проверя съответният бит дали е 0 или 1, и то не е 1 ами са 3 щото имам 3 канала и ги ъпдейтвам и трите едновременно ... реално в момента байт по байт ги вземам, въртя ги 8-пъти за д аизвадя всички битове и след това следващия. Това на три променливи, с проверката дали е 0 или 1 и е точно колкото да сложа два NOP-а за да стане 1.20 uS. Е те това успявам да направя :
Код:
unsigned char r_bits;
   unsigned int r_bytes;
   unsigned char dly;
   P1&= led_low;
   delay(10);
   GIE_DIS();
   for(r_bytes=0; r_bytes< bytes; r_bytes++)
      {   
         byte_a=*(data_0+r_bytes);
         byte_b=*(data_1+r_bytes);
         byte_c=*(data_2+r_bytes);
         led_mask=0xE3;
         r_bits=0;
         if(bit_a) mask_a=true;
         if(bit_b) mask_b=true;
         if(bit_c) mask_c=true;
         WDT_RELOAD();
//----------------------------------------         
         do{      
               P1|= led_high;
               P1&=led_mask;   
               _nop_();
               _nop_();
               _nop_();    
               byte_b=byte_b<<1;
               byte_a=byte_a<<1;
               byte_c=byte_c<<1;   
               r_bits++;
               led_mask=0xE3; 
               if(bit_a) mask_a=true;
               if(bit_b) mask_b=true;
               P1&= led_low;
               if(bit_c) mask_c=true;
     
          }while (r_bits<8);      
   }
   GIE_EN();


Чет Юни 29, 2017 3:38 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30755
Местоположение: София
Мнение Re: SX1511B ..
Тук всичко е сведено до побитови операции, тия mask_a,b,c са битове от mask. Работата с масива може да се пооптимизира, но в тази реализация няма голям смисъл, но и да се оптимизира не може кой зане колко, горе пойнтерите могат да се пооптимизират.


Чет Юни 29, 2017 3:44 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 8:04 pm
Мнения: 2663
Местоположение: София / Велико Търново
Мнение Re: SX1511B ..
Аз друго си мислех:
Имаш 9 прекъсвания за софтуерните PWM ( ако са ти 8 ). Едното е първото което е едновременно сетване на всички изходи в 1. На база коефициентите на запълване се изчисляват предварително съответните интервали между всяко прекъсване, определя се и редът на изключване. Примерно след еди си колко uS изключва PWM1, после след еди си колко PWM3 и т.н. за всичките 8. Във всяко прекъсване има обработка на някои неща:
1. Прекъсване -(основно синхронизиращо) - сетва всички PWM изходи в 1ца
Зарежда брояча на таймера със стойност съобразена със съответния интервал.

2. Прекъсване.
Моментално изключване на изхода на PMW който трябва да се изключи, според таблицата със реда на изключване.
Зареждане на брояча на таймера за генериране на съответния интервал, според таблицата с интервалите.

3. пак така до 9. вкл.
Ако желаеш да няма джиттър, което едва ли е толкова съществено, може прекъсване 1. Да се генерира от друг, free running таймер.
Предвид това което си ми казвал, използваш честота 1.34 kHz за аналогови PWM. За 9 mS ще имаш общо 120 прекъсвания. Всяко едно прекъсване не зная колко ще отнеме, но мисля че при тази бързина на процесора може да се получи под 1uS! Все пак има едно сетване на изход, едно на таймер и някой друг флаг да се бутне за последващо прекъсване. Т.е. няма да ресетнеш комуникацията на WS. Съответно на база интервалите, трябва предварително да изчислиш по колко пакета от 24 бита може да изпратиш. Примерно интервал 1 е кратък защото PWM1 e само 1%, това значи че между прекъсвания 1 и 2 може да пратиш примерно само 1 пакет от 24 бита. Пращаш го. Остава ти малко време в което си изчакваш прекъсване 2. Изпълнява се прекъсване 2 и си продължаваш нататък със пращането към WS.

_________________
https://github.com/slav4ocom/


Чет Юни 29, 2017 5:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9123
Местоположение: Разград
Мнение Re: SX1511B ..
Абе става ама я си представи че имаш два от пвм-ите дето трябва да ги изключиш през период по-малък от периода за обработка и примерно брояча ти премине стойността и направи роловър или някаква такава ситуация. Това дето го предлагаш може да се получи евентуално с CCP ама в случая няма свободно. А и прекъсването трябва да е супер кратичко.


Чет Юни 29, 2017 6:04 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Чет Юни 25, 2009 1:01 pm
Мнения: 2251
Мнение Re: SX1511B ..
Добре, защо не смениш тактиката? Вместо да използваш PWM, да използваш някакъв комуникационен интерфейс- UART примерно(не съм сигурен дали на всички можеш да спираш стоп битовете, но казвам примерно). Идеята е да си подредиш примерно 8 нива в една променлива и да я подадеш за предване. Примерно разделяш целия диапазон на някакви малки интервали и чрез тях модулираш реалния сигнал. Така вместо да се мъчиш да се вместиш в 100, или там колкото са ns, ще имаш поне 8 пъти повече време. И с една предварително зададена таблица трябва да се получат нещата :) Да не говорим, че по-големите контролери имат буфери и можеш да зареждаш няколко стойности за предаване. Сиреч повече време за обработка!

_________________
www.elkran.com


Чет Юни 29, 2017 6:46 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 8:04 pm
Мнения: 2663
Местоположение: София / Велико Търново
Мнение Re: SX1511B ..
@Cekins да може да е така, но може да се направи примерно на 1% да е стъпката, дори повече. Така, че или ще се изключват наведнъж няколко изхода или ще има закъснение (достатъчно). Това което описваш ти е примерно е единият PWM да е примерно 1% а другия примерно 1.05%, мисля, че няма нужда. :)

_________________
https://github.com/slav4ocom/


Чет Юни 29, 2017 7:09 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9123
Местоположение: Разград
Мнение Re: SX1511B ..
Е хубаво де - сметни си сам какво означава 1%. Понеже процентите не са точни числа нека стане така : при 8 бита PWM имаш 256 стъпки (това вече е точно число) при 1,43 kHz (по горе беше спомената тази честота) ти се получава ~366kHz дискретизираща честота което е 2,73 uS. или при 64MHz пик-че ще има около 43 инструкции прозорец. Не са малко но не са и много, особено при положение че това време няма лесен начин да се синхронизира с клока на цифровите ленти.


Чет Юни 29, 2017 7:31 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 8:04 pm
Мнения: 2663
Местоположение: София / Велико Търново
Мнение Re: SX1511B ..
Ами Тони казва че инструкцията е 25nS, ако ползва PIC излиза че е на 160MHz, ама явно е друг процесора... В неговия случай са 109 инструкции.

_________________
https://github.com/slav4ocom/


Чет Юни 29, 2017 8:01 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9123
Местоположение: Разград
Мнение Re: SX1511B ..
Малко се оплетохме - значи той основния му контролер не е 8 битов пик, така че си правим грешни сметки :) Тази сметка за 25nS инструкция и 160 MHz e за 8 битов пик а такъв поне аз не съм срещал. Виж за 24-ка вече може - там идва 80MHz (40 мипс) а такива вече има.


Чет Юни 29, 2017 9:33 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6107
Мнение Re: SX1511B ..
SPI or UART
http://www.getchip.net/posts/119-umnye- ... neopixels/

_________________
main[-1u]={1};


Чет Юни 29, 2017 9:49 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30755
Местоположение: София
Мнение Re: SX1511B ..
Значи с spi, uart i usb проблеми няма, то освен тия 3 канала които рвфрешвам си върви usb комуникация и 2 серийни порта, тия 10 ms не са проблем за нищо друго. Стабилно софтуерни pwm трудно ще станат, ще трябва да е някакъв компромиси. Затова мислех за тоя чип, той върти само pwm нищо друго, но вече го смених с малък пик, също на spi. PWM го ъпдейтвам заедно с лентите, т.е. веднъж на 20 мс, не ми трябва повече, става по spi за нищожно време, все пак са само 48 байта. С пика също няма проблеми за софтуерен pwm, не исках да слагам пик за да не се програмира още нещо, но по добре така. Тоя чип освен че е екзотика, има и кофти корпус, не очаквам да се сменя, но е труден за смяна ако се наложи от обонговец.
Иначе проца е силабс 8 битов, 48 mhz, масовите инструкции са 1 и 2 такта. Не мие проблем да сложа и такъв на 75 или 100, имат такива но нямат усб. Можеше са мина на армовете им, обаче усб ме притеснява малко, не сме го ползвали, на 8 битовите е желязно, за 32ките не знам и не ми се рискува в нещо което влиза в серийно производство. Достатъчен го ям с тъпите цифрови ледове, някои партиди мрът за световно, други бачкат вече година и половина. Направих тестер да разпознавам менте диоди ама...


Чет Юни 29, 2017 11:47 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 26 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


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

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