C och skiftregister (PIC)
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.
"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.
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/
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/
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...
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...

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
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

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.
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.
> 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.
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.
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:
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?
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
}