Atmega8 nimmt kein input signal an

Gast #1210918
Lesenswert?
• ▲
▼
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.
Gast #1210924
Lesenswert?
• ▲
▼
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
Gast #1210931
Lesenswert?
• ▲
▼
...

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
Gast #1210933
Lesenswert?
• ▲
▼
> 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.

...
Gast #1210945
Lesenswert?
• ▲
▼
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
Gast #1210955
Lesenswert?
• ▲
▼
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
Gast #1210960
Lesenswert?
• ▲
▼
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
Gast #1210970
Lesenswert?
• ▲
▼
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren