Hallo wir arbeiten an einem UKW Radiosender. Das ganze ist ein Schulprojekt. Wir haben ein SI4713 Modul von Adafruit gekauft und wollen es über SPI ansteuern, leider funktioniet es nicht ganz. Die Initialisierung passt und wir bekommen auch das Statusbyte zurückgesendet, leider ist das auch alles. Wir bekommen weder eine andere Antwort noch wird etwas ausgesendet(Radio). Im Anhang der Code. Wir sind echt ratlos, da wir alles machen was im Datenblatt beschrieben ist. Ich hoffe jemand kann einen Fehler erkennen. Mfg Sebastian.
Ich denke, weitere Informationen wären recht nützlich. Z. B.: Welcher ATmega, welcher Schaltplan (inkl. Stromversorgung), was steht in si4713.h, was steht in spi_init(), wo ist spi_init(), woran erkennt ihr, dass ihr das Statusbyte bekommt? Es scheint in eurem Code nichts zu geben, was eine Rückmeldung erzeugt, wie ein UART, welches Debugging-Meldungen ausgibt.
Die Debug Konzepte scheinen noch nicht so fortgeschritten zu sein ... ist da irgend etwas in dieser Richtung geplant ? Naja, weil - tut nicht - ist etwas wenig.
Wo ist denn der Part der den SI4713 überhaupt erst in den SPI-Modus bringt? Vollständig darf das schon sein wenn Hilfe erwartet wird, in dem Code-Schnipsel werden ja nicht mal die Pins für den Chip initialisiert.
Hier der komplette Code. Tuxpilot schrieb: > woran erkennt ihr, > dass ihr das Statusbyte bekommt? mit dem Logic Analyzer (Analog Discovery) überprüft. Tuxpilot schrieb: > Welcher ATmega, welcher Schaltplan (inkl. Stromversorgung), Atmega16. Momentan wird ein Arduinoähnliches Board von unserer Schule verwendet. Mit Kabeln wird es mit dem Modul von Adafruit verbunden. Es wird über USB mit Strom versorgt. (Schaltplan des Boards mit Atmega im Anhang) Rudolph schrieb: > Wo ist denn der Part der den SI4713 überhaupt erst in den SPI-Modus > bringt? Reicht es nicht wenn man den Pin GP02 auf HIGH legt? (siehe Anhang)
Ich kann nicht erkennen wo Ihr das #SEN Signal korrekt bedient wie im Manual gefordert.
Andreas M. schrieb: > Ich kann nicht erkennen wo Ihr das #SEN Signal korrekt bedient wie im > Manual gefordert. Mit ENABLE_SI4713; wird SEN ausgewählt. wir haben zuerst nach jedem Command+Argumente-Block den IC ausgewählt und abgewählt. (so wie es im Datenblatt steht) Dies funktionierte jedoch nicht (Keine Antwort vom IC)
und das si4713_receive_resp() ? (sorry habe das zip nicht angeschaut).
Sebastian schrieb: >> Wo ist denn der Part der den SI4713 überhaupt erst in den SPI-Modus >> bringt? > > Reicht es nicht wenn man den Pin GP02 auf HIGH legt? (siehe Anhang) Vielleicht. GP02 hat einen internen Pulldown, zumindest steht das im Schaltplan von Adafruit als Hinweis. /RST würde ich aber vielleicht auch bedienen und nicht einfach auf 5V klemmen. Apropos Schaltplan, da fällt auf, dass Adafruit da so einen hässlichen FET Level-Shifter verbaut hat auf den I2C Leitungen. Und zwar recht hochohmig. Ihr habt den SPI auf 750kHz eingestellt, das könnte etwas viel sein.
Sebastian schrieb: > Andreas M. schrieb: >> Ich kann nicht erkennen wo Ihr das #SEN Signal korrekt bedient wie im >> Manual gefordert. > > Mit ENABLE_SI4713; wird SEN ausgewählt. > > wir haben zuerst nach jedem Command+Argumente-Block den IC ausgewählt > und abgewählt. (so wie es im Datenblatt steht) Dies funktionierte jedoch > nicht (Keine Antwort vom IC) Ihr habt dann hoffentlich bevor ihr die "Respons" auslest den Chip auch wieder angewählt? Sequenz wäre meiner Meinung wie folgt: # command senden 1) #sen auf Low 2) control byte + command byte + 7 byte args 3) #sen auf High # status lesen 4) #sen auf Low 5) control byte + 1 dummy byte (read) 6) #sen auf high # 4 -6 solange wiederholen bis ready 7) #sen auf low 8) # control byte + 16 dummy bytes (read) 9) #sen auf high
:
Bearbeitet durch User
Wir haben jetzt das SEN jedesmal auf Low und wieder auf High gesetzt, wie du es vorgeschlagen hast. Das si4713 schickt immernoch jedesmal als Antwort 0x80 und bei den Response-Bytes schickt es nur 0x00 zurück.
Lukas schrieb: > Wir haben jetzt das SEN jedesmal auf Low und wieder auf High gesetzt, > wie du es vorgeschlagen hast. Das si4713 schickt immernoch jedesmal als > Antwort 0x80 und bei den Response-Bytes schickt es nur 0x00 zurück. Ok nur um noch mal sicher zu sein: zum lesen des Status Bytes macht Ihr folgendes: 1) #sen auf low 2) Sendes des Control Bytes "0xA0" an den Si 3) Senden eines Dummy bytes an den SI um die Status Antwort zu bekommen 4) #sen auf high Danach dann zum auslesen der response: 5) #sen auf low 6) Sendes des Control Bytes "0xE0" an den Si 7) Senden von 16 dummy bytes an den SI um die response zu bekommen 8) #sen auf high In eurem code oben kann ich nur sehen, dass Ihr 1-4 macht, nie jedoch 5-8. Und die Antwort 0x80 auf 1-4 wäre ja nicht so falsch. Denn Status "0x80" bedeutet ja das der Si Bereit zum Empfang des nächsten Kommandos ist und kein Fehler beim letzten Kommando aufgetreten ist. Bei welchem Kommando erwartet Ihr denn Response Daten?
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.