Schau mal hier:
http://www.mikrocontroller.net/articles/Entprellung
Und was meinst du mit dem flackern?
Schau mal hier:
http://www.mikrocontroller.net/articles/Entprellung
Und was meinst du mit dem flackern?
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Wenn ich jetzt den Knopf auf meinem Joystick gedrückt halte müsste die LED ja solange leuchten biss ich wieder los lasse. Tut sie aber nicht sie blinkt extrem schnell bis ich wider los lasse. Liegt das am Bascom Programm oder daran das mein Joystick Programm fürn Pc 1128 und 0 hintereinander ausgibt wenn ich einen Knopf gedrückt halte ?Code:If Button1_wert_integer = 1128 then PORTA.0 = 1 'Hier hängt die LED drann else PORTA.0 = 0 End If
Gruß Tjark
Hier mein VB code (ich weiß gehört hier nicht rein aber ich wollte keinen Anderen Tread eröffnen.
Gruß TjarkCode:'' Erstellt mit SharpDevelop. ' Benutzer: Tjark Möller •.• ' Datum: 03.03.2012 ' Zeit: 20:32 ' ' Sie können diese Vorlage unter Extras > Optionen > Codeerstellung > Standardheader ändern. ' Imports System Imports System.Windows.Forms Imports Microsoft.DirectX.DirectInput Imports Microsoft.DirectX Public Partial Class MainForm Public Sub New() ' The Me.InitializeComponent call is required for Windows Forms designer support. Me.InitializeComponent() serialport1.open ' ' TODO : Add constructor code after InitializeComponents ' End Sub Private applicationDevice As Device = Nothing Public Shared state As New JoystickState() Public Function InitDirectInput() As Boolean dim instance As DeviceInstance For Each instance In Manager.GetDevices(DeviceClass.GameControl, EnumDevicesFlags.AttachedOnly) applicationDevice = New Device(instance.InstanceGuid) Exit For Next instance applicationDevice.SetDataFormat(DeviceDataFormat.Joystick) applicationDevice.SetCooperativeLevel(Me, CooperativeLevelFlags.Exclusive Or CooperativeLevelFlags.Foreground) Dim d As DeviceObjectInstance For Each d In applicationDevice.Objects If 0 <> (d.ObjectId And CInt(DeviceObjectTypeFlags.Axis)) Then ' Set the range for the axis. applicationDevice.Properties.SetRange(ParameterHow.ById, d.ObjectId, New InputRange(+1, +255)) End If Next d Return True End Function 'InitDirectInput Public Sub GetData() If Nothing Is applicationDevice Then Return End If Try applicationDevice.Poll() Catch inputex As InputException If TypeOf inputex Is NotAcquiredException Or TypeOf inputex Is InputLostException Then Try applicationDevice.Acquire() Catch Return End Try End If End Try Try state = applicationDevice.CurrentJoystickState Catch Return End Try End Sub Sub Button1Click(ByVal sender As Object, ByVal e As EventArgs) InitDirectInput End Sub Sub Timer1Tick(ByVal sender As Object, ByVal e As EventArgs) GetData() 'Axis---------------------------------------------------- label1.Text="X = "+state.X.ToString() label2.Text="Y = "+state.Y.ToString() label3.Text="Z = "+state.Z.ToString() label4.Text="Rz = "+state.Rz.ToString() 'Buttons-------------------------------------------------- Label5.Text ="Button1 = "+state.GetButtons(0).Tostring Label6.Text ="Button2 = "+state.GetButtons(1).Tostring Label7.Text ="Button3 = "+state.GetButtons(2).Tostring Label8.Text ="Button4 = "+state.GetButtons(3).Tostring Label9.Text ="Button5 = "+state.GetButtons(4).Tostring Label10.Text ="Button6 = "+state.GetButtons(5).Tostring Label11.Text ="Button7 = "+state.GetButtons(6).Tostring Label12.Text ="Button8 = "+state.GetButtons(7).Tostring Label13.Text ="Button9 = "+state.GetButtons(8).Tostring Label14.Text ="Button10 = "+state.GetButtons(9).Tostring Label15.Text ="Button11 = "+state.GetButtons(10).Tostring Label16.Text ="Button12 = "+state.GetButtons(11).Tostring 'Serialport Write----------------------------------------- If serialport1.IsOpen Then 'Axis----------------------------------------------------- serialport1.Write ("X" + (state.X).tostring + Chr(13)) serialport1.Write ("Y" + (state.Y).tostring + Chr(13)) serialport1.Write ("Z" + (state.Z).tostring + Chr(13)) serialport1.Write ("Rz" + (state.Rz).tostring + Chr(13)) 'Buttons-------------------------------------------------- SerialPort1.Write ("B1" + (state.GetButtons(0)).ToString & Chr(13)) SerialPort1.Write ("B2" + (state.GetButtons(1)).ToString + Chr(13)) SerialPort1.Write ("B3" + (state.GetButtons(2)).ToString + Chr(13)) SerialPort1.Write ("B4" + (state.GetButtons(3)).ToString + Chr(13)) SerialPort1.Write ("B5" + (state.GetButtons(4)).ToString + Chr(13)) SerialPort1.Write ("B6" + (state.GetButtons(5)).ToString + Chr(13)) SerialPort1.Write ("B7" + (state.GetButtons(6)).ToString + Chr(13)) SerialPort1.Write ("B8" + (state.GetButtons(7)).ToString + Chr(13)) SerialPort1.Write ("B9" + (state.GetButtons(8)).ToString + Chr(13)) SerialPort1.Write ("B10" + (state.GetButtons(9)).ToString + Chr(13)) SerialPort1.Write ("B11" + (state.GetButtons(10)).ToString + Chr(13)) SerialPort1.Write ("B12" + (state.GetButtons(11)).ToString + Chr(13)) end if End Sub Sub Label1Click(ByVal sender As Object, ByVal e As EventArgs) End Sub Sub MainFormLoad(ByVal sender As Object, ByVal e As EventArgs) End Sub End Class
Die Entprellung wird mit dem Waitms 100 vorgenommen.... man kann die Zeit auch noch etwas verkürzen oder verlängern, so wie es am besten funktioniert.
Der Debounce Befehl geht aber nätürlich auch.
MFG
Jemand mit einer neuen Idee ist ein Spinner, bis er Erfolg hat.
(Mark Twain)
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Könnte man das Entprellen nicht auch einfach mit einem z.B. 100nF Kondensator parallel zum Taster machen?
Ich denke ich weiß warum die LED Blinkt. In meinem Programm in VB habe ich einen Timer von 100ms damit habe ich die Abfrage Frequenz des Joysticks definiert. Alle 100ms Wird ein neues Signal gesendet das der Knopf gedrückt wird, dass führt wohl zum Blinken der LED. Kann ich es nicht so machen das der erste Impuls des Knopfes gewertet wird vom UART und erst nach ca. 5sek ein neuer Impuls etwas bewirkt sonst würde ich ja die ganze zeit hin und her schalten wenn ich den Knopf zu lange drücke.![]()
Gruß Tjark
So jetzt hab ich es hinbekommen das der Taster beim betätigen die LED einschaltet und diese auch an bleibt ich darf max. 5 sek auf dem Taster bleiben sonst geht sie wieder aus. Wenn ihr eine Bessere Lösung wisst die das selbe Ergebnis bring immer her damitMein Problem ist nämlich jetzt das wenn ich den Code für die Taster abfrage und den Code für die Servos zusammen laufen lasse der Atmega völlig spinnt. Er nimmt keine Befehle mehr an und der Servo mach fürchterliche Geräusche. Außerdem wird der Spannungswandler Extrem heiß! Kann das sein das der Controller mit dem Programm überfordert ist ? Werde aber ein Atmega 328 nehmen nicht den Atmega32. Hab das neue Board noch nicht hier. Gruß Tjark
Code:$regfile = "m32def.dat"$framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 9600 Config Servos = 4 , Servo1 = Porta.2 , Servo2 = Porta.3 , Servo3 = Porta.4 , Servo4 = Porta.5 , Reload = 10 Config Dcf77 = Pind.7 , Timer = 1 , Gosub = Sectic Config Porta.0 = Output Config Porta.1 = Output Config Porta.2 = Output Config Porta.3 = Output Config Porta.4 = Output Config Porta.5 = Output Enable Interrupts Time$ = "00:00:00" Date$ = "09/04/00" Portswitch Alias Porta.1 Led1 Alias Porta.0 Dim Inputstring As String * 5 Dim Data_available As Byte '----X----------------------------------- Dim Joystick_x_wert_string As String * 5 Dim Joystick_x_wert_integer As Integer Dim X_empfangen As Byte '----Y----------------------------------- Dim Joystick_y_wert_string As String * 5 Dim Joystick_y_wert_integer As Integer Dim Y_empfangen As Byte '----Z----------------------------------- Dim Joystick_z_wert_string As String * 5 Dim Joystick_z_wert_integer As Integer Dim Z_empfangen As Byte '----Z-Rotation-------------------------- Dim Joystick_rz_wert_string As String * 5 Dim Joystick_rz_wert_integer As Integer Dim Rz_empfangen As Byte 'Buttons--------------------------------- Dim Button1_wert_string As String * 5 Dim Button1_wert_integer As Integer Dim B1_empfangen As Byte Do Data_available = Ischarwaiting() If Data_available > 0 Then 'wenn Daten da sind, dann... Input "" , Inputstring X_empfangen = Instr(inputstring , "X") 'Gibt die Position des Substrings "X" aus oder null wenn nicht gefunden Y_empfangen = Instr(inputstring , "Y") 'Gibt die Position des Substrings "Y" aus oder null wenn nicht gefunden Z_empfangen = Instr(inputstring , "Z") 'Gibt die Position des Substrings "Z" aus oder null wenn nicht gefunden Rz_empfangen = Instr(inputstring , "Rz") 'Gibt die Position des Substrings "Z-Rotation" aus oder null wenn nicht gefunden B1_empfangen = Instr(inputstring , "B1") 'Gibt die Position des Substrings "Button 1 " aus oder null wenn nicht gefunden '----X----------------------------------- If X_empfangen = 1 Then Joystick_x_wert_string = Mid(inputstring , 2) 'die erste Stelle des Strings (das "X") abscheiden Joystick_x_wert_integer = Val(joystick_x_wert_string) 'string in integer konvertieren End If '----Y----------------------------------- If Y_empfangen = 1 Then Joystick_y_wert_string = Mid(inputstring , 2) 'die erste Stelle des Strings (das "Y") abscheiden Joystick_y_wert_integer = Val(joystick_y_wert_string) 'string in integer konvertieren End If '----Z----------------------------------- If Z_empfangen = 1 Then Joystick_z_wert_string = Mid(inputstring , 2) 'die erste Stelle des Strings (das "Z") abscheiden Joystick_z_wert_integer = Val(joystick_z_wert_string) 'string in integer konvertieren End If '----Z-Rotation-------------------------- If Rz_empfangen = 1 Then Joystick_rz_wert_string = Mid(inputstring , 2) 'die erste Stelle des Strings (das "Rz") abscheiden Joystick_rz_wert_integer = Val(joystick_rz_wert_string) 'string in integer konvertieren End If '----Button 1 --------------------------- If B1_empfangen = 1 Then Button1_wert_string = Mid(inputstring , 2) 'die erste Stelle des Strings (das "Rz") abscheiden Button1_wert_integer = Val(button1_wert_string) 'string in integer konvertieren End If End If Servo(1) = Joystick_x_wert_integer Servo(2) = Joystick_y_wert_integer Servo(3) = Joystick_z_wert_integer Servo(4) = Joystick_rz_wert_integer If Time$ < "00:00:05" Then 'Hier wird das Signal Ignoriert bzw. Schaltet den Portswitch immer auf null wenn man drückt Gosub Ausschalten End If If Time$ > "00:00:05" Then 'Erst nach 5sek. wird ein neues Signal erfasst ' Gosub Einschalten End If If Portswitch = 1 Then Toggle Led1 End If Loop End Einschalten: If Button1_wert_integer = 1128 Then Portswitch = 1 Time$ = "00:00:00" 'Sofern ein Signal vom Joystickknopf gekommen ist werden die Folgenden für 5sek. Ignoriert. End If Return Ausschalten: If Button1_wert_integer = 1128 Then Portswitch = 0 End If Return Sectic: 'wird sekündlich aufgerufen Gosub Uhranzeigen If _sec = 0then End If Return Uhranzeigen: Print Time$ ; "" Return
Lesezeichen