Powell
21.06.2007, 19:59
Hallo
Ich habe jetzt schon die zweite Applikation (einmal mit MEGA8 und einmal mit ATTiny25) bei der ich unvorhergesehene Probleme bei meinen Controllereingängen hatte. Softwareseitig habe ich die Eingänge auf High gesetzt (interne Pullups) und einen Eingangsimpuls auf die Abfallende Flanke abgefragt, den Eingang also auf Low gezogen.
Nun zeigte sich bei meiner Anwendung ein unregelmäßiges "übersehen" von manchen Eingangssignalen. Was seltsam war und ich per Zufall endeckte: Wenn ich mit dem Finger den Eingang berührte (ansonsten kein Potential) wurden alle Eingangssignale erkannt.
Ich schaute mir den Eingang am Oszilloskop an und musste feststellen dass er alles andere als durchgängig auf High war. Er Wechselte immer wieder in regelmäßigen Intervallen voon High auf Low, zwischendurch war er auch immer mal dauerhaft auf low. Was ich weiterhin feststellen musste ist, dass die Impulsbreite des Störsignals am Eingang genau der im Programm erzeugten Variablen T in Millisekunden entsprach. Diese Tatsache hat mich dann noch mehr erstaunt.... Woher kann so ein Signal kommen? Ich versteh es einfach nicht, Software und Hardware sind 100% in Ordnung, und wenn ich einen externen 10K Pullup an den Eingang lege funktioniert das ganze auch wieder einwandfrei.. aber kann mir irgendjemand erklären wie sowas kommen kann? Ich meine die Internen Pullups sollen doch eigentlich die externen ersetzen, warum muss ich jetzt doch wieder nen externen Pullup einbringen?
Ich habe das Listing auch mal mit angehängt
Grüße Paul
$regfile = "attiny25.dat" 'Prozessor-Deklarationen
$crystal = 1000000 'Quarz: 1,000 MHz Intern
Declare Sub Hoch
Declare Sub Runter
Dim A As Byte
Config Adc = Single , Prescaler = Auto
Start Adc
Dim W As Word , Channel As Byte , T As Byte
Channel = 1
'---------------------------------------------------------
Ddrb = &B00011000 'Pin Pb0,1,2 Ausgang, rest Eingang
Portb = &B11100111 'Pullups der Eingänge aktiviert 'PullUp von Pin PD0+1+rest aktivieren
'----------------------------------------------------------
Do
W = Getadc(channel)
Debounce Pinb.3 , 0 , Hoch , Sub 'Entprellte Tasterabfrage
Debounce Pinb.4 , 0 , Runter , Sub
If W < 128 Then
T = 50
End If
If W > 128 And W < 384 Then
T = 75
End If
If W > 384 And W < 640 Then
T = 100
End If
If W > 640 And W < 896 Then
T = 125
End If
If W > 896 Then
T = 150
End If
Loop
'----------------------------------------------------------
Sub Hoch
Portb.0 = 1
Waitms T
'^^^^^^^^^^^^^^^^--------------------------------------------- Schaltzeit
Portb.0 = 0
End Sub
Sub Runter
Portb.1 = 1
Waitms T
'^^^^^^^^^^^^^^^^--------------------------------------------- Schaltzeit
Portb.1 = 0
End Sub
End
Ich habe jetzt schon die zweite Applikation (einmal mit MEGA8 und einmal mit ATTiny25) bei der ich unvorhergesehene Probleme bei meinen Controllereingängen hatte. Softwareseitig habe ich die Eingänge auf High gesetzt (interne Pullups) und einen Eingangsimpuls auf die Abfallende Flanke abgefragt, den Eingang also auf Low gezogen.
Nun zeigte sich bei meiner Anwendung ein unregelmäßiges "übersehen" von manchen Eingangssignalen. Was seltsam war und ich per Zufall endeckte: Wenn ich mit dem Finger den Eingang berührte (ansonsten kein Potential) wurden alle Eingangssignale erkannt.
Ich schaute mir den Eingang am Oszilloskop an und musste feststellen dass er alles andere als durchgängig auf High war. Er Wechselte immer wieder in regelmäßigen Intervallen voon High auf Low, zwischendurch war er auch immer mal dauerhaft auf low. Was ich weiterhin feststellen musste ist, dass die Impulsbreite des Störsignals am Eingang genau der im Programm erzeugten Variablen T in Millisekunden entsprach. Diese Tatsache hat mich dann noch mehr erstaunt.... Woher kann so ein Signal kommen? Ich versteh es einfach nicht, Software und Hardware sind 100% in Ordnung, und wenn ich einen externen 10K Pullup an den Eingang lege funktioniert das ganze auch wieder einwandfrei.. aber kann mir irgendjemand erklären wie sowas kommen kann? Ich meine die Internen Pullups sollen doch eigentlich die externen ersetzen, warum muss ich jetzt doch wieder nen externen Pullup einbringen?
Ich habe das Listing auch mal mit angehängt
Grüße Paul
$regfile = "attiny25.dat" 'Prozessor-Deklarationen
$crystal = 1000000 'Quarz: 1,000 MHz Intern
Declare Sub Hoch
Declare Sub Runter
Dim A As Byte
Config Adc = Single , Prescaler = Auto
Start Adc
Dim W As Word , Channel As Byte , T As Byte
Channel = 1
'---------------------------------------------------------
Ddrb = &B00011000 'Pin Pb0,1,2 Ausgang, rest Eingang
Portb = &B11100111 'Pullups der Eingänge aktiviert 'PullUp von Pin PD0+1+rest aktivieren
'----------------------------------------------------------
Do
W = Getadc(channel)
Debounce Pinb.3 , 0 , Hoch , Sub 'Entprellte Tasterabfrage
Debounce Pinb.4 , 0 , Runter , Sub
If W < 128 Then
T = 50
End If
If W > 128 And W < 384 Then
T = 75
End If
If W > 384 And W < 640 Then
T = 100
End If
If W > 640 And W < 896 Then
T = 125
End If
If W > 896 Then
T = 150
End If
Loop
'----------------------------------------------------------
Sub Hoch
Portb.0 = 1
Waitms T
'^^^^^^^^^^^^^^^^--------------------------------------------- Schaltzeit
Portb.0 = 0
End Sub
Sub Runter
Portb.1 = 1
Waitms T
'^^^^^^^^^^^^^^^^--------------------------------------------- Schaltzeit
Portb.1 = 0
End Sub
End