PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Noch mal eine simple frage...



schroejahr
24.09.2005, 19:56
Hallo, schon wieder mal ein problem ;-(

Ich hab an meinem atmega8 folgendes angeschlossen:

an portB 3 und portb 4 sind leds angeschlossen.

an portD 3 ist ein taster direkt auf Gnd.

dann hab ich folgenden code auf den chip geladen:



.include "4433def.inc" ;bzw. 2333def.inc

ldi r16, 0xFF
out DDRB, r16 ;Port B durch Ausgabe von 0xFF ins
;Richtungsregister DDRB als Ausgang konfigurieren
ldi r16, 0x00
out DDRD, r16 ;Port D durch Ausgabe von 0x00 ins
;Richtungsregister DDRD als Eingang konfigurieren

loop:
in r16, PIND ;an Port D anliegende Werte (Taster) nach r16
;einlesen
out PORTB, r16 ;Inhalt von r16 an Port B ausgeben
rjmp loop ;Sprung zu "loop:" -


jetzt müsste doch wenn ich den taseter drücke die led an portB 3 ausgehen.

aber wenn ich sie drücke gehen beide aus, wieso ?

PasstScho
24.09.2005, 20:11
Hi,
Ich hab mir deinen Code nicht genauer angesehen, aber Probiers mal mit .include "m8def.inc" statt .include "4433def.inc"
MfG Alex

schroejahr
24.09.2005, 21:40
ich hab mir eben alles versucht damit das oben genannte doch funktioniert... hat aber wie beschrieben nicht geklappt...

grad, nachdem ich jetzt ne stunde lang die finger davon gelassen hab drück ich den schalter und es geht nur ein licht aus ?!?

dann warte ich wieder nen paar sekunden, hab den taster nen paar mal gedrückt, und dann gehen plötzlich wieder beide aus... versteh ich nicht...

olfi13
24.09.2005, 21:47
Füge hinter
ldi r16, 0x00
out DDRD, r16 ;Port D durch Ausgabe von 0x00 ins
;Richtungsregister DDRD als Eingang

einmal diese Zeilen ein:
ldi r16, 0xFF
OUT PortD, r16 ; interne Pull-Up-Widerständ einschalten


Was passiert dann?

Gruß, olfi

schroejahr
24.09.2005, 21:57
hallo, habe das ausprobiert,

wie beschriebn funktionierte das auch schon vorher, der unterschied der mir aufgefallen ist:

wenn ich das programm teste dauert es ziemlich lange wenn ich den schalter drücke bis die led ausgeht (ca. 0,5sek) w
wenn ich das isp kabel abziehe funktioniert is direkt.

wenn ich jetzt deinen code mit einfüge, gibt es garkeine verzögerung mehr, auch wenn das kabel vom isp angeschlossen ist.

könntest du mir vielleicht erklären wieso das so ist ?

olfi13
24.09.2005, 22:02
Die Eingänge des Controllers sind hochhohmig, ohne die internen Pull-Up-Widerstände fängst Du dir alle möglichen Störungen ein.
Damit besitzen deine Eingänge dann einen eher zufälligen logischen Pegel.

Ich werde noch nicht ganz schlau aus deinem Text. Jetzt ist alles wie erwartet?

Gruß, olfi

schroejahr
24.09.2005, 23:07
ja, jetzt funktioniert alles wie erwartet. Danke nochmal.

sehe ich das richtig, das ich dadurch ,das ich die als eingänge definierten pins von portb auf high setze, die internen pullup wiederstände aktiviere ?

dadurch habe ich dann einen störungsfreieren portb, und deshalb behebe ich eine eventuell durch störungen bedingte fehlfunktion ?

olfi13
24.09.2005, 23:19
So ist es.
Gruß, olfi