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
Sind die GNDs in der Schaltung verbunden?
Ja, am Netzteil, dann haben beide Atmegas je einen 7805.
Irgend ein Ein-/Ausgang nicht richtig initialisiert? Pullup R probiert? Zu lange Leitungen?
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...
Ich würde erst einmal eine kürzere SPI Verbindung inkl. GND probieren.
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.