Hallo, ich möchte mit einem PIC mehrere Ausgänge (= LEDs eines Signals) ansteuern. Das ganze soll aber möglichst so allgemein gehalten sein, dass ich beim Programmstart zunächst mal überprüfe, welche LED überhaupt angeschlossen sind und welche nicht, und abhängig davon nur das schalte was auch da ist. An jedem Ausgang hängt also entweder eine LED mit Vorwiderstand oder es hängt nichts dran. Hab ich da eine Möglichkeit, das per Programm zu ermitteln ob da was dran hängt oder nicht? Welcher PIC das genau wird ist noch nicht festgelegt, es muss halt einer mit mindestens 8 Ports werden. Weitere Randbedingungen erst mal keine. Gruß Jochen
Meiner Meinung nach geht das ohne Zusatzhadware nicht, da du nicht feststellen kannst, ob durch einen Portpin Strom fliesst oder nicht. Aber warum willst du das überhaupt? Ein Portpin, an dem nichts angeschlossen ist, verbraucht auch keinen (oder nur minimalst) Strom. Da liegt ja kein geschlossener Stromkreis vor. Auf der anderen Seite ist der Aufwand in der Programmlogik dafür nicht unbeträchtlich und auch der Aufwand, die Ansteuerung im Programm dann entsprechend anzupassen ist nicht unerheblich.
Man könnte den "read modify write" Effekt nutzen?! aber wie Karl Heinz schon sagte, das macht keinen Sinn, außer der Weg ist das Ziel :)
Hei, die Macher vom Mikrokopter machen das mit einer LED. Die erkennen damit die Version der Platine auf der der vorprogrammierte Atmel µC eingelötet wird. Geht das bei einem Pic nicht auch? Zuerst mal den PIN auf Eingang schalten und auf HIGH oder LOW überprüfen. Danach auf Ausgang schalten... Grüße, Tom
Tom P. schrieb: > Hei, > > die Macher vom Mikrokopter machen das mit einer LED. > Die erkennen damit die Version der Platine auf der der vorprogrammierte > Atmel µC eingelötet wird. Dann sieh dir halt mal die Schaltung an, wie die LED verbaut ist. > Geht das bei einem Pic nicht auch? > Zuerst mal den PIN auf Eingang schalten und auf HIGH oder LOW > überprüfen. Probiers aus
Sollte gehen. Zeig mal Deine Beschaltung. Ist's ne LED + Vorwiderstand nach Masse, so sollte es eventuell gehen, wenn Du die internen PullUp Widerstände kurz aktivierst (falls das bei dem µC geht). Dann ist's eher eine Frage, ob die Spannung als LOW erkannt wird.
Karl Heinz schrieb: > Tom P. schrieb: >> Geht das bei einem Pic nicht auch? >> Zuerst mal den PIN auf Eingang schalten und auf HIGH oder LOW >> überprüfen. > > Probiers aus Wenn man zu einem Thema nur Halbwissen hat, so wie ich hier, dann schreit man am Besten nicht: "Ja geht!", sondern gibt nur einen Hinweis, wo man evtl. eine Lösung finden könnte. Mich selbst interessiert das momentan weniger, als dass ich es bei meiner knappen Freizeit ausprobieren möchte... Grüße, Tom
Tom P. schrieb: > Karl Heinz schrieb: >> Tom P. schrieb: >>> Geht das bei einem Pic nicht auch? >>> Zuerst mal den PIN auf Eingang schalten und auf HIGH oder LOW >>> überprüfen. >> >> Probiers aus > > Wenn man zu einem Thema nur Halbwissen hat, so wie ich hier, dann > schreit man am Besten nicht: "Ja geht!", sondern gibt nur einen Hinweis, > wo man evtl. eine Lösung finden könnte. Entschuldigung. Ich hab dich mit dem TO verwechselt. Der springende Punkt ist, dass ich auch nicht mit Sicherheit aus der hohlen Hand heraus sagen kann, wie die das gemacht haben. Die Frage ist: was macht die Spannung am "nicht angeschlossenen" Ende einer LED, bzw. das was d&g anregt, reicht das um ein eindeutiges Low zu kriegen. Ich weiß es nicht.
Karl Heinz schrieb: > Aber warum willst du das überhaupt? Es geht darum, dass ich verschiedene (HL-)Signalbilder schalten will. D.h. wenn ein Signal mit günem und gelbem Lichtbalken ausgestattet ist, dann will ich 100 km/h signalisieren (grüner Balken an); ist der Balken nicht vorhanden dann stattdessen 60 km/h (gelber Balken an). Also: PIC bekommt den Befehl 100 km/h anzeigen, kann das aber nicht, also wird auf 60 km/h runtersignalisiert. Klar, ich könnte einen PIC mit mehr I/O-Ports nehmen und für jeden Ausgang zusätzlich noch einen Eingang als Konfiguration schalten. Aber ich wollte das nicht zu groß werden lassen. Am Ende soll eine Schaltung rauskommen, bei der halt unterschiedlich bestückte Signale angeschlossen werden können und das nicht über eine Programmänderung im PIC angepasst werden muss. Den Ansatz mit dem erst Eingang schalten, Wert auslesen, und dann Ausgang schalten hatte ich auch schon gedacht, nur weiß ich noch nicht wie ich die unterschiedlichen Pegel auf den Eingang bekomme. Gruß Jochen
Jochen schrieb: > Den Ansatz mit dem erst Eingang schalten, Wert auslesen, und dann > Ausgang schalten hatte ich auch schon gedacht, nur weiß ich noch nicht > wie ich die unterschiedlichen Pegel auf den Eingang bekomme. So wie ich das verstanden habe, funktioniert die Idee so. Du schaltest den Pin auf Eingang und schaltest den Pullup Widerstand an dem Pin ein. So weit so gut. Ist da nichts angeschlossen, dann kriegst du ein sauberes High, weil ja keine Aussenbeschaltung da ist, die den Pin Low ziehen könnte. Ist da aber eine LED (nach Masse verschaltet), dann reicht zwar der Pullup-Widerstand nicht aus, dass die LED nennenswert leuchtet. Allerdings 'zieht' die LED genug Strom, so dass die Spannung trotz Pullup-Widerstand einbricht und am Pin ein Low-Pegel entsteht. Soweit zur 'Theorie'. Ob das funktioniert? Keine Ahnung. Noch nie ausprobiert.
Jochen schrieb: > Den Ansatz mit dem erst Eingang schalten, Wert auslesen, und dann > Ausgang schalten hatte ich auch schon gedacht, nur weiß ich noch nicht > wie ich die unterschiedlichen Pegel auf den Eingang bekomme. Dann sollte man mindestens eine Widerstand parallel zur LED spendieren. Dimensionierung: genügend hochohmiger Pull-Up, genügend niederohmige LED-Beschaltung. Und das ganze mit den Port-Daten (Low-/High-Pegel) und Herrn Ohm durchrechnen. Gruß Dietrich
Was ist denn mit Strom messen? Jeden Pin einmal schalten (wenn sie als Ausgang dienen) und über die gemeinsame Masse den Strom messen. Ein shunt dürfte nicht all zu viel Hardwareaufwand sein.
F. Fo schrieb: > Ein shunt dürfte nicht all zu viel > Hardwareaufwand sein. Hebt dir aber dein GND Potential an.
Anstatt einen PIC mit 8 Ports zu suchen, kannst du auch einen Port-Expander verwenden. Bspw. http://ww1.microchip.com/downloads/en/DeviceDoc/21919e.pdf bzw. http://ww1.microchip.com/downloads/en/DeviceDoc/21952b.pdf hat 8/16 I/O und 8 können damit bei I2C an einem Bus hängen. D.h. du brauchst gerade einmal 2 Pins am uC wenn du I2C verwendest. Ich gehe mal davon aus, dass du diese 64 LEDs nicht direkt an den uC anschließt sondern über einen Transistor schaltest (1.3A durch den PIC sind nicht gut). Daher wird dieser Pull-Up, selbst wenn er mit einer LED direkt am Pin funktionieren mag, bei dir nicht funktionieren. Du könntest den gesamten Stromverbrauch deiner LEDs messen. Ein kleiner Shunt in die Stromversorgung, ein OpAmp zum Verstärken und dann mit einem analogen Eingang die Spannung messen. Danach schaltest du zu Beginn kurz jede LED nacheinander ein und misst die Spannung am Shunt. Ändert sie sich, ist die LED angeschlossen, ansonsten nicht.
Helmut Lenzen schrieb: > F. Fo schrieb: >> Ein shunt dürfte nicht all zu viel >> Hardwareaufwand sein. > > Hebt dir aber dein GND Potential an. Wenn das wenig genug ist, juckt das die LEDs nicht. Zur Messung des Stroms muss man halt einen ADC-Kanal spendieren + ggf. einen Verstärker. Gruß Dietrich
Jochen schrieb: > Das ganze soll aber möglichst so allgemein gehalten sein, > dass ich beim Programmstart zunächst mal überprüfe, welche LED überhaupt > angeschlossen sind und welche nicht, und abhängig davon nur das schalte > was auch da ist. Gibt jede Menge Möglichkeiten. 1. Du legst die Led auf einen Eingang den du auch analog abfragen kannst. 2. Ein Pic hat 2 Port abfragen. Die erste hängt direkt am Port, die zweite geht über ein Register. Gab mal zu Urzeiten ein read modify write Problem das so gelöst wurde, das kannst dir zu nutze machen. Wenn du den Port auf Ausgang schaltest liegt nicht die high Spannung an sondern was an der Led abfällt. Muss du mal gucken ob man damit high low Potential abfragen kannst 3. Nimm nen Kondensator parallel und schau ob und wie schnell er sich entlädt Das geht mit 1. und 2. 4. Miss die Stromaufnahme vor und nach Led einschalten 5. Leds sind gleichzeitig Fotozellen. Du kannst eine Spannung messen wenn Licht darauf fällt (geht mit 1.) 6. Schalte bei Ports mit WPU (weak pull up) diese an und aus, wenn ne Led dranhängt wird sich evtl. der Pegel ändern. 7. Nutze Charlieplexing und 2.
Dietrich L. schrieb: > Wenn das wenig genug ist, juckt das die LEDs nicht. Denn LEDs mit Sicherheit nicht, aber der uC ist ja nicht allein auf der Welt und steht mit anderen Pins damit in Kontakt und die wollen sauber HiLo Pegel. Dietrich L. schrieb: > Zur Messung des > Stroms muss man halt einen ADC-Kanal spendieren + ggf. einen Verstärker. Etwas aufwendig das ganze wenn dem TO ein paar Jumper noch zuviel sind. Jochen schrieb: > Klar, ich könnte einen PIC mit mehr I/O-Ports nehmen und für jeden > Ausgang zusätzlich noch einen Eingang als Konfiguration schalten. Aber > ich wollte das nicht zu groß werden lassen.
Eine einfache Möglichkeit ist, den Pin kurzzeitig auf Ausgang stellen, auf High setzen, dann wieder auf Input und den Wert zurück lesen. Dann das Ganze nochmal mit Ausgang auf Low. Wenn die eingelesenen Pegel in beiden Fällen übereinstimmen, ist der Eingang offen. Die Eingangskapazität reicht, um den Eingangspegel ein paar ms zu halten. Ist eine Ausgangsbeschaltung vorhanden, dann wird diese entweder den High oder Lowpegel verfälschen. Hab ich mit AVR schon gemacht. Sollte aber auch beim PIC funktionieren. Gruß Carsten
Helmut Lenzen schrieb: > Dietrich L. schrieb: >> Wenn das wenig genug ist, juckt das die LEDs nicht. > > Denn LEDs mit Sicherheit nicht, aber der uC ist ja nicht allein auf der > Welt und steht mit anderen Pins damit in Kontakt und die wollen sauber > HiLo Pegel. Der Shunt müsste natürlich nur im GND-Pfad der LEDs liegen. Also "im Prinzip" ging das. Ob es auch vom Aufwand her sinnvoll ist, ist natürlich eine andere Frage.
Hallo, wenn man Analogeingänge übrig hat (bin allerdings kein AVR-Spezialist): die Spannung an der LED-Beschaltung analog einlesen, dann den Pin umprogrammieren auf digital out. Gruss Reinhard
Jochen schrieb: > Karl Heinz schrieb: >> Aber warum willst du das überhaupt? > > Es geht darum, dass ich verschiedene (HL-)Signalbilder schalten will. > D.h. wenn ein Signal mit günem und gelbem Lichtbalken ausgestattet ist, > dann will ich 100 km/h signalisieren (grüner Balken an); ist der Balken > nicht vorhanden dann stattdessen 60 km/h (gelber Balken an). > Also: PIC bekommt den Befehl 100 km/h anzeigen, kann das aber nicht, > also wird auf 60 km/h runtersignalisiert. Ich verstehe gut, was du erreichen willst. Aber warum so kompliziert? Willst du EINEN Decoder für alle möglichen Signalbegriffe bauen? Warum nimmst du nicht einfach eine Konfigurationsvariable (CV) oder auch zwei, in der du dem Decoder die physisch vorhandenen Signallampen des angeschlossenenen Signals mitteilst!? Und die Decoder-Software kann daraus ableiten, welche alternativen Signalbegriffe sie anzeigen muss, wenn der gewünschte Begriff nicht darstellbar ist. Moba-Grüße.
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.