Forum: Mikrocontroller und Digitale Elektronik Wie lange braucht ein Pin zum schalten von low->high


von Der Unwissende (Gast)


Lesenswert?

Hallo, ich habe gestern eine Schaltung in Betrieb genommen und mich 
etwas gewundert. Eingesetzt werden LV Schieberegister und AT90USB.

Steuere das Schieberegister über Pinwackeln an PORTC CLK und PORTB 
Datenleitung glaube ich, auf alle Fälle unterschiedliche.

Setze bzw. rücksetze nach Auswertung ob high oder low erfolgen muss 
direkt mit sbi/cbi die Datenleitung mittels inline assembler und direkt 
darauf die CLK.

Jetzt kommen allerdings beide Signale sehr gleichzeitig rauf und CLK ist 
steiler, so das die Datenleitung zum Erfassungspunkt immer nicht stimmt.

Mir ist eigentlich aus dem Datenblatt nur bekannt das irgendwo steht: 
Wenn man einen PIN schaltet dieser Wert evtl. erst 2 CLKs glaube ich war 
es richtig als Wert auf dem PORT eingelesen wird. Muss ich jetzt mit 
diesen 2 Taktzyklen als Verzögerung rechnen auch für das umschalten? 
Mehr Infos habe ich jetzt nicht auf den ersten Blick entdecken können.

Leider hatte ich gestern nicht die möglichkeit zu Debuggen, sonst hätte 
ich einmal geschaut wie das im Disassembling wirklich aussieht.

von Floh (Gast)


Lesenswert?

Da die AVRs recht potente Pintreiber (+-40mA max) haben, sollten die 
Flanke wie im Datenblatt angegeben einzuhalten sein. Daher hängt es eher 
von der Beschaltung ab oder von deinem Code, daher:
Schaltplan?
Quellcode?
Oszi-Bild mit beiden Signalen?

von (prx) A. K. (prx)


Lesenswert?

Der Unwissende schrieb:
> Setze bzw. rücksetze nach Auswertung ob high oder low erfolgen muss
> direkt mit sbi/cbi die Datenleitung mittels inline assembler und direkt
> darauf die CLK.
>
> Jetzt kommen allerdings beide Signale sehr gleichzeitig rauf und CLK ist
> steiler, so das die Datenleitung zum Erfassungspunkt immer nicht stimmt.

Aufeinanderfolgenden sbi/sbi sollten auf den Pins nicht gleichzeitig 
aufkreuzen.

von Peter D. (peda)


Lesenswert?

Der Unwissende schrieb:
> mit sbi/cbi die Datenleitung mittels inline assembler

Was für ein komischer Compiler ist das denn?

Der AVR-GCC braucht kein inline Assembler dazu.
Man schreibt das entweder klassisch als |= bzw. &= oder als 
vordefiniertes Bitfeld-Macro (sbit.h).

Der Unwissende schrieb:
> Jetzt kommen allerdings beide Signale sehr gleichzeitig

Wie soll das gehen?
SBI/CBI können immer nur einen Pin ändern.
Ein Signal kann also erst 2 CPU-Zyklen später kommen, als das andere.


Peter

von Falk B. (falk)


Lesenswert?

@  Der Unwissende (Gast)

>Leider hatte ich gestern nicht die möglichkeit zu Debuggen, sonst hätte
>ich einmal geschaut wie das im Disassembling wirklich aussieht.

Poste Code als Anhang.

von Michael (Gast)


Lesenswert?

Der Unwissende schrieb:
> Jetzt kommen allerdings beide Signale sehr gleichzeitig rauf

Du meinst wahrscheinlich "kurz hintereinander" und hast dich nur in der 
Einheit vertan, oder?

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.