atmega, avr-gcc: Umschaltzeiten output<>input

#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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren