Sida 1 av 1

Preload av skiftregister

Postat: 22 augusti 2007, 18:18:53
av ToB
Jag ska använda ett skiftregister (595) som ringräknare men hur sjutton sätter man den i startläge, d.v.s hur får man in en etta och resten nollor?

Jag tar också gärna emot tips på klocka, Någonstans från 100 Hz och uppåt, inte noga alls. Vad är enklast, 555:a?

Postat: 22 augusti 2007, 19:23:23
av Micke_s
Sätter in en 74HC74 kanske där set går låg vid uppstart.
Går enkelt att fixa med en kondensator och en resistor mot vcc.
Se till att klockningen också styrs av samma kondensator.

Postat: 22 augusti 2007, 19:27:51
av sodjan
Har den något garanterat läge vid power-on ? T.ex "bara nollor"?
I så fall räcker det med att klocka en *en* etta.
Annars måste du klocka genom hela "ringen" med känd
indata.

Postat: 22 augusti 2007, 19:57:51
av ToB
Jag tror inte att registren har något givet värde. Jag har inte läst så noga i databladet men det verkade inte så när jag testade lite igår.
Det som däremot finns är reset, d.v.s alla nollor, men det blir ändå en liten procedur på några steg för att 'ladda' den.

Postat: 22 augusti 2007, 21:04:14
av bengt-re
Många skiftregister har en parallel load. Kolla på 74395 - dock så går det åt dubbelt så många kretsar eftersom pinnarna inte räcker annars.

Kör man med 395án (eller annan Parallel in/serial in/
parallel out) skiftregister så lägger man isf hårt parallel ingångarna till önskad startstate och RC-klockar in en parallel load.

7495,7496, 74194, 74195, 74299 och som sagt 74395 har alla möjligheterna att göra det du vill fast på lite olika sätt.

Postat: 24 augusti 2007, 15:58:04
av ToB
Konstigt att jag inte tänkte på det själv, att det finns skiftregister med parallell-load.

74299 verkade ju bra, både 8 bitar parallell in *och* ut.
595:an har ju dock latchar på utgångarna, något jag behöver, men det går ju att lösa med en separat krets (74273).

Det jag inte riktigt kan lista ut är hur jag ska bära mig åt med "förladdningsdelen".
Eftersom både parallella in- och utgången är på samma pinnar så måste "förladdningskretsen" kopplas bort då den gjort sitt för att inte påverka utgångarna. Eller?!

Postat: 24 augusti 2007, 16:02:47
av sodjan
Jag vet inte, men det verkar som om det enklaste snart är att
någon slänger ihop ett litet prog till en AVR eller PIC som fixar detta.
Du vill ha en 8-bitars ringräknare med en "1" som rullar runt, eller hur ?
Hur snabbt ?

Postat: 24 augusti 2007, 16:12:49
av anlamotte
Har man väl lärt sig att programmera uC's lite lagom så blir man lätt bortskämd. Många saker går ju att lösa väldigt enkelt på det viset istället för en handfull logikkretsar.

:lol:

Postat: 24 augusti 2007, 16:24:12
av Micke_s
Exempel på AVR kod för rinnande ljus.

Kod: Markera allt

#include <io.h>
#include <util/delay.h>
#include <stdint.h>


int main(void){
   uint8_t i=0;
   DDRB = 0xFF; /* all out */

   for(;;){
      PORTB = 1<<i;
      i++;
      if(i>=8)i=0;

      /* some delay */
      _delay_ms(250);
      _delay_ms(250);
      _delay_ms(250);
      _delay_ms(250);
   }
}
Edit: ska vara = och inte != (lite förkyld och förvirrad idag).

Postat: 24 augusti 2007, 17:12:16
av syltkaka
Känner mig lite petig men det bör inte vara någon "|=' vid PORTB. Så småningom kommer ju alla pinnar vara höga hela tiden. Ett vanligt '=' ska det vara.

Postat: 24 augusti 2007, 17:26:54
av ToB
Jojo, att lösa det med en uC blir ju väldigt lätt, nästan för lätt.
Den här apparaten ska bara utföra en uppgift, om och om igen och alltid på samma sätt och då känns det lite overkill med en uC.

Det är lite roligare att försöka få ihop det med "dumma" komponenter.
Det blir lite mer pussel.

Men det är klart, det kan ju vara intressant att bli klar också :)

Postat: 24 augusti 2007, 17:51:51
av anlamotte
Om du bara är ute efter funktionen med en etta som rullar runt skulle väl en dekadräknare (johnson) vara perfekt.. t.ex 4017

Postat: 24 augusti 2007, 17:59:02
av rehnmaak
Kör en logisk NOR på utgång 1-7 och dra utgången till DS. Så länge det finns en etta på någon av utgång 1-7 så är DS "0" annars "1".

Postat: 24 augusti 2007, 18:57:51
av ToB
anlamotte skrev:Om du bara är ute efter funktionen med en etta som rullar runt skulle väl en dekadräknare (johnson) vara perfekt.. t.ex 4017
Räknar inte en Johnson-räknare:
0000
0001
0011
0111
1111
1110
1100
1000
?

Idén att det kan finnas andra sätt att generera en "rullande" etta är bra. Jag kanske har snöat in mig på fel spår.
En binär-räknare och en dekoder är ett annat alternativ.

EDIT: Jag hade fel, 4017 är en johnson-räknare och sekvensen är precis som jag vill ha.
Jag såg att ämnet har behandlats tidigare

Perfekt, tack för hjälpen.... tills vidare :wink: