mikrocontroller.net

Forum: Compiler & IDEs Neuer Port Wert wird erst verzögert angezeigt.


Autor: John Schmitz (student)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe das Problem zwar schon mal im uC Forum gepostet, aber ich 
glaube, ich habe da eher eher ein GCC und kein Hardware Problem:

Anbei sehr Ihr, wie ich eine 3x4 Matrix Tastatur am Mega 128 abfrage.Wie 
das grundsätzlich geht ist ja schon vielfach erklärt worden.

Das Bild und der Code sollte für mein Problem eigentlich selbsterklärend 
sein.

Merkwürdigerweise wird die PORT Änderung erst nach einigen Zyklen aktiv 
...!

Die erste ausgegebene Zeile im Display hat noch den alten (unrichtigen) 
Wert, erst die zweite Zeile zeigt den richtigen Wert an. Woran kann das 
liegen ??

Compiler Optimierungsproblem ? Kann doch nicht -oder ?

Vielen Dank im voraus!

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, PDF ist für mich unpassend gewählt, um über Code zu diskutieren.

Vielleicht stolperst du über dies:

http://www.mikrocontroller.net/articles/AVR-Tutori....

Du könntest dir das Disassemblerlisting ansehen, ob zwischen OUT (PORTF) 
und INP (PINE) genügend Zeit vergeht. Was die Abfrage von PINF soll, 
verstehe ich nicht.

Eine weitere Fehlerquelle könnte die Hardware der Tastatur sein.

Autor: John Schmitz (student)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

das (Newbie-) Problem ist identifiziert:


In Bild 2 sieht man, was passiert, wenn ausreichend NOPs die Abfrage 
nach hinten schieben. 10 NOPs reichen ... 8 NOPs noch nicht.

Aber das Problem ist "natürlich" nicht der Compiler, sondern die 
Hardware, der OSKAR hat's entlarvt:

Da ich auf Nummer Sicher gehen wollte, habe ich ALLE Ports des MEGA mit 
Widerständen (2,5 / 1,0 Kohm) abgesichert .... (im Probier - und 
Bastelstadium ... habe schon einmal Ports durch Falschprogrammierung 
(Kurzschluss) zerstört - total ärgerlich).

Da offensichtlich hierdurch unerwünschte Kapazitäten am Eingang 
auftreten, fällt die Spannung am Eingang zu flach ab (Bild 3) und nähert 
sich "zu asymptotisch" an die Grenze, wo der Wechsel HIGH auf LOW vom 
Eingang erkannt wird.

In Bild 4 habe ich den Schutzwiderstand weggenommen, man sieht, die 
negative  Steigung ist parallel zum schaltenden Port ...

Im Code sind die NOPs nun obsolet, der Eingang ist "sofort" auf LOW.

Sorry für den Trouble ... Habe zuvor nur mit "langsamer" C-Control 
experimentiert ... da ist ein solcher Fehler nicht zeitkritisch ...

Danke für Eure Unterstützung.

Hoffentlich hilfts ein wenig anderen Newbies ...!

Grüsse

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.