Forum: Mikrocontroller und Digitale Elektronik Glitch an AVR-Pins verhindern


von Thomas (Gast)


Lesenswert?

Ich steuere einen Baustein mit SPI an, CS ist fest auf Masse. Leider 
messe ich beim aktivieren der SPI-Schnittstelle des AVR kurze 
Spannungspulse an SCL und MOSI.
Wie aktiviere ich die Ausgänge richtig, sodass sie keinen unerwünschten 
Pegel haben?

von Paul (Gast)


Lesenswert?

Ich kenn die AVRs nicht richtig gut, aber bei anderen Controllern setzt 
man erst die Portpins, dann die SFRs und zum Schluß schaltet man die 
Portrictungspins (also auf Ausgang). Das verhindert zumindest bei Serien 
wie dem C167, MSP430, ARM Glitches.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas schrieb:
> Ich steuere einen Baustein mit SPI an, CS ist fest auf Masse.
Das ist schlecht, denn SPI verlässt sich sehr gern auf den SS als 
Synchronisationsinfornation. Was, wenn dein Empfänge einmal einen Takt 
mehr oder weniger sieht?
Dann kommt dein Ganzes Sytem aus dem Takt!

> Leider messe ich beim aktivieren der SPI-Schnittstelle des AVR kurze
> Spannungspulse an SCL und MOSI.
Schaltung?
Code?
Oszi-Bilder?

von Wilhelm F. (Gast)


Lesenswert?

Thomas schrieb:

> Leider
> messe ich beim aktivieren der SPI-Schnittstelle des AVR kurze
> Spannungspulse an SCL und MOSI.

Ohne mal speziell auf die SPI einzugehen:

Wo gibt es da Probleme? Eine gute synchrone Logik hat in der Regel keine 
Glitches. Bzw. sollte keine haben. Woher kommen sie? Oft sind aber 
Inputs z.B. an Logik oder µC auch so gestaltet, daß sie glitch-free 
sind. D.h., ein Pin wird mehrmals gelesen, und aus den logischen Werten 
der Mittelwert gebildet.

von Thomas (Gast)


Lesenswert?

Das Problem tritt auf, wenn der AVR aus dem Reset kommt und ich die Pins 
auf Ausgang schalte. Dann geht der Pin für einen kurzen Moment auf Low, 
obwohl ein externer Pullup dranhängt.
1
DDRB = ( 1 << PB2 ); //Ausgang
2
PORTB |= (1<<PB2); //High

von Paulchen Panther (Gast)


Lesenswert?

Zuerst auf High schalten, dann als Ausgang?

von Dietrich (Gast)


Lesenswert?

wie wäre es, das Port zuerst auf High zu schreiben und dann die Richtung 
auf Ausgang?

von Meehrschwein (Gast)


Lesenswert?

N' Abend,

beim Atmega48 ist es so, dass die Register für die Pins alle mit einer 0 
initialisiert werde. Sie sind kurz nach dem Reset, also bis dein Code 
greift, Inputs.

Wenn der Controller interne Kontakt des Inputs, gegen Masse, deinen 
externen Pullup einfach plattmacht, könnte das die Ursache für dein 
Problem sein ( wie warm wird es in deiner Schaltung denn so?) .
Am einfachsten ist es glaubenich das System erst zu Initialisieren, also 
alle in Initialisierungszeit getätigten Operationen zu verwerfen.

Hoffe es hilft weiter.
Grüße
Meehrschwein

von holger (Gast)


Lesenswert?

>Ich steuere einen Baustein mit SPI an,

Welchen? SPI mit CS fest an GND geht bei einigen Chips
gar nicht. SPI EEPROMS oder Flash starten die internen
Aktionen erst bei steigender Flanke von CS.

Der Beitrag von Lothar dürfte wohl der wichtigste
Hinweis sein weshalb dein SPI Konzept nicht
wirklich funktioniert. Jeder kleine Glitch verhindert
das das SPI auch synchron bleibt.

von Thomas (Gast)


Lesenswert?

Ist ein ADC von TI, im Datenblatt ist explizit erlaubt CS auf GND zu 
hängen wenn kein anderes Gerät am SPI-Bus hängt...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Thomas schrieb:
> Ist ein ADC von TI, im Datenblatt ist explizit erlaubt CS auf GND zu
> hängen wenn kein anderes Gerät am SPI-Bus hängt...
Trotzdem wird der nicht erkennen, wenn ein klitzekleiner Spike auf der 
Taktleitung daherkomt (Schon mal was von EMV und ESD gehört?). Und wenn 
alles passt nimmt der ADC den dann als gültigen Taktimpuls, und gibt 
fürderhin alles um 1 Bit versetzt aus.
Das ist dann echt dumm gelaufen...

SPI funktioniert auf Dauer nur, wenn zwischendurch mal mit SS 
synchronisiert wird. Das ist ganz einfach so. Sieh doch dein eigenes 
Design an: schon vor dem Loslegen geht das bei dir schief, weil der ADC 
schon selektiert ist, bevor der uC richtig loslegt... :-/

> Ist ein ADC von TI, im Datenblatt ist explizit erlaubt CS auf GND zu
> hängen wenn kein anderes Gerät am SPI-Bus hängt...
Du glaubst nicht, was Datenblätter alles erlauben, und was man in der 
Praxis trotzdem nicht machen darf. Ein ganz einfacher Fall sind z.B. 
Eingänge mit hochohmigen Pullups, wo dann steht "may be left open, if 
this function is not used" (wie z.B. der Reset-Eingang bei 
AVR-Controllern). Und dann geh mit so einem internen Pullup mal ins 
EMV-Labor. Gute Nacht, da gehen die Lichter aus und an, das hast du noch 
nicht gesehen... :-o

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.