Forum: Mikrocontroller und Digitale Elektronik Schieberegisterkaskade total verbuggt


von Johannes (menschenskind)


Lesenswert?

hallo

Ich will 64 LEDs mit 8 SRs steuern.
Diese hängen kaskadiert am Software-SPI des uC(siehe Tutorial dazu hier 
auf uC.net)

Jetzt würde ich gern mal meine Herangehensweise erläutern. Ich 
programmiere das dann mit Bascom.

ich wollte zunächst alle 64 leds blinken lassen

Start:

Laden von Variable Test mit Umfang von zwei Byte mit HEX:FF

Senden von Test über SPI-Bus (8x insgesamt, damit 64 rauskommen->mittels 
FOR-Schleife)

Reset von RCK
Setzen von RCK

Zuweisung von HEX:00 an Test

Wieder das Senden über SPI mittels FOR-Schleife

Reset von RCK
Setzen von RCK

Ende:

Und diese 2 Operationen werden natürlich kontinuierlich in einer 
While(1)-Schleife ausgeführt.
Zwischen den einzelnen SPI-Befehlen noch etwas Delay und man hat ein 
schönes Blinklicht, möchte man meinen.

Doch Nix gibts! Die Kiste macht nur Unfug.
Deswegen wollt ich von euch gern wissen, ob das prinzipielle Herangehen 
so korrekt ist.

Vielen Dank

von Checker (Gast)


Lesenswert?

Da kommt keiner draus. Ist wohl die Beschriebung der BASCOM User...

>ich wollte zunächst alle 64 leds blinken lassen

>Start:

>Laden von Variable Test mit Umfang von zwei Byte mit HEX:FF

>Senden von Test über SPI-Bus (8x insgesamt, damit 64 rauskommen->mittels
>FOR-Schleife)

Wen ich richtig zähle.. nach deiner Beschreibung schreibst du 128 bits 
raus..
Test: Umfang von zwei Byte -> 16 bit
8 mal senden von Test = 8 * 16 = 128

Befass dich doch mal mit den Grundlagen:
bit
Byte
Integer(16 bit)
Long(32 bit)

von Johannes (menschenskind)


Lesenswert?

Ja bei einem Byte 8x und bei 2en 4x
Ich hatte beim Schreiben des Threads noch was geändert und dann 
vergessen das anzupassen.

Aber das ist doch Krümelkackerei, es geht mir in erste Linie darum 
festzustellen, wo genau der Fehler liegt.

von Peter D. (peda)


Lesenswert?

Johannes Hofmann wrote:
> Doch Nix gibts! Die Kiste macht nur Unfug.

Und das heißt?

Zeig dochmal den Schaltplan und das Programm.

Das 8 Byte Schieben und RCK takten würde ich als Unterprogramm machen.


Peter

von Johannes (menschenskind)


Angehängte Dateien:

Lesenswert?

hier sind sie schon:

die 2 im Spiout-Befehl gibt an, wieviele Bytes er senden soll
1
$regfile = "ATtiny2313.dat"
2
$crystal = 8000000                                          'Takt: 8 MHz
3
$baud = 9600
4
5
6
Config Spi = Soft , _
7
       Din = Pind.7 , _
8
       Dout = Portb.5 , _
9
       Ss = None , _
10
       Clock = Portd.2
11
12
       Spiinit
13
14
15
Ddrb = &B10111111
16
17
Ddrd = &B01100100
18
Portb = &B00011111
19
20
21
Dim Array_index As Byte
22
23
Dim Test1 As Word
24
Test1 = &HFF
25
26
Dim Test2 As Word
27
Test2 = &H00
28
29
30
Rck Alias Portd.5
31
32
33
Do
34
35
For Array_index = 1 To 8
36
   Spiout Test1 , 2
37
Next
38
      Reset Rck
39
      Set Rck
40
      Reset Rck
41
42
Waitms 200
43
44
For Array_index = 1 To 8
45
   Spiout Test2 , 2
46
Next
47
48
      Reset Rck
49
      Set Rck
50
      Reset Rck
51
52
Waitms 200
53
54
Loop

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.