Forum: Mikrocontroller und Digitale Elektronik SPI funktioniert nur mit LA angeschlossen, was ist das?


von chrys (Gast)


Lesenswert?

Guten Abend Zusammen
Ich bin gerade ein wenig am verzweifeln. Ich versuche mit 2 Atmega64 
übers SPI zu kommunizieren. Das ganze hat mal funktioniert und dann 
wieder nicht... Jetzt scheine ich zumindest herausgefunden zu haben, 
wieso es manchmal funktioniert. Und zwar wenn ich beim Slavedevice an 
mindestens zwei von SS, SCK oder MOSI den LogicAnalyzer anhänge, der 
Groundclip vom LA muss auch angeschlossen sein damits funktioniert. Der 
LA muss nicht laufen, aber angesteckt sein...

Das SPI betreibe ich in Mode 1 mit 1Mbit/s. Die Atmegas haben beide 
einen 16MHz quarz und die fuses sind dementsprechend gesetzt.

Ich kann mir grad nicht erklären woran das liegt, da die SPI 
Schnittstelle bis jetzt immer sauber lief, nur war früher der Master ein 
Atmega32 und nicht ein 64er...

Bin dankbar für jeden Hinweis.

Gruess Chrys

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Sind die GNDs in der Schaltung verbunden?

von chrys (Gast)


Lesenswert?

Ja, am Netzteil, dann haben beide Atmegas je einen 7805.

von hp-freund (Gast)


Lesenswert?

Irgend ein Ein-/Ausgang nicht richtig initialisiert?
Pullup R probiert?
Zu lange Leitungen?

von Klaus (Gast)


Lesenswert?

Einer von beiden arbeitet mit der falschen Clockflanke. Der LA bzw. 
seine Eingangskapazität verzögert das Signal soweit, daß es gerade 
passt.

MfG Klaus

von chrys (Gast)


Lesenswert?

Klaus schrieb:
> Einer von beiden arbeitet mit der falschen Clockflanke. Der LA bzw.
> seine Eingangskapazität verzögert das Signal soweit, daß es gerade
> passt.

Hmm, sollte eigentlich nicht, dies sind die Einstellungen...

//configuring SPI Slave to SPI Mode 1
DDRB |= (1<<3);  //MISO as OUTPUT (MOSI,SCK,SS are automatically set as 
inputs)
SPCR |= ((1<<SPIE) | (1<<CPHA) | (1<<SPE));  //interrupt enable | clock 
phase = 1 | Enable SPI

//configuring SPI Master to SPI Mode 1
DDRB |= (1<<1); //output
DDRB |= (1<<2); //output
SPCR |=  ((1<<SPE) | (1<<MSTR) | (1<<SPR0) | (1<<CPHA));  // SPI enable, 
Master, f/16

hp-freund schrieb:
> Irgend ein Ein-/Ausgang nicht richtig initialisiert?
Aber dann sollte ja gar nichts mehr gehen, oder?
> Pullup R probiert?
Nein, soll ich die internen pullups für MOSI,SCK und SS setzen bzw. wird 
das nicht automatisch gemacht?
> Zu lange Leitungen?
ca. 50cm

Vielen Dank für das Nachdenken :)

von chrys (Gast)


Lesenswert?

chrys schrieb:
>> Pullup R probiert?
> Nein, soll ich die internen pullups für MOSI,SCK und SS setzen bzw. wird
> das nicht automatisch gemacht?

Habe die Pullups bei den Inputs mal gesetzt, dann ging gar nichts mehr, 
mit und ohne LA. Ohne pullups gehts nachwievor nur mit LA angesteckt...

von hp-freund (Gast)


Lesenswert?

Ich würde erst einmal eine kürzere SPI Verbindung inkl. GND probieren.

von chrys (Gast)


Lesenswert?

hp-freund schrieb:
> Ich würde erst einmal eine kürzere SPI Verbindung inkl. GND probieren.

Kabel getauscht und GND's noch direkt verbunden, hat leider alles nichts 
geholfen...

von Klaus (Gast)


Lesenswert?

hp-freund schrieb:
> Ich würde erst einmal eine kürzere SPI Verbindung inkl. GND probieren.

Ein original IBM-AT Mainboard hat die oben genannten 50cm in der 
Diagonale. Da liefen Signale mit wesentlich mehr als 1 MHz lang. Das 
kann doch nicht das wirkliche Problem sein. Da wird eine Setup oder 
Hold-Zeit nicht eingehalten, typisch beim samplen mit der falschen 
Clockflanke.

chrys schrieb:
> Ich kann mir grad nicht erklären woran das liegt, da die SPI
> Schnittstelle bis jetzt immer sauber lief, nur war früher der Master ein
> Atmega32 und nicht ein 64er...

War auch schon falsch. Neuer, anderer Chip, intern schneller oder 
langsamer, da fiel das nicht auf. Das Timing ist nie wirklich 
verifiziert worden, es ging ja.

Das ist immer noch meine Vermutung

MfG Klaus

von chrys (Gast)


Lesenswert?

Klaus schrieb:
> Das Timing ist nie wirklich
> verifiziert worden, es ging ja.

Wie soll ich das den machen?
Die Clockpolarity ist sicher gleich eingestellt CPHA = 1, was kann ich 
denn sonst noch vebockt haben? Oder meinst du, dass Hardwaremässig etwas 
nicht stimmt?

Gruss

von chrys (Gast)


Lesenswert?

So, endlich...
Nach gründlicherer Kontrolle habe ich eine defekte duko gefunden.
Diese hat verhindert, dass das SS Signal beim Slave ankommt. Der LA hat 
SS dann immer auf low gezogen und dann hats funktioniert. Wäre mir wohl 
aufgefallen wenn mehrere Slaves angehängt worden wären oder ich die 
Messsignale vom LA anständig angeschaut hätte.
Vielen Dank trotzdem!!

Gruss Chrys

von Klaus (Gast)


Lesenswert?

chrys schrieb:
> Wie soll ich das den machen?

Ein Timingdiagramm aufmalen, darin die Setup und Holdzeiten laut 
Datenblatt einzeichnen und dann das Ganze verifizieren. Und wenn der LA 
nicht schnell genug ist den DSO nehmen oder einen Loop programmieren für 
eine analoges Scope.

MfG Klaus

von Rudolph (Gast)


Lesenswert?

chrys schrieb:
> Der LA hat SS dann immer auf low gezogen

Dein LA ist auch defekt. :-)

von Hurra (Gast)


Lesenswert?

Rudolph schrieb:
> chrys schrieb:
>> Der LA hat SS dann immer auf low gezogen
>
> Dein LA ist auch defekt. :-)

Quark.
Jedes Messgerät hat einen Leckstrom, hier gegen GND.
Selbst wenn das 100MOHm sind, ist das ausreichend, um CS auf einen 
definierten Pegel = Low = select zu ziehen.

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


Lesenswert?

chrys schrieb:
> Das ganze hat mal funktioniert und dann wieder nicht...
Im Fehlerfall: was hast du dann bekommen und was hättest du stattdessen 
erwartet?
Hast du dir die Signale auch mal mit einem Oszilloskop angeschaut? Wie 
sehen die aus? Überschwinger auf dem Takt?

von chrys (Gast)


Lesenswert?

Hurra schrieb:
> Rudolph schrieb:
>> chrys schrieb:
>>> Der LA hat SS dann immer auf low gezogen
>>
>> Dein LA ist auch defekt. :-)
>
> Quark.
> Jedes Messgerät hat einen Leckstrom, hier gegen GND.
> Selbst wenn das 100MOHm sind, ist das ausreichend, um CS auf einen
> definierten Pegel = Low = select zu ziehen.

Deswegen ging ja auch nichts mehr als ich die pullups aktiviert habe...

Lothar M. schrieb:
> chrys schrieb:
>> Das ganze hat mal funktioniert und dann wieder nicht...
> Im Fehlerfall: was hast du dann bekommen und was hättest du stattdessen
> erwartet?
> Hast du dir die Signale auch mal mit einem Oszilloskop angeschaut? Wie
> sehen die aus? Überschwinger auf dem Takt?

Im Fehlerfall war wohl SS high und alles andere hat gepasst, nur wenn 
ich gemessen habe hats ja funktioniert, also keine Ahnung :)
Nein mit dem Oszi habe ich nichts gecheckt aber jetzt tut ja wieder 
alles zur besten Zufriedenheit!!
Vielen Dank ans Forum fürs Mitdenken!!
Gruss Chrys

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


Lesenswert?

chrys schrieb:
> Nein mit dem Oszi habe ich nichts gecheckt
Das mache ich an solchen Bussen immer. Zuerst. Denn wenn schon im 
analogen Bereich die Signalqualität nicht passt, dann lohnt sich das 
Weiterarbeiten nicht...

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.