www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bascom: SPI & String


Autor: tec (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,


ich will mit einem Mega 8 eine PLL mit SPI Interface Programmieren. Dazu 
muss ich nacheinander
vier 24Bit Lateches über die SPI Schnittstelle laden.
Die SPI-Schnittstelle konnte ich soweit zum Laufen bringen. Es tritt 
jedoch das Problem
auf, dass scheinbar nur ein Bit der 24Bit Folge gesendet wird.

Hier mein Testcode:

...

Dim S As String * 24
s="101010101010101010101010"
spiout s , 24

...

Ich habe den Inhalt von s auch auf einem LCD ausgegeben, der String 
müsste also korrekt sein.

Kann mir jemand helfen?

Gruß Malte

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das SPI ist byte orientiert.
Dein String braucht also nur 3 (in Worten "drei") Bytes lang sein.

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mit BasCom nichts am Hut, aber SPI sendet Bytes, keine Bits.
Ein String mit Nullen und Einsen ist eine ASCII-Darstellung von Text,
24Byte sind 24*8 Bit, also 192 Bit.
Eine 1 als ASCII-Interpretation ist 0b00110001, welches Bit soll SPI da 
also senden?
Benutzt Du Hard- oder Software-SPI?
Stimmt der SPI-Mode, den der PLL-Chip benutzt, mit dem des Mega8 
überein?

Fragen über Fragen...

PS: ich schaue bei solchen Fragen ganz gern mal ins BasCom-Handbuch, 
auch wenn ich es nicht benutze. Ich habe selten ein so unsysthematisches 
und unvollständiges Handbuch gesehen, wie das von BasCom.

Gruß aus Berlin
Michael

Autor: tec (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank für die Antworten!

Ich benutze die Soft SPI Funktion von Bascom.
Ich habe mein Programm jetzt umgeändert und sende nacheinander drei 
Bytes.  Nun scheint die Übertragung zu funktionieren. Leider lockt die 
PLL noch nicht.
Ich muss nun wieder checken, ob ich die richtige Bitfolge aus dem 
Datenblatt gewählt habe, denn
die Einstellmöglichkeiten sind sehr umfangreich.

Weiterhin muss ich noch abklären wie die Bits mit der SPIOUT Funktion 
herausgeklockt werden.
Laut Datenblatt muss ich mit dem MSB des 24Bit Lateches anfangen.
(PLL: adf4112)


Gruß Malte

Autor: Sebastian Heyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du musst den string erst umwandeln, in ein array von bytes

Autor: tec (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal,

ich habe leider keinen Logic Analyzer o.Ä. da.
Ich bin mir jedoch nicht sicher wie ein Byte auf den Bus übertragen 
wird.

Momentan lade ich ich die benötigten Bits für das Latch der PLL in drei 
Bytes:

Dim A(1) as Byte
Dim B(1) as Byte
Dim C(1) as Byte
A(1) = &b10100001
...
spiout A(1),1
...

Soweit ich beurteilen kann wird zuerst das höchstwertige Bit auf den Bus 
gelegt.

Kann mir das jemand bestätigen?

Gruß Malte

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

woher sollen wir das wissen???

Sie werden so rausgeschoben, wie Du es mit CONFIGSPI festgelegt hast.

BasCom-Handbuch Seite 353.

Wie Hardware-SPI funktioniert steht ab Seite 113 des BasCom-Handbuchs 
und im Datenblatt des Mega8.

Fragen ist offenbar merklich einfacher, als lesen...

Gruß aus Berlin
Michael

Autor: tec (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich wundere mich immer wieder über den Umgangston. Es gibt nicht immer 
nur
Profis, sondern auch Anfgänger.

Un wenn die BASCOM Hilfe richtig liest wird man feststellen, dass man im 
Softmode nicht einstellen kann ob zuerst das MSB oder das LSB 
herausgeklockt wird. Diese Einstellung funktioniert nur
im Hardware-Mode.

Ich suche leider schon den ganzen Tag warum die PLL nicht lockt. Gibt es 
jemanden der sich mit dem Baustein auskennt? Die Probleme mit dem SPI 
Interface müssten gelöst sein. Jetzt muss es an
den Latch-Einstellungen liegen.

Gruß Malte

Autor: Michael U. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Deine erste Freagestellung hinterlässt nunmal den Eindruck, als ob Du 
Dich garnicht erst mit Funktion und Ablauf von SPI und BasCom 
auseinandergesetzt hast...

Im Datenblatt der PLL steht nichts von SPI (wenn ich es auf die Schnelle 
nicht übersehen habe), nur von seriellem Interface.

Die PLL übernimmt laut Timing-Diagramm mit der steigenden Flange von 
Clock.

Solche ICs takte ich normalerweise lieber zu Fuß, bevor ich ewig damit 
zubringe, einen evtl. passenden SPI-Mode zu finden.

In Assembler wäre es mit wenigen Zeilen erschlage, wie es in BasCom mit 
Bit-Schiebereien aussieht, weiß ich nicht.
;***************************************************************************
;  Sendet 32 Bit aus PLL_DATA_0...PLL_DATA_3 an die PLL
;
;  Scratch-Reg: ZH, ZL, YH, YL
;***************************************************************************

send_pll_daten:
    lds     PLL_DATA_3,PLL_CTRL
    lds     PLL_DATA_2,PLL_REF
    lds     PLL_DATA_1,PLL_DIV_H
    lds     PLL_DATA_0,PLL_DIV_L

    ldi     TEMP_A,32                         ; Anzahl der Bits

    sbi     TUNER_OUT,TUNER_CE                ; auf H zum Schreiben

    ldi     TEMP_B,(CYCLES_PER_US*15)/2

send_pll_daten_wait:
    dec     TEMP_B
    brne    send_pll_daten_wait

send_pll_daten_loop:
    ror     PLL_DATA_3
    ror     PLL_DATA_2
    ror     PLL_DATA_1
    ror     PLL_DATA_0

    brcs    send_pll_daten_h
    cbi     TUNER_OUT,TUNER_DA                ; 0 raus
    rjmp    send_pll_daten_clock

send_pll_daten_h:
    sbi     TUNER_OUT,TUNER_DA                ; 1 raus

send_pll_daten_clock:
    cbi     TUNER_OUT,TUNER_CK                ; Clock H
    nop
    sbi     TUNER_OUT,TUNER_CK                ; Clock L

    dec     TEMP_A
    brne    send_pll_daten_loop               ; weiter nächstes Bit

    cbi     TUNER_OUT,TUNER_CE                ; auf L zum Übernehmen

    ret


Wird Dir vermutlich nicht helfen, andere PLL, für Deinen Chip unnütze 
Warteschleifen drin usw. usw.

Keine Ahnung, ob man das nötige in BasCom nachbauen kann...

Gruß aus Berlin
Michael

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.