Направете Pic Port плаващ

Имам снимка 18f87j50. При един от моите цифрови I/O, да кажем RH7, искам да го използвам, за да ми даде 0-3,3V сигнал. Конфигурирам го като изход и създавам ШИМ, така че прочетох 2V на моя осцилоскоп. След това се опитвам да освободя порта, за да го направя плаващ там, на това ниво от 2V. При освобождаване правя порта като вход и се уверявам, че intern pull-up е деактивирано.

Но наистина не успявам с това, изглежда, че се връща много бързо обратно до 3,3 V, почти тъй като издърпването все още ще бъде активирано. Нямам натоварване на порта.

Следващата стъпка е да поставите операционен усилвател там, за да направите 0-10V сигнал.

Правилно ли го правя? -› Изход на порт, сигнал на ШИМ до желаното ниво, деактивирайте вътрешното изтегляне, направете вход на порт, така че плаващият може да започне.


person Christian    schedule 15.04.2011    source източник
comment
Плаващият вход има недефинирано поведение. Много, ако това е свързано с дизайна на конкретна част и може би с допустимите отклонения на конструкцията на конкретна. Дори и да го накарате да работи както искате, няма да имате гаранция, че ще работи с по-късна версия на чипа, един от различна партида, друг от същата партида или дори различен идентичен щифт на същият чип. Бих препоръчал да оставите ШИМ включен, както е предложено да бъде @janm.   -  person mbmcavoy    schedule 16.04.2011
comment
Трябваше да е на Electronics.SE.   -  person dmckee --- ex-moderator kitten    schedule 21.11.2011


Отговори (3)


Ако зададете щифта да бъде вход, той няма да седи на определено напрежение. Този подход няма да работи.

Ако искате контролируемо ниво на напрежение, единствената ви възможност (без да използвате допълнителен хардуер) е да използвате щифта CVREF, който може да се контролира, както е описано в глава 24 от листа с данни.

Между другото, не съм сигурен как можете да виждате 2V на цифров изход (ако приемем, че захранването ви е 3,3V).

person Oliver Charlesworth    schedule 15.04.2011
comment
Единственият свободен щифт, който има нещо общо с компаратора, е моят RA5 C2INA или може би RA4. Използваеми ли са? - person Christian; 17.04.2011
comment
@Christian: Ако не можете да използвате хардуерните PWM щифтове и не можете да използвате аналоговия изход CVREF, можете да създадете прост ЦАП, като използвате няколко щифта и куп резистори (вижте напр. opamp-electronics.com/tutorials/digital_theory_ch_013.htm). Няма да е много добро, но може да е достатъчно добро за вашето приложение (каквото и да е то!). - person Oliver Charlesworth; 17.04.2011

Ако искате да поддържате нивото на 2V, генерирано от ШИМ, не можете да изключите ШИМ.

Не съм сигурен какво се опитвате да постигнете, като "освободите" порта.

Не мога да помогна много с хардуерните неща...

Актуализация след коментара:

Ако можете, използвайте щифт, където имате хардуерна поддръжка за PWM да прави това, което искате. Ако не можете да промените оформлението, вероятно трябва да продължите да го правите в софтуера. Не знам каква хардуерна поддръжка имате за RH7, за да направите това на вашия чип, присвояването на PWM варира в зависимост от броя на щифтовете на процесора.

Това е код, който използвам за конфигуриране на ШИМ в продукт, базиран на PIC18F87J60. След като това е настроено, няма допълнително участие на софтуер.

/*
 * Configure the powersupply to the external serial port.  To do this,
 * we configure a PWM to control the isolated 3V power supply.
 */

TRISC1 = 1;
TRISC2 = 1;

PR2 = 0xFF;
CCP1CON = 0x0c;     /* PWM mode, active high, single output */
CCP2CON = 0x0e;     /* PWM mode, active low, single output */
CCPR1L = 0x80;      /* 50% duty cycle */
CCPR2L = 0x80;      /* 50% duty cycle */
ECCP1AS = 0;        /* auto shutdown off */
ECCP2AS = 0;        /* auto shutdown off */
PIR1bits.TMR2IF = 0;

T2CON = 0x04;       /* Enable T2 timer, prescale and postscale 1:1 */

while (!PIR1bits.TMR2IF)
    ;

TRISC1 = 0;
TRISC2 = 0;
person janm    schedule 15.04.2011
comment
тъй като нямам хардуерен PWM-регистр на този порт, трябва да го направя софтуер. И непрекъснато да поддържам ШИМ в основния си код, това ще прекъсне програмата ми твърде много. Така че идеята беше да се направи широчинно-импулсна вълна и след това да се пусне. Чувал съм за това и преди... но може би това е входният порт на операционните усилватели, който прави плаващ. - person Christian; 17.04.2011

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

Първата верига беше лошо проектирана, което я караше да не работи правилно и накара нивото на напрежението да падне веднага щом ШИМ беше убит.

Сега работи. Когато pwming създава изходно напрежение 2 в рамките на цикъл за 1ms, освобождаване и след това продължаване с останалата част от моята програма, веригата задържа последното известно напрежение за няколко секунди, без да пада.

Специалната верига е просто направена от някои кондензатори и OP.

И така... Беше хардуерен дефект! Съжалявам за това.

person Christian    schedule 17.01.2012