Hast du die Pull-Up-Widerstände aktiviert? Ohne die geht es nicht.
jon
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
Hast du die Pull-Up-Widerstände aktiviert? Ohne die geht es nicht.
jon
Nice to be back after two years
www.roboterfreak.de
Pull-Up Wiederstände sagt mir jetzt nichts von ist dies warscheinlich nicht der Fall
Wie aktiviere ich sie?
MfG Killer
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.
Poste mal deinen Code.
jon
Nice to be back after two years
www.roboterfreak.de
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?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
MfG Killer
Hallo
mach mal den Pullup Widerstand an Pin D6 an:
Portd.6=1
müsste dann von der Software funktionieren
Okay, ich habe den Befehl jetzt einfach vor die Schleife gesetzt:
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?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
MfG Killer
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
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.
Lesezeichen