C och skiftregister (PIC)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg 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å?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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.
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg 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/
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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... :-)
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg 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?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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...
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg 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.
dangraf
Inlägg: 530
Blev medlem: 9 juni 2003, 15:30:56
Ort: göteborg

Inlägg 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.
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg 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 :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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... :-)
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg 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.
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg 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?
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg 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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg 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.
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg 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?
Skriv svar