Forum: Mikrocontroller und Digitale Elektronik FS20 Rcvr. auf AVR Anpassung - verzweifle gerade ein wenig


von Axel R. (axelroro)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
verzweifle gerade ein wenig - die Anwendung geht, aber ist einfach nicht 
zuverlässig. Vielleicht hat ja jemand Erfahrung oder anderen Code für 
FS20 receiving mit AVR Atmega.

Folgende Konstellation:
- Habe mir aus Etherrape Alexander Neumanns FS20 Code auf das Pollin 
Eval Board, Atmega32, angepasst auf AVR Studio. Teste mit FS20 S20 
Fernsteuerung und WS300 Wetterstation.
- Habe die Konstanten in Alexanders Code vom 20MHz im Originalcode auf 
meinen 16Mhz Quartz angepasst (einfach mal 16/20=0.8 genommen).
- Habe eine Timeoutvariable in fs20.c auskommentiert - hängt damit nach 
einer Weile - verstehe aber nicht, warum.
- Habe sogar den FS20 Empfänger etwas von Eval-Board abgesetzt, um 
eventuelle EMV Störungen zu verringern.

Nun funktioniert das wohl auch sowohl bei Fernsteuerung als auch bei 
WS300, aber sehr unzuverlässig. Z.B. jeder 3-6 Tastendruck gibt einen 
korrekten Sync, sonst Sync invalid. Gleiches beim WS300 Wetterstation - 
alle 8-9 send gehts mal mit korrektem Check, sonst fail.

Ach ja, für die Gegner von Funk: Ich habe das auch über ein FS20 USB 
Modul gegengeprüft, dort ist das wesentlich robuster, fast 100% 
Erkennungsrate - also am Funk allein liegt es nicht.

Hat sich da jemand von Euch schon einmal mit rumgeschlagen oder hat 
eventuell Code, der mit fs20 (receive, und aber auch send) zuverlässiger 
funktioniert?

Grüsse
Axel

PS: Code anbei.

von Dirk .. (kcc)


Lesenswert?

Hi Axel,

Hab hier leider nur Bascom-Code.
Der funktioniert zuverlässig (Senden und Empfangen).
Falls dir der Bascom-Code helfen sollte, gib mir bescheid.

Gruß
Dirk

von Axel R. (axelroro)


Lesenswert?

Hallo Dirk,
danke für Deine Antwort.

Ja, in der Tat, das wäre hilfreich, dann kann ich einmal die Timings und 
die ganze Vorgehensweise vergleichen.

Wäre auch nett, wenn Du mir einmal Deine elektrische Beschaltung nennen 
könntest. Ich habe den Atmega32 unter 5V am laufen, und nutze das 3V 
FS20 receiver modul von ELV. Ich habe nun den Datenausgang des FS20 
moduls direkt am PB3 in einer Comparatorschaltung dran. Ich frage mich, 
ob die Unzuverlässigkeit an unzureichenden Pegeln liegt - in etherrape's 
wiki ist noch ein 5V fs20 modul im Einsatz, und dort ist dem 
Datenausgang ein Spannungsteiler nachgeschaltet. Hast Du hierzu 
Erfahrung ?

Danke und Gruss
Axel

von Dirk .. (kcc)


Lesenswert?

Der ELV-Empfänger hängt bei mir direkt am InputCapture des AVR. Mit den 
3V Pegeln hatte ich noch keine Probleme.

Schau mal hier:
http://groups.google.com/group/fhem-users/browse_thread/thread/15ec16194eba9e79/000fdab3f46dbf3a?lnk=gst&q=#000fdab3f46dbf3a
Ganz unten hatte ich vor einger Zeit mal was vorgestellt. Diese 
Schaltung läuft bis heute.

Gruß
Dirk

von tom-2940 (Gast)


Lesenswert?

Hallo  Axel,


... da hab ich auch lange gekämpft!


Hier mein Auszug aus der FS20.h für 12Mhz:


/* zero is 400uS: F_CPU/10^6 * 400 = 8000, with prescaler 128 gives 62.5
 * -> test if value is between 33 and 73 */
//#define FS20_PULSE_ZERO(x) FS20_BETWEEN((x), 33, 73)
#define FS20_PULSE_ZERO(x) FS20_BETWEEN((x), 15, 45)
/* one is 600uS: F_CPU/10^6 * 600 = 12000, with prescaler 128 gives 
93.75
 * -> test if value is between 74 and 105 */
//#define FS20_PULSE_ONE(x) FS20_BETWEEN((x), 74, 105)
#define FS20_PULSE_ONE(x) FS20_BETWEEN((x), 46, 99)
/* maximal difference between two pulses is 115.2 uS,
 * wh5ch means 18 timer cycles with prescaler 128 */
#define FS20_PULSE_DIFFERENCE(x,y) FS20_SYMM(x, y, 28)
//#define FS20_PULSE_DIFFERENCE(x,y) FS20_SYMM(x, y, 372)



Gruß,
Tom

von Axel R. (axelroro)


Lesenswert?

Hallo Dirk und Tom,
danke. Den Bascom code muss ich einmal verarbeiten - sieht mit dem Input 
capture irgendwie einfacher aus - ich versuche später mal meinen Code 
umzubauen.

Tom, mit Deinen Zahlen für Pulse Difference hab ich etwas bessere 
Ergebnisse (subjektiv), aber irgendwie immer noch sehr zufällig. Die 
One/Zero Werte hab ich mal auf meinen (proportional zu den originalen 
20MHz gerechneten) Werten gelassen - wenn ich diese umändere, sei's auf 
Deine Werte oder proportional zu Deinen Werten zu meinen 16MHz, wirds 
schlechter.
Irgendwo ist da noch der Wurm drin.

Herzlichen Dank für die Hilfe.

Grüsse
Axel

von JojoS (Gast)


Lesenswert?

ich hatte so einen Empfänger auch mal aufgebaut, der Mega32 war auf dem 
STK500 und der Empfänger über ein Steckbrett angeschlossen. Der hat sich 
Störungen vom µC eingefangen und ein 1kHz Signal war am Ausgang zu 
sehen. Erst wenn der Empfänger min. ca. 20cm vom µC entfernt lag konnte 
ich die Codes sauber empfangen.

von Axel R. (axelroro)


Lesenswert?

Ja, dachte ich auch, und hab daher das Steckbrett auch abgesetzt, sogar 
mit Kabel auf 5m Abstand. Machte leider keinen Unterschied. Er empfängt 
ja auch recht zuverlässig, wertet aber leider eben nicht zuverlässig 
aus.

Danke und Gruss.
Axel

von Dirk .. (kcc)


Lesenswert?

Was man auch nicht vergessen darf, der Empfänger hat keine 
"Rauschschperre". Ohne gültiges Signal bekommt der AVR jede Menge 
"Datenmüll".

Zumindest ich habe bisher keine Probleme mit dem Empfänger in der nähe 
des AVR's.

Gruß
Dirk

von FS20Nutzer (Gast)


Lesenswert?

Hallo - hast Du eine Ethersex/Ethernut kompatible Hardware Dann probiere 
doch mal, obs damit zuverlässig geht...

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.