Forum: HF, Funk und Felder Bascom Code RFM01 /02


von helder (Gast)


Lesenswert?

Hallo,

ich arbeite an einer Funkverbindung zwischen 2 Modulen und habe auch 
schon ein paar Codes im Netz gefunden, welche ich momentan versuche 
auseinander zu klabüsern mit der Bascom Hilfe um sie zu verstehen. 
Leider ohne durchschlagenden Erfolg! :-( deswegen wende ich mich an 
erfahrene Leute wie euch.

Folgende Codeschnipsel verstehe ich nicht so ganz:

For Count = 1 To N
Bitwait Nirq , Reset
Spiin Fifo(1) , 3
Rx(count) = Fifo(3)

kann es sein, das der dieser Befehl wartet bis der Nirq low ist und dann 
erst ausgeführt wird?
dann werden 3 byte ins fiforegister übertragen doch nur das 3. wird im 
empfangsregister gespeichert und zählt die variable count hoch?

und:

hier hab ich null Ahnung! :-/

Sub Rf_cmd(byval Wert As Word) As Word
Cmd(2) = Wert And 255
Shift Wert , Right , 8
Cmd(1) = Wert
Spiout Cmd(1) , 2
End Sub


Danke im Vorraus!

von Max (Gast)


Lesenswert?

>kann es sein, das der dieser Befehl wartet bis der Nirq low ist und dann
>erst ausgeführt wird?

so ist es!
da die zwei ersten bytes nur den inhalt des status-registers betreffen, 
wird nur das 3. byte=fifo abgespeichert.
Alternativ kann der Fifo aber auch direkt, mit dem auf low gezogenen 
nFFS-Pin ausgelesen werden.

für mehr info schau doch einfach mal den thread hier durch:

Beitrag "Re: RFM01/02 Basics"

von helder (Gast)


Lesenswert?

Hallo Max,

meine Infos habe ich zum Teil aus diesem thread! :-) bin mit der 
Suchfunktion darauf gestossen!

Allerdings konnte ich hier lediglich die Infos zum fifo lesen, nicht 
aber zu meinem 2. Codeschnipsel, also diesem hier:

Sub Rf_cmd(byval Wert As Word) As Word
Cmd(2) = Wert And 255
Shift Wert , Right , 8
Cmd(1) = Wert
Spiout Cmd(1) , 2
End Sub

das einzigste was ich rausfinden konnte ist, dass sub ein befehl für ein 
unterprogramm ist?!
könntest mir vielleicht die funktion des codes erklären?

Gruß

von Bussard (Gast)


Lesenswert?

Muß man sich leider erarbeiten.
Geht mit dem Bascom-Simulator, CMDs in Binärdarstellung ansehen und mit 
verschiedenen Zahlenwerten experimentieren.

http://avrhelp.mcselec.com/index.html

von helder (Gast)


Lesenswert?

Sorry Bussard,

aber ich hab keine Ahnung wovon du sprichst?!
Ich habe kein Bascom Simulator und was sind CMD's?

von Karl (Gast)


Lesenswert?

helder schrieb:
> aber ich hab keine Ahnung wovon du sprichst?!

BASCOM mal genauer ansehen!

http://avrhelp.mcselec.com/index.html?program_simulate.htm

helder schrieb:
> Sub Rf_cmd(byval Wert As Word) As Word
> Cmd(2) = Wert And 255
> Shift Wert , Right , 8
> Cmd(1) = Wert
> Spiout Cmd(1) , 2
> End Sub

..oder wie überträgt man über SPI ein Word mit zwei Bytes....

Mal ehrlich, arbeite Dich noch etwas in die Grundlagen ein, bevor Du so 
etwas relativ kompliziertes wie RFM01/02 angehst.

von helder (Gast)


Lesenswert?

Hallo Karl,

danke für den Tip mit dem Simulator, wußte ich auch noch nicht, aber da 
muss man sich auch erstmal einarbeiten.

Ich finde es nett, dass du mich darauf hinweist, ich solle nicht gleich 
RFM machen....da hast du mit sicherheit recht, aber ich hab es 
angefangen und möchte nur wissen was dieser codeschnipsel macht!

von Karl (Gast)


Lesenswert?

helder schrieb:
> und möchte nur wissen was dieser codeschnipsel macht

ich schrob es...

SPIOUT kann nur Bytes übertragen.

Mit "SPIOUT Cmd(1),2" werden die beiden Bytes Cmd(1) und Cmd(2) 
übertragen. Eigentlich will der Autor "Wert" übertragen, geht aber nicht 
so leicht, da zu lang. "Wert", 16 Bit, muss also in 2 Bytes, Cmd(1) & 
Cmd(2), 8 Bit, aufgeteilt werden und wird dann übertragen.

von helder (Gast)


Lesenswert?

Danke Karl, das hilft mir schonmal ein gutes Stück weiter! :-)
Kannst vielleicht noch was zu den einzelnen Befehlen sagen?

also:

Shift Wert , Right , 8

und:

Sub Rf_cmd(byval Wert As Word) As Word ?!?

versuche noch den Zusammenhang zu verstehen zum restlichen Quelltext!

von Karl (Gast)


Lesenswert?

Nun ja, das sind alles Dinge, die in der BASCOM-Hilfe erklärt sind.

Für die tiefere Bedeutung von "Shift":

http://de.wikipedia.org/wiki/Bitweiser_Operator#Bitweise_Verschiebungen

Das ist zwar nicht BASCOM, aber einigermaßen gut erklärt.

----------------

"Sub Rf_cmd(byval Wert As Word) As Word"

Das ist einfach eine "Sub", eine Subroutine, der der Wert "Wert" 
übergeben wird. "Wert" ist ein Wort oder Word, in BASCOM etwas, das 16 
Bit hat.

Du willst ja nicht Dein ganzes Programm zwischen "Do...Loop" setzen, das 
wird schnell zu unübersichtlich. Deshalb gibt es Subroutinen oder 
Funktionen, die dann im Hauptprogramm aufgerufen werden.

Ja selbst die BASCOM-Befehle an sich sind eigentlich nichts anderes als 
Subroutinen oder Funktionen.

Hoffe, das hilft.

von helder (Gast)


Lesenswert?

Hi Karl,

zu allererst mal vielen Dank für deine Hilfe! :-)

hast mir auf jeden fall schon weitergeholfen.Shift hab ich kapiert, aber 
irgendwie erkenne ich die Zusammenhänge noch nicht so richtig.

versuche es nochmal etwas zusammenzufassen:

> Sub Rf_cmd(byval Wert As Word) As Word
subroutine, welche der wert "wert" übergeben wird, was im word-format 
ist(16bit)....was ist rf_cmd?

> Cmd(2) = Wert And 255
was wird hier genau in cmd(2) geschrieben?den cmd(2) ist als byte 
definiert!

> Shift Wert , Right , 8
die ersten 8 bit wandern von msb zu lsb, warum auch immer.

> Cmd(1) = Wert
???

> Spiout Cmd(1) , 2
???

> End Sub
ende :-)

gruß

von Karl (Gast)


Lesenswert?

helder schrieb:
> was ist rf_cmd?

Der Name der Subroutine. Man könnte auch auch "sub 
alkohol_gehalt(Biersorte as Word) As Word" schreiben. 
Grundlagenwissen!!!

Wie geschrieben zerlegt man ein Word in zwei Bytes. Um mal beim Bier zu 
bleiben..

Biersorte=Weizenbier
Bier(1)=Weizen
Bier(2)=bier

Mach doch mal folgendes mit dem Taschenrechner und einem Blatt Papier. 
Machen wir es Hexadezimal und Binär

Wert = ABCD = 1010101111001101
Cmd(2) = Wert AND FF = CD = 11001101
Cmd(1) = Shift Wert, Right, 8 = AB = 10101011

"Spiout Wert" geht nicht,
Es geht nur
"Spiout Cmd(1),2" das bedeutet "Spiout Cmd(1)" "Spiout Cmd(2)" 
hintereinander

Jetzt klar?

für SPIOUT siehe BASCOM-Hilfe

Für SPI an sich siehe hier:

http://de.wikipedia.org/wiki/Serial_Peripheral_Interface

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.