Forum: Mikrocontroller und Digitale Elektronik LED Lightshow mit verschiedenen Programmen


von Deniz K. (thegamer)


Lesenswert?

Hi,
also ich habe hier nen Atmega8-16PU und möchte ihn gerne für eine 
Lightshow benutzen!
Der Atmega soll in einen "Casemod" (neudeutsch -> Gehäuse das wie ein 
Tannenbaum leuchtet) und zwar habe ich hier nen Taster und LED's und ich 
habe auch schon so basis wissen in C und möchte das wenn ich auf den 
Taster drücke immer ein anderer Code ausgeführt wird sozusagen 
Programmwechsel!
Wenn das alles klappt möchte ich evt. noch ein Display reinmachen wo 
dann noch steht welches Programm gerade ausgewählt ist und wenn das auch 
geht denke ich über eine Temperaturanzeige im Display nach!
Frage1:. Geht das alles mit einem Atmega8 bzw mit einem AVR?
Frage2:. Muss ich den Schalter genauso anschließen wie eine Led (Port 
und GND?)
Frage3:. Welches Display (Schwarz-Weiß/Grün) sollte ich denn nehmen? Ich 
würd gerne ein einfaches portsparendes nehmen!
Frage4:. Der AVR wird mit 5V betrieben reicht das aus für alles?

Ach hier übrigens mein Vorhaben bezüglich der LED's!
Ich hab hier kleine Streifen von einer Lochraster Platine die ich mit 
Roten und Blauen LED's besetzt habe!
Ich möchte nun das einmal alle Roten LED's, dann alle Blauen LED's dann 
so einen Knight Rider Effekt.
Aber! bei meinen ersten Versuchen hatte ich Probleme mit der 
Geschwindigkeit!
Mach ich den Takt zu hoch sieht man das Blitzlich kaum!
mach ich nen Timer rein wird das ganze zu lahm und es sieht nicht wie 
Kinght Rider sondern es sieht so aus wie als wenn die einzeln nach 
einander Blinken!
Ich hoffe ich versteht mich ;)
mfG

von Peter D. (peda)


Lesenswert?


von Philipp (Gast)


Lesenswert?

Hallo Deniz!

Zu Frage1:
Klar! Sollten die I/Os nicht ausreichen könntest du unter Einsatz von 2 
I/Os einen I2C Bus Programmieren und darüber die Anzahl Schaltbarer 
Kanäle um ein vielfaches erweitern.

Zu Frage 2:
Sollte dein µC über interne Pullup Widerstände verfügen würde das im 
groben und ganzen Klappen. Vielleicht solltest du über eine RC 
Entprellung nachdenken.

Zu Frage 3:
Ich denke das unterliegt ganz deinem Geschmack. Von der Ansteurung sind 
die meistens gleich.

Zu Frage 4:
Wofür konkret soll das denn reichen? Um LEDs anzusteurn und das Display 
reicht das in der Regel!

Solltest du "viele" LEDs ansteuern wollen so solltest du einen Wald und 
Wiesen Transistor als Schalter einsetzen um deine I/Os nicht zu 
überlasten.

Gruß Philipp

von Deniz K. (thegamer)


Lesenswert?

Hi,
danke nun das mit der Temperatur vergess ich mal :P
Also es sind 8 LED's -> 4 Blaue und 4 Rote !
Der Schalter ist aus nem alten CD Laufwerk,ich würde jetzt als erstes 
gerne mal wissen wie ich einen Schalter benutze was ja eigentlich ganz 
einfach ist oder? Und dann muss ich halt abfragen welches Program 
derzeitig aktiv ist und was das nächste Programm ist,außerdem würde ich 
gerne wissen wie das mit dem Knightrider Effekt hinbekomme : 
http://www.youtube.com/watch?v=0aNuVRNh1xg
mfG

von sam (Gast)


Lesenswert?

auf dem microcontroller läuft immer nur ein programm ... du kannst dem 
natürlich verschiedene leuchtmodi verpassen und zwischen diesen 
umherschalten.

lauflicht:  led1 an (warten) led1 aus und led2 an (warten) ... usw.
warten kann man über warteschleifen oder mit dem timer... alles lässt 
sich so schnell oder langsam einstellen wie man lustig ist (in 
bestimmten grenzen)

von Deniz K. (thegamer)


Lesenswert?

Hi,
danke das Problem ist nun auch gelöst ;)
So ich test das mit dem Schalter jetzt mal und meld mich dann!
mfG

von Karl H. (kbuchegg)


Lesenswert?

Deniz Kökden wrote:
> Hi,
> danke das Problem ist nun auch gelöst ;)

Prust.
Der war gut :-)

von 4xA (Gast)


Lesenswert?

Der Knight Rider Effekt ist doch eigentlich eine "Leuchtschlange" die 
durchläuft.
Also:

00000000
00000001
00000011
00000111
00001110
00011100
00111000
01110000
11100000
11000000
10000000
00000000

und zwichen den schritten ca. 100ms warten.
Das mit den Pausen bekommst du hin?

MfG

von Deniz K. (thegamer)


Lesenswert?

Hi,
ja pausen mach ich mit
1
sleep_ms(1000);
 Richtig?
mfG

von Karl H. (kbuchegg)


Lesenswert?

Deniz Kökden wrote:
> Hi,
> ja pausen mach ich mit
1
sleep_ms(1000);
 Richtig?
> mfG

Kommt drauf an welchen Compiler du benutzt, da schlafen kein 
C-Standardkonstrukt ist.

Beim WinAvr heist das dann
_delay_ms( 1000 );

Aber als eifriger Tutoriumsleser weißt du das natürlich.

von 4xA (Gast)


Lesenswert?

wenn du solch eine Funktion schon eingebunden hast, und diese auch 
funktioniert, sollte das passen. Wäre dann ne Pause von einer Sekunde.

Allerdings kenn ich diese Funktion auf anhieb nicht. Ist sie selbst 
geschrieben oder hast du sie aus einem vorgefertigten Projekt.

von Deniz K. (thegamer)


Lesenswert?

Hi,
nun ist aus nem Tutorial vom Roboternetz...
ich hab übrigens schon viel gebastelt am Code ist ja echt ne Schande für 
den Atmega8 das der so was leichtes machen muss^^
mfG

von Deniz K. (thegamer)


Angehängte Dateien:

Lesenswert?

Hi,
also das ist mein Code derzeitig!
Ich habe ihn schon getestet leider blinkt da alles einfach so!
Bei Knopfdruck/Langem Knopfdruck passiert nur etwas bei den ersten LEDs 
;(
Ich könnte mir vorstellen das ich das auschalten der LED's/die 
programmauswahl nicht in die while schleife machen sollte an kopf fass
Ich Programmier das mal schnell um und teste nochmal!
Wenn ihr euch das mal anschauen könntet währe es echt net ;)
PS: Der Code ist aus basis vom Schalter Code hier aus dem Forum!
Den rest habe ich mit hilfe von meinem C++ buch gemacht ...

von Karl H. (kbuchegg)


Lesenswert?

Darf ich einen Vorschlag machen:
Vergiss erst mal die einzelnen Blinkprogramme und die Tasten.
Konzentrier dich auf einen Blinkablauf und sieh zu, dass du den 
hinkriegst. Und dann liest du in deinem Buch über Arrays nach und 
überlegst dir, wie du die Blinkabfolge über ein Array regeln kannst, 
anstatt jedes LED Ein/Ausschalten einzeln auszuprogrammierern.

Wenn du denkst, dass du Arrays verstanden hast, baust du dein 
vorhandenes Blinkprogramm so um, dass es über ein Array gesteuert wird.

Wenn das klappt, dann wirfst du die Zeitsteuerung so wie du sie hast 
raus und liest hier im Tutorial nach, wie man über einen Timer eine 
Zeitsteuerung machen kann.

Dann baust du alles so um, dass keine delay mehr vorkommen, sondern der 
Timer sich aus dem Array bedient um die jeweils nächsten LED 
einzuschalten.

Und wenn das dann klappt, kommen die Taster wieder ins Spiel. Sie 
schalten einfach für die Zeitsteuerung ein anderes Array (welches das 
abzuarbeitende Blinkprogramm enthält) durch.


Und vergiss fürs Erste gotos. Das ist für dich momentan noch ein 
sicherere Weg ins Chaos.

von Deniz K. (thegamer)


Lesenswert?

Hi,
hey danke das werde ich machen!
Arrays genau das wort ist mir nicht mehr eingefallen...
denn Logischerweiße wenn der irgendwohin geht muss ich ja sagen hier ist 
er gerade und wenn du da bist dann geh nicht auf blau sondern auf rot :P
Nuja ich denk ich mach das erstmal so das alle Blinkabläufe sauber 
gehen!
mfG

von Deniz Kökden (Gast)


Angehängte Dateien:

Lesenswert?

Hi,
so also ich habe mein Programm nun fertig geschrieben.
Danke nochmal an alle!

von C4ve (Gast)


Lesenswert?

Tach!

Ich bin da mal nen bischen neugeirig... :-)
Gibt es davon Bilder odern am beseten ein Video vom Case in action ;-)


MfG
C4ve

von Deniz Kökden (Gast)


Lesenswert?

Hi,
noch nicht muss mir jetzt mal die ganzen LED's einbauen ;)
Dann hab ich halt parallel noch 2 Projekte...
Ich melde mich 100% wenns so weit ist!
mfG

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.