PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LED AN/AUS Programm funktioniert nicht.



Brantiko
22.10.2006, 20:54
Hallo,
Ich habe zum Testen mal ein Programm für mein ATMega16 geschrieben:


Ddra = &B0000010
Porta = &B0000001

Dim Zustand As Bit
Zustand = 0
Do
If Pina.0 = 0 Then 'Wenn Taster gedrückt den Zustand Invertieren
Toggle Zustand
End If

If Zustand = 1 Then 'Wenn Zustand = 1 LED an, ansonsten LED aus

Porta.1 = 1
Else
Porta.1 = 0
End If

Loop



Das Programm soll die LED mit nach Tastendruck so lange zum leuchten Bringen bis ein erneuter Tastendruck erfolgt.
Funktioniert soweit auch, allerdings sehr schlecht, da:

-Die LED beim gedrücktgehaltenen Taster dunkel leuchtet
- Das ganze nur manchmal funktioniert weil die LED nach dem Tastendruck wieder ausgeht.
-Die LED beim ein und aus gehen den Anschein erweckt als sei sie mit einer PWM gedimmt, die geht also nicht sofort aus bzw an.

Hat jemand ne Ahnung wieso das nicht richtig funktioniert?

Gibt es vielleicht irgendwo ein fertiges "Memory Programm"??

Im Voraus bedankt sich,

Alex

dieta
22.10.2006, 21:07
1. liegt daran, weil der Tastendruck der LED Strom wegnimmt, Abhilfe schafft ein stärkeres Netzteil.
2. liegt daran, dass du den Taster nicht entprellt hast, das bedeutet, der Kontakt des Tasters prellt auf den anderen Kontakt, und so bekommt der AVR statt einer huntderte Flanken. Dazu findest du bestimmt im RN-Board und -Wissen und bei Google einiges.
3. liegt glaube ich auch an der fehlen den Entprellung.

uwegw
22.10.2006, 21:26
<<<Mist geschrieben und wieder gelöscht... ich sollte ins Bett gehen>>>

Brantiko
22.10.2006, 21:27
Hallo,

Das mit der LED liegt nicht an der Spannung, die ist Konstant bei 4,97V
Ich habe mal einen Hallsensor angeschlossen, damit funktioniert es auch nicht besser (Die sind doch Prellfrei??)
Müsste ich dann den Tastendruck als solchen (Pina.0 = 0) durch die Bedingung dass er eine Mindestzeit gedrückt sein muss (zb 5ms) ersetzen??
Damit köntne man ja die Prellung unmgehen?

Ichv ermute eher dass es an dem sporadischem Programm liegt.

Edit: @uwegw In der Tat..

Gruss

Alex

eIdea
22.10.2006, 21:37
Mal schnell zusammengeklatscht:



$regfile = "m16def.dat"
$crystal = 8000000

Ddra = &B0000010
Porta = &B0000001

Do
Debounce Pina.0 , 1 , Label

Label:
Toggle Porta.1
loop

PinA.1 wird entprellt und sobald der Taster gedrück wurde (=High) springt das Programm zum Label und geht durch den Loop zurück zum Debounce

Brantiko
22.10.2006, 22:14
Hallo,
Danke für den Tip.
Wusste nicht dass man den Pin automatisch entprellen kann.
Funktioniert aber trotzdem nicht wesentlich besser :-(
Sonst noch jemand eine Idee?
Es soll später eine Prozedur an und aus geschaltet werden (mehrere LEDs sollen blinken) und nicht bloß der LED Ausgang Invertiert werden.


Gruss

Alex

Brantiko
23.10.2006, 11:42
Hallo,
folgendes Programm funktioniert jetzt:


Ddra = &B0000010
Porta = &B0000011


Dim Zustand As Bit
Dim Vorher As Bit
Debounce Pina.0 , 1 , Label
Debounce Pina.0 , 0 , Label
Config Debounce = 25
Porta.1 = 0
Zustand = 0

Label:
Do

If Pina.0 = 0 Then

If Zustand = 0 Then
Toggle Porta.1
Zustand = 1

End If
Else
Zustand = 0
End If

Loop
End


Gruss

Alex