Liste der Anhänge anzeigen (Anzahl: 1)
RGB-LEDs lassen sich nicht gezielt an- oder ausschalten
Hallo zusammen,
das gehört zwar nicht so ganz in die Rubrik Roboter, aber auch hier kommen ein Mikrocontroller, viele bunte LEDs, ein Motor und mehr vor. :-)
Mein Problem ist, daß ich mit meinem Atmega8535 und zwischengeschalteten ULN2804A insgesamt neun Gruppen von jeweils 3x3 (parallelgeschalteten) RGB-LEDs und einen Gleichstrommotor steuern möchte, was aber nicht so recht klappt. Egal, ob ich den Taster drücke oder nicht, die LEDs leuchten immer, und der Motor läuft ebenfalls kontinuierlich.
Das war von mir natürlich nicht vorgesehen. ;-)
Der Atmel sitzt auf dem Evaluationsboard von Pollin (siehe Datenblatt unter http://www.pollin.de/shop/downloads/D810022B.PDF), das unser kompletter Elektronikkurs für dieses Semester bestellt hat.
Urpsrünglich hatte ich ein eigenes Board zusammengelötet, nachdem dies aber nicht richtig funktionierte, habe ich das Pollin-Board ein wenig umgebaut. Auf Seite 8 des PDF-Dokuments ist der Schaltplan zu sehen.
Außerdem habe ich diesem Beitrag einen vereinfachten Schaltplan meiner Anwendung angehängt. Kondensatoren, Widerstände u.a., die bereits in dem PDF aufgeführt sind, habe ich nicht noch einmal explizit angegeben.
Entschuldigt bitte, daß die Verbindungen so kreuz und quer verlaufen, aber durch die Anschlüsse der Wannenstecker zu den jeweiligen Flachbandkabeln war das die beste Lösung.
Hier ist der Bascom-Code:
Code:
$regfile = "m8535.dat"
$crystal = 1000000
$baud = 4800
Config Porta.0 = Output
Config Porta.1 = Output
Config Porta.2 = Output
Config Porta.3 = Output
Config Porta.4 = Output
Config Porta.5 = Output
Config Porta.6 = Output
Config Porta.7 = Output
Config Portb.0 = Input
Config Portb.1 = Output
Config Portb.2 = Output
Config Portb.3 = Output
Config Portb.4 = Output
Config Portb.5 = Output
Config Portb.6 = Output
Config Portb.7 = Output
Config Portc.0 = Input
Config Portc.1 = Output
Config Portc.2 = Output
Config Portc.3 = Output
Config Portc.4 = Output
Config Portc.5 = Output
Config Portc.6 = Output
Config Portc.7 = Output
Config Portd.0 = Input
Config Portd.1 = Input
Config Portd.2 = Output
Config Portd.3 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Config Portd.6 = Output
Config Portd.7 = Output
Led1_r Alias Portb.3
Led1_g Alias Portb.5
Led1_b Alias Portb.4
Led2_r Alias Portb.1
Led2_g Alias Portb.2
Led2_b Alias Porta.7
Led3_r Alias Portc.7
Led3_g Alias Porta.6
Led3_b Alias Porta.5
Led4_r Alias Porta.3
Led4_g Alias Porta.4
Led4_b Alias Portc.6
Led5_r Alias Portc.4
Led5_g Alias Portc.5
Led5_b Alias Porta.2
Led6_r Alias Porta.6
Led6_g Alias Porta.1
Led6_b Alias Portc.3
Led7_r Alias Portc.2
Led7_g Alias Portc.1
Led7_b Alias Portb.7
Led8_r Alias Portb.6
Led8_g Alias Portd.6
Led8_b Alias Portd.7
Led9_r Alias Portd.5
Led9_g Alias Portd.3
Led9_b Alias Portd.4
Motor Alias Portd.2
Taster Alias Pind.0
Frequenz Alias Pinb.0
Amplitude Alias Pinc.0
Do
If Taster = 1 Then
Led1_r = 1
Led1_g = 1
Led1_b = 1
Led2_r = 1
Led2_g = 1
Led2_b = 1
Led3_r = 1
Led3_g = 1
Led3_b = 1
Led4_r = 1
Led4_g = 1
Led4_b = 1
Led5_r = 1
Led5_g = 1
Led5_b = 1
Led6_r = 1
Led6_g = 1
Led6_b = 1
Led7_r = 1
Led7_g = 1
Led7_b = 1
Led8_r = 1
Led8_g = 1
Led8_b = 1
Led9_r = 1
Led9_g = 1
Led9_b = 1
Motor = 1
Else
Led1_r = 0
Led1_g = 0
Led1_b = 0
Led2_r = 0
Led2_g = 0
Led2_b = 0
Led3_r = 0
Led3_g = 0
Led3_b = 0
Led4_r = 0
Led4_g = 0
Led4_b = 0
Led5_r = 0
Led5_g = 0
Led5_b = 0
Led6_r = 0
Led6_g = 0
Led6_b = 0
Led7_r = 0
Led7_g = 0
Led7_b = 0
Led8_r = 0
Led8_g = 0
Led8_b = 0
Led9_r = 0
Led9_g = 0
Led9_b = 0
Motor = 0
End If
Loop
End
Die Funktionen "Frequenz" und "Amplitude" werden später für den Audioeingang (mit Mikrofon, Vorverstärker, Verstärkerschaltung mit Operationsverstärker und Schmitt-Trigger) verwendet. Damit sollen Muster und Farben der LEDs wie auch die Geschwindigkeit des Motors geregelt werden.
Der Vandalismustaster wird dann zwischen verschiedenen Subprogrammen umschalten, so daß sich unterschiedliche Reaktionen auf Umgebungsgeräusche wählen lassen.
Ich bin in Sachen Elektronik noch ein Anfänger, weswegen ich nicht weiß, wo der Fehler liegen könnte. Wer kann mir eventuell sagen, wo ich etwas falschgemacht habe? Jede Hilfe ist willkommen.
Bis dann, tschüß,
Nico
Liste der Anhänge anzeigen (Anzahl: 3)
Ach ja, hier sind noch ein paar Illustrationen zu den künftigen Funktionen der LEDs.
Die LEDs habe ich übrigens hier her: http://www.leds.de/detail,LEDs%2B5mm...w%252FRGB.html.
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Klecksinger,
es sieht sogar so aus, daß selbst, wenn ich die Verbindung zum Taster trenne, die LEDs an sind, was ich nicht verstehe.
Die Entprellungsschaltung, wie Sie unser Dozent empfohlen hat, habe ich angehängt.
Gruß,
Nico
Liste der Anhänge anzeigen (Anzahl: 1)
Sollte ich völlig falsch liegen, bitte nicht hauen. ;-)
Muß die Entprellung so aussehen?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von NMarzian
Heißt das, daß an jeden Ausgang ein Widerstand gesetzt werden muß?
Wenn es an diesen Ausgangs-Pins keine internen PullUps gibt oder PullUps nicht enabled sind / werden, dann ein klares JAAAAA
Zitat:
Der Fachbereich Interaktionselektronik der Uni-Weimar setzt eben auf Atmel, Bascom, PonyProg und Eagle. Bislang kam ich damit auch ganz gut zurecht.
Das ist ja auch weiter nicht tragisch :-)
Zitat:
Die 5V kommen ja lediglich als Signal vom Atmel, die 12V-Versorgung wird durch das externe Netzteil geliefert. Bei der eingangs erwähnten Versuchsschaltung hat das auch alles funktioniert, nur eben mit der jetzigen Konfiguration nicht mehr. Deswegen auch diese Fehlersuche.
Es scheint mir so, als sei Dir nicht klar, was der ULNxxx ist oder macht ? Da sind 8 Darlington-Transistoren mit BasisVorwiderständen und 8 Dioden von jedem Collektor zum Pin 10 drin. Die Emitter laufen alle auf Pin 9 = GND.
Die 6...15V werden laut Datenblatt an den Eingängen (=BasisVorwiderständen) gefordert. Aus dem AVR kommen aber nur 5V raus, sofern da überhaupt ein PullUp-Widerstand draußen oder intern am Ausgang ist.
Was die Collektoren des ULNxxx schalten, ist ein anderes Paar Schuhe, somit auch die Spannung (bei Dir 12V) für die Lasten.
Um alle Klarheiten zu beseitigen:
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat von kalledom
Es scheint mir so, als sei Dir nicht klar, was der ULNxxx ist oder macht ? Da sind 8 Darlington-Transistoren mit BasisVorwiderständen und 8 Dioden von jedem Collektor zum Pin 10 drin. Die Emitter laufen alle auf Pin 9 = GND.
Die 6...15V werden laut Datenblatt an den Eingängen (=BasisVorwiderständen) gefordert. Aus dem AVR kommen aber nur 5V raus, sofern da überhaupt ein PullUp-Widerstand draußen oder intern am Ausgang ist.
Was die Collektoren des ULNxxx schalten, ist ein anderes Paar Schuhe, somit auch die Spannung (bei Dir 12V) für die Lasten.
Was ein Array im Prinzip macht, ist mir einigermaßen klar, glaube ich, aber soweit ich es verstanden habe, ist es egal, wenn an den ULN-Eingängen nur 5V anliegen, da die 6-15V sich ja auf die Ausgänge, also die Versorgung des anzuschließenden Geräts beziehen. Oder liege ich total falsch?
Schließlich kann ein Atmel ja auch nicht mehr als 5V, und der ULN ist dazu da, aus dem schwachen Signal (5V, 20 mA max.) ein stärkeres (z.B. für einen Motor / 12V und >20mA) zu machen.
Ich meine, hier im Forum auch schon mal gelesen zu haben, daß für diesen Zweck beide Grounds, also 5V und 12V an GND des ULN angeschlossen werden müssen, wie es in meinem vereinfachten Schaltplan auch vorgesehen ist.
Wie gesagt, in einer Versuchsschaltung hat das auch bereits funktioniert, obwohl nur die 5V des Mikrocontrollers auf der Eingangsseite anlagen.
Zitat:
Um alle Klarheiten zu beseitigen:
Danke, alle Klarheiten beseitigt. ;-) Spaß beiseite, Du hilfst mir wirklich sehr weiter.
Ach ja, die gelben Pfeile links (bei PullUp und PullDown) sind die Pins des Controllers, richtig?