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
-
hadv
Just find out what you like and let it kill you
oxurane
Van elk bezoek aan CO leer ik weer meer...
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
hadv
Just find out what you like and let it kill you
Dit is weer een ander schema, waar is die LED nou gebleven. Of zijn het soms parallelle verbindingen?
oxurane
Van elk bezoek aan CO leer ik weer meer...
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
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
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
plantrekker
True story bro!
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.