mikrocontroller.net

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


Autor: Ralf J. (cosmicos)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
loop:
ldi    AKKU, (0<<CLK_PIN)|(1<<DATA_PIN)
out    PORT_1638, AKKU
[...]
ldi    AKKU, (1<<CLK_PIN)
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
Autor: Stefan E. (sternst)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: berliner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Thomas E. (picalic)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ralf J. (cosmicos)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf J. (cosmicos)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Klaus 2. (klaus2m5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Möglicherweise schaltest du nur den Pullup-Widerstand ein und aus?

Autor: Ralf J. (cosmicos)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Ralf J. (cosmicos)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Patrick J. (ho-bit-hun-ter)
Datum:

Bewertung
2 lesenswert
nicht 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

Autor: berliner (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.