Hallo ich hoffe ihr könnt mir bei meinen Problem helfen. Ich benutze den Atmega8 und programmiere ihn über die Serielle Schnittstelle. RS232 - ISP Ich habe folgenen Code: $regfile = "m8def.dat" $crystal = 16000000 $baud = 19200 $hwstack = 32 $swstack = 8 $framesize = 24 Config Pind.2 = Input Config Pind.5 = Output Portd.2 = 1 Do If Portd.2 = 1 Then Portd.5 = 1 Loop Ich möcht, dass ich meinen Taster: 5V-----[Taster]-------PD2 Im gedrückten Zustang die Led einschaltet und im nicht gedrückten zustand aus ist. Doch die Led ist dauernd nur an egal ob der Taster gedrückt ist oder nicht. Hoffentlich kann mir Jemand helfen und ich freue mich jetzt schon auf antworten. Vielen Dank schonmal allen im voraus.
Hallo!
Du machst zwar die Anweisung
>>> If Portd.2 = 1 Then Portd.5 = 1
wo ist aber die Else Anweisung?
Pin D5 wird nie auf Null gesetzt. Ist also, nachdem er einmal HIGH war
immer HIGH.
Mach mal ein
If Portd.2 = 0 Then Portd.5 = 0
rein.
Werner
Ich programmiere zwar normalerweise Assembler, aber ich denke Portd.5 = Portd.2 sollte es tun Stimmt Pind.5 = Output? Nicht Poutd oder Pddr oder so? Grüße, Peter
...
dann ist mir nochwas aufgefallen. War wohl gerade ein wenig schnell.
>>> Portd.2 = 1
aktiviert die internen Pullup-Widerstände, wenn der entprechende Pin als
Eingang geschaltet ist.
Du hast also immer 5 Volt an dem Pin.
Nimm das Portd.2 = 1 raus und mach am besten noch einen Pulldown gegen
GND an den Pin, wenn du bei deiner Konfiguration
5V-----[Taster]-------PD2
bleiben willst.
Wenn Du den internen Pullup verwendendest, reicht es eigentlich den Pin
mit einem Taster auf GND zu ziehen, also quasi so:
PD2-----[Taster]-------GND und Pullup aktiviert.
Das spart zudem eine Leitung.
also folglich so:
/* ------------Dein Code Plus: --------------*/
Portd.2 = 1
Do
If Portd.2 = 1 Then Portd.5 = 1
If Portd.2 = 0 Then Portd.5 = 0
Loop
/*--------------------------------------*/
und dazu
PD2-----[Taster]-------GND
Alles klar?
Werner
> 5V-----[Taster]-------PD2
Das überlege Dir noch mal. Schau dazu mal im Datenblatt des Mega8 nach
den PullUp-Widerständen. Eingeschaltet hast Du ihn ja: (Portd.2 = 1)
Und dann gewöhne Dir bitte an, Deine Programmzeilen mit Kommentaren zu
versehen, in denen steht, warum Du das so machst.
...
Erstmal Danke für die schnellen antworten. Ich habe jetzt den Code so bei bascom stehen: $regfile = "m8def.dat" $crystal = 16000000 $baud = 19200 $hwstack = 32 $swstack = 8 $framesize = 24 Config Pind.2 = Input Config Pind.5 = Output Portd.2 = 1 Do If Portd.2 = 1 Then Portd.5 = 1 If Portd.2 = 0 Then Portd.5 = 0 Loop Doch PD5 ist immer HIGH, egal ob ich die Taste drücke oder nicht. GND--------[Taste]------PD2 Habe ich vieleicht immer noch einen Fehler im code. Matze
Hi, Do If Pind.2 = 1 Then Portd.5 = 1 If Pind.2 = 0 Then Portd.5 = 0 Loop Gruss Gerhard
SchXXX, jetzt ist mir noch was auf gefallen.. Vielleicht sollte ich heute keine Antworten schreiben. Man möge mir verzeihen. Ich schiebe es mal auf die Zeitumstellung ;-) /* ----------Dein Code:----------*/ Portd.2 = 1 // Hier aktivierst Du die Pullup's Do If Portd.2 = 1 Then Portd.5 = 1 // Hier fragst du ab, ob die Pullups aktiviert sind Loop /*----------------------------------------------*/ Und als Ergebnis wird natürlich immer TRUE herauskommen! Vielleicht solltest Du mal auf den Pin-Zustand abfragen, nicht auf den Port-Zustand. Also If Pind.2 = 1 Then Portd.5 = 1 und dann muss ich dazu sagen, dass ich C Programmierer bin und nicht weiß, ob If Pind.2 = 1 nicht If Pind.2 == 1 heißen muss... //EDIT da ist Gerhard noch beim Tippen auf die gleiche Idee gekommen.... Werner
Ja, Werner viiiiiiiiiilen dank, das war die Lösung. Port steht für die Pullups. Und Pin für den Pin. Danke nochmal an Gerhard und Werner und allen, die mir etwas geposted haben. P.S.: Wener zu deiner Frage es heißt If Pind.2 = 1 danke Grusse Matze
korrigiere:
>>Port steht für die Pullups.<<
... NUR, wenn die Port-Direction auf INPUT steht.
Ist die Direction auf OUTPUT geschaltet, dann ist das der Out-Pegel am
Pin. Also 1 für HIGH 0 für LOW.
So dann,
schönen Sonntag noch.
Werner
> NUR, wenn die Port-Direction auf INPUT steht.
Naja, dank "Config" gibt es für den BASCOM-User ja kein DDR-Register
(deshalb mein Hinweis auf die Portbeschreibung im Datenblatt)...
;-)
...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.