Bascom spiout, registerwert übertragen 0x86000 ???

dg2ffp

Neues Mitglied
26. Jan. 2012
20
0
1
54
Sprachen
Hallo allerseits,

stehe vor einem Problem mit Bascom, möchte mit spiout ein Register 0x86000 zu einem anderen chip übertragen.
Da es sich um 20bit handelt, bin ich mir nicht ganz sicher, ob das mit Bascom möglich ist.

Vielleicht hat jemand eine Idee.

Gruß Heiko
 
Hallo!

Nur schnell vom Prinzip her, weil ich gerade in Eile bin.

Lade das Register (ggf. mit einer ASM Routine) in eine Variable (Array, oder per ASM direkt in andere Speicherbereiche), und sende den Inhalt mit:
Code:
SPIOUT Variable(x) , 20

Ich rätsel nur gerade, warum musst du ausgerechnet DAS Register versenden? :hmmmm:

Grüße,
Cassio
 
Hallo Cassio,

Danke für die Info.

Ich möchte ein Funk-chip (ADF7012) seriell programmieren. Es müssen 4 solcher Register beschrieben werden. Meines wissens kann in Bascom leider nur 8 bit übertragen werden.
Wenn ich über ein Array teilen würde, wäre dann eine gesamte Ausgabe der Bitfolge möglich? Die Bitfolge muß dann auch noch zum Timing passen.

Hast du vielleicht noch eine Idee, wie ich das lösen kann?

Gruß Heiko
 
Hallo Heiko!

Sorry, hatte mich heute Mittag in der Eile leider verlesen....
Du wolltest ja 20bit versenden und nicht 20Byte. ;)
Hast du das schon mit drei Bytes, im Array direkt hintereinander senden, ausprobiert?
Müssen es denn genau 20bit sein? Was ist denn, wenn auf 24bit "aufgerundet" wird?
Dürfen die 20bits denn nicht in drei einzelnen Abschnitten gesendet werden? :hmmmm:
Stört das beim Slave (dem Funkmodul)?

Um welches Funkmodul handelt es sich denn?
Hast du ggf. mal ein Datenblatt?

Grüße,
Cassio
 
Hallo Cassio,

der Funkchip heisst ADF7012, schau dir das Datablatt bitte mal an, nach meiner Meinung müßte es hintereinander gesendet werden.

Gruß Heiko
 
Ich sehe gerade, sind sogar 2 Register mit 32 bit dabei.

Gruß Heiko
 
Hallo,

im Datenblatt sind 4 Register dargestellt davon ist das
Register 0 -> 32 Bit (R REGISTER)
Register 1 -> 24 Bit (N-COUNTER LATCH)
Register 2 -> 32 Bit (MODULATION REGISTER)
Register 3 -> 32 Bit (FUNCTION REGISTER)
breit.

Also sollte das Senden so wie CASSIO schon geschrieben hat auch funktionieren.
Einfach die Richtige Byteanzahl angeben.

LG
 
Hallo Heiko!

Und ich sehe kein Datenblatt.... oder bin ich blind?
Wo hast du das denn angehängt, oder verlinkt? :hmmmm:

Grüße,
Cassio
 
1.:Das Hardware-SPI ist bei den AVR ein 8bit-Register, in das (bzw aus dem) ein byte geschoben wird. In Software kannst Du Dir ja programmieren, was Du willst.
2.:kann natürlich direkt nach dem ersten Byte das nächste geschoben werden (Timing bestimmt der Meister der Clock)
3.:steht im Datenblatt inTabelle 4 was von 32bit Schieberegister bei Pin 12
 
Hallo Heiko !

Danke, für den Link zum Datenblatt.

Ich muss mir das nun erst mal ansehen.....
aber die Anderen sind da ja ein Glück schon schneller gewesen. ;)

Bei der ersten Durchsicht weiß ich jetzt gar nicht, warum du unbedingt mit SPI arbeiten musst?
Es müsste doch auch mit SHIFTOUT gehen und da kann ich die Ausgabe bitweise steuern.

Wie LotadaC aber schon geschrieben hat, kannst du immer volle Bytes senden (24bit, 32bit) und damit sollte es via SPI und einem 3-fachen bzw. 4-fachen Byte-Array keine Probleme geben.


Schau dir in der BASCOM-Hilfe mal SPIOUT und ARRAY() an. ;)

Grüße,
Cassio
 
Auch erstmal vielen Dank an LotadaC für die Tips.


Würde das auch so funktionieren?

Code:
$regfile = "attiny13.dat"
$crystal = 1200000
$hwstack = 10
$swstack = 8
$framesize = 15

Dim Temp As Byte

Config Spi = Soft , Dout = Portb.0 , Ss = Portb.1 , Clock = Portb.2
Spiinit



Temp = &B10001110
Spiout Temp , 1
Temp = &B11111111
Spiout Temp , 1
Temp = &B10001110
spiout Temp , 1
Temp = &B11110000
spiout Temp , 1


End


Gruß Heiko
 
Hallo Heiko!

Zum Ersten....
Ich weiß nicht, wie du auf 20bit gekommen bist?
Ich sehe (ab Seite 24) immer nur volle 24bit oder 32bit, die übertragen werden müssen!

Zum Zweiten....
Dein Code würde vom Ablauf her so OK sein.
Du kannst es aber auch in ein Array packen und alles hintereinander senden.
Also....
Code:
Temp(1) = &B10001110
Temp(2) = &B11111111
Temp(3) = &B10001110
Temp(4) = &B11110000

Spiout Temp(1) , 4


Grüße,
Cassio
 
Hallo,

also zuerst mal hier das Datenblatt ...
Anhang anzeigen ADF7012_Multi-Channel_ISM-Band_ASK-FSK-GFSK-Transmitter.pdf

Dann habe ich mir das mal angesehen ... es gibt die Pins ...
- DATA : Serial Data Input. The serial data is loaded MSB first with the two LSBs being the control bits. This is a high impedance CMOS input.

- CLK : Serial Clock Input. This serial clock is used to clock in the serial data to the registers. The data is latched into the 24-bit shift register on the CLK rising edge. This input is a high impedance CMOS input.

- LE : Load Enable, CMOS Input. When LE goes high, the data stored in the shift registers is loaded into one of the four latches, the latch being selected using the control bits..

Entweder sendet man 3 Bytes (24Bit) oder 4 Bytes (32Bit) zum Baustein. Wenn man fertig ist dann wird LE einmal auf High gelegt und die reingeschobenen Daten werden übernommen. Da der Datentakt vom Atmel kommt könnte man während der Low-Zeit von LE auch ruhig mal etwas unregelmäßig reinschieben.

Es sollte also über SPI gehen.

Wenn die nen Schieberegister im Eingang haben dann könnte man eigentlich auch bei den 24Bit volle 32Bit reinschieben und nur die letzten 3 Byte davon mit den Nutzdaten füttern. Aber ich weiß nicht wie die dann die Adressbits auseinandersortieren wenn an der Stelle bei den anderen Registern Daten stehen könnten. Man sollte also besser bei den 3 oder 4 Bytes bleiben.

Gruß
Dino
 
Guten Morgen,


@Cassio,
Ich weiß nicht, wie du auf 20bit gekommen bist?
Ich sehe (ab Seite 24) immer nur volle 24bit oder 32bit, die übertragen werden müssen!

Es gibt für den Chip eine Software, mit der man sich die Register der einzelnen Funktionen zusammen stellen kann. Man bekommt sie als hex-zahlen dargestellt.
Daher resultiert auch die 0x86000, das sind entsprechend auch die 20bit, wahrscheinlich werden die restlichen 4bit nicht benötigt.

@Dino03

Vielen Dank auch für deine Infos.
Ich denke mit den ganzen Informationen kann ich jetzt etwas anfangen, werde mir erstmal jetzt die Hardware vornehmen, um die Voraussetztung zum Testen zu schaffen.

Übrigens, die Software zum Berechen der Register ist hier downloadbar. http://www.analog.com/en/rfif-compo...roducts/eb_ISM_SRD_software_download/fca.html

Falls es den einen oder anderen interessiert, gebe ich gerne ein feedback ab.


Gruß Heiko
 
Mit "Config SPI..." sagst Du BASCOM, wie mit den dann folgenden SPI-Befehlen verfahren werden soll. Du kannst entweder die ggf vorhandene Hardware des µC verwenden, oder Bascom das in Software machen lassen. Im Bascom-Programm ist das kein großer Unterschied, für den Controller ist es ein gewaltiger. (Beim HW-SPI schreibst Du (bzw Bascom) das zu sendende Byte in ein Register, das Bitweise rausschieben und die Zustände der Leitungen übernimmt die Hardware im Hintergrund. Beim SW-SPI müssen alle diese Schritte durch das Programm erfolgen.)

Erfolgsmeldungen und finale Lösungen sind hier immer gern gesehen - das hilft denen die hier dann später nach denselben/ähnlichen Problemlösungen suchen ungemein...
 
......wahrscheinlich werden die restlichen 4bit nicht benötigt.


Hallo Heiko!

Die "restlichen" 4bit benötigst du trotzdem.....
Schau dir noch mal das Datenblatt ab Seite 24 an.
Dort kannst du auch sehen, wofür die restlichen 4bit benötigt werden (vor und nach den Parametern).

Bau jetzt aber erst mal die Hardware auf, damit du etwas zum Testen hast. ;)

Viel Spaß,
Cassio


PS:
Natürlich sind hier Rückmeldungen immer gern willkommen.
Gerade wenn es hinterher funktioniert. :)
 
Hi,

Es gibt für den Chip eine Software, mit der man sich die Register der einzelnen Funktionen zusammen stellen kann. Man bekommt sie als hex-zahlen dargestellt.
Daher resultiert auch die 0x86000, das sind entsprechend auch die 20bit, wahrscheinlich werden die restlichen 4bit nicht benötigt.
ich würde mal eher sagen das die führenden Nullen nicht angezeigt werden. Du schreibst ja auch nicht unbedingt 001kg auf die Zuckerpackung sondern nur 1kg.

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)