-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: Atmel MEga32 --> Input

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.01.2007
    Beiträge
    209

    Atmel MEga32 --> Input

    Anzeige

    Hallo,
    ich habe folgendes Problem: Ich habe sämtliche Ports (hintereinander zum Test) des ATMega32 auf Input gestellt und einen Taster angeschlossen. Problem: Setze ich das Überprüfen des Eingangs in eine Schleife und sage wenn Strom da ist leuchtet LED1 und wenn nicht LED2. Passieren tut allerdings nichts.
    Hat jemand eine Idee was man da beachten muss?

    MfG Killer

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Hast du die Pull-Up-Widerstände aktiviert? Ohne die geht es nicht.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.01.2007
    Beiträge
    209
    Pull-Up Wiederstände sagt mir jetzt nichts von ist dies warscheinlich nicht der Fall

    Wie aktiviere ich sie?

    MfG Killer

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Die Port's des ATMEGA 32 sind, wenn sie als Eingang beschaltet wurden hochohmig.
    Also schaltet man üblicherweise einen Widerstand gegen Plus (=Pull Up Widerstand) oder gegen Minus (=Pull Down Widerstand) um den Eingang auf ein definiertes Potential zu bringen.

    Du schaltest also einen Widerstand von + , an den gewünschten Eingang des Controllers.
    Mit dem Taster wird der Eingang dann bei betätigung nach GND durchgeschaltet.

    Nun hat aber der ATMEGA 32 auch schaltbare, interne Pull Up Widerstände (ca. 47kOhm).
    Wenn der Port mit dem DDRx Register als Eingang definiert ist, wäre ja das PORTx Register ohne Funktion, weil die Port Abfragen ja über das PINx Register laufen.
    Wenn Du aber in das PORTx Register für den jeweiligen Port eine 1 schreibst wird der interne Pull Up Widerstand des ATMEGA 32 aktiviert und der extern angeschaltete Widerstand braucht nicht eingebaut zu werden.

    Das Ganze steht aber auch so im Datenblatt.

    Wenn das dann immer noch nicht geht, hast Du vermutlich einen Fehler in deiner restlichen Hardware oder deine Software ist fehlerhaft.

    Hast Du auch die Fuses richtig gesetzt ? - ist eine häufige Fehlerquelle.

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    26
    Beiträge
    3.467
    Poste mal deinen Code.

    jon
    Nice to be back after two years
    www.roboterfreak.de

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.01.2007
    Beiträge
    209
    Code:
    $regfile = "m32def.dat"
     $framesize = 32
     $swstack = 32
     $hwstack = 32
     $crystal = 1000000
    
     $baud = 9600
    
    
    Config Pinc.0 = Output
    Config Pind.6 = Input
    
     Do
    If Pind.6 = 0 Then
    Portc.0 = 0                                                 'LED an
    Else
    Portc.0 = 1                                                 'LED aus
    End If
    
     Loop
    das wäre der Code, soll einfach nur ein einfacher Test sein. Die IF-Abfrage kann ich mit 1 und mit 0 machen passieren tut nichts. Was muss ich in den Quellcode einbauen um die Pull Up Wiederstände zu aktivieren oder läuft das anders?

    MfG Killer

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.12.2006
    Beiträge
    205
    Hallo

    mach mal den Pullup Widerstand an Pin D6 an:

    Portd.6=1

    müsste dann von der Software funktionieren

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    14.01.2007
    Beiträge
    209
    Okay, ich habe den Befehl jetzt einfach vor die Schleife gesetzt:
    Code:
    $regfile = "m32def.dat"
     $framesize = 32
     $swstack = 32
     $hwstack = 32
     $crystal = 1000000
    
     $baud = 9600
    
    
    Config Pinc.0 = Output
    Config Pind.6 = Input
    Portd.6 = 1
    
     Do
    If Pind.6 = 0 Then
    Portc.0 = 0                                                 'LED an
    Else
    Portc.0 = 1                                                 'LED aus
    End If
    
     Loop
    Das Problem besteht allerdings weiterhin! Ich habe den Eingang an GND und einmal an VCC geschlossen und es so versucht aber bei beidem ist die LED entweder ständig an oder nie! Was gäbe es noch für Lösungen?

    MfG Killer

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.12.2006
    Beiträge
    205
    guck mal hier: Link

    vielleicht hilft dir das weiter.
    Dort ist nach der If-Anweisung noch ein waitms(100) als Entprellung. Müsste aber sonst vom Programmcode stimmen

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Probier mal mit einem kleinen Testprogramm, ob die Led überhaupt leuchtet.

    Eventuell ist ja die JTAG Fuse noch gesetzt der einige Pins des Port C belegt.

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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