SPI funktioniert nur mit LA angeschlossen, was ist das?

Gast #4791765
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
Gast #4791777
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 :)
Gast #4791787
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...
Gast #4791804
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
Gast #4791806
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
Gast #4791822
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
Gast #4791823
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
Gast #4791890
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.
Gast #4792365
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren