mikrocontroller.net

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


Autor: Matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Roth (gelb)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ibilzh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Do

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

Loop


Gruss
Gerhard

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)...

;-)

...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.