Hallo,
hier in der Abhandlung sind etliche Beispiele zu finden. Ich hatte mir
seinerzeit eines ausgesucht, das tatsächlich funktioniert hat.
Beitrag "bidirektionale RS232 Funkbrücke mit RFM12"
SDO wird nur im TX-mode abgefragt:
"TXREGISTER BUFFERED DATATRANSMISSION
In this operating mode (enabled by bit el, in the Configuration Setting
Command) the TX data is clocked into one of the two
8-bit data registers. The transmitter starts to send out the data from
the first register (with the given bit rate) when bit et is set with the
Power Management Command. The initial value of the data registers (AAh)
can be used to generate preamble. During this mode, the SDO pin can be
monitored to check whether the register is ready (SDO is high) to
receive the next byte from the microcontroller."
MfG
Hallo Michael,
Danke für deinen Code. Beim ersten betrachten fällt mir auf,das bei
RFM12_send_cmd der Status des SDO nicht abgefragt wird. Demnach muss ich
mit dem Senden der nächsten Bits nicht auf die Bestätitung des RFMs
warten und kann die Bits einfach senden? Oder übersehe ich da was?
besten dank Lukas
Hallo,
das ist SPI, auch wenn ich bei den RFM-Modulen mit Hardware-SPI
Timingprobleme hatte und deshalb auch zu Fuß mit den Bits gewackelt
habe.
Der RFM übernimmt mit dem Takt (welche Flanke müßte ich im Datenblatt
suchen) das Datenbit von SDI und legt an SDO sein Bit an zum einlesen.
Das ist entweder das Statuswort oder Daten oder auch nur "Müll", den man
ignorieren kann.
Also /CS aktiv, Datenbit ran, Clock Impuls, SDO einlesen und aufheben,
wenn man die Antwort braucht.
SDO hat noch eine Sonderfunktion in bestimmten Fälle: der RFM12 legt das
oberste Statusbit an SDO an wenn man ihn aktiviert. Das hat den Vorteil,
daß man Status nicht komplett einlesen muß, wenn man z.B. nur abfragen
will, ob er irgendwas zu melden hat, sondern nur dann, wenn es gesetzt
ist.
Gruß aus Berlin
Michael
Hallo Michael,
Heute Morgen das Programm umgeschrieben, ohne SDO und beim ersten Anlauf
geklappt. Ich kann die Frequenzteilung des RFM am CLK verändern, durch
die Teilereinstellung. Also versteht das RFM was ich tun will, und kann
es entsprechend konfigurieren .
rf12_trans:
cbi PORTB, 0 ;CS auf 0(aktiv)
nop
nop
ldi temp, 16
rf12_trans_loop:
lsl lsb ;Ins derzeitige LSB 0 schreiben und schieben
rol msb ;Weiterschieben und MSB ins Carry
cbi PORTB, 4 ;SDI auf 0
brcc rf12_trans_0 ;Wenn Carry eh gecleart is, so lassen
sbi PORTB, 4 ;Andernfalls SDI auf 1
rf12_trans_0:
sbi PORTB, 2 ;Clock-Impuls erzeugen
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop ;A bisserl Zeit lassen
cbi PORTB, 2
dec temp ;Bit Zähler runterzählen
brne rf12_trans_loop ;Wenn nicht abgelaufen, wiederholen
sbi PORTB, 0 ;CS auf 1(inaktiv)
cbi PORTB, 4 ;SDI auf 0
ret
;Frequenz umschalten per Taster
Interrupt an INT0
int_1:
ldi msb,0xC0
ldi lsb,0xE0 ;Quarz auf 10 MHz stellen
rcall rf12_trans
reti
Besten dank für die Hilfe!
mfg Lukas
Hallo,
Frequenzumstellung am Ausgabepin war damals auch meine erste Übung,
konnte man schnell sehen, ob überhaupt was sinnvolles passierte.
Viel Erolg weiterhin, meine RFM-Sensoren laufen ja nun erst seit gut 9
Jahren. Letztens mußte ich beim Sensor im Keller doch glatt die Batterie
(CR123A) wechseln, nach gerade mal rund 3 1/3 Jahren... ;-)
Gruß aus Berlin
Michael