ATTINY85 als 433Mhz-Sender

Hallo,

ich habe seit Tagen Schwierigkeiten bei folgendem Problem:

Ich möchte mit einem ATTINY85 über einen 433 Mhz Sender (FS1000A) Daten an meinen Raspberry Pi 2 senden (Empfänger: XY-MK-5V).

Zuerst habe ich Sender und Empfänger am Raspberry angeschlossen und mit RCSwitch (433Utils/RPi_utils at master · ninjablocks/433Utils · GitHub) erfolgreich getestet.
Nun habe ich den Sender am ATTINY85 PB3 angeschlossen und folgendes installiert:

// https://github.com/sui77/rc-switch
#include <RCSwitch.h>

#define TX PB3
#define LED PB4

RCSwitch mySwitch = RCSwitch();

void setup() {

  pinMode(PB4, OUTPUT);
  pinMode(TX, OUTPUT);

  mySwitch.enableTransmit(TX);
}

void loop() {
  int code = 0;

  digitalWrite(PB4, 1);
  mySwitch.send(code, 24);
  delay(500);
  digitalWrite(PB4, 0);

  code++;
  
  delay(1000);
}

Beim Compilen und Flashen sind keine Fehler aufgetreten.
Jedoch zeigt der Raspberry nichts mehr an.

Ich hoffe jemand kann mir dabei weiter helfen!

Vielen Dank schonmal!

Ich vermisse in deinem Sketch die Einstellungen der RCSwitch im Setup.

Beispiel:

  mySwitch.enableTransmit(3);
  mySwitch.setPulseLength(185);  
  // optinal     
  // mySwitch.setRepeatTransmit(10);
  // mySwitch.setProtocol(1);

Und was macht code++ in deiner Loop?
Du sendest keinen echten Code!

Die Einstellungen haben ja schon Standard Werte wenn ich mich nicht irre:
PulseLength = 350
RepeatTransmit = 10
Protocol = 1

code++ soll einfach die Zahl um 1 erhöhen. Zum Testen

Kohaku:
Die Einstellungen haben ja schon Standard Werte wenn ich mich nicht irre:
PulseLength = 350
RepeatTransmit = 10
Protocol = 1

code++ soll einfach die Zahl um 1 erhöhen. Zum Testen

Ok, das mag stimmen, bisher war das bei mir so nötig, habe aber immer mit anderen FB zusammen gearbeitet.

Edit:

Aber die Ports passen nicht zusammen PB3 und PB4 in der Deklaration.

Habe ich eben falsch gelesen.

Soweit ich mich erinnere hat nur "Protokoll" einen Standardwert.
Die anderen muss man angeben. Ich mache es bei meinem ATtiny85 jedenfalls so und es funktioniert.

Dann werde ich die anderen Werte setzten. Habe ich aber auch schon versucht.

Was meinst du mit ich sende keinen echten Code? Wie muss der aussehen?

Ich bin totaler Anfänger. Das ist mein erstes Projekt. Danke für die schnelle Antworten.

Der Code ist abhängig von der Bitlange und deiner Variable, die du auf Long setzen solltest.
Oder den Wert direkt eintragen.

du schreibst

void loop() {
int code = 0;

damit ist code bei dir immer 0
int code ist eine lokale Variable die bei jedem Loopdurchlauf auf 0 gesetzt wird. Wenn du sie ändern willst, müsstest du static int code; schreiben:
Edit:
Du weißt PB3 ist der Physische Pin 2 des IC?

Habe den Code abgeändert. Alle Einstellungen gesetzet und Datentyp von int auf long gesetzt:

#include <RCSwitch.h>

#define TX PB3
#define LED PB4

RCSwitch mySwitch = RCSwitch();

void setup() {

  pinMode(LED, OUTPUT);
  pinMode(TX, OUTPUT);

  mySwitch.enableTransmit(TX);
  mySwitch.setPulseLength(350);       
  mySwitch.setRepeatTransmit(10);
  mySwitch.setProtocol(1);
}

void loop() {
  unsigned long code = 10;

  digitalWrite(LED, 1);
  mySwitch.send(code, 24);
  delay(500);
  digitalWrite(LED, 0);
  
  delay(1000);
}

Funktioniert leider immer noch nicht.

Ich habe mal geschaut was am Daten Pin vom Sender ankommt. Wenn die LED an geht, kommen Einsen und Nullen, dann 0 usw.

Anscheinend kann der Raspberry mit den Empfangenen Signal nichts anfangen, was aber komisch ist, da ich ja die gleiche Library benutze.

Hast du auch den richtigen Pin (2) am ATtiny genommen, so wie ardubu geschrieben?

Was die Variable "Long" betrifft, war das nur für eine längere Codezahl bestimmt.

Bei 10 kannst du auch ein "int" nehmen.

Kannst du nicht testweise mit einem weiteren Arduino empfangen.
Der Sketch ist soweit ok und sollte funktionieren.

Ist an Pin 2 angeschlossen.

Hab leider keinen weiteren Arduino.
Clock 8 MHz sollte auch passen oder?

Dann liegt das Problem wohl beim Empfangen vom Raspberry :frowning:

Ach ja, das Programm compielt zwar zeigt aber folgende Warnungen

In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\Stream.h:26:0,

from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\HardwareSerial.h:29,

from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\Arduino.h:224,

from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\USBAPI.h:33,

from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\USBCore.cpp:19:

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\Print.h:32:0: warning: "BIN" redefined [enabled by default]

#define BIN 2

^

In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\iotn85.h:38:0,

from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:428,

from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:88,

from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\USBAPI.h:24,

from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino\USBCore.cpp:19:

c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\iotnx5.h:55:0: note: this is the location of the previous definition

#define BIN 7

^

Hab bei google nicht dazu gefunden. Weiss jemand was das bedeutet?

Kohaku:
Hab leider keinen weiteren Arduino.

Das ist schade, da könnte man besser testen.

Clock 8 MHz sollte auch passen oder?

Das passt schon, geht bei mir auch.

Dann liegt das Problem wohl beim Empfangen vom Raspberry :frowning:

Die Vermutung liegt nahe.

Kohaku:
Ach ja, das Programm compielt zwar zeigt aber folgende Warnungen

Hab bei google nicht dazu gefunden. Weiss jemand was das bedeutet?

Wie flasht du denn den ATtiny85?

Oben hast du doch geschrieben, das Flashen geht fehlerfrei.

Über die Arduino IDE erzeug ich die Hex-Datei, welche ich mit dem Raspberry flashe.

Kohaku:
Über die Arduino IDE erzeug ich die Hex-Datei, welche ich mit dem Raspberry flashe.

Ah, ok, das ist ein Weg, den ich bisher noch nicht kannte.
Da fehlt mir dann auch leider das Wissen, die Fehlermeldung zu analysieren.

Mein Tipp, einen Uno zulegen und mit dem den ATtiny85 flashen.
Das funktioniert sicher und du kannst auch gleich dem Empfänger damit testen.

ok. Dann nochmal vielen Dank für deine Bemühungen bis dahin.
Ich werde mir wohl einen zweiten Arduino zulegen und dann mal das Senden zwischen den beiden probieren. Melde mich dann wieder, ob das geklappt hat :wink:

Prima, hier findest du Infos dazu.
http://www.frag-duino.de/index.php/maker-faq/37-atmel-attiny-85-mit-arduino-arduinoisp-flashen-und-programmieren