Forum: Mikrocontroller und Digitale Elektronik Atmega8 nimmt kein input signal an


von Matze (Gast)


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.

von Werner (Gast)


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

von Peter R. (gelb)


Lesenswert?

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

von Werner (Gast)


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

von Hannes Lux (Gast)


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.

...

von Matze (Gast)


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

von ibilzh (Gast)


Lesenswert?

Hi,

Do

 If Pind.2 = 1 Then Portd.5 = 1
 If Pind.2 = 0 Then Portd.5 = 0

Loop


Gruss
Gerhard

von Werner (Gast)


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

von Matze (Gast)


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

von Werner (Gast)


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

von Hannes Lux (Gast)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.