Forum: Mikrocontroller und Digitale Elektronik atmega, avr-gcc: Umschaltzeiten output<>input


von G T M. (gt_m)


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

: Bearbeitet durch User
von Falk B. (falk)


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.

von Georg G. (df2au)


Lesenswert?

Im Datenblatt des ATMega1284 (das vom ATMega88 hab ich nicht zur 
Hand,wird aber ähnlich sein) ist die Port Struktur als Schaltbild drin. 
Und die zeigt eine 2 stufige Synchronisierschaltung mit dem IO-Takt.

von G T M. (gt_m)


Lesenswert?

Falk Brunner schrieb:
> 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"

Sogar mit Bildchen. Vielen Dank! :)

von Falk B. (falk)


Lesenswert?


von Johann L. (gjlayde) Benutzerseite


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.