-         

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 31

Thema: RGB-LEDs lassen sich nicht gezielt an- oder ausschalten

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2005
    Ort
    Weimar
    Alter
    38
    Beiträge
    16

    RGB-LEDs lassen sich nicht gezielt an- oder ausschalten

    Anzeige

    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
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltplan_vereinfacht.jpg  

  2. #2
    Hi

    Sind die Ausgänge des uC auch richtig initialisiert?
    ich kenn mich mit den Treibern nicht so aus, aber die invertieren ja das Eingassignal oder?

    mfg.
    Bernhard

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2005
    Ort
    Weimar
    Alter
    38
    Beiträge
    16
    Hallo Bernhard,

    meinst Du mit "uC" den Atmel? Sorry, ich bin noch nicht so tief in der Materie; ich gebe mir aber beste Mühe.
    Wie kann ich die Ausgänge denn initialisieren?

    Danke übrigens für Deine schnelle Antwort.

    Tschüß,
    Nico

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2005
    Ort
    Weimar
    Alter
    38
    Beiträge
    16
    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.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken leds01.jpg   leds02.jpg   leds04.jpg  

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Ort
    Dortmund
    Alter
    24
    Beiträge
    1.641
    Ich glaube, dein Prob liegt im Code. Du sagst doch einfach If taster = 1.
    Aber du musst glaub ich erst gucken, wie der taster denn ist, und dann kannst du das mit 1 vergleichen. Stell dir vor, du bist der Microcontroller. Du hast unter einer Klappe eine Lampe. Jetzt sagt dein "Code" dir, wenn die Lampe an ist, guck draußen, ob die Sonne scheint. Dein logische Antwort wäre:
    ich weiß nicht, wie die Lampe ist.
    Jetzt haben manche Ports die Eigenschaft, default an, oder default aus zu sein. Wenn default an, dann denkst du, die Lampe ist bestimmt an, und guckst nach draußen nach dem wetter. verstanden?
    o
    L_
    OL
    This is Schäuble. Copy Schäuble into your signature to help him on his way to Überwachungsstaat!

    http://de.youtube.com/watch?v=qV1cZ6jUeGE

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2005
    Ort
    Weimar
    Alter
    38
    Beiträge
    16
    Hi Lunarman,

    habe ich Dich richtig verstanden: Es könnte sein, daß der Port, an dem der Taster angeschlossen ist, per default auf 1 steht?
    In dem Fall müßte ich noch vor dem "Do, If Then ..." den Taster standardmäßig = 0 setzen? Stimmt das?
    Ich bin halt von dem Szenario ausgegangen, das ich im kleinen Maßstab mit dem Pollin-Board durchgespielt habe, noch bevor ich es umgebaut und um eine externe Stromquelle erweitert habe. Ursprünglich waren an dem Board drei Taster (auf Portd.2, Portd.3 und Portd.4), die wir in unseren Testcodes Taster1, Taster2 und Taster3 genannt haben. In Bascom wurde dann abgefragt "If Taster1 = 1 Then ... Else ...". Da hat es noch funktioniert.

    Jetzt habe ich probiert, dem Taster den Startwert 0 (Noch vor dem "Do" "Taster = 0") zu geben, woraufhin es hieß "You can not write to a PIN register [PIND.0] ...". Anscheinend habe ich Dich falsch verstanden.

    Testweise habe ich auch mal den Port des ursprünglichen Taster1 als Input definiert und angesteuert. Auch hier gehen die LEDs auf Dauerfeuer, obwohl das vor einigen Wochen in der Versuchsschaltung noch anders aussah.

    Ciao,
    Nico

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    19.05.2005
    Ort
    78224
    Beiträge
    13
    Hi NMarzian,

    kann es sein, dass du den Taster gegen Masse (GND) schalten musst und nicht gegen Vcc? Möglicherweise liegt dein Eingang bereits über einen internen Pullup-Widerstand schon an Vcc.

    Gruss Klecksinger

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2005
    Ort
    Weimar
    Alter
    38
    Beiträge
    16
    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
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken entprellung.jpg  

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    67
    Beiträge
    2.063
    Der Widerstand muß als PullUp an Plus, nicht an GND; sonst bekommt der Eingang keinen High-Pegel für logisch 1 !

    Edit: und der Taster nach GND, parallel zum Kondensator.

    PS: Der ULN2804 ist für CMOS-Pegel 6...15 Volt, der ULN2803 ist für TTL-Pegel 5 Volt. An den Ausgängen des µC müssen auch PullUp-Widerstände, falls die internen PullUps nicht enabled sind, sonst gibt's auch da keinen High-Pegel für logisch 1.
    Den Pin 10 der ULNxxx brauchst Du nur bei induktiven Lasten wie z.B. den Motor. Dieser Pin geht über (Freilauf-) Dioden an die Collektoren der Darlington-Transistoren.
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    19.05.2005
    Ort
    78224
    Beiträge
    13
    Hi NMarzian,

    ich habe mir den Schaltplan vom Evaluationsboard mal angeschaut; dort sind drei Taster. Diese Schalten den Eingang des uC zwar gegen Vcc, allerdings ist auch noch ein 33kOhm Widerstand zwischen Eingang und GND vorhanden. Ich kann aus deinem Schaltbild nicht erkennen, ob die "Entprellung" diesen Widerstand mit GND verbindet.

    Gegebenenfalls könntest du die Spannung am Tasteingang (gegen GND) mal bei gedrücktem und mal bei nicht gedrücktem Schalter messen. Diese Spannung sollte dann ca. VCC bzw ca. 0V betragen.

    Gruss Klecksinger

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •