Обява

Свий
Няма добавени обяви.

C компилатор за PIC16F87/88?

Свий
X
 
  • Филтър
  • Час
  • Покажи
Изчисти всичко
нови мнения

  • #16
    До: C компилатор за PIC16F87/88?

    Първоначално публикуван от sparkybg Преглед на мнение
    Бъгове има, да. Обаче пък разнообразието е голямо.

    Не ме разбирай погрешно - никак не съм им фен, обаче просто напоследък на няколко пъти установявам че ми пасват идеално на разни задачки.

    В случая ще работя с 16-ки. F87 по-точно.

    С 18-ки - някой ден като ми потрябват. За обикновен честотомиер и LED дисплей друго не ми трябва.

    ...сега ще ми кажеш че има хиляди схеми на честотомери с това. - има, ама не ме устройват. Дори си имам такъв. Трябва ми такъв, мерещ от 0.5 херца до килохерц, при това винаги изпълващ всичките сегменти - с плаваща запетая.

    Накратко, ще меря периода, вместо да броя.
    Колега, мога а ти предложа следното за ниските честоти: Вместо да чакаш по 5 минути за да премериш 0.5Hz, пусни Timer2 gate да се управлява от фронтовете на измервания сигнал, а самия таймер го "пълниш" от тактовия генератор на PIC-a. Така, за времето на един (а ако е с 50/50 запълване - и на половин) импулс, получаваж абсолютно точната стойност. Изпробвано, работи. Ако искаш наистина точна мерилка, сложи на единия канал на АЦП-то някакъв термодатчик (LM35 например), защото вътрешния осцилатор малко бяга от температурата.

    Правил съм такова нещо, сверено с лабораторен калибриран Fluke дава разлика под 0.005% и мери много, много по-бързо.

    За съжаление сорсовете останаха на стария хард, а той си замина в небитието....

    Асемблера на PIC16 е ултраелементарен, кода е 2-4 пъти по малък и по-бърз от тоя на компилаторите, а за приложения като това, където тайминга е от критично значение... зае.и Си-то.
    П.П. Честотомера го правих на PIC16F688 - стана перфектен и още си аботи без забележка. Ако ще се забъркваш с 87/88, препоръчвам ти 88. Все пак за такова просто нещо си струва да се замислиш за 688. само с 14 крака е, но то и без това не ти трябват повече, ако ползуваш STN.
    О879 342 54О Не си пъхайте пръстите където ви падне, не са чак толкова много...

    Коментар


    • #17
      До: C компилатор за PIC16F87/88?

      Първоначално публикуван от tef4o Преглед на мнение
      Колега, мога а ти предложа следното за ниските честоти: Вместо да чакаш по 5 минути за да премериш 0.5Hz, пусни Timer2 gate да се управлява от фронтовете на измервания сигнал, а самия таймер го "пълниш" от тактовия генератор на PIC-a. Така, за времето на един (а ако е с 50/50 запълване - и на половин) импулс, получаваж абсолютно точната стойност. Изпробвано, работи. Ако искаш наистина точна мерилка, сложи на единия канал на АЦП-то някакъв термодатчик (LM35 например), защото вътрешния осцилатор малко бяга от температурата.
      Много добра идея, за която не се бях сетил. Ще помисля. Аз бях се зарил в едни интеръпти и тем подобни, но твойто ми харесва много повече. Колкото до C-то - в него се пише и на асемблер, където ми трябва, а и мога да го прекарам през асемблер, преди да го компилирам, и да коригирам каквото не ми харесва. По-добър вариант е за мен, защото асемблера на PIC няма кажи-речи нищо общо с тоя на 8051, нито с тоя на 80386 и нагоре. Не само като команди, ами и като синтаксис и начин на работа.

      Иначе, измисленото от мен беше - при преход в нивото на някой крак, от 0 към 5V, да речем, пускам таймер 1 да брои тактовата честота, а интеръпт при препълване ми осигурява и броя на препълванията. При втори преход от същия вид, изключвам таймера, и смятам честотата, от периода, който вече имам. Общо взето подобна идея на твойта.

      Апропо, защо таймер 2, а не таймер 1? Има ли някаква уловка? Таймер 1 на 87/88 е 16 битов, а таймер 2 - 8 битов, до колкото видях?

      Колкото до другото - точност от порядъка на процент напълно ме устройва в случая. Мислех да му сложа външен кварц на максималната възможна честота, който да настроя точно. Не че и той няма да мърда от температурата, ама ще е малко.

      Иначе, сигнала е правоъгълен, с около 50% запълване. Схемата конкретно е операционник, с обратна връзка, зареждаща кондензатор, и друга обратна връзка, осигуряваща хистерезис. Получава се псевдотриъгълен сигнал върху кондензатора, кото след това се използва през компаратор за генериране на PWM сигнал за полярността на тока в променливотоков заваръчен апарат. Аз мога да взема или триъгълния сигнал върху кондензатора, или правоъгълния на изхода на операционника. Обаче операционника не е с точно еднакъв изходен импеданс при зареждане и разреждане, и макар обратната връзка, зареждаща и разреждаща кондензатора, да е през 4 килоома, в най-лошия случай, това ще доведе до не точно 50% запълване. Затова предпочитам да се мери целия период, а не полупериода. Сигнала е само положителен - 0 или 11V грубо. Изобщо, сигнала е удобен. То по-удобен от тоя е само гарантирано 50% duty и 0-5V .
      Долните твари, измислили перверзията Erlang, имат "много здраве" от мен. Болезнено!

      Коментар


      • #18
        До: C компилатор за PIC16F87/88?

        Спарки, подозирах, че ще коландриш електрожена с това.

        Не мислиш ли, че значителн по-лесно (и смислено) ще ти е да си направиш синтезатор за честота/запълване с процесора, вместо да връткаш някакви врътки и после да мериш какво точно си завъртял?

        Коментар


        • #19
          До: C компилатор за PIC16F87/88?

          Първоначално публикуван от Ясен Преглед на мнение
          Спарки, подозирах, че ще коландриш електрожена с това.

          Не мислиш ли, че значителн по-лесно (и смислено) ще ти е да си направиш синтезатор за честота/запълване с процесора, вместо да връткаш някакви врътки и после да мериш какво точно си завъртял?
          Доста преработки ще са нужни за това. Щото към цялото това са навързани още неща. Някой ден, като направя моя си машина, всичко ще е с процесор/процесори.

          Не че не може, но не си струва. Аз от програмиране не се боя. А това ще е LED дисплей (който така или иначе си го има и в двата случая), евтин процесор, и 3 жици до него. Другото са евтини чаркове за стотинки.

          ...пък и ще свикна малко с PICльовците.
          Долните твари, измислили перверзията Erlang, имат "много здраве" от мен. Болезнено!

          Коментар


          • #20
            До: C компилатор за PIC16F87/88?

            Първоначално публикуван от sparkybg Преглед на мнение
            ...
            Апропо, защо таймер 2, а не таймер 1? Има ли някаква уловка? Таймер 1 на 87/88 е 16 битов, а таймер 2 - 8 битов, до колкото видях?...
            ъъъ... моя грешка! Тъкмо за Timer1 става дума Ей сега загледах документацията обаче, на 88 май няма гейт-функция, та карай както си го намислил, щом не гониш точност става всякак, освен това за +/-1% спокойно можеш да използваш и вътрешния делител (prescaler). Пак казвам, аз го бях реализирал на 688, а той е хитра, дребна гад За сметка на това 88-цата май имаше PWM?

            Не ми стана съвсем ясно защо ти е външен осцилатор и защо на макс. честота? Той вътрешния не бяга чак толкова много, просто не става за прецизни измервания. Освен това, колкото е по-висока честотата, толкова повече препълвания е възможно имаш... но от друга страна, щом си го решил така, сигурно си имаш причина

            Уф, сигурно прекалявам, но само още един въпрос: ако правиш трионообразен сигнал, става по-точен с компаратор, който има само един транзистор на изхода(а не комп. двойка), в смисъл, че става малко по-чиста формата, пък и по-лесно.
            О879 342 54О Не си пъхайте пръстите където ви падне, не са чак толкова много...

            Коментар


            • #21
              До: C компилатор за PIC16F87/88?

              Под гейт функция какво разбираш? Изкарана на външно краче ли?

              Щото иначе си има бит в регистъра на таймер 1, за enable/diasble.

              Идеята ми е: Чакам преход върху даден крак, и като стане, пускам таймера с тоя бит. Таймера преварително е нулиран. През интеръпта на таймера броя препълванията, а в същото време чакам втори преход от същия вид, и като стане, - спирам таймера. После взимам периода и изчислявам честотата, която пращам на LED дисплея. Най-голямото разминаване ще е с 3-4 такта, и то само ако прехода върху крачето съвпадне с интеръпта. Това при ниски честоти ще е нищожно, а при по-високи мога да намаля с усредняване върху половин секунда, да речем.

              За триъгълния сигнал - това вече е направено от производителя. Аз само надграждам, понеже съм добавил регулация на честотата.


              ПП: 688 кефи, и май него ще използвам. Обаче, я обясни работата с гейта. Ако го ползвам директно, това ще премери само периода на положителната част (или отрицателната) на сигнала. На мен ми трябва целия период.
              Последно редактирано от sparkybg; 28-06-09, 12:12.
              Долните твари, измислили перверзията Erlang, имат "много здраве" от мен. Болезнено!

              Коментар


              • #22
                До: C компилатор за PIC16F87/88?

                Първоначално публикуван от sparkybg Преглед на мнение
                Под гейт функция какво разбираш? Изкарана на външно краче ли?
                .
                Аха, тъкмо това. Няма нужда да гониш преход на някой от другите входове, че да пускаш и спираш. На 688 таймер 1 може да се пуска и спира по ниво директно от краче 3 (RA4) и е много удобно. Което обаче не е от голяма полза при теб.

                Аз го бях направил с външен тригер, но ми трябваше наистина точно измерване при широк диапазон от входни нива и честоти - абе истински честотомер. Така или иначе имах входно стъпало за формиране на сигнала, та не ми беше проблем.

                При теб обаче, особено ако гониш минимум външни детайли, така, както си го намислил е най-добре. Просто в началото не ми стана ясно кое за какво ти е нужно и затова се обадих малко неподготвен

                П.П. Видях, че проекта си го започнал повече за запознаване с PIC-овете. Може и да си се сблъсквал вече с това, но ако не направиш началната инициализация както трябва, ще береш ядове. В смисъл, че някои неща изглеждат готови инициализирани, ама не - като се зачетеш по-подробно в документацията, се оказва, че трябва доста неща да укажеш, за да няма изненади после и "недокументирани бъгове"
                О879 342 54О Не си пъхайте пръстите където ви падне, не са чак толкова много...

                Коментар


                • #23
                  До: C компилатор за PIC16F87/88?

                  A PIC12F683? Има ли някаква уловка? Щото гледам - същата скорост, същия таймер, че даже и с гейт, и само по-малко крака. На мен ми трябват 2 за захранване, един входен и 2 изходни - clock и data към LED дисплея. LED дисплея ще реализирам като отделен модул, който се управлява по серийна шина. В него ще има 87/88-ца или 688-ца, чиято единствена цел е да управлява дисплея и да приема данните по серийна шина.

                  Дори и 6 краков процесор ми върши работа за самия честотомер.
                  Долните твари, измислили перверзията Erlang, имат "много здраве" от мен. Болезнено!

                  Коментар


                  • #24
                    До: C компилатор за PIC16F87/88?

                    12-та серия съм я виждал само на снимка и никога не съм се заглеждал в PDF-ите, така че не знам

                    Колко разряда ще ти е индикацията? Ако е 2-3 и ако не ти трябват големи (като размер) цифри и ако не ти пука за някой и друг милиампер отгоре, може да ползуваш TIL311 примерно, те са с вграден декодер, там ти трябват само 4 шини за BCD и по една на разряд за LatchEnable, тоест за 3 разряда - 7 крака на PIC-a. И може да се вместиш само на един чип. Недостатъка: лапат ток казто за световно.

                    Лично аз предпочитам STN LCD на Ampire - ниска цена, никаква консумация, с допълнителен преместващ регистър от сорта на 4015 стигат и 3 крака за управление, без него - 6 и може да показва всичко, но има ограничение в температурния диапазон.

                    П.П. ако правиш синхронен сериен интерфейс само с 2 шини... хммм, ще ми е интересно да споделиш как ще разграничаваш начало на предаване. Не, че е невъзможно де, просто ми е любопитно ти как си го решил, ако не е тайна.
                    О879 342 54О Не си пъхайте пръстите където ви падне, не са чак толкова много...

                    Коментар


                    • #25
                      До: C компилатор за PIC16F87/88?

                      Индикацията е 3 разряда. Твърдо LED, тоя път. Иначе, и LCD-то безспорно е удобно. Декодери не ща, понеже искам пълна свобода над дисплея. При 0 херца да показва "dc", например.

                      Гледах 12-ките. Според това, което гледах, освен че са 8 кракови, всичко друго им е като на 16-ките, вероятно с някои разлики в периферията, които в случая не ме касаят.

                      Интерфейса ще е асинхронен. Просто SHIFT регистър. PIC-a, дето ръководи дисплея ще приема данните, и ще отговаря за рефреша. Удобно е, понеже до там ще ходят всичко на всичко 4 жици - захранване, клок и дата. Ако има много дисплеи, ще могат и да се връзват на верига само с още един извод. Понеже това ще може да работи на доста висока честота, ще мога да управлявам по няколко такива дисплейчета, без изобщо да се вижда. Колко точно - ще се види. Не е най-евтиния вариант, обаче пък е гъвкав. Не е пълноценен сериен интерфайс.

                      Ако екранчетата идват в повече, се разделят на групи и се връзват на общ клок, но различни data-и, или различни клокове, с обща дата. И общо взето няма ограничение в броя им.

                      ПП: Програматора е "EasyPRO 90B": http://www.programtec.com/english/pr...EasyPRO90B.asp
                      Последно редактирано от sparkybg; 29-06-09, 14:28.
                      Долните твари, измислили перверзията Erlang, имат "много здраве" от мен. Болезнено!

                      Коментар


                      • #26
                        До: C компилатор за PIC16F87/88?

                        TIL311 декодира и от А до F, не е проблем да изпише dC, но и иначе става, само да не те мързи да лепиш толкова жици

                        За интерфейса, въпроса ми беше по-скоро как ще разграничиш къде е началото на трансмисията? В момента се сещам да се следи ниво на клока и примерно при промяна от 0 в 1 да минава в режим на приемане по следващия падащ фронт и да брои 8 клока или нещо такова.

                        ... просто в момента довършвам една системка и чопля протоколите между отделните контролери и е критично важно да няма грешки, та може би се вманиачавам малко

                        П.П. В момента ползувам GTP-USB+, твърдо на ICSP, щото не мога да си позволя постоянно да вадя и слагам чиповете, а и половината са на SMD. Поръчах си само платката и чипа, стана красиво и съм доволен.
                        О879 342 54О Не си пъхайте пръстите където ви падне, не са чак толкова много...

                        Коментар


                        • #27
                          До: C компилатор за PIC16F87/88?

                          Първоначално публикуван от tef4o Преглед на мнение
                          TIL311 декодира и от А до F, не е проблем да изпише dC, но и иначе става, само да не те мързи да лепиш толкова жици
                          Нали имам отделен процесор за всеки дисплей. Вътре мога да набутам и декодиране, и всякакви такива, ако поискам. Памет дал госпшод предостатъчно. Жици не лепя. То цялото е малка платчица, на която са налепени 3 7 сегментни индикатора, с вързани успоредно крачета, като отделно са изведени само общите им извод - катода или анода. За 3 цифрен дисплей - 11 крачета. Директно върху това е залепена втора платка с процесора, който приема данните и ръководи 7 сегментните индикатори. 11-те извода са само между 2-те платки. Жици няма. Платките са готови, и вероятно тая седмица ще ги пусна за правене. До това цялото стигат 5 извода - 2 за захранване, 1 клок, 1 данни, и още един, който се използва за ICSP, и за нанизване на други такива серийни неща след него, а може и за Enable/disable, и за каквото се сетиш още, в зависимост от това какъв акъл ще вкарам в процесора. И аз работя повече с SMD, а в случая и нямам толкова избор, защото крайната цел е да направя дисплейче с най-малките 7 сехментни индикатори. Затова и са 2 платки една върху друга - просто за друго няма място.

                          Първоначално публикуван от tef4o Преглед на мнение
                          За интерфейса, въпроса ми беше по-скоро как ще разграничиш къде е началото на трансмисията? В момента се сещам да се следи ниво на клока и примерно при промяна от 0 в 1 да минава в режим на приемане по следващия падащ фронт и да брои 8 клока или нещо такова.
                          Нещо такова, да. Освен това, може да се направи така че по клока да си говорят. Друг вариант е да се връзват съвсем успоредно, и всеки елемент да си има номерче. Като се предават данни към тоя елемент, първия байт е кода на елемента, а останалите - съответните данни. Най-простия вариант на такова е просто като шифт регистър - предаваш си по data и clock шината, колкото бита трябват за всичко навързано по нея. Всяко вързано устройство си има и таймаут, след който ако не е получило всичките нужни му битове, се ресетва.

                          Първоначално публикуван от tef4o Преглед на мнение
                          ... просто в момента довършвам една системка и чопля протоколите между отделните контролери и е критично важно да няма грешки, та може би се вманиачавам малко
                          Е, в тоя случай при теб ще трябва нещо по-усъвършенствано като интерфейс. Защо не някакъв стандартен - I2C например? Просто е добре устройствата да могат да си говорят двупосочно. Само така ще си сигурен че няма грешки. Аз съм същия маниак като тръгна да правя нещо, така че явно сме от една партия.

                          Първоначално публикуван от tef4o Преглед на мнение
                          П.П. В момента ползувам GTP-USB+, твърдо на ICSP, щото не мога да си позволя постоянно да вадя и слагам чиповете, а и половината са на SMD. Поръчах си само платката и чипа, стана красиво и съм доволен.
                          А, онова го взех заради паметите най-вече, и поддръжката и на други процесори. То така или иначе си ги програмира по ICSP. Въпрос на 5 жички. Точно така и смятам да програмирам настоящия ми проект. Предвидим съм и джъмперче за откачане на филтърните кондензатори от захранването, за да мога да си взимам съвсем всичко от програматора.
                          Долните твари, измислили перверзията Erlang, имат "много здраве" от мен. Болезнено!

                          Коментар


                          • #28
                            До: C компилатор за PIC16F87/88?

                            Къде правят единични бройки на SMD платки?

                            Коментар


                            • #29
                              До: C компилатор за PIC16F87/88?

                              Първоначално публикуван от Ясен Преглед на мнение
                              Къде правят единични бройки на SMD платки?
                              Работя с тия:
                              http://selectrapcb.com/

                              Поръчвам си ги никел-злато(RoHS). По-качествени са. Досега нямам забележки. Ако не са никел-злато, ги правят със затапяне, тоест имаш тинол и под солдер маската, което, ако имаш по-големи спойки на силови елементи, започва да изглежда гадно, понеже тинола прониква под солдермаската и я раздува. Разлика в цената за затапяне и никел-злато няма, така че е все тая. Затова си ги поръчвам и никел-злато.

                              Излизат скъпо, обаче. Ама за единични бройки, всичко правено извън домашни условия излиза скъпо. Дори се лигавя със солдер маска и бях печат. Сглабям си ги вкъщи. Имам си духалка и всичко необходимо.

                              Хубавото на тая фирма е че никога не закъснява, дори и с ден. Тоест, ако в понеделник сутрин пуснеш 3 дневна поръчка, в четвъртък вече е при теб по еконт. Лошото е че не правят повече от двуслойни, а понякога си трябва.
                              Последно редактирано от sparkybg; 29-06-09, 17:00.
                              Долните твари, измислили перверзията Erlang, имат "много здраве" от мен. Болезнено!

                              Коментар


                              • #30
                                До: C компилатор за PIC16F87/88?

                                Ясно

                                Малко лирично отклонение за платките, че и на мен това ми е вечно болната тема: Като споменаваш домашни условия, какво имаш предвид? Фотолак, лазерния принтер или нещо друго? Все се каня да пробвам тоя номер с принтера, даже веднъж "огладих" един лист, но не знам като се опре до SOIC корпусите какво ще стане.

                                Иначе последно ползувах услугите на една дряновска фирма, май Sirius се казваше, справиха се бързо, с доста забележки по тънките писти (за някои аз съм си виновен) и имаше някаква неразбория с форматите.

                                Заглеждал съм се по офертите на пловдивчани, като цена ме устройват сякаш, но така и не съм проверявал оркада (16.0) дали е съвместим с дрил-файловете, които искат.

                                Имат ли минимална цена на поръчка? И най-вече, как се справят с тънките писти и разстояния, тоест под 0.3мм?
                                О879 342 54О Не си пъхайте пръстите където ви падне, не са чак толкова много...

                                Коментар

                                Активност за темата

                                Свий

                                В момента има 1 потребители онлайн. 0 потребители и 1 гости.

                                Най-много потребители онлайн 8,787 в 17:37 на 21-06-23.

                                Зареждам...
                                X