Port Umschaltung Ein/Ausgang wie schnell geht das?

Gast #746188
Lesenswert?

Hallihallo,

ich habe an einem ATmega 644 einen PIN am PORTC den ich als Ein- und 
Ausgang nutzen möchte. Das ganze Umschalten funktioniert in der 
Simulation ganz gut doch wenn es real auf dem µC läuft habe ich das 
Gefühl das die Umschaltung etwas hinkt.

Nun wollte ich nach dem Umschalten der Datenrichtug etwas warten, doch 
wie lange wartet man da? Ich habe mal 10ms genommen, das klappt doch wie 
weit kann man runter gehen das es immer zuverlässig funktioniert?

Viele Grüße, AVRli...
(Firma: TravelRec.) Persönliche Seite #746219
Lesenswert?

>Nun wollte ich nach dem Umschalten der Datenrichtug etwas warten, doch
>wie lange wartet man da? Ich habe mal 10ms genommen, das klappt doch wie
>weit kann man runter gehen das es immer zuverlässig funktioniert?

Das kommt darauf an, was für Bausteine Du am anderen Ende dran hast und 
wie schnell diese schalten. Eine Portrichtungsumkehr am AVR dauert in 
ASM 2-4 Taktzyklen (je nach voherigem und zu erreichendem Zustand). Das 
sind 125 bis 250 Nanosekunden bei 16 Mhz.
Persönliche Seite #746332
Lesenswert?

Will nicht meckern, aber:
1
out    r16,ddrd

müsste
1
out    ddrd,r16
lauten.

Aber ich denke @ Travel Rec. (travelrec) meint irgendwie sowas:
1
in     r16,ddrd ;1 Takt
2
ori    r16,0x01 ;1 Takt
3
out    ddrd,r16 ;1 Takt

So komme ich auf 3 Takte, wenn jetzt noch die Pullups umgeschaltet 
werden müssen wirds mindestens einer mehr (Wenn der Status aller Pullups 
auch dem DDR  register entspricht)

EDIT:

Achja nochwas: Beim Umschalten ist der pin nach dem Befehl auch wirklich 
schon input (also am ende vom OUT), beim Ausgeben auf einen port, steht 
das Signal erst einen takt später auch am Pin zur verfügung (irgend eine 
Synchronisation ist dafür verantwortlich, habs nich mehr soo genau im 
kopf)
#746499
Lesenswert?

@ Hauke Radtki (lafkaschar)

>müsste
>out    ddrd,r16
>lauten.

Ja ;-)

>Aber ich denke @ Travel Rec. (travelrec) meint irgendwie sowas:

>in     r16,ddrd ;1 Takt
>ori    r16,0x01 ;1 Takt
>out    ddrd,r16 ;1 Takt

>So komme ich auf 3 Takte, wenn jetzt noch die Pullups umgeschaltet

Sowas macht ein intelligenter Programmierer/Compiler aber mit
1
sbi  ddrd,1   ; 2 Takte

>werden müssen wirds mindestens einer mehr (Wenn der Status aller Pullups
>auch dem DDR  register entspricht)

Warum? Dein Sequenz oben ist nur nötig, wenn mehr als ein Bit sich 
ändern soll.

>Achja nochwas: Beim Umschalten ist der pin nach dem Befehl auch wirklich
>schon input (also am ende vom OUT), beim Ausgeben auf einen port, steht
>das Signal erst einen takt später auch am Pin zur verfügung (irgend eine
>Synchronisation ist dafür verantwortlich, habs nich mehr soo genau im
>kopf)

Nicht ganz. Auch ein out führt sofort zum Ändern des Ausgangspegels. Was 
du meinst ist

http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen#Stolperfalle_bei_Matrixtastaturen_etc.

MFG
Falk
Gast #747176
Lesenswert?

Hallo,

dank Euch für Eure Antworten.
Ich möchte an einem LCD Display das BUSY Flag abfragen und dafür muß man 
einen Ausgang als Eingang umschalten, abfragen und dann wieder auf 
Ausgang setzen.

Sollte also alles schnell genug gehen OHNE das man warten muß.
Muß ich mir meinen Quelltext wohl nochmal genauer ansehen warum es nicht 
will...

MfG AVRli...
Gast #747558
Lesenswert?

Hi!

Danke für die Tip's, Timing Daten waren es.
Die Pegel müssen eine bestimmte Zeit anliegen und dann kann man das 
ENABLE triggern und anschließend auch das BUSY super abfragen.

Mit anderen Worten, die Ports vom Display überholte der ATMEL allemale. 
:-D

Rennt nun ganz ausgezeichnet. dance

Problem ist gelöst, ich danke Euch!

Gruß AVRli...
#747624
Lesenswert?

@ AVRli (Gast)

>Danke für die Tip's, Timing Daten waren es.
>Die Pegel müssen eine bestimmte Zeit anliegen und dann kann man das
>ENABLE triggern und anschließend auch das BUSY super abfragen.

Ein Blink ins Datenblatt hätte dir das sofort sagen können.

MfG
Falk

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