Gast
#5575941
Hallo Gemeinde, bitte steinigt mich nicht, weil das Thema schon häufiger kam. Ich habe die meisten Problemstellungen hier im Forum bereits durch geackert. Mir fehlt offensichtlich nur jemand, der mich mit der Nase auf mein Problem schiebt. :/ Vorgeschichte: Ich hatte angefangen einen kommerziellen Haustüralarm auseinander zu nehmen um den Summer gegen ein Funksignal zu tauschen. Dabei habe ich das vorhandene PCB nur noch als Abstandshalter für den Reed-Switch verwendet und die SMD Widerstände und µc des Boards ausgelötet. In den Alarm habe ich dann ein Loch gebohrt um die Antenne des 433 mhz Senders nach außen bringen zu können. Getrieben wird dieser von einem Attiny85, der mit einem Sparkfun Tiny Programmer programmiert wurde. Der Bootloader wurde auf 8 mhz intern gesetzt um das Senden zu ermöglichen. Da ich bereits ein 433mhz Programm für Funksteckdosen auf einem anderen Tiny zum laufen gebracht habe, habe ich dieses Programm zunächst einmal in den Tiny geladen. Der auf der RC-Switch Libary basierende Code hat die Test-LED am Senderpin auch zum blinken gebracht. Zur Überprüfung habe ich dann einen Nano-Clone, welcher in der Arduino IDE jedoch als Pro Mini behandelt werden möchte, mit dem Empfänger Modul versehen und die ReceiveDemo.ino geladen. Seriellen Monitor gestartet und... nichts. Problemstellung: Nach langem hin und her habe ich den Tiny komplett von allen Bauteilen befreit und zurück in den Programmer gesteckt. Daran habe ich nur noch den Sender gepackt und ihn neu programmiert. Der Nano Clon wurde auch nur mit dem Empfänger bestückt und ReceiveDemoAdvanced geladen. Der Empfänger hat sogar eine Antenne bekommen. Trotzdem kam kein Ergebnis. Auch das tauschen des Tinys brachte kein Ergebnis. Ich schloss mein DSO138 an den Senderpin des Tinys und erkannte, dass dort durchaus ein Rechtecksignal in den programmierten Abständen bei raus kam. Ich schloss das DSO an den Empfänger und stellte überrascht fest, dass auch dort ein Signal ankam. Ich programmierte den Nano um, sodass er nun keine Libary mehr anzeigte, sondern ein analogRead durchführte. Blöderweise sprang der immer im Raum von 400 herum, was nicht einmal für ein Eingangssignal reichen dürfte. Ich spielte mit der VCC-Spannung herum und gab erst dem Sender und dann auch dem Empfänger die 5V die er laut Board aushalten soll. Keine Änderung. Frage: Meine Frage ist nun: wo liegt mein Denkfehler? Ich habe bereits mit 433mhz Modulen gearbeitet und durchaus das meiste auch ans laufen bekommen, aber bei einer simplen Kopplung zweier Atmel-Chips hackt es dann? Habe ich irgendwo einen Störfaktor oder ein Versionsupdate verpasst? Code Attiny85: /* Example for different sending methods http://code.google.com/p/rc-switch/ */ #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() { // Transmitter is connected to Arduino Pin #10 mySwitch.enableTransmit(PB2); mySwitch.setProtocol(1); mySwitch.setPulseLength(311); // Optional set pulse length. // mySwitch.setPulseLength(320); // Optional set protocol (default is 1, will work for most outlets) // mySwitch.setProtocol(2); // Optional set number of transmission repetitions. // mySwitch.setRepeatTransmit(15); } void loop() { /* See Example: TypeA_WithDIPSwitches */ mySwitch.switchOn("11111", "00010"); delay(1000); mySwitch.switchOn("11111", "00010"); delay(1000); /* Same switch as above, but using decimal code */ mySwitch.send(5393, 24); delay(1000); mySwitch.send(5396, 24); delay(1000); /* Same switch as above, but using binary code */ mySwitch.send("000000000001010100010001"); delay(1000); mySwitch.send("000000000001010100010100"); delay(1000); /* Same switch as above, but tri-state code */ mySwitch.sendTriState("00000FFF0F0F"); delay(1000); mySwitch.sendTriState("00000FFF0FF0"); delay(1000); delay(200); } Code Nano: /* Simple example for receiving http://code.google.com/p/rc-switch/ */ #include <RCSwitch.h> RCSwitch mySwitch = RCSwitch(); void setup() { Serial.begin(9600); mySwitch.enableReceive(0); // Receiver on inerrupt 0 => that is pin #2 mySwitch.setProtocol(1); mySwitch.setPulseLength(311); Serial.println("Startet"); } void loop() { if (mySwitch.available()) { int value = mySwitch.getReceivedValue(); Serial.println("Hab was!"); if (value == 0) { Serial.print("Unknown encoding"); } else { Serial.print("Received "); Serial.print( mySwitch.getReceivedValue() ); Serial.print(" / "); Serial.print( mySwitch.getReceivedBitlength() ); Serial.print("bit "); Serial.print("Protocol: "); Serial.println( mySwitch.getReceivedProtocol() ); } mySwitch.resetAvailable(); } } Ein Schaltbild spare ich mir bei dem Punkt mal aus offensichtlichen Gründen.