Shift regiszter

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
szvarhegyi
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2012. szeptember 10. hétfő, 6:00

Shift regiszter

HozzászólásSzerző: szvarhegyi » 2012. november 15. csütörtök, 22:03

Sziasztok.
Elolvastam a leckékben leírt magyarázatot a shift regiszter működésére majd az interneten is tovább mélyítettem a tudásomat, viszont még nem érkezett meg hozzám a shift regiszter ezért lenne egy két kérdésem.

Adat kiküldés, hogyan zajlik több shift regiszter esetén? Amennyiben én a shiftOut-ot kétszer meghívom egymás után akkor az első shiftOut az első shift regiszterre megy majd a második a másodikra, vagy az elsőt kiküldőm majd mikor küldöm a másodikat az kitolja az elsőt a második shift regiszterre?

Adat visszaolvasás. Olvastam, hogy van a shiftIn parancs amit kiadva visszakapom a shift regiszter lábainak állapotát (remélem jól értettem az angol dokumentációt). Amennyiben van nekem 5 shift regiszterem egymás után kötve akkor egy shiftIn parancs kiadása után milyen formában kapom vissza az egyes shift regiszterek állapotát?

Avatar
Bence
Tranzisztorgyógyász
Hozzászólások: 166
Csatlakozott: 2007. október 30. kedd, 6:00
Tartózkodási hely: Budapest

HozzászólásSzerző: Bence » 2012. november 15. csütörtök, 23:01

Szia!

Nem tudom, hogy ezt elolvstad-e: http://avr.tavir.hu/modules.php?name=Forums&file=viewtopic&t=615, de ha nem akkor olvasd el mindenképpen! Gondolom, te is a 74HC595-ös shift (soros bemenetű, párhuamos kimenetű) regiszterre gondolsz.

Amennyiben egymás után meghívod kétszer a shiftout-ot, akkor az első shiftout-tal kimegy az első 8 bit (már ha 8-bittel dolgozol, de nyilván) az első regiszterre (ami az AVR-hez "közelebb van"). Ha a második shiftout is lezajlik, akkor ez "kitolja" az első regiszterből az adatokat a másodikba.

Viszont az adatok csak akkor kerülnek kiírásra amikor a latch out lábat (12-es láb) magas állapotba állítod, így az adatok írása alatt nem fognak össze-vissza villogni a LEDek a shift regisztereden (már ha LEDeket kötsz rá).

Valahogy így:

Kód: Egész kijelölése

'...

Dim Ic1 as byte        'első regiszter adatai
Dim Ic2 as byte        'második regiszter adatai
'...
Dim IcX as byte        'X-edik regiszter adatai


Shiftout Data_out , Clock_out , IcX , 0        'X-edik regiszter (AVR-től legtávolabb)
Shiftout Data_out , Clock_out , Ic2 , 0        'második regiszter
'...
Shiftout Data_out , Clock_out , Ic1 , 0        'első regiszter (AVR-hez legközelebb)

Set Latch_out         'csak most kerülnek kiírásra az adatok
Reset Latch_out

'...


A beolvasás hasonlóan van, ehhez persze más shift regiszter kell, pl.: 74HC165 (párhuzamos bemenetű, soros kimenetű).
5 regiszernél, 5-ször használod a shiftin-t. Első shiftin - legközelebbi regiszter, ötödik shiftin - legtávolabbi regiszter.
Bence

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3295
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2012. november 15. csütörtök, 23:23

A Googli is kiakadt a kérdésedtől:
https://www.google.hu/search?q=shift+re ... 53&bih=505

Vagy 1000 shiftregiszter alkalmazás képekben.
:lol:

Avatar
szvarhegyi
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2012. szeptember 10. hétfő, 6:00

HozzászólásSzerző: szvarhegyi » 2012. november 16. péntek, 1:00

A shift regiszter amit javasoltak az a következő: 74 HC 4094

Ha jól tudom ezt tudom használni 1Wire rendszeren és címezni is lehet vagy csak jól sikerült velem ezt elhitetni?

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2012. november 16. péntek, 7:12

Elhitették veled....
1Wire: Csak Dallas/Maxim gyárt. Típusszám: DS.....

A shiftregisztert önmagában nem címezhető. Mi lett volna a feladat?

Avatar
szvarhegyi
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2012. szeptember 10. hétfő, 6:00

HozzászólásSzerző: szvarhegyi » 2012. november 16. péntek, 7:55

Amit régebben indítottam téma a 230V-os relé mára egy működő rendszer lett (természetesen még sok dolgom van vele de egyenlőre nagyon meg vagyok vele elégedve). Jelenleg ~12 redőnyt vezérlek. A rendszer fejlődését megpróbáltam fotókkal ellátni, ha kész leszek akkor megosztom a fórumon, hogy tanácsokat kapjak illetve aki ugyan ezen az úton jár az lásson egy másik megoldást. Na de vissza a kérdésedre mi lett volna a feladat? Minden helységben van jelenleg egy kis szekrény ahol van betáp, redőnyvezeték illetve vezeték az arduioból. Elkezdtem elmélyedni a shift regiszterek és a 1Wire rendszerekben (természetesen még nagyon csak a felszínét érintem) és nagyon elkezdett érdekelni, ha minden szobába lenne egy nyák mibe befut 2-3 vezeték (jelenleg UTP vezeték van szóval a végső cél, hogy a nyákon legyen egy be illetve ki menet és sorba egymás után kötöm a szobákat, majd programból megcímzett eszközöket tudok kezelni.

Esetleg jó irány, ha ilyet szeretnék, ha veszek egy ilyet:
http://www.hestore.hu/prod_10024695.html

Tényleg próbálok minél gyorsabban beletanulni, hogy ilyen sületlenségeket ne kérdezzek tőletek! :)

Avatar
winnerbt
Chipfüstölő
Hozzászólások: 894
Csatlakozott: 2007. március 25. vasárnap, 6:00
Tartózkodási hely: Kecskemét

HozzászólásSzerző: winnerbt » 2012. november 16. péntek, 8:56

Szia!
Shiftregiszteres nincs címzés, a kivitt bitsorrend határozza meg a kimenetek állapotát. (szállítószalag).
Alap gond, hogy 1 bit átírásához is ki kell vinni a teljes hossz adatait!
1W: cseles kis kapcsolásokkal lehet csökkenteni a vezérlőjelek számát akár egy érpárra is (hardver), de az nem a Dallas 1W szabvány.
Ha kihelyezett shiftregiszterekről van szó, akkor mindenképp számolj a vezetékkapacitások/hosszok miatti késleltetéssel, esetleg pufferelni kell a jeleket. Jópár, meghajtóval egybeépített regiszternek ezért vannak külön soros, pufferelt kimenete. Érdemes nem csak a HC595-t nézegetni, hanem a családot. (1 betű is sokat számít a típusjelzésben!!!)
Van olyan, amiben a kimenet direkt relékhez van, túlfeszelnyelővel és van olyan, aminél az órajel más élénél veszi a mintát az adatbemenetről, így 1 impulzussal 2 bitet is be lehet vinni.
Shiftreges alkalmazásoknál, ha van rá lehetőség, a legutolsó kimenetet vissza illik vezetni a vezérlőbe, így adatellenőrzést is meg lehet valósítani illetve meg lehet határozni a lánc hosszát (gagyi ledvezérlőknél a dobozon meg kell adni, milyen hosszú a lánc, biztos nem innenvaló ember tervezte...).
Ezt a témát lehet ragozni elég hosszúra, de én inkább valami RS485 szerű megoldásokon agyalnék, ha nagy hosszak/címezhetőség stb. kell.
JAni

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9970
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

HozzászólásSzerző: Robert » 2012. november 16. péntek, 10:03

Ha rendszer építesz és gerinc ott van benne:

A, Minden végpont a központ 1-1 portjára megy amit le kell kezeni. itt HW-es megoldás jöhet szóba:
- RS232/MAX232 : sorosport. Központ ahány végpont, annyi valódi _hardware_ sorosport. ATMega1280/2560, Arduino mega a maga szívásaival.
- 1Wire: csillagban mehet, érzéketlen. Port I/O kapcsoló: DS2408

Ha buszra fűzhető (lineárissá tehető:
- 1Wire: lsd fenn. max 30 m hossz
- RS485 busz. Sorosport jellegű master/slave. ModBus(oda/vissza) illetve DMX(egyirányú) jó hozzá.


Illetve univerzálisan: rádiós kommunikációból valamelyik.


Viszont készül arra, hogy ezek nem az összedugom és megy rendszerek. itt rendszertervezést kellene előtte (utána ? :) ) csinálni. Sokat seígt a bővítésben. Nézz meg lakás/hátzfelügyeleti komplett rendszereket. Nem, nem megvenni. Ötletelni, mit hogyan oldottak meg :).

Avatar
Gyurci
Újonc
Újonc
Hozzászólások: 2
Csatlakozott: 2012. szeptember 23. vasárnap, 6:00
Tartózkodási hely: Nyergesújfalu

Re: Shift regiszter

HozzászólásSzerző: Gyurci » 2012. november 19. hétfő, 22:20

Bemenetre, és kimenetre nem ugyanaz a shift reg használható! Van bemenetre pl. http://www.nxp.com/documents/data_sheet/74HC_HCT164.pdf vagy http://pdf1.alldatasheet.com/datasheet- ... 74165.html és társaik.
És egy jobb magyarázat róluk. http://irh.inf.unideb.hu/user/onigai/DT/DT_9.pdf Ha nem kell címzés, és elég egy-egy bemenetre, kimenetre, akkor érdemes lehet használni. Nem drágák, semmi speciális. Megy nekik órajel, és vagy beolvassák sorba a bemeneteket, vagy kiszórják.

Kimenetre a 74HC595 strobe jelére átteszi egy 8 bites tárolóba, OE jellel engedélyezheted a kimeneteket. Ha többet sorbakötsz akkor kell egy strobe, és az OE ha mindegyikre kimentek az adatok, és 8-16-á24 portot kvázi egyidőben tudsz írni. Relés kimeneteidre a sebességük bőven elég, elektronikához már figyelni kell az időzítésekre. Ami gyorsan változik az az átmeneti állapotban is ott van, csak mire műszerrel rámérsz már nem találod. :roll: I2C és 1W cuccokat még nem használtam. De most gyúrok arra is. :D
A hozzászólást 1 alkalommal szerkesztették, utoljára Gyurci 2013. január 6. vasárnap, 11:32-kor.

Avatar
szvarhegyi
Újonc
Újonc
Hozzászólások: 14
Csatlakozott: 2012. szeptember 10. hétfő, 6:00

HozzászólásSzerző: szvarhegyi » 2012. november 29. csütörtök, 1:42

Köszönöm az információkat. Már okosabb vagyok. Nemsokára elkészül a projekt és megosztom veletek, hogy tudjatok adni tanácsokat vagy csak megnézni mit és hogyan oldottam meg.


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég