mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pin wird nicht richtig gelesen


Autor: donald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
nach dem einschalten bezw. einem reset liest der atmega einen taster ein 
und je nach dem was für ein pegel anliegt wird entschieden welche led 
angeht.
jedoch wird nicht immer der richtige pegel eingelesen was mir 
unverständlich ist.

der pin ist mit einem taster verbunden der im gedrückten zustand auf 
masse gezogen wird.
um zu verhindern das bei nicht gedrückten taster der pin in der luft 
hängt ist der interne pull up zugeschalten, denoch wird der pin manchmal 
nicht richtig eigelesen wenn der taster offen ist.

so wie ich das im datenblatt verstanden habe, braucht der avr einen takt 
um den aktuellen pin wert zu synchronisieren was durch den befehl "nop" 
geschied.
leider bringt das nicht der gewünschten erfolg und der taster wird wenn 
er geöffnet ist ab und an falsch eingelesen.

wenn man nun ein zweites "nop" hinzufügt wird der taster urplötzlich 
jedesmal richtig eingelesen!

nun macht mich das schon etwas stuzig da laut datenblatt ja ein "nop" 
zur synchronisation reichen sollte, wie auch in dem beispiel das auf 
seite 55 im datenblatt gezeigt wird:
...
; Define pull-ups and set outputs high
; Define directions for port pins
ldi r16,(1<<PB7)|(1<<PB6)|(1<<PB1)|(1<<PB0)
ldi r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0)
out PORTB,r16
out DDRB,r17
; Insert nop for synchronization
nop
; Read port pins
in r16,PINB
...

datenblatt:
http://www.atmel.com/dyn/resources/prod_documents/...

bei der hardware handelt es sich um das myavr board.
den schaltplan kann man hier einsehen:
http://www.myavr.info/download/schaltplan_15.png

hier mal das programm das den taster nur manchmal richtig einliest.
hat da jemand eine idee wieso sich das so verhält?
.include "m8def.inc"


  sbi PORTC, 0
  nop                ; synchronisieren


  sbic PINC, 0
  rjmp eins

null:
  sbi PORTD, 7
  sbi DDRD, 7
  rjmp ende


eins:
  sbi PORTD, 6
  sbi DDRD, 6
  rjmp ende



ende:
  rjmp ende

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du direkt nach dem Einschalten der Pull-Ups den Zustand der Leitung 
einlist, dann ist die externe Beschaltung wahrscheinlich noch nicht im 
stabilen Zustand und der Controller liest irgend einen Zwischenzustand, 
den er dann mal als 1, mal als 0 interpretiert, je nach Windrichtung und 
Laune.

Schalte einen ausreichenden Delay vor das Einlesen des Ports - das eine 
nop reicht nicht aus - das wird für die interne Logik des Controllers 
gebraucht.

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die parasitäre Kapazität der angeschlossenen Leitung und des Tasters muß 
auch mit umgeladen werden. Nimm 2x oder mehr "NOP" dazwischen, dann 
geht´s auch.

Autor: Mensch_Z (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hast du soo viel Zeit um 4 NOPs zu spendieren ? (Zeit is Geld , gelle)

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.