mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SI4713 über SPI mit einem Atmega


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Sebastian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Tuxpilot (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Name H. (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Rudolph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)

Autor: Andreas M. (amesser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann nicht erkennen wo Ihr das #SEN Signal korrekt bedient wie im 
Manual gefordert.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Name H. (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und das
 si4713_receive_resp() ?

(sorry habe das zip nicht angeschaut).

Autor: Rudolph (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas M. (amesser)
Datum:

Bewertung
0 lesenswert
nicht 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

: Bearbeitet durch User
Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas M. (amesser)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.