Македонски форум за електроника
Дигитална електроника => Микроконтролери => Topic started by: gladiator on 08.11.2010, Monday, 18:41:31
-
Здарво на сите дали може некој да ми посочи некое интегрирано коло со кое би се зголемил
бреојот на излези на микроконтролерот однапред фала :)
-
со шифт регистри!74HC164! 74HC595!
-
а дали има расение за влезовите
-
што?не те сфакам!
-
дали може на ваков или сличен начин да се зголемат влезовите на еден микроконтролер
-
да!Може ако се поврзат со едно за такт сигнал коло,стави му 74HC00!И поврзи ги сериски останатите пинови!
-
и би ти бил благодарен ако можеш да ми појасниш накратко за работата на 74VHC164
во смисла како се одбира кој излез во кое време да се уклучи
-
вака,се си работи програмата од ПИКот тој одлучува кога да се пушти!Не сум сега дома затоа ќе ти поставам шема една да ја видиш како се поврзува со микроконтролер!Кога ќе се ставам од дома по ПП или овде ќе ти објаснам поопширно!
(http://elektronika-mk.net/index.php?action=dlattach;topic=2720.0;attach=1633)
-
ок ке чекам
-
Има два типа на шифт регистри влезен и излезен со влезниот се зголемуваат влезните порти на микроконтролерот а со излезниот излезните порти на микроконтролерот.Шифт регистерот со микроконтролерот е поврзан преку три пина (data clock latch) комуницира сериски преку двата пина data clock а пинот latch служи за префрлање на податоците од меморискиот регистер во излезниот регистер.Како се одвива комуникацијата микроконтролерот прака податок hex code тој податок се сместува во меморискиот регистар со пракање на логичка 1 на пинот latch од меморскиот регистар податокот преминува во излезниот регистар со што се активира една порта со промена на clock от податочите од шифт регистарит се поместуваат од десно на лево Со еден шифт регистер искористуваш од микроконтролерот 3 пина а добиваш 8 ако сакаш да добиеш повеке излезни пинови може да ги поврзеш шифт регистрите сериски еве некој шеми како се поврзуваат
http://www.kronosrobotics.com/an137/DAN137.shtml
-
Гоце фала за одговоро ама мене ова некако ми изгледа многу сложено јас сум само почетник во оваа област дали постои несто поедноставно во смисла со конбинација од три или четири излезни пинови
да добиваш појке излези например со логиски кола ::)
-
а Гоце може да ставиш една програма за ЛЕД преку шифт регистриве т.е. програма во Бејзик!
Гладиатор: Гоце мене многу ми помогна и затоа побарај помош од него :D во врска со Бејзикот,за програмирање на микроконтролери!
-
а Гоце може да ставиш една програма за ЛЕД преку шифт регистриве т.е. програма во Бејзик!
Гладиатор: Гоце мене многу ми помогна и затоа побарај помош од него :D во врска со Бејзикот,за програмирање на микроконтролери!
Ќе направам со влезен и излезен шифт регистер ке поставам и шема како се поврзуваат
Гоце фала за одговоро ама мене ова некако ми изгледа многу сложено јас сум само почетник во оваа област дали постои несто поедноставно во смисла со конбинација од три или четири излезни пинови
да добиваш појке излези например со логиски кола ::)
Во суштина и шифт регистрите се логичги кола и со нив ке ти биде наједноставно а може и со логички кола да се направи истото
-
Зголемување на излези (ако не ти требаат многу брзи излези) може да се направи со коло-декодер (на пример 74154) при што на секој од излезите ќе ставиш кондензатор од 100nF и ќе ги „рефрешираш“ излезите на секои 0.1 секунда и ќе добиеш 16 независни излези од само 4 излези на микроконтролерот. Без кондензатори ќе имаш 16 излези но зависни (он може да биде само еден во едно време).
-
Наједноставно решение е со шифт регистри. Декодерите што ги спомена борче се уште посложени. Ја за оваа намена користам Port Expanedr на I2C. Тој може да биде влезен, излезен, да генерира прекин на настан, да одлучува, се на се многу добро коло кое не е за почетници. А и било кој муктиплексирани излези неможат да бидат брзи како дирекни излези.
-
здраво дали има некој некаков пример за Port Expanedr MCP23s17 ама да може поединечно да се контролираат излезите еден по еден :) или ако знае некој нека напише во микро бејзик
-
ти сакаш да работат само како излези или да може да се користат и како влезови ?
-
и како излези и како влезови но дали може да се прочита само еден бит од влезот дирекно или треба да го читаш цел бајт
-
Незнам дали би имал повеке време да ти напишам код според твојте потреби ама еве ти еден пример кој може ке ти помогне
program PortExpander
dim
SPExpanderCS as sbit at RA2_bit
SPExpanderRST as sbit at RA3_bit
SPExpanderCS_Direction as sbit at TRISA2_bit
SPExpanderRST_Direction as sbit at TRISA3_bit
dim i as char
#define Output_PORT0
main:
ANSEL = 0
ANSELH = 0
C1ON_bit = 0
C2ON_bit = 0
TRISB = 0
i = 0
SPI1_Init()
Expander_Init(0)
Expander_Set_DirectionPortA(0, 0x00)
Expander_Set_DirectionPortB(0,0xFF)
Expander_Set_PullUpsPortB(0,0xFF)
while TRUE
Expander_Write_PortA(0, i)
inc(i)
PORTB = Expander_Read_PortB(0)
Delay_ms(100)
wend
endif
SPI1_Init()
Expander_Init(0)
Expander_Set_DirectionPortB(0, 0x00)
Expander_Set_DirectionPortA(0,0xFF)
Expander_Set_PullUpsPortA(0,0xFF)
while TRUE
Expander_Write_PortB(0, i)
inc(i)
PORTB = Expander_Read_PortA(0)
Delay_ms(100)
wend
endif
end
А ако сакаш можеш и да поврзеш два микроконтролера кој едниот ке ти е како PORT Expander и мегу себе ке ги поврзеш преку сериска синхрона или сериска асинхрона комуникација која ја знаеш повеке ако ти тереба само излези и ако користиш сериска ансихрона комуникација ке комуницираат преку еден пин ако ти требаат и влезови тогаш ке ти ребаат два пина RX TX.
Ако користиш сесирска синхрона комуникација за I2C ке ти требаат 2 пина Data in/out еден пин и clock втор пин, за SPI комуникација ке ти требаат еден Data in втор Data out трет Clock и ако имаш повеке паралелно споени контролери за секој ке ти треба еден пин за селектирање CS(Chip select) или SS(Slave select)
-
Гоце примерот е одличен но мене ме интересира како од цел бајт да прочитам само еден бит дали е тоа возможно ??? да тестирам на тој бит дали дошло до промена
-
Да кажеме дека 8 бита ти е порта А секој пин еден бит ти ако ја читаш порта А ке ја читаш како бајт пример 00110001 RA0 = 1 високо ниво активна RA1 =0 ниско ниво неактивна RA2=0 RA3=0 RA4=1 RA5=1 RA6=0 RA7=0 пак ги гледаш промените поединечно на секој бит и знаеш што се случило на секој пин
Што сакаш да изработиш објасни подетално да ти помогнеме.
-
ништо посебно само вежбам е сега како од 00110001 да го дознаам сомо RA4 на пример
-
Едноставно објаснување бајтот што го напи6шав има 8 бити секој бит ти е еден пин од порта А најдесниот бит ти е RA0 ..... најлевиот RA7 во овој случај RA4 е "1" активен
Ако сакаш да ја активираш порта RА1 HIGH PORTA.1 исто ти е и ако му кажеш PORTA=% 00000010
Ако ја користиш како влез и му кажеш IF PORTA.1 = 1 THEN LABELA исто е ако му кажеш IF PORTA=%00000010 THEN LABELA
Се надевам дека ме разбираш што сакам да кажам.
-
Гоце фала за помошта сега разбрав што сакаш да кажеш испробав и работи
read_data = Expander_Read_PortB(0)
if read_data.0 = 1 then
Expander_Write_PortA(0,1)
end if
Фала уште еднаш :)
-
gladiator како што гледам имаш некакво знаење за програмирање, така да можеш да им помогнеш на оние кои се почетници во оваа област, исто како тебе што ти помагаат Ивица и Гоце.
-
и јас сега учам преку примери и ако знам нема проблем секако дека ќе го споделам моето знаење со останатите и ако мислам дека сеуште сум на почеток