atmega, avr-gcc: Umschaltzeiten output<>input

OP #3437724
Lesenswert?
• ▲
▼
Guten Morgen! :)

Ich verwende hier an einem atmega88 Pins doppelt sowohl zur 
Tasterabfrage als auch für Kontrollleuchten.
Praktisch sieht das so aus, dass ich alle ~10ms den Port von Ausgang auf 
Eingang umkonfiguriere, einen ggf. vorliegenden Tastendruck auslese, 
entprelle usw. und danach den Port wieder auf Ausgang schalte, um die 
Statusleds wiederherzustellen.

Soweit alles gut, nur macht das Timing Output->Input Probleme, sodass 
der letzte Output-Status teilweise (wenig überraschend) direkt als 
Tastendruck erkannt wird.

Das Ganze ist jetzt "provisorisch" so gelöst (bei 8MHz internem RC):
1
  DDRD &= ~(1 << .....);
2
  PORTD |= (1 << ......);
3
  asm volatile("nop");
4
  asm volatile("nop");
5
  asm volatile("nop");

Ist euch zufällig bekannt, wie lange genau die Umschaltzeit beträgt? Im 
Datenblatt hab ich entweder nichts entsprechendes gefunden, oder 
jedesmal überlesen.

Schonmal Danke für die Hilfe!


Tom
#3437748
Lesenswert?
• ▲
▼
@ G T M. (gt_m)

>der letzte Output-Status teilweise (wenig überraschend) direkt als
>Tastendruck erkannt wird.

Das ist ein normaler Effekt beim AVR und liegt am Pipelining.

>Das Ganze ist jetzt "provisorisch" so gelöst (bei 8MHz internem RC):

>  DDRD &= ~(1 << .....);
>  PORTD |= (1 << ......);
>  asm volatile("nop");
>  asm volatile("nop");
>  asm volatile("nop");

>Ist euch zufällig bekannt, wie lange genau die Umschaltzeit beträgt?

1 Takt. Aber das Einlesen des geänderten Eingangssignal kann erst nach 
einer Pause von einem zusätzlichen Takt erfolgen. Siehe Datenblatt 
"Reading the pin value"

>Datenblatt hab ich entweder nichts entsprechendes gefunden, oder
>jedesmal überlesen.

Letzeres.
Persönliche Seite #3437872
Lesenswert?
• ▲
▼
Ich würd eher drauf tippen, dass das mit der Trägheit der 
angecshlossenen Schaltung zu tun hat und den vorhandenen parasitären 
Induktivitäten und Kapazitäten.

Es muß also eine kurze Zeit gewartet werden, bis der Eingang gelesen 
werden kann. Hinzu kommt, dass das Eingangssignal u.U. hochohmig ist, 
z.B. ein nicht-gedrückter Taster, der per PullUp auf High gezogen wird.

Antwort schreiben

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.

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.