Hi,
wie weit sind denn die beiden Chips auseinander? Ich hatte mit I2C und
der seriellen Komu schon mal er hebliche Probleme damit. Und:
Hast du die Chiprate in den Fuses umgestell? Damit hatte ich auch schon
mal Probleme.
Hallo!
Ich habe Schwierigkeiten bei der Kommunikation zweier AVR's über SPI. Folgenden Code verwende ich für den Master:
Und folgenden Code für den Empfang:Code:$regfile = "m8def.dat" $crystal = 16000000 Config Portb.5 = Output Config Portb.4 = Input Config Portb.3 = Output Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 64 , Noss = 1 Spiinit Dim B As Byte B = 80 Do Spiout B , 1 Wait 2 Loop End
Leider funktioniert rein gar nichts. Es scheint, als wird vom Master gar nichts gesendet. Der Slave hingegen scheint zu funktionieren, d.h. beim flashen des Codes für den Master wird der Interrupt des Slaves ordnungsgemäß ausgeführt.Code:$regfile = "m8def.dat" $crystal = 18432000 Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = No , Polarity = High , Phase = 0 , Clockrate = 64 , Noss = 1 Spiinit 'Enable Spi On Spi Spi_isr 'Interrupt's global aktivieren Enable Interrupts Config Portd = Output Dim B As Byte , Status As Byte Status = 0 Do If Status = 1 Then Portd.5 = 1 Waitms 500 Portd.5 = 0 Status = 0 End If Loop End Spi_isr: Spiin B , 1 Status = 1 Return
Woran könnte das liegen?
Hi,
wie weit sind denn die beiden Chips auseinander? Ich hatte mit I2C und
der seriellen Komu schon mal er hebliche Probleme damit. Und:
Hast du die Chiprate in den Fuses umgestell? Damit hatte ich auch schon
mal Probleme.
Grüße Furtion
Hi,
die Fuses sind entsprechend eingestellt, aber könnte es vielleicht Probleme machen, dass ein AVR mit 16MHz und der andere mit 18,432MHz läuft? Die Controller sind vielleicht 10cm voneinander getrennt - also keine Entfernung!
Jemand noch eine Idee?
Kannst du mal einen Schaltplan posten? Evtl. stimmt ja da etwas nicht.
Hi,
ich würde eher auf das mit dem Quarz tippen, wenn es für dich kein aufwand
ist würde ich einfach mal 2 16Mhz Quarze nehmen.
Grüße Furtion
Hi,
Schaltplan habe ich gerade nicht da, aber da wäre auch nicht viel zu sehen. Es ist eine normale Standard-Beschaltung auf einem Testboard.
Ich könnte auf die interne 8MHz Quarzfrequenz umstellen und dann noch einmal testen, ein Versuch wäre es vielleicht wert.
Vorerst danke für die Antworten!
Manchmal kommt es halt auf Kleinigkeiten im Schaltplan an. Wie hast du denn die SPIs der AVRs miteinander verbunden? MOSI des einen an MOSI des anderen?
ja, die Leitungen sind eins zu eins miteinander verbunden. Wenn ich es richtig verstanden habe, wird der MOSI Pin beim Master als Ausgang (Master Out) und beim Slave als Eingang (Slave In) geschaltet. Demnach sollte es funktionieren. Merkwürdig ist ja, dass der Slave den Interrupt auslöst, wenn ich den Master über ISP programmiere, sonst aber nicht. Deshalb liegt die Vermutung nahe, dass der Master gar nichts sendet.
Wann wird denn überhaupt der Interrupt ausgelöst? Wenn ein Byte komplett empfangen ist, oder wenn sich der Zustand der Clock-Leitung ändert?
Lesezeichen