schuifregister en pic

Pagina: 1
Acties:
  • 1.183 views sinds 30-01-2008
  • Reageer

  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
Hallo,

Ik ben aan het uitzoeken hoe het werkt om een schuifregister aan te sturen via een PIC.
Het gaat hier om de 74HC595 en de PIC 16F628A.
Kan iemand mij misschien een beetje uitleggen hoe ik dit moet aanpakken?
Ik moet zeggen dat ik die schuifregister erg interresant vind om aan te sturen, leuke dingetjes!
Is het ook mogelijk om er 12 aan te sturen met mijn picje? hoe moet ik dit aansturen?
Het zal uiteindelijk gebruikt worden om RGB LED`s te schakelen!

Alvast bedankt!

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 22-01 08:08

TrailBlazer

Karnemelk FTW

datasheet lezen. Vervolgens goed begrijpen welke pinnetjes je hoog/laag moet make op welk punt en dat proggen. Niet echt heel lastig lijkt me.

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 04-02 23:43

SA007

Moderator Tweaking
Idd, schuifregisters zijn er simpel, maar staat toch vrij lastig in de datasheet.

Korte beschijving:

Je hebt 3 pinnen:
-Clock
-Data
-Strobe

Aansturen in pseudo-code:

Pak de 8bits (char oid) die je wil versturen
Zet de laatste (8e) bit op de data pin.
clock hoog en weer laag
Zet de 1 na laatste (7e) bit op data
clock hoog en weer laag
...
Zet de 1e bit op data
clock hoog/laag
strobe hoog/laag

De strobe zorgt ervoor dat je invoer op de uitgangen van het schuifregister geplaatst worden

Heb je 2 schuifregisters? geen probleem, begin dan bij bit 16 (nog steeds aan het einde 1x strobe doen)
Heb je er 20? ook geen probleem, begin bij bit 160...

Hoe je ze moet doorlussen staat gewoon in de datasheet, maar alleen de data lus je door, rest staat gewoon parralel.

  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
Het is voor mij nog niet compleet duidelijk :S
je stuurt er serieel een signaal in, bijvoorbeeld: 10101010
dan moet dus poort 2,4,6,8 aan en poort 1,3,5,7 uit?
en die clock sluit je gewoon aan op je pic?

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • M14
  • Registratie: Januari 2002
  • Laatst online: 04-02 20:12

M14

bart0l0meus schreef op vrijdag 28 september 2007 @ 15:53:
Het is voor mij nog niet compleet duidelijk :S
je stuurt er serieel een signaal in, bijvoorbeeld: 10101010
dan moet dus poort 2,4,6,8 aan en poort 1,3,5,7 uit?
en die clock sluit je gewoon aan op je pic?
Beschrijving van SA007 is wel goed ;).

Je hebt 3 pinnen op je PIC uC. 1 daarvan gebruik je als clock, 1 als data en 1 als enable (SA007 noemt het strobe).

Dit stelt de inhoud van het schuifregister voor:
code:
1
2
bit:  [0][1][2][3][4][5][6][7]
data: [0][0][0][0][0][0][0][0]


Je wilt de data 0101 0101 in het schuifregister zetten. Daarvoor zet je bit 7 op je data-uitgang. Vervolgens de clock 1x hoog en weer laag. Nu is de inhoud van je schuifregister:

code:
1
2
bit:  [0][1][2][3][4][5][6][7]
data: [1][0][0][0][0][0][0][0]


Dit herhaal je, maar nu met bit 6. Inhoud van het schuifregister:
code:
1
2
bit:  [0][1][2][3][4][5][6][7]
data: [0][1][0][0][0][0][0][0]

Dit herhaal je, maar nu met bit 5. Inhoud van het schuifregister:
code:
1
2
bit:  [0][1][2][3][4][5][6][7]
data: [1][0][1][0][0][0][0][0]

Dit herhaal je, maar nu met bit 4. Inhoud van het schuifregister:
code:
1
2
bit:  [0][1][2][3][4][5][6][7]
data: [0][1][0][1][0][0][0][0]

Dit herhaal je, maar nu met bit 3. Inhoud van het schuifregister:
code:
1
2
bit:  [0][1][2][3][4][5][6][7]
data: [1][0][1][0][1][0][0][0]

Dit herhaal je, maar nu met bit 2. Inhoud van het schuifregister:
code:
1
2
bit:  [0][1][2][3][4][5][6][7]
data: [0][1][0][1][0][1][0][0]

Dit herhaal je, maar nu met bit 1. Inhoud van het schuifregister:
code:
1
2
bit:  [0][1][2][3][4][5][6][7]
data: [1][0][1][0][1][0][1][0]

Dit herhaal je, maar nu met bit 0. Inhoud van het schuifregister:
code:
1
2
bit:  [0][1][2][3][4][5][6][7]
data: [0][1][0][1][0][1][0][1]



En zo heb je de data in je schuifregister zitten. Om het op de uitgang te krijgen moet je vervolgens de enable-uitgang (ingang op het schuifregister) hoog (of laag, staat in de datasheet :P) maken. Dan wordt de data op de uitgangen gezet.

2 of meerdere schuifregisters kun je daisy-chainen. De clock en enable is voor elk schuifregister het zelfde. Op elk schuifregister zit een data-uit, die sluit je aan op de data-in van het volgende schuifregister. Zo kun je met 2 8-bit schuifregisters ineens 16bits er in klokken.

Het is denk ik wel verstandig om gebruik te maken van een timer, want als je 1 instructiecycles lang de clock hoog maakt, dan gaat dat waarschijnlijk te snel voor het schuifregister.

[ Voor 5% gewijzigd door M14 op 28-09-2007 19:02 ]

Mess with the best, Die like the rest
There is no such thing as Society
There are 2 kinds of people: Snipers and their targets
Never run for a sniper ... you only die tired :)


  • naftebakje
  • Registratie: Februari 2002
  • Laatst online: 15:06
M14 schreef op vrijdag 28 september 2007 @ 18:29:
[...]Het is denk ik wel verstandig om gebruik te maken van een timer, want als je 1 instructiecycles lang de clock hoog maakt, dan gaat dat waarschijnlijk te snel voor het schuifregister.
Dat is een kwestie van ff rekenen, de 595 kan dacht ik tot 1MHz aan, als je je PIC aan een kristal van 8 MHz hangt gaat het gewoon goed (klok laag maken, kijken of je een '1' of '0' moet uitsturen, uitsturen, byte eentje opschuiven, klok weer hoog maken, tellertje eentje verhogen, kijken of je klaar bent met verzenden (tellertje = 7), terug herbeginnen) is 8 instructies met instructieklok van 2 MHz, dus stuur je aan 250 kHz.

Als de boer zijn koeien kust, zijn ze jarig wees gerust. Varkens op een landingsbaan, leiden nooit een lang bestaan. Als de boer zich met stront wast, zijn zijn hersens aangetast. Als het hooi is in de schuur, zit het wijf bij den gebuur.


  • M14
  • Registratie: Januari 2002
  • Laatst online: 04-02 20:12

M14

naftebakje schreef op vrijdag 28 september 2007 @ 19:23:
[...]
Dat is een kwestie van ff rekenen, de 595 kan dacht ik tot 1MHz aan, als je je PIC aan een kristal van 8 MHz hangt gaat het gewoon goed (klok laag maken, kijken of je een '1' of '0' moet uitsturen, uitsturen, byte eentje opschuiven, klok weer hoog maken, tellertje eentje verhogen, kijken of je klaar bent met verzenden (tellertje = 7), terug herbeginnen) is 8 instructies met instructieklok van 2 MHz, dus stuur je aan 250 kHz.
Zit wat in, maar een timer heeft meer voordelen. Als je tijdens de interrupt de data vanuit een variabele in het schuifregister zet, kun je in de main de uC andere dingen laten doen, zonder verder naar het schuifregister om te kijken. Het enige waar je rekening mee moet houden is dat je niet de byte in de main gaat aanpassen, terwijl ie halverwege is met die zelfde byte in het schuifregister te zetten. Maar dat is allemaal wel af te vangen.

Mess with the best, Die like the rest
There is no such thing as Society
There are 2 kinds of people: Snipers and their targets
Never run for a sniper ... you only die tired :)


  • _ferry_
  • Registratie: Januari 2002
  • Niet online

_ferry_

Moderator Tweaking

Nipple Tweaker

Uit [HOWTO] LED kubus 5*5*5 met 74HC595

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
main
movlw    b'00001000'
    call    schuifregister1
;-------------------------------------------------------------
schuifregister1
movwf    Var1        ; zet de waarde vanuit w in Var1. dit is het getal wat geklokt moet worden
        movlw    D'8'        ;zet de waarde 8 in het werkregister
        movwf    bits1        ;sla de waarde 8 uit w op in bits1 dis is het aantal bits wat ingeklokt moet worden
loop1
        rlf        Var1,1        ;rotate left trough carry en sla het resultaat op in Var1. Eerste bit zit nu in de carry 
        btfss    STATUS, C    ; lees de carry uit. Is carry= 1?
        bcf        data1        ;zo nee, zet de datalijn naar 0
        btfsc    STATUS, C    ; is carry 0?
        bsf        data1        ;zo nee data is 1

        bsf        klok1
        nop        
        bcf        klok1        ;bitje is nu ingeklokt

        decfsz    bits1,f        ;verlaag bits1 met één totdat die nul is
        goto    loop1        ; is bits1 0? dan "return" zo nee ga naar loop1
        return

  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
THNX het is mij duidelijk! ook Terry bedankt voor het voorbeeld!

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)

Pagina: 1