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
Code:
$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