Forum: Mikrocontroller und Digitale Elektronik Vermeiden von glitches in AVR ASM


von Ralf J. (cosmicos)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
ich hoffe, die programmierenden Väter sind nicht alle mit dem 
Bollerwagen unterwegs ;-)

Ich habe ein kleines Problem mit (vermuteten) Glitches.

Ich schalte PB1 vom tiny2312 in einer Schleife aus und an, um ein 
Taktsignal zu erzeugen.

Ich verwende dafür den out-Befehl:
1
loop:
2
ldi    AKKU, (0<<CLK_PIN)|(1<<DATA_PIN)
3
out    PORT_1638, AKKU
4
[...]
5
ldi    AKKU, (1<<CLK_PIN)
6
out    PORT_1638, AKKU

Die Schleife funktioniert so wie ich das möchte. Nach dem LOW-Setzen der 
Clock-Leitung sehe ich allerdings viel Müll im LA. Sind das Glitches?
Wie kann ich das vermeiden? Wenn ich statt out z.B. sbi und cbi 
verwende, ist es genauso.

Der Screenshot zeigt den Übergang von HIGH nach LOW. Die 18 Peaks kann 
mich mir nicht erklären und halte sie daher für Glitches...

Es sollte zwar nicht stören, da das Clocksignal >400ns sein muss aber 
ich finde es dennoch unschön...

Wäre für einen Tipp dankbar.
LG
Ralf

: Bearbeitet durch User
von Stefan E. (sternst)


Lesenswert?

Ralf J. schrieb:
> Nach dem LOW-Setzen der
> Clock-Leitung sehe ich allerdings viel Müll im LA

Kann es sein, dass PORT_1638 das DDR-Register ist?

von berliner (Gast)


Lesenswert?

Schau dir das Signal mit einem analog-Oszi an. Glitches haben die 
Prozessoren bei Programmausführung nicht, soweit ich weiß (sollten sie 
nicht haben-> Fehlverhalten der Hardware).

Kann es sein, dass der Trigger-Spannungslevel zu klein, oder zu hoch 
ist, so dass auch auf Leitungsreflexionen getriggert wird?

Wie hoch ist die Schaltfrequenz?
Wie lang ist die Leitung, die geschaltet wird?

von Thomas E. (picalic)


Lesenswert?

Ralf J. schrieb:
> und halte sie daher für Glitches

Das sieht eher nach "Ringing" aus, als nach Glitches. Wie lang ist das 
Kabel? Abschluss? Masse-Verbindung? Schaltung allgemein?
Evtl. hilft schon ein Serienwiderstand am Ausgang, um die 
Flankensteilheit zu reduzieren bzw. den niederohmigen Ausgang etwas 
besser an die 100+x Ohm Wellenwiderstand des Kabels anzupassen.

von Ralf J. (cosmicos)


Lesenswert?

Stefan E. schrieb:
> Ralf J. schrieb:
>> Nach dem LOW-Setzen der
>> Clock-Leitung sehe ich allerdings viel Müll im LA
>
> Kann es sein, dass PORT_1638 das DDR-Register ist?

Nein:

.EQU  PORT_1638  =  PORTB
.EQU  PIN_1638  =  PINB
.EQU  DDR_1638  =  DDRB

von Ralf J. (cosmicos)


Lesenswert?

berliner schrieb:
> Schau dir das Signal mit einem analog-Oszi an.

Ich habe leider nur ein DSO...

>
> Kann es sein, dass der Trigger-Spannungslevel zu klein, oder zu hoch
> ist, so dass auch auf Leitungsreflexionen getriggert wird?

Das ist Vcc = 5V

>
> Wie hoch ist die Schaltfrequenz?

Eine Periode hat ungefähr 60us. Ich habe mal Delays eingebaut und damit 
die Peaks reduziert. Bei 50us-Delays sind nur noch 4 Peaks zu sehen.

> Wie lang ist die Leitung, die geschaltet wird?

Im Moment hängt nur der LA dran. Ca. 15cm...

von Klaus 2. (klaus2m5)


Lesenswert?

Möglicherweise schaltest du nur den Pullup-Widerstand ein und aus?

von Ralf J. (cosmicos)


Lesenswert?

Klaus 2. schrieb:
> Möglicherweise schaltest du nur den Pullup-Widerstand ein und aus?

Ähmmm...

Ich hatte tatsächlich eine Verwechselung im Port-Setup. Ich habe die 
Initialisierung auf PORTB und nicht auf DDRB geschickt %-)

Gut... ich teste nun nochmal alles OHNE Fehler...

von Ralf J. (cosmicos)


Lesenswert?

@Klaus 2m5...

Oh Mann, das war's... Delays sind wieder raus und nun ist alles sauber.

Was eine Verwechselung so auslösen kann...

Danke und Gruß
Ralf

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Danke für's Feedback.
Wäre aber um einiges schneller gegangen, wenn der gesamte Code im 
Start-Post gewesen wäre.

Klar ist Das ein sehr banaler Fehler gewesen und kommt natürlich normal 
nie vor - aber gerade in der Routine verstecken sich die meisten banalen 
Fehler.

MfG

von berliner (Gast)


Lesenswert?

Stell bitte den Trigger-Spannungslevel auf 2,5 V. Dann bekommst du 
möglicherweise keine "Glitches".

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.