Atmega8 nimmt kein input signal an

Gast #1210918
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
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
...

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
> 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
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
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
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
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
Gast
> 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)...

;-)

...

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.