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
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
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 :)
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...
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...
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
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
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
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
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.
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?
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
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...