Port durchschalten?!

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Port durchschalten?!

      Abend Community,

      ich spiele seit einiger Zeit zum ersten Mal ein bisschen mit dem Atmega32 rum und hab jetzt das Problem das ich zu wenig I/O‘s habe... Daher meine Frage: Ist es möglich einen Pin durchzuschalten? Ich würde gerne an einem Ausgang eine LED mit vorwiderstand anschließen und 3 Zustände erreichen können. Heißt wenn ich PinA0 auf GND durchschalte, ist die LED aus. Wenn ich PinA0 auf high lege, leuchtet die LED. Wenn ich den PinA0 innerhalb des Chips zu einem anderem Pin (bspw PinA1) durchschalte, glimmt die LED an PinA0 aufgrund eines zusätzlichen widerstandes an PinA1. Das gleiche will ich dann mit PinA2/3/4 usw. machen. Also immer auf PinA1 durchschalten.
      Versteht ihr was ich meine?

      Danke und Gruß,
      Marc
    • Ich versteh' nix :D . Aber wenn du 'aus', 'glimmen' und 'leuchten' einer Led haben möchtest, dann könnte es so gehen:
      4,7k von + zum pin, von da mit 500 Ohm zur Ledkathode, Ledanode an gnd. Pin als Eingang (tristate), Strom fließt über beide Rs und die Led glimmt. Pin=high, Led leuchtet hell, pin=low, Led dunkel. Die Widerstandswerte sind jetzt nur eine Annahme und von der Led abhängig, das musst du probieren.
      Intern pins zusammen/verschalten geht meines Wissens nicht.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • LED aus/glimmen/ an kann man per Software an EINEM Pin machen. Nennt sich PWM = Pulseweitenmodulation.
      Oder warum möchtest Du mit Widerständen etwas beeinflussen? Das ist bei LEDs sowieso nicht gut zur Helligkeitssteuerung.

      Wenn ich es richtig verstehe, willst Du eine LED an einem Pin unterschiedlich hell haben -> PWM
      Wenn Du das in Abhängigkeit von Schalterzuständen haben möchtest, kannst Du an EINEM ADC-Eingang ein paar sinnvoll als Spannungsteiler geschaltete Widerstände mit den Schaltern haben.
      Summe: Ein Ausgangspin und ein Eingangspin.
    • wow, vielen Dank schon mal für die raschen Antworten!

      tschoeatsch wrote:

      Ich versteh' nix :D . Aber wenn du 'aus', 'glimmen' und 'leuchten' einer Led haben möchtest, dann könnte es so gehen:
      4,7k von + zum pin, von da mit 500 Ohm zur Ledkathode, Ledanode an gnd. Pin als Eingang (tristate), Strom fließt über beide Rs und die Led glimmt. Pin=high, Led leuchtet hell, pin=low, Led dunkel. Die Widerstandswerte sind jetzt nur eine Annahme und von der Led abhängig, das musst du probieren.
      Intern pins zusammen/verschalten geht meines Wissens nicht.
      Das hört sich schon interessant an . :huh:


      stefanhamburg wrote:

      LED aus/glimmen/ an kann man per Software an EINEM Pin machen. Nennt sich PWM = Pulseweitenmodulation.
      Oder warum möchtest Du mit Widerständen etwas beeinflussen? Das ist bei LEDs sowieso nicht gut zur Helligkeitssteuerung.

      Wenn ich es richtig verstehe, willst Du eine LED an einem Pin unterschiedlich hell haben -> PWM
      Wenn Du das in Abhängigkeit von Schalterzuständen haben möchtest, kannst Du an EINEM ADC-Eingang ein paar sinnvoll als Spannungsteiler geschaltete Widerstände mit den Schaltern haben.
      Summe: Ein Ausgangspin und ein Eingangspin.
      PWM kenne ich und ich habe auch schon viel damit gemacht... aber brauche das leider für 15 I/O‘s... ||

      Ich versuche jetzt mal, dass ganze besser zu erläutern:
      Ich habe 15 Ausgänge. Bei allen Ausgängen ist jeweils eine blaue led (mit vorwiderstand) nach 0V durchgeschaltet und jeweils eine rote LED (mit vorwiderstand) nach +5V durchgeschaltet. Schalte ich jetzt einen Ausgang auf +5V/ high, leuchtet die blaue LED. Schalte ich den selben Ausgang auf 0V/ low, leuchtet die rote Led.
      Jetzt brauche ich allerdings einen 3. Zustand. Ich muss es quasi hin bekommen, dass entweder beide LEDs an dem Pin leuchten, gar keine leuchtet, oder eine leicht glimmt (oder so).
      Hab schon daran gedacht das irgendwie über den internen Pullup hin zu bekommen, war leider allerdings noch nicht erfolgreich... —> 0V = rote led / 5V = blaue led / pullup = rote glimmt leicht.
      Ist schwer zu erklären aber ich hoffe ihr wisst jetzt was ich meine ...


      Gruß,
      Marc

      Edit: meine Smileys vom Handy kommen nicht durch :/ deswegen der Nachtrag :thumbsup:

      The post was edited 1 time, last by MarcT. ().

    • Du hast an einem Ausgangspin zwei LED und möchtest folgende Zustände:
      - LED1 aus LED2 aus
      - LED1 an LED2 aus

      - LED1 aus LED2 an
      - LED1 an LED2 an

      das sind jetzt schon mal vier Zustände, ohne die Option der gedimmten Helligkeit einer LED

      Ich würde eine Matrix mit Ausgangspins bilden und über einen zeitlich intermittierenden Ausgang das Dimmen erledigen.
      In einer 4x4 Matrix hättest du 16 Anschaltmöglichkeiten für die LED. An jedem Knotenpunkt zwei LED in umgekehrter Anschlussfolge mit eigenem Vorwiderstand.
      Dies ergibt bei 8 Ausgangspins in 4x4 Matrix bis zu 32 LED einzeln ansteuerbar.

      Den Ablauf würde ich über einen Interrupt steuern, welcher Schaltzustandsvariablen bewertet und die Ausgänge in Reihenfolge danach schaltet.

      Die PINs der ROWS und COLS sollten an verschiedenen PORTs hängen, wegen der maximal zulässigen Ströme an einem Port!
      Also z.B.
      PORTA.0 - PORTA.3 als COL 0 bis 3
      PORTB.0 - PORTB.3 als ROW 0 bis 3

      Kleines Beispiel für mögliche Zustände an COL 0 und ROW 0
      Zwei LED antiparallel mit jeweils eigenem Vorwiderstand zwischen PORTA.0 (COL 0) und PORTB.0 (ROW 0)

      Source Code

      1. COL-0 ROW-0 LED-1 LED-2
      2. 0 0 0 0
      3. 1 0 1 0
      4. 0 1 0 1
      5. 0/1 0 0/1 0
      6. 0 0/1 0 0/1
      7. 1 1 0 0
      8. 0/1 = intermittierend Puls/Pause=Helligkeit
      Code first, think later - Natural programmer :D
    • blackbirdo wrote:

      Moin zusammen,
      vielleicht wäre es sogar möglich über einen einzigen Pin mit PWM mehrere LED zu betreiben.
      Mehrere Transistor Stufen die Parallel auf der PWM hängen und je nach Effektiver Spannung schalten.
      Eventuell auch über Komparatoren.

      Gruß
      blacky
      nennt man das einen 'Analogrechner'? ;)
      Der Einsatz von Schieberegistern wären auch eine Überlegung wert.
      Oder man nimmt einen max7219.
      Raum für Notizen

      -----------------------------------------------------------------------------------------------------

      -----------------------------------------------------------------------------------------------------
    • @blackbirdo

      blackbirdo wrote:

      Moin zusammen,
      vielleicht wäre es sogar möglich über einen einzigen Pin mit PWM mehrere LED zu betreiben.
      Mehrere Transistor Stufen die Parallel auf der PWM hängen und je nach Effektiver Spannung schalten.
      Eventuell auch über Komparatoren.
      Also das ist doch alles Gefrickel und führt zu mehr Frust als Lust. Mach es so wie SIX1 es in #7 schreibt oder erweitere deinen Atmega32 mittels PCA9555 um 16 Ausgänge und wenn das nicht reicht, dann nimm noch 'nen 2. PCA.
      Wem ich nicht ausdrücklich widerspreche, der darf das bis auf Widerruf als "Gefällt mir" verstehen.
    • hasta wrote:

      @blackbirdo

      blackbirdo wrote:

      Moin zusammen,
      vielleicht wäre es sogar möglich über einen einzigen Pin mit PWM mehrere LED zu betreiben.
      Mehrere Transistor Stufen die Parallel auf der PWM hängen und je nach Effektiver Spannung schalten.
      Eventuell auch über Komparatoren.
      Also das ist doch alles Gefrickel und führt zu mehr Frust als Lust. Mach es so wie SIX1 es in #7 schreibt oder erweitere deinen Atmega32 mittels PCA9555 um 16 Ausgänge und wenn das nicht reicht, dann nimm noch 'nen 2. PCA.
      Danke für die Antwort, aber Gefrickel ist das sicher nicht. Musst nur rechnen. Aber ich denke der PCA ist "digital" die bessere Lösung :)
    • Das ist schon Gefrickel, weil Bauteiltoleranzen, Spannungsschwankungen, Temperatureinflüsse etc. sowas völlig unkontrollierbar und nicht nachvollziehbar gestalten. Dazu kommt noch eine Menge Code, der passen muß. Wenn mal ein Port fehlt kann man sicherlich über so was nachdenken aber wenn das Grundkonzept schon nicht stimmt wird das nichts.

      Man kann sicherlich alles so hinkriegen das es mal funktioniert aber sauber und zuverlässig geht Anders. Und Du kannst rechnen wie Du willst in der Praxis sind andere Dinge gefragt als nur Gutes Matheverständnis.
      Wem ich nicht ausdrücklich widerspreche, der darf das bis auf Widerruf als "Gefällt mir" verstehen.
    • Erstmal vielen Dank für die zahlreichen Hilfestellungen!!!
      Nach ein wenig Recherchearbeit scheint mir die Lösung von six1 mit der Matrix am sinnvollsten! Schonmal danke dafür!
      Allerdings würde mir das dann reichen:

      Source Code

      1. COL-0 ROW-0 LED-1 LED-2
      2. 0 0 0 0
      3. 1 0 1 0
      4. 0 1 0 1
      5. 1 1 0 0
      Mir geht es ja nur um optisch erkennbar unterschiedliche Zustände.


      Der Lösungsvorschlag von Dekaman ist allerdings auch sehr interesannt... Ich denke ich werde beide Lösungswege mal ausprobieren und anschließend berichten welchen ich wie umgesetzt habe.

      Da ich morgen in Urlaub fliege verschiebt sich das allerdings um 2 Wochen :/

      Danke danke danke und viele Grüße,
      Marc
    • Hi Marc,

      na dann erst mal schönen Urlaub.

      Je nachdem wie sehr Deine Hardware und Dein Konzept schon festgelegt ist, könntest Du für eine reine optische Zustandskontrolle auch einen Streifen mit WS2812B LEDs benutzen. Braucht nur einen einzigen Pin, ist dank der rainbow.lib sehr einfach anzusteuern und Deine Anzeigefarben kannst Du nach belieben ändern. :rolleyes:

      Nette Grüße
      Robert
    • R2D2 Bastler wrote:

      Hi Marc,

      na dann erst mal schönen Urlaub.

      Je nachdem wie sehr Deine Hardware und Dein Konzept schon festgelegt ist, könntest Du für eine reine optische Zustandskontrolle auch einen Streifen mit WS2812B LEDs benutzen. Braucht nur einen einzigen Pin, ist dank der rainbow.lib sehr einfach anzusteuern und Deine Anzeigefarben kannst Du nach belieben ändern. :rolleyes:

      Nette Grüße
      Robert

      Abend Robert,

      Den habe ich, danke ;)
      Deine Idee ist perfekt, genau das was ich gesucht habe!
      Bestelle ich mir und probiere es mal aus

      Danke und Grüße,
      Marc