[basic] Schuifregisters in serie aansturen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bindsa
  • Registratie: Juli 2009
  • Niet online
Ik ben een 8x8x8 LED Kubus aan het maken, en om elke LED afzonderlijk te kunnen aansturen gebruik ik een 16F628A als Microcontroller i.c.m. 9x een 74HC595 schuifregister.

Ik heb op internet gelezen dat het inklokken van data in meerdere schuifregisters makkelijker gaat als je ze in serie zet, dat wil zeggen: out pin van het ene schuifregister, op data pin volgende schuifregister. Dus dat heb ik gedaan. Verder zijn alle LATCH en CLOCK pinnen van de schuifregisters parallel geschakeld. Om het geheel dus te kunnen aansturen met de MicroController, heb ik 3 uitgangen van de controller nodig. 1 voor de data die in alle registers moet, 1 voor de clock van alle registers, en 1 voor de latch van de registers. Mijn vraag is nu: Hoe krijg ik nu de data in die dingen? Ik heb de volgende code bedacht, maar heb het nog niet getest (want die registers zijn vrij kwetsbaar ;)). Klopt deze code?

QBasic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Device 16F628A                ;We gebruiken een 16F628A type
Config XT_OSC, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_ON  ;Extern kristal: 20 mHz
ALL_DIGITAL TRUE              ;Alle ingangen digitaal

Symbol DATAKOLOMMEN = PORTB.0
Symbol LATCHKOLOMMEN = PORTB.1
Symbol CLOCKKOLOMMEN = PORTB.2

Symbol DATAVERDIEPINGEN = PORTB.4
Symbol LATCHVERDIEPINGEN = PORTB.5
Symbol CLOCKVERDIEPINGEN = PORTB.6



While 1 = 1 
  ;Kolommen
  ;                                               Reg. 1     Reg. 2    Reg. 3     Reg. 4     Reg. 5     Reg. 6     Reg. 7     Reg. 8    
  SHOut DATAKOLOMMEN, CLOCKKOLOMMEN, msbfirst, [%00010000, %00010000, %00010000, %00010000, %00010000, %00010000, %00010000, %00010000]
  ;Verdiepingen
  SHOut DATAVERDIEPINGEN, CLOCKVERDIEPINGEN, msbfirst, [%00010000]
  ;Latch het
  Low LATCHKOLOMMEN
  Low LATCHVERDIEPINGEN
  DelayMS 2
  High LATCHVERDIEPINGEN
  High LATCHKOLOMMEN
Wend 

Acties:
  • 0 Henk 'm!

  • _ferry_
  • Registratie: Januari 2002
  • Niet online

_ferry_

Moderator Tweaking

Nipple Tweaker

Ik heb de code die ik ervoor gebruikte ook nog wel ergens denk, maar wel in assembly, niet in basic.
Van verkeerde code gaan je schuifregisters niet kapot hoor :P Maar het komt er op neer dat je (uit mijn hoofd) de clock hoogmaakt, data inklokt en na het verzenden van de 9 bytes je de latch stuurt. Of 8 als je de verdieping apart stuurt.

Acties:
  • 0 Henk 'm!

  • bindsa
  • Registratie: Juli 2009
  • Niet online
_ferry_ schreef op maandag 21 juni 2010 @ 15:58:
Ik heb de code die ik ervoor gebruikte ook nog wel ergens denk, maar wel in assembly, niet in basic.
Van verkeerde code gaan je schuifregisters niet kapot hoor :P Maar het komt er op neer dat je (uit mijn hoofd) de clock hoogmaakt, data inklokt en na het verzenden van de 9 bytes je de latch stuurt. Of 8 als je de verdieping apart stuurt.
OK, dan klopt m'n code wel redelijk denk ik ;)

Nog even iets anders: Als ik pin 4 van de 16F628A als MCLR gebruik en deze met een 10k pull up weerstand hoog maak, dan heb ik pin 14 (VCC) toch niet nodig?

[ Voor 13% gewijzigd door bindsa op 21-06-2010 16:06 ]