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
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...
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
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
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
achso damn... dann hol ich mir eben mal den Katalo und such nach vergleichbaren Transistoren, die ich evtl. haben könnte...
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??
>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?
ja eben und ich möchte das ganze ja auf eine Lochrasterplatine Löten... =/
>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...
@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.
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...
ich weiss das ganze sieht für euch bestimmt viel zu einfach aus... aber ihr wart ja auch mal 1.Lehrjahr xD
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...
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?
> 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.
Hast du den 595 so an den m32 angeschlossen wie es im schlatplan ist oder pinne verwechselt?
hmm was fürn m32? ...eigentlich kann ich das nichts verwechselt haben.
mega32 meinte ich damit. du hast doch nen mega32 anstatt des 2313
Der M32 wird von Caterpillar hergestellt... http://images2.catmms.com/catimage/vision/jsp/imageCenter/hiresDownInfo.jsp?assetId=C159656&app=trade_press&back=1
nee den hab ich nicht so angeschlossen wie im Schaltplan^^ , da bei dem m32 die Pinbelegung wieder ganz anders is...
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.
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.
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
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?
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.
bedenke dass die meisten steckernetzteile nur mäßig geglättet sind
najo hab jetzt die empfolenen 47nF genommen für den reset. @ Sebastian meinste das das evtl. zu wenig Kapazität is??
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.
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 | -
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
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
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....
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...)
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...
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.
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.
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??
> 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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.