Hi Leute,
also erstmal ich weiß das es die Suchfunktion gibt nur ich sitze schon
wochen an dem problem und weiß nicht wo mein fehler ist.
Ich empfange einfach nichts ich hab echt alles was mir möglich war
versucht aber ich checks nicht.
Also das Progamm läuft bis zum nIRQ Polling und da gehts nicht weiter.
Ich denke also das dass polling nicht funktioniert weiß aber nicht wieso
nicht.
Ich betötige glaube ich keine Links zu anderen beiträgen mehr, da ich eh
schon alle gelesen habe, und überall was anderes steht. (Das verwirrt
mich)
Ich hoffe Ihr könnt mir helfen, und VIELEN DANK
PS: Das ist der Code von Pollin in dem ich soweit nur die belegung
geändert habe. Und ja ich weiß der ist nicht sehr aufgeräumt.
Den Schaltplan habe ich auch mal angehangen.
Ich arbeite mit AVR-Studio 4
Configuration:
atmega8
8000000 hz
optimierung O0 (bei allem anderen funktioniert nicht mal die led)
Diese RFM-Dinger sind der letzte Scheiß! Ich hatte mal ein
funkgesteuertes Auto damit gebaut.... Das teil ist immer abgestürzt! Ich
konnte nur damit arbeiten, wenn ich es ständig neu initialisiert habe.
Sie sind total anfällig für Spannungsstöße!
Außerdem sind die Datenblätter total dürftig!
So steht z.B. nirgendwo, daas sie eine startup-Zeit von mehrenen ms
brauchen...
Naja... nun zu deinem Problem... versuch mal VDI mit nem Pullup auf High
zu legen. Ich kann mich nciht mehr gut dran erinnern, aber irgendwas in
der Richtung hatte ich auch... Aber der Pollin-Code ging bei mir ganz
gut (zumindest auf dem Steckbrett). Ansonsten musst du dich mal durch
google suchen... da findet man einige Anhaltspunkte...
Im Moment habe ich das Auto, das ich gebaut habe nicht hier... Habe dort
nicht 100% Schaltplangetreu gebaut... aber ich kann dir meinen Code
posten...
Damit kann man ein Array empfangen, was gesendet wird. (Senderoutinen
sind auch dabei). Der Code ist schon älter, da habe ich grad mit
Programmieren richtig angefangen... also nicht wundern, falls was nicht
so schön ist. Redundanz ist aber z.T. erwünscht.
Yaro schrieb:
> Diese RFM-Dinger sind der letzte Scheiß!
Bitte etwas differenzierter Betrachten!
Mit der nötigen Sorgfalt und Geduld, arbeiten diese Module meinem
Eindruck nach ganz zuverlässig, selbst wenn man sich dabei an die untere
Grenze des zulässigen Spannungsbereichs annähert ...
Spannungsstöße: Bessere Entkoppelung
Startup-Time: Ist vermutlich im Datenblatt unter AC-Characteristics
(etwas verschleiert) aufgeschlüsselt in POR-Reset-Puls und die
Startup-Time der verschiedenen Blöcke.
Schlechtes Datenblatt: Jein, wenn man das ganze dreimal vorwärts und
rückwärts gelesen (und vielleicht noch mit den fast identischen
SiLabs-Chips verglichen) hat, passt das schon. Teilweise wird mit
(unerklärten) Begriffen und Abkürzungen rumgeschmissen, die man nur
durch einen Blick in die Glaskugel entschlüsseln kann.
Als Minimalbeschaltung reichen nSEL, SDI, SCK und SDO am µC, ferner DATA
(und evtl. nRES) via Pullup an VCC - und natürlich GND und VCC selbst
...
CLK und DCLK braucht man normalerweise nicht, nIRQ (geht auch über SDI)
ebenfalls, VDI ist
nice-to-have wenn man etwa vor hat, eine Art Sendersuchlauf o.ä. zu
Programmieren - wobei man das auch ohne VDI machen kann ...
mfG
Markus
Yaro schrieb:
> Diese RFM-Dinger sind der letzte Scheiß!
fully ACK
Kauf Dir lieber die BTM112 oder für höherer Reichweite die BTM222
Module. Die brauchen nicht so viele Pins am µC, man kann sie an den PC
anschließen und sie sind wesentlich einfacher zu benutzen.
Die 10€ die die Bluetoothmodule mehr kosten sind durch den geringeren
Zeitaufwand auch im Hobbybereich schnell wieder eingespielt.
Frank
Vielen dank schon mal an alle die mir versuchen zu helfen, besonders an
Yaro.
Dein Code hat mich schon weitergebracht.
Hab jetzt meine Code mit den ideen aus deinem überarbeitet, aber jetzt
scheint der immer zu empfängen obwohl ich gar nichts sende.
ich leg mal eben den neuen code offen.
die pinbelegung stimmt jetzt nihct mehr mit dem ersten code überein da
ich es jetzt zum testen auf nem bread board habe.
1
#include<avr/io.h>
2
#include<avr/interrupt.h>
3
#include<util/delay.h>
4
5
#define PORT_SEL PORTB
6
#define DDR_SEL DDRB
7
#define PORT_SDI PORTB
8
#define DDR_SDI DDRB
9
#define PORT_SCK PORTB
10
#define DDR_SCK DDRB
11
#define PORT_SDO PORTB
12
#define PIN_SDO PINB //achtung, nicht PORT, sondern PIN
13
#define DDR_SDO DDRB
14
#define DDR_nIRQ DDRD
15
#define PIN_nIRQ PIND //achtung, nicht PORT, sondern PIN
16
17
#define PORT_LED PORTD
18
#define DDR_LED DDRD
19
20
#define RFM_SCK 5// |
21
#define RFM_SDO 4// |RF_PORT
22
#define RFM_SDI 6// |
23
#define RFM_SEL 2// |
24
#define RFM_nIRQ 2
25
26
#define SEL_OUTPUT() DDR_SEL |= (1<<RFM_SEL) //ab hier defines automatisch
27
#define HI_SEL() PORT_SEL |= (1<<RFM_SEL)
28
#define LOW_SEL() PORT_SEL &= ~(1<<RFM_SEL)
29
#define SDI_OUTPUT() DDR_SDI |= (1<<RFM_SDI)
30
#define HI_SDI() PORT_SDI |= (1<<RFM_SDI)
31
#define LOW_SDI() PORT_SDI &= ~(1<<RFM_SDI)
32
#define SDO_INPUT() DDR_SDO &= ~(1<<RFM_SDO)
33
#define SDO_HI() PIN_SDO&(1<<RFM_SDO)
34
#define SCK_OUTPUT() DDR_SCK |= (1<<RFM_SCK)
35
#define HI_SCK() PORT_SCK |= (1<<RFM_SCK)
36
#define LOW_SCK() PORT_SCK &= ~(1<<RFM_SCK)
37
#define nIRQ_INPUT() DDR_nIRQ &= ~(1<<RFM_nIRQ)
38
#define LOW_nIRQ() !(PIN_nIRQ&(1<<RFM_nIRQ)) //bis hier
Vielleicht hast du ja auch einen fiesen Nachbarn, der ständig mit einem
RFM sendet und dich so verarschen will... Deswegen empfängst du auch
ständig was! =)
Hallo,
ich kann von den Modulen nur gutes Berichten. Ich muss ehrlich zugeben
ich verwende in dem Fall Schaltungen und Programmteile wie RFM12.c (
z.B. von Benedikt ) aus den Forum hier. Sie dienen mir als Komponenten
ohne sie weiter untersuchen zu müssen. So kann ich mich auf das
Hauptprogramm konzentrieren.
Die RFM Software Komponenten von Benedikt lassen sich ungesehen in
andere Software einbauen und funktionierten bei mir auf anhieb.
Ich habe RFM01, RFM02 und RFM12 Komponenten als Hausbus im Einsatz (
dort wo ich kein Kabel liegen habe ) und die Funkversorgung vom Haus und
Grundstück ist gedeckt. Sogar aus dem geschlossenen Stromzählerkasten
aus Blech kann ich Daten ins ganze Haus schicken.
Falls Du nicht weiterkommst kann ich Dir eine einfache Schaltung mit
wenigen Bauteilen ( ATMEGA8, LCD Modul und RFM01 ) und Software zukommen
lassen.
Grüße
Matthias
das wäre der hammer wenn du das machen würdest.
ich hab auch ein lcd display hier.
aber ich wünsche mir einfach das meine übertragung überhaupt mal klappt.
was vielleicht noch wichtig ist, ich habe keine antennen dran die module
liegen aber nebeneinander.
Ok,
hier eine Version eines RFM01 Empfängers mit LCD und noch ein paar
Spielereien.
Das ganze habe ich verwendet um Daten vom meinem Stromzähler zu
empfangen und anzuzeigen. Den Teil des LED Balkens im Schaltplan und die
Erkennung der Empfangstexte kannst Du ignorieren.
Ich habe auch einen Kontrollempfänger gebaut, der nur aus ATMEGA8, LCD
und RFM12 besteht. Er zeigt alles an, was empfangen wird. Dein Thema ist
aber mehr der RFM01 und außerdem habe ich nicht nur eine schlechte
sondern keine Dokumentation zum dem Bauvorhaben.
Also hier meine Vorversion des Remote Display meines Stromzählers, die
noch in der ersten Zeile des LCD zu Kontrollzwecken jeden empfangenen
Text anzeigt ( Erste 16 Zeichen ). Egal was empfangen wurde. Die ist
das was Dich interessiert. Wenn es funktioniert kannst Du den Code zu
Deinen Zwecken anpassen.
Achtung: Ich verwende 19200Bd auf 433.300Mhz. Bei Bedarf muss dies
angepasst werden.
Bist Du eigentlich sicher dass der Sender funktioniert ?
Benedikt K. hat unter Beitrag "Beispielprogramm für RFM12 433MHz Funk-Module" die
Software für RFM01 RFM02 und RFM12 verteilt, die ich auch verwende. Sie
sendet die empfangenen Daten seriell z.B an einen PC. Gepostet am
16.04.2007. Für Testzwecke ist das vielleicht einfacher. Dort gibt es
auch die Sendesoftware.
Ich habe auch gesehen dass Du Ende letzten Jahres das Thema hier im
Forum schonmal aufgemacht hast. Was ist damals daraus geworden ?
Grüße
Ich versuche das gerade auch mit den Codes von Benedikt hab auch gestern
schon viel drin gelesen.
Ich hatte es damals aufgegeben und wollte mich jetzt nochmal dran
setzten.
Und vielen Dank für dein Code, ich les mir das jetzt mal durch.
Ich habe jetzt die Codes von benedikt getestet und auf den sender und
den empfänger gespielt.
im main mit F_CPU 8000000UL
und in der rf01/02 mit F_CPU 10000000UL
ich weiß zwar nicht wieso das unterschiedlich sein soll aber du hattest
es bei dir auch so.
Aber woher weiß ich welche Baudrate ich für die module einstellen soll,
habe jetzt auch mal 19200 gemacht.
Naja auf jeden fall habe ich beim empfänger das empfangene an den uart
ausgegeben, aber da kommt leider nichts an.
Ich werde es einfach mal weiter versuchen.
wenn du
#include <util/delay.h>
einbindest ,solltest du dem Compiler schon den richtigen Wert der
Quarz/Taktfrequenz mitteilen.
Wenn deine delays nicht stimmen ... stimmt nacher garnichts mehr..
#ifndef F_CPU
#define F_CPU X000000UL /* Quarz/InternerOz mit ,,Mhz */
#endif
#include <util/delay.h>
Das #define gehört vor das #include
mfg
mein mega8 ist auf 8Mhz intern gestellt und der rfm auf 10Mhz
also ist das dann schon richtig ne wenn ich in der main.c 800000UL und
in der rf.c 10000000UL verwende.
ja das define hab ich vor dem include
ich habe die optimierung auch mal auf O2 gestellt weil anscheind das
beste für die rfm sein soll.
ARGH
Wie wäre es wenn du dir zum AVR-Lernen ein anderes Projekt suchst?
1. F_CPU meint NUR, AUSSCHLIEßLICH die Taktfrequenz des AVR. IMMER
2. afaik sind Os und O2 für AVRs die beiden besten Optimierungsstufen,
das muss man einfach Mal ausprobieren, ich arbeite normalerweise mit Os.
Das hängt aber NICHT vom RFM0x-Modul ab, sondern einzig und alleine
von deinem Programmcode (und der verwendeten Compiler-Version ...)
3. Solltest du bei beiden erst einmal eine niedrige Baudrate einstellen
und dann dafür sorgen, dass beide auf der gleichen Frequenz funken
(evtl. noch feintunen). Ob/Was der Empfänger reinbekommt, sagt dir das
Statusregister.
Hast du eigentlich inzwischen das (richtige) Datenblatt durchgelesen?
hmpf
Markus
Erstmal danke für deine Antwort.
Ich habe schon vorher bisschen was mit AVR gemacht, z.b. lichsteuerungen
oder LCD ansteuerung, ging alles ohne probleme, nur ich versteh es
einfach nicht wieso diese rfm dinger bei mir nicht so wollen wie ich das
will, deswegen hinterfrag ich nochmal alles.
Das (richtige) Datenblatt habe ich gelesen aber nicht ganz.
Optimierung verwende ich normal auch Os, aber ich thread von Benedikt
wird O2 empfohlen.
Ich weiss nicht warum es da solche Probleme gibt. Ich kann mir nur
vorstellen, dass ein Problem mit dem Sender besteht oder die Verkabelung
ist nicht richtig. Ich würde einfach alles so aufbauen wie es Benedikt
beschrieben hat. Nichts mehr und nichts weniger. Nichts an der Software
herumschrauben. Mach alles so wie beschrieben und dann klappt es.
ich habe anstatt der pullup widerstände den internen pullup das mega8
verwendet, weil ich die auf der platine eh angeschlossen hatte.
Ich habe jetzt ausschließlich nur die belegung geändert, und im
empfänger den UART in der main zum empfangen der daten eingebaut. Der
UART funktionier aber zu 100%.
RFM01
Benedikt
bei mir ist jetzt das prolem das der empfänger nicht aus der
empfangsrotine raus kommt.
Das programm bleibt immer in der rf01_rxdata() hängen.
10Mhz am CLK kommen an, und der Sender funktioniert ebenfalls.
Ich weiß echt nich was ich falsch mache, hab nur die ports geändert, und
den uart eingebaut.
Kann es daran liegen das ich anstatt 1-10k ann vcc, den internen pullup
nutze ?
Meine Fuses sind, sind die vielleicht Falsch ? Nutze 8Mhz intern.
lfuse:D4
hfuse:D9
Das Problem mit dem hängenbleiben hatte ich auch als ich die SW von
Benedikt verwendet habe. Sie ist so geschrieben, dass wenn der Empfänger
eingeschaltet wird solange gewartet wird bis etwas empfangen wurde.
Ich habe den Code nicht hier aber schaut mal in der RFM01.c nach einer
while schleife. Wenn ich mich recht erinner habe ich dort nach einer
Anzahl von Zyklen abgebrochen. Du kannst auch in der RFM01.c
nachschauen, die ich zuvor hier gepostet habe. Dies ist schon die
modifizierte version.
Grüße
- Kondensator an Reset PIN ist quasi Plicht!
- Stützkondensatoren beim RF Modul verwenden!
- laut Schaltplan arbeitest du mit dem internen Clock >> 8000000 hz
macht keinen Sinn!
- Wieso hast du die SPI Pins des RF moduls nicht an die SPI Leitungen
des
Controllers gelegt?
genau ich arbeite mit 8mhz intern, wieso macht das keinen sinn ?
ich habe an spi leitung nur die ISP schnittstelle aber das ist doch auch
egal, ich kann den rfm ja anschließen wo ich möchte.
Ein kondensator am reset pin hab ich bisher noch nicht gesehen, wenn
dann nur pullup widerstand.
Kondensator am rfm okay das macht sinn, aber wie du in der schaltung
siehst hab ich unmittelbar davor ein kondensator eingebaut.
Guten Morgen
1.
ok 8mhz ist ok. Ich verwende meistens einen externen clock und hab nicht
gewusst, dass der interne bis 8MHz geht.
2.
Sieh dir mal meinen Anhang an (Kapitel 3)
Du hast ja nicht ganz unrecht, in 99% der Fälle wird es nichts
ausmachen, ich bevorzuge aber immer die sichere Variante.
3. Entweder filtert mein Auge Kondensatoren oder ich bin total blind.
Falls du C1 meinst ist das kein Stützkondensator für das Funkmodul
sondern schon vom 7805er Datenblatt vorgesehen. Grundsätzlich immer
jedem IC einen Kondensator gönnen. Davon wird man afaik nicht arm.
Schöne Grüße!
Hi,
erstmal vielen dank und super von dir das du dir die mühe macht und
sogar datenblätter anhängst ;)
Ne den C1 meinte ich nicht, ich meinte C3 der ist auf der Platine
unmittelbar mit dem mega8 und dem rfm verbunden (sieht man im schaltplan
nicht), aber alles kla ich werde mal noch einen einlöten hab noch einige
hier die paar cent tun nicht weh da hast du schon recht.
Kleine zwischenfrage, was stellst du bei avr ein wenn einen externen
quartz verwendest weil ich komm da was durcheinander.
Weil bei den RC gleidern steht 3-8MHz und dann noch 8-12MHz, aber es
sind ja keine RC glieder. Und bei den anderen dadrunter steht nut
Low-frequency, mid oder hight.
Sieh dir mal das an!
Eine bessere (einfachere) als diese Beschreibung der Fuses gibt es
eigentlich nicht. Als ich das einmal gefunden habe war ich überglücklich
weil ich mich anfangs jedesmal mit diesen Fuses herumgeärgert habe!
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/fuse_lock_bits_2/
Sollte auch das noch unklar sein meldest du dich hald wieder