Forum: Mikrocontroller und Digitale Elektronik RFM75 und Atmega328 Probleme


von Farin (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich habe ein Problem mit einem Atmega328PB und dem RFM75.

Ich habe mir für ein Bastelprojekt zwei RFM75-Module geholt und versuche 
nun, seit längerem erfolglos, die beiden miteinander schwatzen zu 
lassen. Die SPI Schnittstelle zu den Modulen funktioniert 
einwandfrei(Mit Oszilloskop geprüft und zurücklesen der geschriebenen 
Werte über UART geprüft).


Sieht jemand was ich falsch gemacht habe oder hat jemand 
funktionierenden GCC-Code für das Modul?

Vielen Dank für eure Hilfe :)

Gruß

Farin

von wv (Gast)


Lesenswert?

Hallo Farin,

ich würde da folgendermaßen vorgehen , erstmal beim Sender:

laß Dir nach der Initialisierung das Config-Register ausgeben, und schau 
nach ob alle Bits richtig stehen.

danach dasselbe mit dem Status-Register

dann erst senden.

Nach jedem Befehl gibt das Modul den Wert des Status-Register zurück, 
das ebenfalls auswerten.

Nicht in einer Dauerloop senden, sondern zum Testen nur einmal Senden 
und das Ergebnis auswerten. (FIFO-Status)

Den Interrupt auswerten, falls gesetzt, die Interrupt-Bits im 
Statusregister zurücksetzen.

Überprüfe die Payload-length Einstellung, meiner Ansicht nach hast Du 
eine Payload-length von 2 Byte und sendest 2x 1 Byte.

Wenn dann alle verfügbaren Informationen sagen, daß der Sender das 
Packet korrekt abgeschickt hat, kann man sich um den Empfänger in 
ähnlicher Art und Weise kümmern.

Gruß wv

von Farin (Gast)


Lesenswert?

Hallo wv,

Das habe ich die letzten Stunden nun versucht, leider ohne Erfolg. Alle 
Register die ich lesen kann stimmen mit dem überein was ich schreibe. 
Ich habe auch beim Senden verschiedene Daten und Datengrössen erfolglos 
zu senden versucht. Ebenfalls habe ich noch versucht Sender und 
Empfänger zu wechseln, d.h. den Code auf den jeweils anderen 
Mikrocontroller zu laden.

Ich weiss leider echt nicht mehr weiter.. Hat sonst niemand mit diesem 
Modul gearbeitet? Hast du vielleicht noch eine Idee?

Gruß Farin

von wv (Gast)


Lesenswert?

Hallo Farin,

dann mach doch mal einen ganz einfachen Test:

- Versorgungsspannung aus und wieder einschalten, damit der RFM75 nicht 
schon vorher durch Interrupts oder volles TX-FIFO blockiert ist.

- Programm starten, den Wert vom Statusregister vor dem Senden ausgeben 
lassen: Statusregister = ?

- Senden

- Statusregister ausgeben lassen: Statusregister = ?

- Interrupt low oder high?

Gruß wv

von Tom (Gast)


Lesenswert?

Die RFM75 sind soweit ich weis sehr ähnlich oder sogar gleich zu den 
RFM70 Modulen.
Wenn du deine Register beschreiben kannst und auch wieder auslesen 
kannst, dann steht ja die Kommunikation zum RFM75 schon mal.
Aber die Frage ist halt die, ob das was du in die Register einschreibst 
denn auch das richtige ist? Ich habe vor ca. 4 Jahren mal mit dem RFM70 
was gemacht und da gab es Register die von HIGH-Byte zu LOW-Byte 
beschrieben werden mussten und welche die von LOW-Byte nach HIGH-Byte 
beschrieben wurden. Das ganze war schon sehr undurchsichtig.
Ich stelle halt mal hier die Registereinträge meines RFM70 als Receiver 
ein. Wie schon gesagt, das RFM75 sollte sehr ähnlich oder sogar gleich 
dem RFM70 sein, zumindest was die Register angeht. Genau weis ich das 
halt nicht. Aber eventuell hilft dir das hier ja:
Bank 0, Register 0, 0x7B    (7B = Receiver)
 Bank 0, Register 1, 0x01
 Bank 0, Register 2, 0x01
 Bank 0, Register 3, 0x03
 Bank 0, Register 4, 0x00
 Bank 0, Register 5, 0x02
 Bank 0, Register 6, 0x35
 Bank 0, Register 7, 0x70
 Bank 0, Register 17, 0x01
 Bank 0, Register 18, 0x01
 Bank 0, Register 19, 0x01
 Bank 0, Register 20, 0x01
 Bank 0, Register 21, 0x01
 Bank 0, Register 22, 0x01
 Umschalten zu der Bank 1 Verwende den ACTIVATE Befehl 01010000 gefolgt 
von 0x53!
 Bank 1, Register 0, 0x40, 0x4B, 0x01, 0xE2
 Bank 1, Register 1, 0xC0, 0x4B, 0x00, 0x00
 Bank 1, Register 2, 0xD0, 0xFC, 0x8C, 0x02
 Bank 1, Register 3, 0x99, 0x00, 0x39, 0x41
 Bank 1, Register 4, 0xB9, 0x9E, 0x86, 0x0B
 Bank 1, Register 5, 0x24, 0x06, 0x7F, 0xA6
 Bank 1, Register 12, 0x00, 0x12, 0x73, 0x00
 Bank 1, Register 13, 0x36, 0xB4, 0x80, 0x00
 Bank 1, Register 14, 0x41, 0x20, 0x08, 0x04, 0x81, 0x20, 0xCF, 0xF7, 
0xFE, 0xFF, 0xFF
 Umschalten zu der Bank 0 Verwende den ACTIVATE Befehl 01010000 gefolgt 
von 0x53!
 Senden des ACTIVATE 01010000 Kommandos gefolgt von 0x73! (aktiviert das 
übergeben von Nutzdaten)
 Bank 0, Register 28, 0x01
 Bank 0, Register 29, 0x07

Kannst es ja mal vergleichen mit deinen Einträgen...
Bei diesen Werten brauchst du dir auch keine Gedanken mehr um den 
Blödsinn mit den verschiedenen Einschreiben von HIGH und LOW-Bytes zu 
machen. Das ist hier schon gemacht. Also von links (HIGH-Byte) nach 
rechts (LOW-Byte) lesen und eintragen.
Einen C-Code kann ich dir leider nicht geben, denn ich programmiere 
ausschließlich in Assembler...

von Tom (Gast)


Lesenswert?

Habe mir halt selbst mal die Mühe gemacht und in deinen angehangen Code 
geschaut und es sieht auch so aus als seien die Einträge für die zweite 
Registerbank verdreht herum eingetragen. Zumindest wenn in C das erste 
Byte hinter dem "=" das HIGH Byte ist.

Aus deinem Code:
uint8_t b1_r0[]={0xE2, 0x01, 0x4B, 0x40};
uint8_t b1_r1[]={0x00, 0x00, 0x4B, 0xC0};
uint8_t b1_r2[]={0x02, 0x8C, 0xFC, 0xD0};
uint8_t b1_r3[]={0x21, 0x39, 0x00, 0x99};
uint8_t b1_r4[]={0x1B, 0x82, 0x96, 0xF9};
uint8_t b1_r5[]={0xA6, 0x0F, 0x06, 0x24};

Aus meinem Code:
Bank 1, Register 0, 0x40, 0x4B, 0x01, 0xE2
Bank 1, Register 1, 0xC0, 0x4B, 0x00, 0x00
Bank 1, Register 2, 0xD0, 0xFC, 0x8C, 0x02
Bank 1, Register 3, 0x99, 0x00, 0x39, 0x41
Bank 1, Register 4, 0xB9, 0x9E, 0x86, 0x0B
Bank 1, Register 5, 0x24, 0x06, 0x7F, 0xA6

Also so wie es auch aussieht, sind die Registerbänke wohl gleich bei dem 
RFM75 und RFM70. Zumindest sind es die selben Werte die benötigt werden.

Dann vertausche doch mal die Registerwerte und gebe die Werte so ein wie 
in meinem Beispiel. Ich denke dann wird's auch funzen...

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.