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







Zitieren

Lesezeichen