SI4713 über SPI mit einem Atmega

Gast #5421809
Lesenswert?

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.
Angehängte Dateien:
Gast #5421832
Lesenswert?

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.
Gast #5422048
Lesenswert?

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.
Gast #5422078
Lesenswert?

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)
Angehängte Dateien:
Gast #5422146
Lesenswert?

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)
Gast #5422203
Lesenswert?

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.
#5422291
Lesenswert?

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
Gast #5423483
Lesenswert?

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.
#5423722
Lesenswert?

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?

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