- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 4 von 4

Thema: AVR-Controller: Verlässlichkeit der internen Pullups?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.01.2006
    Ort
    Homberg (Efze)/Nordhessen
    Alter
    39
    Beiträge
    207

    AVR-Controller: Verlässlichkeit der internen Pullups?

    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

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.06.2007
    Ort
    München
    Alter
    61
    Beiträge
    199
    Ich vermute, dass bei Deinem Code unabsichtlich die Pullups wieder deaktiviert werden (durch Zugriff auf PORTB). Ich würde Dir empfehlen, dies mal in dem zugehörigen Assembler Code zu überprüfen.

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Code:
    Ddrb = &B00011000                                          'Pin Pb0,1,2 Ausgang, rest Eingang
    
     Portb = &B11100111                                         'Pullups der Eingänge aktiviert                                          'PullUp von Pin PD0+1+rest aktivieren
    Ich kann zwar kein Bascom aber ich glaube nicht das der Kommentar mit dem was du einstellst zusammenpasst.

    Hubert

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.01.2006
    Ort
    Homberg (Efze)/Nordhessen
    Alter
    39
    Beiträge
    207
    Hi

    Die Kommentare sind in der Tat nicht passend zum Listing... habe immer mal rumkopiert und verändert und auf die Kommentare nicht mehr geachtet O

    Assembler kann ich leider nicht... bin froh wenn ich meine Codes irgendwie in Bascom zusammenkriege.
    Ich denke dass es auf jeden Fall was mit dem ADC zu tun hat... aber wieso?

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test