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
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:
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.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
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
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
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
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.
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
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
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
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
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 ....
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
Lesezeichen