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.
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.
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.
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.
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.
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).
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.
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)
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.
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...
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.
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.