Sida 2 av 4

Postat: 22 januari 2006, 13:32:06
av jack
Vad är grejen med "Storage register" egentligen, när det gäller shiftregister?

Det enda jag vill göra är att skifta ut bitarna och sedan få ut värdena på pinnarna med "Output Enable" (efter att jag skiftat färdigt). Hur ska man koppla storage-register-klockan då?

Postat: 22 januari 2006, 13:49:44
av sodjan
Ett shiftregister med latchar, har ju ett separat register där bitarna
"latchas", så att man kan shifta in nya bitar utan att utgångarna
ändras förren de nya bitarna i shiftregistret latchas...
Jag har inte kollat, men jag antar att "storage register" syftar
på ett av dessa register. "OE" och "Latch" (eller vad de nu heter
på din krets) är två olika funktioner.

Postat: 22 januari 2006, 14:28:14
av jack
Tack för svar, sodjan. Jag tror mig förstå vad du menar.

Men hur gör jag då rent praktiskt, om jag vill shifta ut bitarna och sedan sätta ut dom på utgångarna? Måste jag först shifta in dom, sedan shifta in i storage-registret och sedan köra Output Enable? Eller?

Tror förresten jag hittade den perfekta kretsen för mig, A6276 från Allegro. 16-bitars skiftregister med konstantströmsgenerator. Har den hemma också, i SOIC :)

http://www.allegromicro.com/sf/6276/

Postat: 22 januari 2006, 14:55:06
av sodjan
Jag har inte kollat den aktuella kretsen, men det brukar vara :
1. Klocka in 16 bitar i shiftregstret,
2. "Latcha" bitarna (d.v.s kopiera från shiftregistret till ut-bufferten).
3. Börja om från "1" nästa gång 16 bitar skall in.

"OE" styr bara utgångarna från kresten och har inget med shiftregistret at göra.
Ofta kan man lägga OE fast "enablat"...

Allegro har en del trevliga LED kretsar där man inte behöver motstånd, ja... :-)

Postat: 22 januari 2006, 15:10:36
av jack
Tack för att du tar dig tid, sodjan.

Men jag behöver alltså bara latcha en gång för att alla bitarna ska kopieras till storage-registret?

Postat: 22 januari 2006, 15:16:51
av sodjan
Yes, alla bitar kopieras samtidigt från shiftregister till output buffrarna (eller vad de kallas).

Men, varför sitta ock skriva samma sak som står i databladet...

Postat: 22 januari 2006, 15:43:22
av jack
Har läst bladet men förstod inte helt. Trodde jag var tvungen att shifta 16 gånger för att få in allt i storage-registret. Tidsdiagram är inte min starkaste sida än så länge.

Men jag tror jag förstår nu.

Tack, sodjan.

Postat: 22 januari 2006, 23:11:14
av dangraf
Vad är det för skiftregister du kör med nu? Går det inte att använda 2st skiftregister som du kopplar ihop till ett. så du bara behöver en klocksignal och en datasignal? Tänkte om det är ont om platts eller nått.

Postat: 22 januari 2006, 23:55:23
av jack
Det fick bli en A6276. Jäkla trevlig krets faktiskt. Fick bli TSSOP också pågrund av platsbrist.

Satt och strulade skitlänge och försökte få igång den. Trodde jag gjorde nåt fel med latcharna eftersom jag var lite osäker på hur det funkade. Visade sig att allt som behövdes var en konding mellan Vcc och Gnd :)

Postat: 23 januari 2006, 00:36:26
av sodjan
> Visade sig att allt som behövdes var en konding mellan Vcc och Gnd

Jag hoppas verkligen att du inte är förvånad. Det stora mysteriet är väll
varför det inte redan satt en konding där... :-)

Postat: 23 januari 2006, 00:38:19
av jack
Hehe, nej särskilt förvånad är jag inte.

Jag får helt enkelt skylla på att jag inte hållt på så länge med sånt här :) Glömmer fortfarande de enklaste sakerna.

Postat: 23 januari 2006, 08:39:54
av jack
Men sodjan, varför är olika kretsar så pass olika känsliga? När jag körde med dubbla HCT164:or så funkade det kalas utan kondingar. Vilka störningar tar egentligen konding bort? Är det dem från själv IC-kretsen?

Postat: 23 januari 2006, 09:27:02
av Icecap
HCT = mindre strörkänsliga och störande än LS osv.

Störningarna uppkommer när utgångar växler läge, en kort stund ledar båda "dra upp" och "dra ner" transistorerna = en hel del ström i korta pulser = störningar.

Då alla ledare har en viss kapacitet gentemot GND finns det ett antal kondingar som ska laddas upp/ur och då denna laddning är en funktion av strömmen (1F = 1A @ 1sek) kan växlingen inte ske hur snabbt som helst, detta medför att den ovanstående växlingen inte kan gå hur snabbt som helst.

Vissa kretsar har högre strömpulsar än andra, detta är anledningen till att jag konsekvent tar minst 1 st. 100nF keramisk per IC.

Så störningarna kan komma inifrån och/eller utifrån.

Postat: 23 januari 2006, 10:15:01
av sodjan
> Störningarna uppkommer när utgångar växlar läge,

Inte bara utgångar, det kan lika gärna vara interna switchningar i kretsen.
Allt som ger variationer i strömförbrukningen ger störningar som kan behöva avkopplas.

> När jag körde med dubbla HCT164:or så funkade det kalas utan kondingar.

Lite tur, vilket är lika med halva framgången... :-)

Men visst, vid en snabb "labb" på en labbplatta kan man väll köra
som man vill, men får man oförklarliga fel, så är avkopplingskondingar
än av de första åtgärderna.

Postat: 24 januari 2006, 00:21:24
av jack
Gjorde om Icecaps funktion lite så att den skulle passa 6276:an, eller snarare 8-bitarsvarianten, 6275, som jag använder för att testa. Förtillfället ser den ut såhär:

Kod: Markera allt

void shift_out(int data) {
  char count;
  PORTB.F3 = 0;     //latch down
  for(count = 0; count < 8; count++) {
    if(data & 0b10000000) PORTB.F4 = 1;
      else PORTB.F4 = 0;

    PORTB.F2 = 0;    
    PORTB.F2 = 1;   //toggle clock
    
    data <<= 1;     //shift data left 1 notch
  }
  PORTB.F3 = 1;     //latch up
  }
Frågor: Skulle den kunna snabbas upp om den skrivs i Assembler? Har fått för mig att man kan skriva en funktion i Assembler och ändå använda den från C-koden. Är detta riktigt?