Hallo Forums Mitglieder, Erstmal einen Schönen 1. advent euch allen. Ich habe folgendes Problem und zwar wollte ich mit meiner pingPong Platine einzelne LED's leuchten lassen z.B. Led 7 Led 15 und Led 35(siehe Schaltplan) leider weiß ich nicht wie ich das in C Programmieren muss da ich blutiger Anfänger bin in Microcontroller Programmieren und auch in C ( nur paar Grundkentnisse ). Wie würde der Code aussehen damit ich die Angegeben Leds Leuchten lassen und die anderen aus sind ?? Außerdem wie müsste ich die Platine "umstricken" um eine Matrix mit 7 Zeilen und 30 Spalten zu bauen ?? Normalerweiße bräuchte ich ja nur 2 Schieberegister zusätzlich oder ? Mit Freundlichem Gruß und bestem Dank für alle Hilfreichen Antworten. Raucher91
Ebenfalls schönen Sonntag :-). Du Taktest via SPI das Bitmuster in die Schieberegister. Dabei soll an jenen Stellen eine 0 stehen, die der gewünschten Spalten entsprechen, in denen eine LED leuchten soll. Danach gibst Du einen kurzen Impuls auf die STR-Leitung, womit das Bitmuster an die Schieberegisterausgängen geschaltet wird. Nun liegen die ausgewählten Spalten auf GND. Zuletzt musst Du nun eine Zeile auswählen, indem Du den zuständigen Portpin auf 1 legst. Nun leuchten die LEDs an den Kreuzungspunkten. Und das ganze widerholst Du nun zyklisch für alle Spalten.
Hey cool danke für die Erklärung. Könntest du mir evtl auch sagen wie der Code in C aussieht damit das so Funktioniert?
Ein fertiges Programm für Deine Hardware wird Dir kaum jemand schreiben. Das musst Du schon selber erledigen. Wenn Du noch nicht weisst, wie das geht, dann musst Du es eben lernen. Das Netz ist voller LED-Matrizen nebst Code. Grundsätzliches Vorgehen: Timer/Counter löst regelmäßig Interrupt aus, in dem folgendes gemacht wird: - Spaltenmuster aus - Nächste Reihe an (falls letzte, erste anwählen) - nächstes Spaltenmuster ein Spaltenmuster bedeutet, alle LEDs, die in der aktuellen Reihe an sein sollen, kriegen eine 0, die anderen eine 1. Falls Dir Begriffe unklar sind, mal in die Tutorials schauen, da wird alles erklärt. Schreib nicht alles auf einmal, mach kleine Schritte: Erstmal eine beliebige LED einschalten, dann eine blinken lassen, dann zweite Reihe dazu nehmen,... usw. Wenn Du irgendwo nicht weiterkommst, den eigenen Code hier zeigen und konkrete Fragen stellen. Noch ein Hinweis: Bei LED-Matrizen werden die LEDs immer nur ganz kurze Zeit eingeschaltet, damit das für das menschliche Auge hell genug ist, werden sie oft mit einem Pulsstrom betrieben, der als Dauerstrom der LED schadet. Darauf achten, daß die LEDs immer nur kurz mit Strom versorgt werden. Das wird mit dem Timer/Counter und seiner richtigen Konfiguration gewährleistet. Gruß und gutes Gelingen Mullwark
mullwark schrieb: > werden sie oft mit einem Pulsstrom betrieben, der als Dauerstrom der LED > schadet. Darauf achten, daß die LEDs immer nur kurz mit Strom versorgt > werden. Bei Andreas Schaltung kann den LEDs nicht viel passieren, da er keine "richtigen" Treiber hat. Er kann höchstens den µC und die 4094 schädigen. Ob allerdings die Helligkeit bei dem in seiner Schaltung max. möglichen bzw. erlaubten Strom hell genug ist, muss er selber herausfinden. Gruß Dietrich
Also ich verlange ja ned dass mir wer des alles fertig programmiert. Ich wäre nur froh wenn mir wer nen Code schreibt damit ich zzmindestens verstehe wie ich genau die led 15 z.b. Anspreche. Mehr bräuchte ich auch ned als Hilfe. Also wäre cool fals des jemand machen könnte.
Guckst du hier: http://www.elo-web.de/elo/mikrocontroller-und-programmierung/ping-pong Wenn du da nichts zu C findest, dann wenigstens für Bascom. Mach was draus.
Andreas Hermann schrieb: > Ich habe folgendes Problem Im Schaltplan hast du auch noch ein Problem: An ARef soll lt. Datenblatt nur ein Kondensator. VCC hat da nichts zu suchen.
Heyy Also ich hab es etz hinbekommen dass ich Einzelne Zeilen Anschalten kann nun müsste ich nur noch wissen wie ich die Spalten schalten kann. Hier mein Code bisher:
1 | #include <avr/io.h> |
2 | #include <util/delay.h> // Warteschleife /Library) |
3 | int main(void) |
4 | {
|
5 | DDRC = 0xff; |
6 | DDRB = 0xff; |
7 | DDRD = 0xff; |
8 | |
9 | while(1) |
10 | {
|
11 | PORTC = (1<<PC1)|(1<<PC3); |
12 | PORTD = (1<<PD5) | (1<<PD7); |
13 | _delay_ms(3000); |
14 | PORTC = (0<<PC1) | (0<<PC3); |
15 | PORTD = (0<<PD5) | (0<<PD7); |
16 | _delay_ms(1000); |
17 | }
|
18 | return 0;} |
Somit hab ich nun 4 Zeilen am Blinken nur wie funktioniert dass nun mit den Spalten Steuern ??? des kapier ich nicht ganz obwohl ich jetzt schon mehrfach im i-net gesucht habe wegen Schieberegister Steuern. @Wolfgang: kann ich leider keine Aussage dazu treffen da die Platine so fertig aufgebaut gekauft worden ist und dass eben der Schaltplan dazu ist. @Dietrich L: Die helligkeit der Leds ist so i.O. ich hoffe es könnte mi jemand ein Code Beispiel geben wie ich jetzt z.b. spalte IC2-Q3 anschalte
Ja immerhin, ein Anfang ;-). Nun, die Schieberegister mit Daten füllen ist auch nicht weiters schwierig. Da die Schieberegister 12 Bit haben, musst Du also 12 Datenbits hineinschieben. Dazu ist es notwenigt, am Datenpin das Bit anzulegen und mit einem Impuls am Clock-Pin dem Schieberegister den Takt zum speichern dieses Bits zu geben. Diese Prozedere muss nun für alle 12 Bit widerholt werden. Als C-Pseudocode würde das etwa so aussehen:
1 | void GenClock(void) |
2 | {
|
3 | Wait(); |
4 | SetClkPin(); |
5 | Wait(); |
6 | ClrClkPin(); |
7 | };
|
8 | |
9 | void GenStrobe(void) |
10 | {
|
11 | Wait(); |
12 | SetStrPin(); |
13 | Wait(); |
14 | ClrStrPin(); |
15 | };
|
16 | |
17 | void ShiftBits(int Data) |
18 | {
|
19 | for(int i = 0; i < 12; i++) |
20 | {
|
21 | if(Data & 0x01) SetDataPin(); |
22 | else ClrDataPin(); |
23 | |
24 | GenClock(); |
25 | |
26 | Data >>= 1; |
27 | }
|
28 | |
29 | GenStrobe(); |
30 | }
|
Andreas Hermann schrieb: > PORTC = (0<<PC1) | (0<<PC3); Warum so kompliziert? Schreib doch gleich ganz einfach PORTC = 0; denn genau das ist es, was du hier machst. Es hilft nichts. Wenn du weiter kommen willst, ist dein erster Anlaufpunkt das gezielte 1 bzw. 0 setzen einzelner Portpins des Prozessors. Das ist dein kleines einmaleins. Solange du das nicht beherrscht hat alles weitere keinen Sinn. Und genau deshalb beginnen auch die Tutorien genau damit. Du übernimmst dich zur Zeit, weil dir die Basisdinge fehlen. Genau deshalb machen dann auch die weiterführenden Kapitel für dich keinen Sinn mehr, wie zb Ansteuerung eines Schieberegisters. Ich frag mich ja immer, wieso gerade Anfänger immer glauben eine LED-Matrix wäre ein Anfängerprojekt. Es ist keines! Um eine LED-Matrix nach den Regeln der Kunst ansteuern zu können, muss man schon einiges können. Definitiv nichts für Anfänger.
:
Bearbeitet durch User
Wo hast Du denn diese verrückte Schaltung her? Mit dem 4094 hast Du absolut zielsicher den schwächsten IC ausgesucht. Man kann sie mit dem 74HC4094 noch etwas pimpen, aber ein 12-fach Multiplex schafft der auch nur bei Neumond.
Peter Dannegger schrieb: > Wo hast Du denn diese verrückte Schaltung her? Wird so auch verkauft: http://www.produktinfo.conrad.com/datenblaetter/900000-924999/902766-an-01-ml-CONRAD_RETRO_SPIEL_PING_PONG_de_en_fr_nl.pdf
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.