Forum: Mikrocontroller und Digitale Elektronik Led Matrix mit 1 5x7 LED Modul


von Tim (Gast)


Lesenswert?

Ahoi bin neu hier im Forum und hab`ne Frage zu der LED Matrix...
Ich bastel nun schon seit ca. 2 monaten an dieser Matrix, naja anfangs 
hab ichs auch noch mit 8 Modulen probiert und das alles ohne eine 
Platine dafür zu Ätzen, hab versucht alles auf`ne Lochrasterplatine zu 
kriegen. Mir war nicht klar was für`ne riesen Arbeit war über 500 pins 
zu verdraten und zu verlöten unglücklich ..... najo nach`ner weile hab 
ich den ganzen kram einfach gelassen und jetzt fang nun nochmal mit dem 
kram an aber diesmal nur mit einem Modul^^.
Ich habe folgende Bauteile hier liegen TC 12-11 RT Dot-Matrix-Display, 
5x7 Pkt., 8,0mm, rot, Kathode, Atmega 32,ULN 2003 A und einen 
74HC595....
Kann mir vllt jemand`ne Schaltung posten? ...das programmieren des 
atmegas mach ich selbst, hab`ne idee wie ich das verlöten könnte, höre 
mir aber lieber eure Ratschläge an bevor ich nachher alles falsch mach 
Freude

von Matthias (Gast)


Lesenswert?

TC ist gemeinsame kathode pro spalte. also verbindest du alle anoden 
über einen vorwiderstand mit portpins des µC. das brauchst du achtmal.
die kathoden musst über einen transistor puffern. am besten die kathode 
an den emitter! eines pnp-transistors, den kollektor auf masse und die 
basis an einen anderen port.. das brauchst du fünfmal.
steuerst du jetzt NUR EINE basis mit LOW an, ist diese spalte 
ausgewählt...

von johnny.m (Gast)


Lesenswert?


von Tim (Gast)


Lesenswert?

jab hab den kram schonmal gepostet vor`ner Woche, hab den Thread nur net 
wiedergefunden^^ @Matthias brauch ich da einen bestimmten pnp-transistor 
und wie bring ich den LED-Treiber(ULN 2003) und den 74 HC 595 unter?

...ich mein diese Lösung ist ja schon sehr schön 
http://home.wanadoo.nl/electro1/avr/dotmatrix.htm aber hierbei wurde ein 
TA Modul Benutzt und kein TC, weil da Anode und Kathode vertauscht 
sind... Kann ich die anschlüsse des Moduls einfach vertauschen? ;sry ich 
bin ein kompletter Neuling auf diesen Gebiet, deswegen will ich soviel 
wie möglich darüber Wissen! ... und nochmal zu der Schaltung im Link, is 
das 7805er-IC nicht völlig unnötig?? ... und warum wurde hier kein 
LED-Treiber untergebracht wie der ULN 2003 A in der schaltung mit den 8 
Modulen?? KLärt mich bitte auf :D

von Matthias (Gast)


Lesenswert?

warum das schieberegister? und nicht direkt an den µC?
das schieberegister hat ausgangstreiber, die sind stark genug, leds zu 
treiben-der uln ist nicht notwendig.
die pnp sollten die summe von 7leds aushalten, also mit einem 
BC807/BC817 (einer von beiden ist pnp-weiß jetzt ne welcher) sollte es 
gehen

von Tim (Gast)


Lesenswert?

hmm den hab ich leider net, aber wie wäre es mit`nem BC548er?
http://pdf1.alldatasheet.com/datasheet-pdf/view/50731/FAIRCHILD/BC548.html

von klugscheissender Rahul, manchmal auch fies (Gast)


Lesenswert?

>BC548er?

Ist ein NPN...

von Tim (Gast)


Lesenswert?

achso damn... dann hol ich mir eben mal den Katalo und such nach 
vergleichbaren Transistoren, die ich evtl. haben könnte...

von Tim (Gast)


Lesenswert?

also dazu vergleichbare Transistoren zu BC808 sind BCX17-18,BCW 
65-66,2SA1366 und 2sb1197, zu BC817 sind BCX19,BCW65-66,2SC3325 und 
2SC3441... die ich natürlich net hab, aber der BC 558 ist auch ein 
pnp-transistor,könnte ich den net nehmen??

von Matthias (Gast)


Lesenswert?

der BC558 geht auch, der kann 500mA aushalten.

von klugscheissender Rahul, manchmal auch fies (Gast)


Lesenswert?

>aber der BC 558 ist auch ein pnp-transistor,könnte ich den net nehmen??

Ja.

Der BC808 ist doch SMD-Bauteil, wenn ich mich nicht irre, oder?

von Tim (Gast)


Lesenswert?

ja eben und ich möchte das ganze ja auf eine Lochrasterplatine Löten... 
=/

von klugscheissender Rahul, manchmal auch fies (Gast)


Lesenswert?

>ja eben und ich möchte das ganze ja auf eine Lochrasterplatine Löten...

Der BC548 ist ja ein THT-Bauteil. Für die sind die Löcher in der 
LOCHRasterplatine...

von Tim (Gast)


Lesenswert?

so bin schon fast fertig mit den Löten ; thx für die Beiträge

von Jadeclaw D. (jadeclaw)


Lesenswert?

@Matthias:
BC558 mit 500mA?
Laut ECA tdv1 kann der nur 100mA Dauer, 200mA Spitze.
7 * 20mA sind 140mA, wäre im Multiplex-Betrieb sehr hart am Limit.
Hängt das Ganze auf einer Spalte fest, könnte es eng werden.
Mehr geht mit dem BC638 oder BC327.

Gruss
Jadeclaw.

von Tim (Gast)


Angehängte Dateien:

Lesenswert?

Morgen, also meine Led-Matrix ist nun fertig und das Testprogramm ist 
dafür auch schon fertig aber irgendwie funzt das ganze noch nicht =/. Er 
zeigt mir einfach nichts an... hab meine Schaltung schon auf fehler 
überprüft und keine gefunden, ich konnte jede Led einzeln mit den 
richtigen Koordinaten ansteuern.
Nur mein Bascomprogramm will nicht so richtig...

 $regfile = "m32def.dat"
 $framesize = 32
 $swstack = 32
 $hwstack = 32
 $crystal = 16000000
 $baud = 9600






 Config Portb = Output

 Do
    Portb.0 = 1
    Waitms 100

    Portb.1 = 0
    Waitms 100

    Portb.2 = 1
    Waitms 150

    Portb.3 = 0
    Waitms 400

    Portb.4 = 1
    Waitms 550

    Portb.5 = 0
    Waitms 200

    Portb.6 = 1
    Waitms 300

Loop

Wäre net wenn mir ja jemand hilft oder mir evtl. ein Testprogramm dafür 
schreiben könnte...

von Tim (Gast)


Lesenswert?

ich weiss das ganze sieht für euch bestimmt viel zu einfach aus... aber 
ihr wart ja auch mal 1.Lehrjahr xD

von Sebastian Heyn (Gast)


Lesenswert?

zuerstmal brauchst du eine kleine routine die dir den 595 ansteuert. 
oder bei einem modul noch einfacher. lass den 595 weg und bau 5x 200ohm 
widerstände dran. der atmega kann den strom ab...

von Tim (Gast)


Lesenswert?

hmm theoretisch wäre das ja möglich, nur brauche ich das 74hc595 um die 
ansteuerungskoordinaten zu haben wie z.B. R4/C5, wobei R4 dann beim 
atmega z.B. für den PortB2 stehen könnte und C5 wäre dann an dem IC der 
Port Q2...
außerdem hab ich sicherheitshalber zum atmega hin Vorwiederrstände von 
120 Ohm eingelötet... könnte es evtl. auch daran liegen das die LEDs zu 
wenig Strom bekommen? =/

@ Sebastian: wo soll ich die Ausgänge C1-5 anschließen wenn nicht an dem 
IC?

von Karl H. (kbuchegg)


Lesenswert?

> hmm theoretisch wäre das ja möglich, nur brauche ich das 74hc595
> um die ansteuerungskoordinaten zu haben

Den 595 brauchst du nur deshalb, weil dein Fernziel darin besteht
mehr als ein Modul anzusteuern. Für ein einziges Modul brauchst
du ihn nicht unbedingt.

Wenn du ihn schon hast und dein Frenziel noch steht, würde ich
ihn drinnen lassen und mich mal damit beschäftigen wie
man so ein Schieberegister ansteuert.

von Sebastian Heyn (Gast)


Lesenswert?

Hast du den 595 so an den m32 angeschlossen wie es im schlatplan ist 
oder pinne verwechselt?

von Tim (Gast)


Lesenswert?

hmm was fürn m32? ...eigentlich kann ich das nichts verwechselt haben.

von Sebastian Heyn (Gast)


Lesenswert?

mega32 meinte ich damit. du hast  doch  nen mega32 anstatt des 2313

von Rahul, der Trollige (Gast)


Lesenswert?


von Tim (Gast)


Lesenswert?

nee den hab ich nicht so angeschlossen wie im Schaltplan^^ , da bei dem 
m32 die Pinbelegung wieder ganz anders is...

von Karl H. (kbuchegg)


Lesenswert?

So ein 595 wird sehr einfach angesteuert:
So wie er bei dir verschaltet ist, hat er 3 Steuereingänge:

Pin 14:  Dateneingang
Pin 11:  Schieberegistertakt
Pin 12:  Übernahme auf die Ausgänge

Intern hat ein 595 8 Schiebestufen

      +---+---+---+---+---+---+---+---+
      | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
      +---+---+---+---+---+---+---+---+
        |
      +-----+
      |Pin14|
      +-----+

An Pin 14 legst du jetzt eine 1

      +---+---+---+---+---+---+---+---+
      | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
      +---+---+---+---+---+---+---+---+
        |
      +-----+
      | 1   |
      +-----+

Danach wird Pin 11 einmal auf 1 und wieder auf 0 gesetzt
(Ein Puls angelegt).

Dadurch wird in der Schieberegisterkette alles um eine Stelle
nach rechts geschoben und die 1 von Pin 14 ganz links
eingesetzt:

      +---+---+---+---+---+---+---+---+
      | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
      +---+---+---+---+---+---+---+---+
        |
      +-----+
      | 1   |
      +-----+

Wenn du jetzt Pin 14 wieder auf 1 lässt und noch einen
Puls gibst, passiert genau das gleiche noch mal:

      +---+---+---+---+---+---+---+---+
      | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
      +---+---+---+---+---+---+---+---+
        |
      +-----+
      | 1   |
      +-----+

Jetzt mal eine 0 an Pin 14 und ein Puls auf Pin 11:

      +---+---+---+---+---+---+---+---+
      | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
      +---+---+---+---+---+---+---+---+
        |
      +-----+
      | 0   |
      +-----+

Mit jedem Puls an Pin 11 wird der aktuelle Zustand von Pin 14
übernommen und der Rest um eine Stelle nach rechts geschoben.

Auf die Art kannst du mit 8 Pulsen genau die 1/0 Belegung
erreichen die du haben möchtest.

Am Ausgang ist diese Belegung noch nicht zu sehen. Der 595
hat nämlich noch eine 2-te Reihe von Speichern:

      +---+---+---+---+---+---+---+---+
      |   |   |   |   |   |   |   |   |
      +---+---+---+---+---+---+---+---+
      | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
      +---+---+---+---+---+---+---+---+
        |
      +-----+
      | 0   |
      +-----+

Und es ist diese 2.te Reihe, die an den Ausgangspins herausgeführt
wird.
Wenn du Pin 12 einmal auf 1 und wieder auf 0 setzt, dann wird
der Inhalt der Schiebekette in diese Ausgangsregister übernommen
und wird an den Ausgängen angezeigt (wenn Pin13 auf low liegt,
das liegt er aber laut deinem Schaltplan).

Und damit sind alle Zutaten beinander die du brauchst um
an den Schieberegisterausgängen jedes beliebige Bitmuster
zu erzeugen:

  * Die einzelnen Bits nacheinander an Pin 14 anlegen.
    Nach jedem Bit einmal Pin 11 auf 1 und wieder zurück
    auf 0 setzen

    Aufpassen: Das Bit, das als erstes angelegt wird,
    erscheint nach 8 Pulsen am Ausgang mit der höchsten
    Nummer

  * Sind alle Bits in das Schieberegister getaktet, den
    Pin 12 einmal auf 1 und wieder zurück auf 0 und das
    vorher eingetaktete Bitmuster erscheint auf den Ausgängen.


Das ist dein erstes Ziel:
Ein beliebiges Bitmuster an die Ausgänge des 595 zu zaubern.
Schnapp dir ein Multimeter und kontrolliere ob die Ausgänge
tatsächlich die gewünschten Pegel einnehmen.

von Tim (Gast)


Lesenswert?

ok dann mach ich mich mal ans Werk und Mess mal durch...

von Sebastian Heyn (Gast)


Lesenswert?

das die pinnummern da anders sind konnte ich mir fast denken. ich meinte 
die port nahmen!

@rahul: hast wohl n clown zum frühstück gegessen. mann mann mann immer 
diese kommentare die nix zur sache tun. einmal n bisschen mitdenken.

von Sebastian Heyn (Gast)


Lesenswert?

die daten die du ausgibst kannst du im prinzip so ausgeben:

For I = 7 To 0 Step -1
Sdo = Byte1.i
Sck = 1
Sck = 0
Next

Rck = 1
Rck = 0


ich hatte sowas schonmal gemacht mit bascom und 3x 5x8er matrix. 
allerdings mit nem mega128 und externem ram, damit auch genug platz zum 
scrollen für bilder war, grins

von Sebastian Heyn (Gast)


Lesenswert?

vorher musst du natürlich deine ports mit alias zuweisen

von Tim (Gast)


Lesenswert?

k danke euch... eine dumme Frage hab ich noch: Wozu sind die 
Kondensatoren in der Schaltung und muss ich die noch mit reinnehmen wenn 
ich den 7805 einfach weglasse, weil der ja eh nur die Spannung auf 5V 
runterregelt?

von johnny.m (Gast)


Lesenswert?

Grundsätzlich sollte jedes Bauteil (also µC, 595) einen 
Abblockkondensator (Anhaltswert 100 nF) gegen GND möglichst nah am 
VCC-Anschluss bekommen. Den Kondensator am Reset vom µC kann man im 
Prinzip weglassen, er kann aber von Vorteil sein in Sachen 
Störunterdrückung. 100nF müssen es aber nicht sein, meist genügen 
10...47nF. Wenn Du 100nF da hast, kannste die aber auch nehmen.

> weil der ja eh nur die Spannung auf 5V runterregelt?
Wenn Du schon eine stabile 5V-Spannung hast, brauchst Du den 7805 
natürlich nicht.

von Tim (Gast)


Lesenswert?

k danke Johnny :D

von Sebastian Heyn (Gast)


Lesenswert?

bedenke dass die meisten steckernetzteile nur mäßig geglättet sind

von Tim (Gast)


Lesenswert?

najo hab jetzt die empfolenen 47nF genommen für den reset.

@ Sebastian meinste das das evtl. zu wenig Kapazität is??

von Karl H. (kbuchegg)


Lesenswert?

Wenn dein Steckernetzteil 5V liefert (nachmessen), dann
kannst du den 7805 weglassen. Der grosse Elko am
Eingang schadet nicht. Ist er nicht da und dein Netzteil
liefert keine sauberen 5V, die stehen wie ne Eins, dann
bewahrt er dich vor Kopfschmerzen.

von Sebastian Heyn (Gast)


Lesenswert?

eben, grins. Wenn es wirklich ein steckernetzteil ist ist noch ne diode 
in reihe empfehlenswert. damit sperrst du dir den elko in richtung 
netzteil...

eingang -->|--o- schaltung
              |
              = elko
              |
              -

von Tim (Gast)


Lesenswert?

jop hab ich gemacht^^ ...

von Tim (Gast)


Lesenswert?

hmm hat wer`n Bascom Program mit den ich mein 7x5 Modul ansteuern kann 
... so`ne art demo oder sowas...

ich hab im forum nur das gefunden für 8x8 LED-Module:

$crystal = 11059200
$baud = 9600
Config Portb = Output
Config Pind.5 = Output
Config Pind.6 = Output
Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte
Dim E As Byte
Dim F As Byte
Dim G As Byte
Dim H As Byte
Dim I As Byte
Dim Y As Byte
Dim Z As Byte
Dim W As Byte
Dim V As Byte
Dim U As Byte


On Urxc Test
Enable Urxc
Enable Interrupts

Portb = 255
F = 13
H = 0

Start:
Set Portd.5
Reset Portd.5

H = H + 1

If H = 14 Then
   F = F + 1
   H = 0
   End If

G = F - 12

For A = G To F

 Restore Dta0

 Readeeprom E , A
 If E = "*" Then
 F = 13
 E = " "
 End If
 If E = " " Then E = "@"
 If E => "a" Then
     Restore Dta1
     E = E - 49
     End If
 E = E - 48
 B = E * 6

 For D = 1 To B
 Read U
 Next D

 I = 5

 If A = G Then
   If H > 2 Then
     Read U
     I = 4
   End If
   If H > 4 Then
     Read U
     I = 3
   End If
   If H > 6 Then
     Read U
     I = 2
   End If
   If H > 8 Then
     Read U
     I = 1
   End If
   If H > 10 Then
     Read U
     I = 0
   End If
 End If

 For C = 0 To I
   Read U
   Portb = U
   Waitus 64

   Reset Portd.6
   Portb = 0
   nop
   nop
   Set Portd.6

 Next C
Next A

Goto Start


'*********************************************************************** 
******

Test:

Portb = 0
Print ""
Print ""
Print ""
Print "    ** Laufschrift **   "
Print " von Ulrich Radig C=2001"
Print ""
Print "Ende mit (RETURN)"
Print ""
Print "Text: " ;
Y = Waitkey()
Y = 32
For Z = 0 To 14
Writeeeprom Y , Z
Next Z

Testa:
Y = Waitkey()
Print Chr(y);
If Y = 13 Then Goto Testb
Writeeeprom Y , Z
Z = Z + 1
If Z < 110 Then Goto Testa

Testb:
Y = Z + 13

For W = Z To Y
V = 32
Writeeeprom V , W
Next W

V = "*"
Writeeeprom V , W

Return

End

'*********************************************************************** 
******

Dta0:
Data 62 , 81 , 73 , 69 , 62 , 0                             ' 0
Data 0 , 66 , 127 , 64 , 0 , 0                              ' 1
Data 66 , 97 , 81 , 73 , 70 , 0                             ' 2
Data 33 , 65 , 69 , 75 , 49 , 0                             ' 3
Data 24 , 20 , 18 , 127 , 16 , 0                            ' 4
Data 39 , 69 , 69 , 69 , 57 , 0                             ' 5
Data 60 , 74 , 73 , 73 , 48 , 0                             ' 6
Data 1 , 113 , 9 , 5 , 3 , 0                                ' 7
Data 54 , 73 , 73 , 73 , 54 , 0                             ' 8
Data 6 , 73 , 73 , 41 , 30 , 0                              ' 9 
' :
Data 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0
Data 0 , 0 , 0 , 0 , 0 , 0
Data 126 , 17 , 17 , 17 , 126 , 0                           ' A
Data 127 , 73 , 73 , 73 , 54 , 0                            ' B
Data 62 , 65 , 65 , 65 , 34 , 0                             ' C
Data 127 , 65 , 65 , 34 , 28 , 0                            ' D
Data 127 , 73 , 73 , 73 , 65 , 0                            ' E
Data 127 , 9 , 9 , 9 , 1 , 0                                ' F
Data 62 , 65 , 73 , 73 , 122 , 0                            ' G
Data 127 , 8 , 8 , 8 , 127 , 0                              ' H
Data 0 , 65 , 127 , 65 , 0 , 0                              ' I
Data 32 , 64 , 65 , 63 , 1 , 0                              ' J
Data 127 , 8 , 20 , 34 , 65 , 0                             ' K
Data 127 , 64 , 64 , 64 , 64 , 0                            ' L
Data 127 , 2 , 12 , 2 , 127 , 0                             ' M
Data 127 , 4 , 8 , 16 , 127 , 0                             ' N
Data 62 , 65 , 65 , 65 , 62 , 0                             ' O
Data 127 , 9 , 9 , 9 , 6 , 0                                ' P
Data 62 , 65 , 97 , 33 , 94 , 0                             ' Q
Data 127 , 9 , 25 , 41 , 70 , 0                             ' R
Data 70 , 73 , 73 , 73 , 49 , 0                             ' S
Data 1 , 1 , 127 , 1 , 1 , 0                                ' T
Data 63 , 64 , 64 , 64 , 63 , 0                             ' U
Data 31 , 32 , 64 , 32 , 31 , 0                             ' V
Data 63 , 64 , 56 , 64 , 63 , 0                             ' W
Data 99 , 20 , 8 , 20 , 99 , 0                              ' X
Data 7 , 8 , 112 , 8 , 7 , 0                                ' Y
Data 97 , 81 , 73 , 69 , 67 , 0                             ' Z

Dta1:
Data 32 , 84 , 84 , 84 , 120 , 0                            ' A
Data 127 , 72 , 68 , 68 , 56 , 0                            ' B
Data 56 , 68 , 68 , 68 , 32 , 0                             ' C
Data 56 , 68 , 68 , 72 , 127 , 0                            ' D
Data 56 , 84 , 84 , 84 , 24 , 0                             ' E
Data 8 , 126 , 9 , 1 , 2 , 0                                ' F
Data 12 , 82 , 82 , 82 , 62 , 0                             ' G
Data 127 , 8 , 4 , 4 , 120 , 0                              ' H
Data 0 , 68 , 125 , 64 , 0 , 0                              ' I
Data 32 , 64 , 68 , 61 , 0 , 0                              ' J
Data 127 , 16 , 40 , 68 , 0 , 0                             ' K
Data 0 , 65 , 127 , 64 , 0 , 0                              ' L
Data 124 , 4 , 24 , 4 , 120 , 0                             ' M
Data 124 , 8 , 4 , 4 , 120 , 0                              ' N
Data 56 , 68 , 68 , 68 , 56 , 0                             ' O
Data 124 , 20 , 20 , 20 , 8 , 0                             ' P
Data 8 , 20 , 20 , 24 , 124 , 0                             ' Q
Data 124 , 8 , 4 , 4 , 8 , 0                                ' R
Data 72 , 84 , 84 , 84 , 32 , 0                             ' S
Data 4 , 63 , 68 , 64 , 32 , 0                              ' T
Data 60 , 64 , 64 , 32 , 124 , 0                            ' U
Data 28 , 32 , 64 , 32 , 28 , 0                             ' V
Data 60 , 64 , 48 , 64 , 60 , 0                             ' W
Data 68 , 40 , 16 , 40 , 68 , 0                             ' X
Data 12 , 80 , 80 , 80 , 60 , 0                             ' Y
Data 68 , 100 , 84 , 76 , 68 , 0                            ' Z

von Tim (Gast)


Lesenswert?

Ich brauche dringend Hilfe, ich möchte gerne mal wissen ich ich 1 signal 
halten kann um z.B. den Buchstaben T dazustellen aber das ganze funzt 
net, kann mir da wer helfen bitteeee!?!?





 $regfile = "m32def.dat``
 $framesize = 32
 $swstack = 32
 $hwstack = 32
 $crystal = 16000000
 $baud = 9600



 Config Portb = Output
 Config Portd = Output

 Portb = 1
 Portd = 1

 Do

 Portb.0 = 1
 Waitms 10
 Portb.0 = 1
 Waitms 10
 Portb.0 = 1
 Waitms 10
 Portb.0 = 1
 Waitms 10
 Portb.0 = 1
 Waitms 10
 Portb.0 = 1
 Waitms 10
 Portb.0 = 1
 Waitms 100
 Portb.1 = 0
 Waitms 10
 Portb.1 = 0
 Waitms 10
 Portb.1 = 1
 Waitms 10
 Portd.4 = 1
 Waitms 10
 Portd.4 = 0
 Waitms 10
 Portb.1 = 1
 Waitms 10
 Portd.5 = 1
 Waitms 10
 Portd.5 = 0
 Waitms 10
 Portb.1 = 0
 Waitms 10
 Portb.1 = 0
 Waitms 10
 Portb.1 = 0
 Waitms 10
 Portb.1 = 0
 Waitms 100
 Portb.2 = 0
 Waitms 10
 Portb.2 = 0
 Waitms 10
 Portb.2 = 1
 Waitms 10
 Portd.4 = 1
 Waitms 10
 Portd.4 = 0
 Waitms 10
 Portb.2 = 0
 Waitms 10
 Portb.2 = 0
 Waitms 10
 Portb.2 = 0
 Waitms 10
 Portb.2 = 0
 Waitms 100
 Portb.3 = 0
 Waitms 10
 Portb.3 = 0
 Waitms 10
 Portb.3 = 1
 Waitms 10
 Portd.4 = 1
 Waitms 10
 Portd.4 = 0
 Waitms 10
 Portb.3 = 0
 Waitms 10
 Portb.3 = 0
 Waitms 10
 Portb.3 = 0
 Waitms 10
 Portb.3 = 0
 Waitms 100
 Portb.4 = 0
 Waitms 10
 Portb.4 = 0
 Waitms 10
 Portb.4 = 1
 Waitms 10
 Portd.4 = 1
 Waitms 10
 Portd.5 = 1
 Waitms 10
 Portd.5 = 0
 Waitms 10
 Portb.4 = 1
 Waitms 10
 Portd.4 = 0
 Waitms 10
 Portb.4 = 0
 Waitms 10
 Portb.4 = 0
 Waitms 10
 Portb.4 = 0
 Waitms 10
 Portb.4 = 0
 Waitms 100
 Portb.5 = 0
 Waitms 10
 Portb.5 = 0
 Waitms 10
 Portb.5 = 1
 Waitms 10
 Portd.4 = 1
 Waitms 10
 Portd.4 = 0
 Waitms 10
 Portb.5 = 0
 Waitms 10
 Portb.5 = 0
 Waitms 10
 Portb.5 = 0
 Waitms 10
 Portb.5 = 0
 Waitms 100
 Portb.6 = 0
 Waitms 10
 Portb.6 = 0
 Waitms 10
 Portb.6 = 1
 Waitms 10
 Portd.4 = 1
 Waitms 10
 Portd.4 = 0
 Waitms 10
 Portb.6 = 0
 Waitms 10
 Portb.6 = 0
 Waitms 10
 Portb.6 = 0
 Waitms 10
 Portb.6 = 0
 Waitms 100
 Portb.7 = 0
 Waitms 10
 Portb.7 = 0
 Waitms 10
 Portb.7 = 1
 Waitms 10
 Portd.4 = 1
 Waitms 10
 Portd.4 = 0
 Waitms 10
 Portb.7 = 0
 Waitms 10
 Portb.7 = 0
 Waitms 10
 Portb.7 = 0
 Waitms 10
 Portb.7 = 0
 Waitms 100

Loop

von Tim (Gast)


Lesenswert?

wenn ich das ganze also atmega lade hält er die oberste reihe und dann 
zählt er nach unten aber ich möchte das er das signal 001000 
speichert....

von Rahul, der Trollige (Gast)


Lesenswert?

ziemlich langsames Multiplexen...
Um ein stehendes Bild zu erzeugen, solltest du schneller werden.


>kann mir da wer helfen bitteeee!?!?
Unnötig viele Satzzeichen sind ein Zeichen für Schizophrenie...
(oder irgendwas anderes in deinem Kopf...)

von Tim (Gast)


Lesenswert?

nu red mal bitte auf deutsch, sodass ich das auch verstehe...

von Rahul, der Trollige (Gast)


Lesenswert?

Wenn dann so:

$regfile = "m32def.dat``
 $framesize = 32
 $swstack = 32
 $hwstack = 32
 $crystal = 16000000
 $baud = 9600



 Config Portb = Output
 Config Portd = Output

 Portb = 255
 Portd = 255

 Do
 PortD.6 = 1 'DS setzen
 PortD.5 = 1 'Takt hoch SH
 PortD.5 = 0 'Takt runter
 PortD.6 = 0 'DS löschen
 PortB =  4
 PortD.4 = 1 'ST
 PortD.4 = 0
 Waitms 4
 PortB = 0
 PortD.5 = 1 'Takt hoch SH
 PortD.5 = 0 'Takt runter
 PortB =  64
 PortD.4 = 1 'ST
 PortD.4 = 0
 Waitms 4
 PortB = 0
 PortD.5 = 1 'Takt hoch SH
 PortD.5 = 0 'Takt runter
 PortB =  68
 PortD.4 = 1 'ST
 PortD.4 = 0
 Waitms 4
 PortB = 0
 PortD.5 = 1 'Takt hoch SH
 PortD.5 = 0 'Takt runter
 PortB =  64
 PortD.4 = 1 'ST
 PortD.4 = 0
 Waitms 4
 PortB = 0
 PortD.5 = 1 'Takt hoch SH
 PortD.5 = 0 'Takt runter
 PortB =  4
 PortD.4 = 1 'ST
 PortD.4 = 0
 Waitms 4
Loop

Ohne Gewähr...

von Tim (Gast)


Lesenswert?

ka danke ich teste mal eben...

von Tim (Gast)


Lesenswert?

hmm nee geht nich =/

von Rahul, der Trollige (Gast)


Lesenswert?

Wie gut, dass ich keine Ahnung von Bascom habe...

von Karl H. (kbuchegg)


Lesenswert?

Das wird so sowieso nichts.

Du musst Multiplexen!
Das heist der Prozessor muss in schneller Folge
immer wieder die Leds einzeln ansteuern!

Du brauchst einen Timer, der dir regelmässige
Interrupts generiert. In dieser Interrupt-
Behandlung gibst du dann eine Zeile bzw.
eine Spalte (such dir eines der beiden aus)
aus. Dazu muss aber auch im Programm irgendwo
zwischengespeichert werden, wie denn das Bild
auf den Leds aussehen soll, damit die Interrupt
Funktion das von dort ablesen kann.

So wie du das jetzt hast, kannst du (hoffentlich)
1 Led, bzw. die Leds einer Zeile einschalten.
Nur: Das ist als Test ob die Leds funktionieren
und um zu lernen wie die Matrix funktioniert hilfreich.
Es hilft dir aber nicht weiter, dein endgültiges Ziel
zu ereichen.

Du weist wie ein Timer funktioniert und wie du da einen
regelmässigen Interrupt raus kriegst? Wein nein, dann
schau in die Bascom Hilfe. Ohne dieses Wissen bist du
aufgeschmissen.

von Karl H. (kbuchegg)


Lesenswert?

Und fang um Gottes Willen an dir SUBs zu schreiben.
Das da oben ist eine Zumutung. Sowohl für dich als
auch für jemanden der das Lesen muss.

Schreib mal eine Sub, der du eine Zahl übergibst
und die diese Zahl an das Schieberegister raustaktet.

Das ist die erste SUB die funktionieren muss!

Wenn du die hast (und auch getestet hast), dann benutzt
du sie um mal die Zahl 170 (das ist binär 10101010)
an das Schieberegister auszugeben. Danach schaltest
du in schneller Folge mal die Port B Pins durch: Eines
nach dem anderen kriegt einen Puls, sodass die jeweilige
Led Zeile leuchtet. Das kannst du am Anfang ruhig mal
langsam machen um zu sehen wie nacheinander eine
Zeile nach der anderen aufläuchtet. Dann steigerst
du das Tempo, indem du die Wartezeiten immer mehr
verkürzt. Jetzt sollte in deiner Matrixanzeige
kein Flimmern mehr zu sehen sein und sich ein
Streifenmuster abzeichnen.
Probier mal aus andere Zahlen als 170 da reinzuladen.
(Schau dir aber immer das zur Zahl gehörige Bitmuster
an. Die 0/1 Verteilung im Bitmuster ist der Schlüssel
dazu, welche Spalte in der Matrix aufleuchtet).

Warum ist das überhaupt eine Streifenmuster?
Weil in jeder Zeile immer wieder das Muster für
170 aufscheint. Es ist jetzt Zeit das zu ändern.

Du must also bevor mit den B-Ports eine Zeile
eingeschaltet wird eine jeweils andere Zahl am
D-Port in das Schieberegister überspielen.

Auch hier wieder: Zwischen der Zeilenausgabe mal
genügend Wartezeit vorsehen, so dass du auch
verfolgen kannst was da vor sich geht. Erst dann
das Tempo steigern.

Und jetzt kommt der Interrupt ins Spiel. Dein
Programm kann ja nicht die ganze Zeit damit
vertrödeln ständig in einer Schleife das
Schieberegister und die Zeilen anzusteuern.
Auf der anderen Seite muss regelmässig eine
neue Zeile ausgegeben und eingeschaltet werden.
Und das verlagerst du in die Interrupt routine.
Bei jedem Interrupt wird eine Zeile in das
Schieberegister überspielt und die zugehörige
Zeile eingeschaltet.

von Adolf (Gast)


Lesenswert?

.....nur Leute ohne Schniedel heissen "RAHUL".

von Tim (Gast)


Lesenswert?

achso ja Vielen Dank für die geniale Erklärung, also wenn ich das 
richtig verstanden hab brauch ich ja eigentlich nur bei dem Clockinput 
eine beliebige binärzahl eingeben und danach muss ich den Port  PB 
ansteuern und danch kann ich mit dem Storagebefehl die sachen 
speichern... und nach jedem befehl brauch ich ja dann nur noch den 
Ds-port wieder mit 1 u.0 zurücksetzen um danach die nächste zeile zu 
machen, aber ich guck mir gleich auf jedenfall nochmal an wie ich subs 
schreibe... hab ich deine ganzen erklärungen richtig verstanden??

von Karl H. (kbuchegg)


Lesenswert?

> hab ich deine ganzen erklärungen richtig verstanden

Schwer zu sagen. Ich werde aus deiner Antwort nicht
richtig schlau.

Der springende Punkt ist:
Wenn alles fertig ist, leuchtet zu jedem beliebigen
Zeitpunkt nur eine einzige Zeile an deiner Matrix
auf:
Welche Leds in der Zeile leuchten/nicht leuchten wird
über das Schieberegister festgelegt.
In welcher Zeile das ganze gemacht wird, wird über das B-Port
festgelegt.

Der Rest ist dann reine Rechenpower, sodass das der wechsel
zwischen den Zeilen nicht mehr sichtbar ist -> du kriegst
ein stehendes Bild.

von Tim (Gast)


Lesenswert?

ich bin schon die ganze zeit am herum porbieren... schau mal bitte

 $regfile = "m32def.dat"
 $framesize = 32
 $swstack = 32
 $hwstack = 32
 $crystal = 16000000
 $baud = 9600



 Config Portb = Output                                      ' 
Initialisierung Der Ports
 Config Portd = Output

 Portd = 0
 Portb = 0


 Portd.6 = 1
 Portd.5 = 1
 Waitms 10
 Portd.5 = 0
 Portd.4 = 1
 Waitms 10
 Portd.4 = 0

  Portd.6 = 1
 Portd.5 = 1
 Waitms 10
 Portd.5 = 0
 Portd.4 = 1
 Waitms 10
 Portd.4 = 0

  Portd.6 = 1
 Portd.5 = 1
 Waitms 10
 Portd.5 = 0
 Portd.4 = 1
 Waitms 10
 Portd.4 = 0

  Portd.6 = 1
 Portd.5 = 1
 Waitms 10
 Portd.5 = 0
 Portd.4 = 1
 Waitms 10
 Portd.4 = 0

  Portd.6 = 1
 Portd.5 = 1
 Waitms 10
 Portd.5 = 0
 Portd.4 = 1
 Waitms 10
 Portd.4 = 0

  Portd.6 = 1
 Portd.5 = 1
 Waitms 10
 Portd.5 = 0
 Portd.4 = 1
 Waitms 10
 Portd.4 = 0



Do

 Portd.6 = 0                                                'DS setzen
 Portd.5 = 1                                                'Takt hoch 
SH
 Portd.5 = 0
 Portb = 31
 Portd = 64                                                 'Takt runter
 Portd.4 = 1
 Waitms 10                                                  'ST
 Portd.4 = 0

 Portb = 31
 Waitms 100

 Portd.6 = 1                                                'DS setzen
 Portd.5 = 1                                                'Takt hoch 
SH
 Portd.5 = 0
 Portb = 4
 Portd = 64                                                 'Takt runter
 Portd.4 = 1
 Waitms 10                                                  'ST
 Portd.4 = 0
 Portb = 4
 Waitms 100

 Portd.6 = 1                                                'DS setzen
 Portd.5 = 1                                                'Takt hoch 
SH
 Portd.5 = 0
 Portb = 4
 Portd = 127                                                'Takt runter
 Portd.4 = 1
 Waitms 10                                                  'ST
 Portd.4 = 0
 Portb = 4
 Waitms 100

 Portd.6 = 1                                                'DS setzen
 Portd.5 = 1                                                'Takt hoch 
SH
 Portd.5 = 0
 Portb = 4
 Portd = 64                                                 'Takt runter
 Portd.4 = 1
 Waitms 10                                                  'ST
 Portd.4 = 0
 Portb = 4
 Waitms 100

 Portd.6 = 1                                                'DS setzen
 Portd.5 = 1                                                'Takt hoch 
SH
 Portd.5 = 0
 Portb = 4
 Portd = 64                                                 'Takt runter
 Portd.4 = 1
 Waitms 10                                                  'ST
 Portd.4 = 0
 Portb = 4
 Waitms 100

 Portd.6 = 1                                                'DS setzen
 Portd.5 = 1                                                'Takt hoch 
SH
 Portd.5 = 0
 Portb = 4                                                  'Takt runter
 Portd.4 = 1
 Waitms 10                                                  'ST
 Portd.4 = 0
 Portb = 4
 Waitms 100
Loop

von Sebastian Heyn (Gast)


Lesenswert?

Warum machst du jeden takt einzeln?

For I = 7 To 0 Step -1
Sdo = Byte1.i
Sck = 1
Sck = 0
Next

Rck = 1
Rck = 0

oder direkt an SPI anschließen, 
http://www.mikrocontroller.net/articles/Porterweiterung_mit_SPI dann 
musst du dich nicht um takt hier und takt da kümmern und benutzt nur 
spiout in bascom

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.