RFM12 von HopeRF/Pollin für AVR

Hallo NG, ich bin eben über den Thread "Sammelbestellung Funkmodule" von Michael Eggert gestolpert.

Ich habe meine wohl zu teuer bei Pollin bestellt, der Beipackzettel enthält übrigens Fehler. Ich habe über Weihnachten einen Treiber für Atmel AVRs mit SPI Hardware geschrieben:

formatting link

Momentan verwende ich Atmega32 und AT90S8515(in der Bastelkiste gefunden)

Ist eine alpha version, eine hamming(7,4,3) Kanalcodierung ist zuschaltbar. Momentan verwende ich eine Übertragungsrate von 38.4kbaud und die Verbindung läuft gut.

Siehe der Thread "ECC mit AVR" habe ich auch mal über Reed-Solomon nachgedacht, was aber wohl zu viel des Guten ist. Vielleicht kommt noch Trellis/Viterbi oder Meggitt dazu (danke nochmal an Oliver Bartels)

Da ich dem Thread entnehmen konnte, dass den Chip noch andere verwenden, möchte ich fragen ob wir zusammen irgendwo eine "Entwicklungsplattform" aufsetzen sollen oder ob ihr euch schon irgendwo eingenistet habt.

formatting link
hat ja auch einiges zu dem Thema RF12

Ich habe noch vor in den nächsten Tagen einen Stack dafür zu schreiben mit ping, Sendewiederholung, listen before talk, automatische Kanalsuche usw.

Gruß von Andy

Reply to
Andreas Weber
Loading thread data ...

Was meinst du mit Entwicklungsplattform? Hardware? Die ist doch relativ belanglos. (hehe, kann ich jetzt ja sagen)

Da ich das ganze privat und aus Spass mache gebe ich mich aber nicht mehr mit den mickrigen AVRs hab. Hier ist ein M16 mit 96kbFLash / 10kb Ram angesagt und mein Bedienterminal wird ein alter Palmpilot mit Dragonball. Wenn man bedenkt das so ein M16 gerade mal 5Euro kostet dann muss ich mich nicht mehr mit den 1kb Ram eines AVRs rumaergern.

Oder Software? Ich hatte an ein groesseres Bussystem fuer alle Lebenslagen gedacht. Hier mal zwei Ausschnitte aus meiner multibus.h welche die grobe Idee verdeutlichen:

/* Wir Definieren hier eine Struktur fuer Fehlerflags. */ /* Dabei wird aber noch keine Variable erzeugt! */ struct errbit_def { char Timeout:1; /* Es kam zu einer Zeitueberschreitung */ char TxErr:1; /* Fehler beim senden eines Datenblocks */ char RxErr:1; /* Fehler beim Empfang eines Datenblocks */ char Crc:1; /* Falsche Pruefsumme */ char b4:1; char b5:1; char b6:1; char b7:1; };

union { struct errbit_def bit; char byte; } MultiErr;

union status_def{ struct status_mbitdef bit; char byte; };

#define MDATLEN 16 struct multibustype{ unsigned char Crc; /* Pruefsumme, muss immer als erstes kommen! */ unsigned char BlockType; /* Gibt an ob es ein Master oder Slave Block ist */ unsigned char DeviceID; /* Was ist es fuer ein GeraeteTyp */ unsigned char DeviceNr; /* Geraetenummer */ unsigned char DatenType; /* Was sendet das Geraet fuer Daten? */ struct ticker Ticker; /* Tickervariable */ union status_def Status; /* StatusBits */ unsigned char Len; /* Laenge der Nutzdaten */ unsigned char Daten[MDATLEN]; /* Die Nutzdaten */ };

struct ticker{ char counter:4; /* Upcounter, wird mit jedem Kommando hochgezaehlt

0-15 */ char answer:4; /* Die Nummer des letzten counter auf dem sich die Antwort bezieht */ };

/* Datentyp fuer die Nutzdaten */ typedef unsigned char MultiDataTyp[MDATLEN];

/* Hier werden die einzelnen Geraete definiert die es gibt */ #define BUS_CONTROLER 0x01 /* Der Boss von dem Laden */ #define BUS_MCU 0x02 /* Microcontroller fuer allgemeine Anwendung */ #define BUS_MMET 0x03 /* Multimeter */ #define BUS_THERMO 0x04 /* Thermometer */ #define BUS_CLOCK 0x05 /* Uhr */ #define BUS_KEY 0x06 /* Tastatur */ #define BUS_GPIB 0x07 /* GPIB-Bus Controller */ #define BUS_RS232 0x08 /* RS232 Schnittstelle */ #define BUS_I2C 0x09 /* I2C-Bus Schnittstelle */ #define BUS_SPI 0x0a /* SPI-Bus Schnittstelle */ #define BUS_TLCD 0x0b /* Text-LCD */ #define BUS_GLCD 0x0c /* Grafik-LCD */ #define BUS_SUPPLY 0x0d /* Labornetzteil */ #define BUS_CAR 0x0e /* Ein Auto :-) */

Ist aber alles noch Theorie. Ich hatte nur schonmal ein bisschen vorprogrammiert weil die Chinesen so lange mit der Lieferung gewartet haben.

Olaf

Reply to
Olaf Kaluza

Olaf Kaluza schrieb:

Hi Olaf, nein ich dachte eher an ein Forum, Wiki, CVS, SVN oder ähnliches.

Müsste ich mich mal informieren. AVR bin ich halt seit langem dabei und kenne mich daher gut aus. MSP430 würde mich auch interessieren.

Also die RF12 haben einige tücken und die HopeRF Datenblätter einige Fehler, wie ich die letzten Tage rausgefinden musste.

Hatte auch mal eine Softwareoberfläche geplant um zu "sniffen" also die

433MHz Kanäle scannen usw. für die Fehlersuche. Sollen später ja nicht nur 2 RF12 senden/empfangen können.

Gruß Andy

btw: hast mal in meinen Code reingeschaut?

Reply to
Andreas Weber

Achso..mich nervt der Forumkram immer weil im vergleich zu meinem Newsreader so ineffizient. Und fuer meine Code benutze ich SCCS, da bin ich aeh...konservativ.

Wem erzaehlst du das? :-)

Das hab ich im Prinzip schon fertig. Das ist ja das schoene daran das ich einen Palmpiloten verwende. Da kann ich problemlos ein Setupfenster aufmachen und alle Daten einstellen und dann rumprobieren. Ich kann z.B von beliebigen Frequenzen einfach mal ein Hexdump auf dem LCD ausgeben.

Allerdings wird das wohl nur vernueftig mit Modulen auf Basis vom RFM12 klappen wenn man nicht auf das automatische Syncronisieren verzichten will. Ist es eigentlich schon Terrorismus wenn man seine Nachbarn abscannt und ihre Stehlampe einschaltet?

BTW: Schon gesehen das es im Datenblatt des IA4421/RFM12B ein Kommado

0xced4 gibt um eines der beiden Syncbytes einzustellen? Muss mal probieren ob das auch mit dem 4420 geht....

Hast du hier was gepostet? Ich hab irgendwo im Internet einen Code gesehen der mir aber nicht gefallen hat weil _aktiv_ ohne Abbruch gewartet wurde.

Auf was fuer Reichweiten kommt ihr eigentlich? Ich hab mit dem 860er Modul problemlos ueberrall in meiner Wohnung (ueber zwei Etagen) Empfang. Allerdings muss man aufpassen das man an den Enden des Empfangsbereichs nicht den eigenen Koerper zwischen den Geraeten hat. Wohl ein zu dicker Wassersack dazwischen. :-] Antenne ist jeweils 7.5cm Draht.

Olaf

Reply to
Olaf Kaluza

Glyn. Die 26Euro von Reichelt ziehen einem ja die Schuhe aus. :-)

Ich hab die Dinger fuer die Firma bei Glyn gekauft und dann meiner Firma einfach mal zwei abgekauft. Allerdings habe ich bei Glyn extra nachgefragt und die sagten mir es waere kein Problem bei Ihnen auch Einzelstueckzahlen zu kaufen! Der Preis bei 10Stk war jedenfalls unter

6 und ueber 5Euro. Weiss ich jetzt leider nicht mehr genau.

Ich verwende einen 30281FA. Das ist ein M16C28 mit 96kb Flash, 8kb Ram (hatte mich da gerade vertan weil ich hier noch einen groesseren M30620FCAP im Einsatz habe)

formatting link
formatting link
Da kommt Freude auf wenn man sieht was da alles eingebaut ist, woll?

Es soll uebrigens Ende des Jahres, also jetzt, ein R8C rauskommen der wesentlich mehr Ram enthaelt als die normalen mit 1kb. Koennte mir vorstellen das der nochmal was billiger ist da es sonst ja keinen Grund fuer einen R8C gaebe.

Olaf

Reply to
Olaf Kaluza

Andreas Weber schrieb:

Dann wäre ja der erste Schritt, alle gefundenen Fehler an zentraler Stelle von allen Leuten zu sammeln. Sodaß irgendwann eine fehlerfreie Doku vorhanden ist bzw. die Silikonbugs komplett bekannt sind.

- Henry

--
www.ehydra.dyndns.info
Reply to
Henry Kiefer

Olaf Kaluza schrieb:

Wie wäre es dann mal mit einer Dokumentation? Ich habe bisher noch nichts gefunden, was ich als Bug im RF12/IA4420 einordnen würde.

Geht nicht. Zumindest synchronisiert er weiter auf 0x2DD4, auch wenn ich mit 0xCExx versuche, ein anderes zweites Byte einzustellen.

Bei mir klappt es im ganzen Haus über drei Etagen und bis in den Garten. Sogar im geschlossenen Garraum des (abgeschalteten) Mikrowellenofens hatte ich noch regelmäßig Empfang (ca. 50% der gesendeten Pakete waren korrekt).

Hier ebenso.

CU Christian

--
Christian Zietz  -  CHZ-Soft  -  czietz (at) gmx.net
WWW: http://www.chzsoft.com.ar/
 Click to see the full signature
Reply to
Christian Zietz

Olaf Kaluza schrieb:

Naja, wenn ich mir auf Seite 42 den Appendix A ansehe, "Package" - und da ist nur ein BGA abgebildet, dann eher weniger.

PLCC ist schon grausam, BGA unmöglich. Ja, ich weiß, Georg bügelt die auf, ist mir aber zu aufwendig ;-)

Viele Grüße, Johannes

--
"PS: Ein Realname wäre nett. Ich selbst nutze nur keinen, weil mich die
meisten hier bereits mit Namen kennen." -- Markus Gronotte aka "Makus"
 Click to see the full signature
Reply to
Johannes Bauer

in den datenblättern aber jedenfalls, siehe den hier zitierten absatz über DQD, der ist schlicht unverständlich.

das ist gut, ich werd also, wenn's fertig ist, den temperatursensor mal im gefrierfach versenken :-)

wie kommt man auf die 7.5cm? wenn ich lichtgeschwindigkeit/frequenz/4*.96 rechne, komm ich auf 8.3cm (lambda/4, verkürzungsfaktor in luft).

mit dieser länge funktionieren auch die schon im einsatz befindlichen RTFQ1/RRFQ1.

ciao,

cm.

--
> Ich habe neulich ein paar Salate kennengelernt, die hatten eine
> ausgesprochen schlechte Meinung über Vegetarier.
 Click to see the full signature
Reply to
christian mock

Es gibt die M16C auch in anderen Geh=E4usen, u.a. als LQFP mit (iirc)

0.5mm Pitch.

CU Christian

Reply to
Christian Zietz

OK, das geht also nicht nur mir so... Ich dachte aber an handfeste Bugs im IC, weniger an unverst=E4ndliche Dokumentation.

Erwischt. Meine Antenne ist nicht exakt 7.5cm lang, da ich sie nicht besonders genau abgemessen habe, nur so in der Gr=F6=DFenordnung und damit zumindest nahe an lambda/4. Ohnehin wei=DF man, ohne sich die =FCbrige Beschaltung anzusehen, nicht, ob ein Lambda/4-Monopol =FCberhaupt die optimale Antenne ist.

CU Christian

Reply to
Christian Zietz

Was mir z.B aufgefallen ist:

Wenn ich im Palmpiloten (3.3V Vcc) den Threshold auf 1f setze, also

5.3V dann bekomme ich dort einen Lowbatt Error. Jedenfalls wenn man eb in 0x82xx setzt. .-) Mache ich dasselbe an meinem M16C (4.96V Vcc) gibt es keinen Error. Scheint also nicht so genau zu sein.

Ausserdem ist in einem der Beispielsource die Initialisierung des PowerManagement REgisters falsch. Da wird etwas zusaetzlich eingeschaltet was nicht gebraucht wird.

Dafuer ist mir jetzt was positives aufgefallen. Ich sende zu Testzwecken Bloecke von 20Bytes mache eine kurze Pause und sende dann erneut. Aber mein Palmpilot liesst 80Bytes weil halt soviel als Hexdump auf dem LCD passen. Ich empfange dann die ersten 20Bytes so wie ich sie sende. Dann kommen stabil etwa 30x 0x00. Also kein Rauschen oder so. Und dann kommt das 0xaa 0xaa 0xaa 0x2d 0xd4 vom naechsten Datenpaket. Die Syncbytes des naechsten Paketes werden also als Nutzdaten erkannt weil ich den Detektor noch nicht wieder zurueckgesetzt habe.

Das Dingen bleibt also schoen lange syncron selbst wenn man garnichts sendet. (bei 4800Baud)

Olaf

Reply to
Olaf Kaluza

Das stimmt nicht. Meine haben ein 64poliges Standardgehaeuse. (Seite

400 im Datenblatt)

Noch ein Tip. Wie man sieht gibt es dasselbe Dingen auch noch in einem

80pin Gehaeuse. Der erste Befehl im eigenen Programm muss darin bestehen die CPU auf ihre Gehaeuse umzuschalten weil sonst das Pinning nicht stimmt.

Nene..BGA wuerde ich mir auch nur ungern antun.

Olaf

Reply to
Olaf Kaluza

Johannes Bauer schrieb:

Schaut man sich die Tabelle der Typen bei Glyn an, dann wirds bei den interessanten Varianten immer mind. 100 Pins.

Ich frage mich immer wer soviele Pins brauch??

- Henry

--
www.ehydra.dyndns.info
Reply to
Henry Kiefer

Hast du jetzt ein Problem wirkliche Daten von Rauschen zu unterscheiden? OK, ein Tipp aus Spread-Spectrum Szene: Signaturbitstring am Anfang, Datenblock, zeitlich inverser String vom Anfang hintendran.

Die Signaturstrings geben dir einen Squelch.

- Henry

--
www.ehydra.dyndns.info
Reply to
Henry Kiefer

Nein, ich hab Probleme erwartet. Aber ich musste erstaunt feststellen das es keine gibt.

Olaf

Reply to
Olaf Kaluza

Olaf Kaluza schrieb:

bei 38400 bps kommt das ding außer tritt, wenn direkt nach dem SyncWord

2 Byte Nullen kommen. Kommen "zwischendrin" paar 0x00 dann verkraftet es das Teil. Ich habe das noch nicht näher erforscht und vorerst ein quick&dirty hack gemacht, in dem ich das Erste Byte mit 0xAA XOR mache...

Gruß von Andy

Reply to
Andreas Weber

Olaf Kaluza schrieb:

Naja, wenn man nen (binären) Thermometer oder Beschleunigungsmesser braucht ;-) Gruß Andy

Reply to
Andreas Weber

Koennte man nicht einfach vor dem Verschicken die Bytes durch ein GCR schicken? Obiges Problem gibts schon laenger und dazu passende Loesungen auch. Erzeugung und Dekodierung sollten sich per einfacher Lookup-Table loesen lassen.

GCR:

formatting link

Gerrit

Reply to
Gerrit Heitsch

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.