Írtam két egyszerű programot 74HC165 és 74HC595-ös 8 bit-es shift regiszterhez. Gondoltam, megosztom veletek, hátha valakinek szüksége lesz rá!
A 74HC165 egy párhuzamos bemenetű, soros kimenetű shift regiszter. A másik soros bemenetű, párhuzamos kimenetű. Így a 74HC165-ös bemenet bővítésre, a 74HC595-ös kimenet bővítésre jó.
Ami jó bennük, hogy az AVR-ből 3 lábat foglalnak el és 8 lábat adnak. Ha 2-t teszünk belőle, akkor is csak 3 láb kell, szóval 3 lábra szinte akármennyi felfűzhető.
A program a 74HC165-höz (bemenet bővítés):
Kód: Egész kijelölése
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 38400
Load_out Alias Portc.0 'Összes 74HC165 1-es lába
Clock_out Alias Portc.1 'Összes 74HC165 2-es lába
Data_in Alias Pinc.2 'Első 74HC165 9-es lába
'A második IC 9-es lábát az első IC 10-es lábára kell kötni.
'A harmadik IC 9-es lábát a második IC 10-es lábára, stb...
'További lábak:
'11-14 (D0-D3) és 3-6 (D4-D7) bemenetek
'7 (/Q7): üres, 8 (GND): föld, 15 (/CE): föld, 16 (VCC): +5V
Config Load_out = Output
Config Clock_out = Output
Config Data_in = Input
Dim Ic1 As Byte
Dim Ic2 As Byte
Dim Ic3 As Byte
Set Clock_out
Set Load_out
Ic1 = 0
Ic2 = 0
Ic3 = 0
Print "Start"
Do
Reset Load_out 'Betöltjük a regiszterbe a 8 bemenet értékét
Set Load_out 'Visszaállítjuk alaphelyzetbe
Shiftin Data_in , Clock_out , Ic1 , 0 'Első IC beolvasása
Shiftin Data_in , Clock_out , Ic2 , 0 'Második IC beolvasása
Shiftin Data_in , Clock_out , Ic3 , 0 'Harmadik IC beolvasása
'Annyiszor kell a Shiftin rész, ahány IC van
'Kiírás UART-on IC-nként egybe:
Print "IC1: " ; Bin(ic1)
Print "IC2: " ; Bin(ic2)
Print "IC3: " ; Bin(ic3)
'Vagy lábanként külön:
Print "IC1.0: " ; Ic1.0
Print "IC1.1: " ; Ic1.1
Print "IC1.2: " ; Ic1.2
'stb...
'így szinte ugyanúgy lehet használni, mint egy portot az AVR-en
Loop
End
Program a 74HC595-höz (kimenet bővítés):
Kód: Egész kijelölése
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 38400
Clock_out Alias Portc.0 'Összes 74HC595 11-es lába
Latch_out Alias Portc.1 'Összes 74HC595 12-es lába
Data_out Alias Portc.2 'Első 74HC595 14-es lába
'A második IC 14-es lábát az első IC 9-es lábára kell kötni.
'A harmadik IC 14-es lábát a második IC 9-es lábára kell kötni, stb...
'További lábak bekötése:
'15 (Q0) és 1-7 (Q1-Q7): kimenetek
'8 (GND): föld, 10 (/MR): +5V, 13 (/OE): földre, 16 (VCC): +5V
Config Clock_out = Output
Config Latch_out = Output
Config Data_out = Output
Dim Ic1 As Byte
Dim Ic2 As Byte
Dim Ic3 As Byte
Set Clock_out
Reset Latch_out
Ic1 = 0
Ic2 = 0
Ic3 = 0
Print "Start"
Do
Input "Ic1: " , Ic1
Input "Ic2: " , Ic2
Input "Ic3: " , Ic3
Shiftout Data_out , Clock_out , Ic1 , 0 'Első IC feltötltése
Shiftout Data_out , Clock_out , Ic2 , 0 'Második IC feltöltése
Shiftout Data_out , Clock_out , Ic3 , 0 'Harmadik IC feltöltése
'Annyiszor kell a Shiftout rész ahány IC van.
Set Latch_out 'Ez azért kell hogy az IC lábain "kiírja" amit az előbb betöltöttünk
Reset Latch_out
Loop
End
Szerk. 2.: Néhány apró módosítás. + Ha a 74HC595 13-as ( /OE ) lábát PWM-el vezéreljük (kimenetek alacsony szinten aktívak), akkor az 595-re kötött LED-ek fényerejét tudjuk állítani!