Shift register problém

Odpovědět
Doc Bogeyman
Příspěvky: 7
Registrován: 08 čer 2017, 02:34

Shift register problém

Příspěvek od Doc Bogeyman » 10 srp 2017, 23:56

Hraji si s shift registerem 74HC595 a nerozumím úplně jeho chování. Ukázka:

Kód: Vybrat vše

pins.digitalWritePin(DigitalPin.P16, 0)
pins.digitalWritePin(DigitalPin.P1, 0)
pins.digitalWritePin(DigitalPin.P2, 0)
Pin16 mám data, Pin1 mám clock, Pin2 mám latch. Na všech osm výstupů mám připojené diody. Pokračujeme v tomtéž kódu ...

Kód: Vybrat vše

pins.digitalWritePin(DigitalPin.P16, 0)
for (let index2 = 0; index2 <= 7; index2++) {
    pins.digitalWritePin(DigitalPin.P1, 1)
    pins.digitalWritePin(DigitalPin.P1, 0)
}
pins.digitalWritePin(DigitalPin.P2, 1)
pins.digitalWritePin(DigitalPin.P2, 0)
music.playTone(262, music.beat(BeatFraction.Whole))
basic.pause(500)
... tímto si vynuluji všech osm pozic. Ani jedna dioda nesvítí. Pípnutím mám pro snazší ladění kódu. ;)

Kód: Vybrat vše

pins.digitalWritePin(DigitalPin.P16, 1)
pins.digitalWritePin(DigitalPin.P1, 1)
pins.digitalWritePin(DigitalPin.P1, 0)
pins.digitalWritePin(DigitalPin.P16, 0)
for (let index = 0; index <= 5; index++) {
    pins.digitalWritePin(DigitalPin.P1, 1)
    pins.digitalWritePin(DigitalPin.P1, 0)
}
pins.digitalWritePin(DigitalPin.P16, 1)
pins.digitalWritePin(DigitalPin.P1, 1)
pins.digitalWritePin(DigitalPin.P1, 0)
pins.digitalWritePin(DigitalPin.P2, 1)
pins.digitalWritePin(DigitalPin.P2, 0)
music.playTone(262, music.beat(BeatFraction.Whole))
basic.pause(500)
... tímto si rozsvítím první diodu, pak šest pozic nic (šestkrát tikne clock s Pin16 na nule), pak si rozsvítím osmou diodu a aktivuji latch. Svítí to, jak má. Ale ...

Kód: Vybrat vše

pins.digitalWritePin(DigitalPin.P16, 1)
pins.digitalWritePin(DigitalPin.P1, 1)
pins.digitalWritePin(DigitalPin.P1, 0)
pins.digitalWritePin(DigitalPin.P2, 1)
pins.digitalWritePin(DigitalPin.P2, 0)
Teď mi teoreticky má zůstat svítit jen první dioda, protože předtím po obsazení osmé pozice jsem dal latch a potom tiknul clock (Pin1) jen jednou, takže jednička se měla zapsat jen na první pozici.

Jenže mi svítí první a druhá dioda! A buď už večer špatně vidím, nebo ta druhá svítí malinkato slaběji.

Kde je chyba? Díky za tipy!

Vladimir66
Příspěvky: 197
Registrován: 02 dub 2014, 15:30

Re: Shift register problém

Příspěvek od Vladimir66 » 11 srp 2017, 05:39

Ahoj,

do registru jsi zapsal 1-0-0-0-0-0-0-1
a dalsim zapisem jednicky posunes registr , takze pak mas dve jednicky za sebou..

bud zapisuj vzdy vsech 8bitu nebo si pred zapisem zresetuj 595ku (pin10)

pises " rozsvítím první diodu, pak šest pozic nic (šestkrát tikne clock s Pin16 na nule), pak si rozsvítím osmou diodu a aktivuji latch"
to neni pravda. ty zapisujes data do registru zmenou P1 a az teprve na konci rozvitis diody latchem P2.
kdyz budes posilat tok dat do 595ky a v nekterem okamziku udelas latch, tak budes mit na osmi vystupech poslednich 8bitu, ktere jsi tam
zapsal. ty predesle ktere tam byly se nikdy na vystup nedostaly a byly vysoupnuty dalsimi prichozimi. - uplne primitivne vysvetleno :)

-V66

Doc Bogeyman
Příspěvky: 7
Registrován: 08 čer 2017, 02:34

Re: Shift register problém

Příspěvek od Doc Bogeyman » 11 srp 2017, 11:52

Vladimir66 píše:
11 srp 2017, 05:39
Ahoj,

do registru jsi zapsal 1-0-0-0-0-0-0-1
a dalsim zapisem jednicky posunes registr , takze pak mas dve jednicky za sebou..

bud zapisuj vzdy vsech 8bitu nebo si pred zapisem zresetuj 595ku (pin10)
Aha! Zde je závada - mylně jsem se domníval, že po aktivaci latch se zapisuje zase od začátku na novo. Místo toho se to stále posouvá. Díky.
Vladimir66 píše:
11 srp 2017, 05:39
pises " rozsvítím první diodu, pak šest pozic nic (šestkrát tikne clock s Pin16 na nule), pak si rozsvítím osmou diodu a aktivuji latch"
to neni pravda. ty zapisujes data do registru zmenou P1 a az teprve na konci rozvitis diody latchem P2.
To byla jen stylistická zkratka. :D

Dík za pomoc. Jdu si s tím hrát dál.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 0 hostů