PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom Schieberegister 74HC595



kollimann
19.05.2009, 14:59
Hallo, hab ein Problem bzw versteh das mit diesem Schieberegister nicht.
Ich hab eine LED Röhre mit 3 74HC595, diese hab ich an einen Atmega8 wie folgt angeschlossen,
DATA Port B0 und Pin 14 am 74HC...
Clock Port B1 und Pin 11 am 74HC...
Load Port B3 aund Pin 12 am 74HC...
Pin9 geht dann wieder an die 14 zum nächsten 74HC....

Nun hab ich folgenden Code im Imternet gefunden und an meins angepasst.



$regfile = "m8def.dat"
$crystal = 8000000
$baud = 19200

Data_out Alias Portb.0 ' DAT - of the first 74HC595
Clock_out Alias Portb.1 ' SRCLK - 74HC595
Latch_out Alias Portb.3 ' RCLK

Data_out_dir Alias Ddrb.0
Clock_out_dir Alias Ddrb.1 ' *** define direction regs ***
Latch_out_dir Alias Ddrb.3

Const Shift_delay = 20 ' shift delay in microseconds

Declare Sub Send_bytes() ' send byte array to shift registers

Dim Tempbyte1 As Byte
Dim Bytes(3) As Byte ' byte shift reg output buffer
Dim I As Byte
Reset Clock_out
Reset Data_out
Reset Latch_out

' set the data direction for I/O
Set Clock_out_dir
Set Data_out_dir
Set Latch_out_dir

Bytes(1) = &HAA
Bytes(2) = &H55
Bytes(3) = &HFF
Do
Send_bytes
Bytes(3) = Bytes(3) + 1
Bytes(2) = Bytes(2) + 1
Bytes(1) = Bytes(1) + 1
Wait 2
Loop

Sub Send_bytes()
For I = 3 To 1 Step -1 ' send byte array to shift regs
Tempbyte1 = Bytes(i)
Shiftout Data_out , Clock_out , Tempbyte1 , 0 , 8 , Shift_delay
Next I
Set Latch_out ' latch the shift reg to outputs
Waitms 1
Reset Latch_out
End Sub


So der Code läuft auch, soll heißen die Segmente leuchten unterschiedlich eben alle 2 sek anders.
Was ich nun nicht verstehe, ich kann auch in den Zeilen
Bytes(3) = Bytes(3) + 1
Bytes(2) = Bytes(2) + 1
Bytes(1) = Bytes(1) + 1

Zahlen schreiben, also z.B. Bytes(3) = 100
aber gibts denn keine Logik bei den Zahlen? was bewirken denn die Zahlen? z.B. 3 da geht das unterste Feld an, bei 33 das nächste.

Kanns mir bitte einer erklären? Mir fehlt die Logik dahinter.
Oder einen anderen Code Posten der eine Logik enthällt. oder muss ich schaun welche LEDs an welchen Ausgängen der 74HC hängen?

Danke kollimann
Danke

kollimann
19.05.2009, 17:15
So hab nochmal umgebaut.
Jetzt beginnt alles einen Sinn zu ergeben, man muss auch richtig anklemmen

Wir haben 3 chips also
Dim Daten_zu_latch(3) As Byte
dann senden wir die Daten
Daten_zu_latch(3) = &B00010000
Daten_zu_latch(2) = &B00000100
Daten_zu_latch(1) = &B00010000

Daten_zu_latch(3) = &B00010000 bedeutet das kanal 5 des 3.chips an ist alle anderen aus
Daten_zu_latch(2) = &B00000100 bedeutet das kanal 3 des 2.chips an ist alle anderen aus
usw usw

jetzt muss ich nur noch rausfinden wie ich die "1" verschieben kann um mal Lauflicht hinzubekommen.

DANKESCHÖN

Tretsch
19.05.2009, 19:40
Hi,
such mal in der Hilfe nach dem Rotate befehl. Steht dort super erklärt.

MfG Tretsch

kollimann
26.05.2009, 16:32
Irgendwie häng ich fest, es klappt nicht.
Ich hatte erst mit 6 74ern versucht da ging alles soweit, nun hab ich 9 74er und die machen irgendwie nur durcheinander.
Liegts amCode?



$regfile = "m8def.dat"
$crystal = 4000000

Dim I As Integer
Dim S As Integer

Dim Segment(9) As Byte
' SPI Bus (Hardware) als Master konfiguiren
Config Spi = Hard , Master = Yes

' SPI Bus initialisieren
' setzt das DDR Register entsprechend
Spiinit

' Bytes für die Daten

Segment(1) = &B00000001
Segment(2) = &B00000001
Segment(3) = &B00000001

Segment(4) = &B00000001
Segment(5) = &B00000001
Segment(6) = &B00000001

Segment(7) = &B00000001
Segment(8) = &B00000001
Segment(9) = &B00000001

Do
For I = 1 To 128
Segment(1) = Segment(1) + I
Segment(2) = Segment(1) + I
Segment(3) = Segment(1) + I

Segment(4) = Segment(1) + I
Segment(5) = Segment(1) + I
Segment(6) = Segment(1) + I

Segment(7) = Segment(1) + I
Segment(8) = Segment(1) + I
Segment(9) = Segment(1) + I
Spiout Segment(1) , 9
Wait 1
Next
Loop


Danke