Ik heb een bestaand paneeltje (6 knopjes met led) die ik wil gebruiken.

5Vdc
|
|
LED
|
|------------ naar ingang Atmel
|
|
Massa

Zijn er voorbeelden van hoe je dit het best kunt programmeren (incl debounce)?

Ik denk iets van????:
- poorten zal uitgang instellen
- main loop starten
- Poorten als ingang instellen
= wait 10uS
- alle poorten inlezen
- Alle poorten weer als uitgang instellen
- Waarde verwerken en op de poorten zetten

Kiter
-

ik mis de schakelaar in het schema
en wellicht gaan die ledjes al aan als je het knopje indrukt?

Probeer het volgende eens :


                  5V
                   |
                  LED
                   |
               Weerstand
                   |
                  /
Pin Atmel -10K---| (Transistor BC547)
                  >
                   |
                  GND

De weerstand voor de LED moet je even berekenen.
Zet je de pin hoog (1), dan is het LEDje AAN. Zet je de pin laag (0), is het LEDje UIT.

[Bericht gewijzigd door oxurane op (11%)]

Tot zoverre bedankt voor de reacties.

Was inderdaad de schakelaar vergeten.
En wat precies de bedoeling is.

Het is een paneeltje met 6 knopjes en 6 ledjes. Als je een knopje 1 indrukt, dan moet ledje 1 blijven branden (en er moet een seriele code uit gestuurd worden) . Pas als je op een knopje 2 drukt, moet ledje 1 uit gaan en moet het ledje bij knopje 2 gaan branden(en er moet een andere seriele code uit gestuurd worden).

Hierbij nog het schema:

5Vdc
|
|
Weerstand (500 ohm)
|
|---------- pin processor
|
Schakelaar (puls)
|
|
Massa

Dit is weer een ander schema, waar is die LED nou gebleven. Of zijn het soms parallelle verbindingen?

Als de LED 5mA trekt, dan zou je aan het volgende kunnen denken :


                        5V
                         |
                       500 Ohm 
                         |
                         +-------+
                         |       |
                       |/       LED1
             +-- 10K --| BC547   |
             |         |>        |
Pin Atmel ---+           |       |
             |          GND     GND
            500 Ohm
             |
            LED2
             |
            GND

Pin laag (0) : LED1 AAN, LED2 UIT
Pin hoog (1) : LED1 UIT, LED2 AAN

Op deze manier heb je maar 3 pinnen nodig om 6 LEDjes te sturen.
Het uitlezen van de knoppen, kun je op verschillende manieren doen. Wanneer je echt weinig pinnen hebt, maar wel een ADC op de Atmel :


 5V--100K -+------+------+------+------+------+
           |      |      |      |      |      |
            =]     =]     =]     =]     =]     =]
           |      |      |      |      |      |
          100K   47K    22K     10K   4K7    2K2
           |      |      |      |      |      |
          -+------+------+------+------+------+--- ADC van Atmel

En anders gewoon elke druktoets op een pin apart aansluiten volgens :


             5V
              |
              10K
              |     /
Pin Atmel  ---+----/ --+
                       |
                      GND

[Bericht gewijzigd door oxurane op (10%)]

Sorry, maar hier dan (hopelijk dat ik niets vergeet ;-) ) het schema.
Het is een bestaand schema waar ik niets aan kan veranderen

5Vdc
|
weerstand 500 ohm
|
LED
|
|-----------Pin Atmel
Schakelaar
|
Massa

En het doel is om de stand van de schakelaar in te lezen in de PIC. De LED is alleen maar een indicatie, die wordt niet vanuit de PIC gestuurd. Je zette nogal wat mensen op het verkeerde been geloof ik :-)

Het is zeker niet mijn bedoeling om mensen op het verkeerde been te zetten.

Ok uitleg (hopelijk duidelijk ;-) )

Schakelaar wordt ingedruk en ingelezen
Ledje gaat aan en moet ook aanblijven als je de schakelaar weer los laat. Je kunt het zien als een soort bronselectie.
Bron 1 wordt geselecteerd en alleen ledje van Bron 1 blijft aan
Vervolens wordt bv Bron 3 geselecteerd en alleen het ledje van Bron 3 blijft branden.

Ik gebruik overigens een Atmega 8 (dit nog even ter info)

Ik hoop dat ik het zo duidelijker heb uitgelegd, mochten er nog vragen zijn, dan hoor ik het wel

Op 11 september 2009 17:08:45 schreef Kiter:
- poorten zal uitgang instellen
- main loop starten
- Poorten als ingang instellen = wait 10uS
- alle poorten inlezen
- Alle poorten weer als uitgang instellen
enkel de poortpin waarvan de in gelezen waarde 0 is, als uitgang zetten en laag maken. Zet je ze toch allemaal als uitgang, dan moeten de poortpinnen waarvan de led uit moet, hoog zijn. Hierdoor zou je sluiting kunnnen maken wanneer er dan op de schakelaar gedrukt wordt.