ATTINY85 will nicht wie Arduino Board

Moin Leute,
ich habe eine Fernbedienung gebastelt die ein Keypad von RoboDyn verwendet. Über einen Analogport lese ich die Eingangsspannung aus und gebe dann die Nummer der gedrückten Taste an ein 433 Funkmodul weiter. Diese Schaltung hat mit einem normalen Arduino wunderbar funktioniert, will jetzt aber mit dem ATTiny85 nicht.
Es ist alles richtig verlötet. Ich konnte einmal die Daten empfangen, als ich gemessen habe, was aus dem Keypad beim Tiny ankommt (Messgerät). Das bekomme ich aber nicht reproduziert - war wohl ein Zufall.
Mit dem Messgerät sehe ich auch, dass bei Knopfdruck Spannung auf dem Data-Pin des Funksenders liegt. Passt also auch.
Mein Arduino mit Funkempfänger zeigt allerdings nichts an.

Das Keypad gibt je nach gedrückter Taste eine unterschiedliche Spannung aus.
Schaltregler ist verbaut, damit 9V klappen.

Im Anhang meine unglaublich gut gezeichnete Schaltung.

Hier der Code:

#include <RCSwitch.h>


RCSwitch mySwitch = RCSwitch();

int analogPin = A1;
int value= 0;
int key;
int volume = 15;


void setup () {
   mySwitch.enableTransmit(10);
  Serial.begin(9600);
}
 
void loop () { 

  key = 0;
  value = analogRead(analogPin);
  if(value!=0)
    key=checkValue(value);
  

  switch(key){
    case 1: //Stufe 1
     mySwitch.send(1,24);
      break;
    case 2://Stufe 2
     mySwitch.send(2,24);
      break;
    case 3: //Stufe 3
     mySwitch.send(3,24);
      break;
    case 4: //Stufe 4
     mySwitch.send(4,24);
      break;
    case 5: //Stufe 5
      mySwitch.send(5,24);
      break;
    case 6: //Stopp
     mySwitch.send(6,24);
      break;
    case 7: //leiser
     mySwitch.send(7,24); 
      break;
    case 8: //nicht belegt
     mySwitch.send(8,24);
      break;
    case 9: //lauter
     mySwitch.send(9,24);
      break;
  }
  
}

int checkValue(int value){ //Haesslichste Methode EVER!
  Serial.println(key);
  if(value>820){
    if(value>900){
      if(value>1000){
        return 1;
      }else{return 2;}
    }else{
      return 3; 
    }
  }
  else if(value>650){
    if(value>700){
      if(value>750){
        return 4;
      }else{return 5;}
    }else{
      return 6; 
    }
  }else if(value>540){
    if(value>580){
      if(value>610){
        return 7;
      }else{return 8;}
    }else{
      return 9; 
    }
  }else if(value>450){
    if(value>490){
      if(value>510){
        return 10;
      }else{return 11;}
    }else{
      return 12; 
    }
  }
}

Vielleicht fällt ja irgendwem etwas ein. Vielleicht brauch der ATTiny85 ja noch irgendwas davor geschaltet von dem ich nichts weiß? Kondensator, Widerstand usw… Meine E-Technikkentnisse sind zu sehr verstaubt.

LG

Hast du den ATtiny85 auch mit dem richtigen Bootloader versehen?
Die RCswitch funktioniert nur, wenn du den ATtiny85 mit 8 MHz beschreibst.

Danke für deine Antwort :slight_smile:
Ja, das habe ich. Das Sendebeispiel aus der RCSwitch Lib hat auch funktioniert.

Nicht alle Befehle und Libs laufen auf dem Tiny, weil etliche Dinge nicht in Hardware vorhanden sind. Z.B muß I2C mit einer extra Tiny Lib gemacht werden. Vielleicht ist es mit serial genauso, das du ein serial in Software benötigst, z.B. altsoftserial, oder newsoftserial o.ä.
Wenns auf dem Tiny ums verrecken nicht laufen will, wäre ein kleiner Mega, z.B. ein ATmega 84 stressfreier, da der seriell in Hardware kann :wink:

Wie gesagt, ich habe damit bereits senden können. Gemäß dieser Anleitung: http://www.frag-duino.de/index.php/maker-faq/37-atmel-attiny-85-mit-arduino-arduinoisp-flashen-und-programmieren

Setze deinen Sende-Pin am ATtiny mal auf einen richtigen Pin.
Die 10 gibt es nicht.
Wenn ich es richtig sehe (Schaltbild) müsste es die 3 sein.

@nix_mehr_frei
Das wird laufen, auf dem ATTiny85, ich habe einige mit der RCSwitch am laufen.

Was mir jetzt noch an deinem Schaltbild aufgefallen ist, die hast keinen Kondensator eingesetzt.
Du solltest min. einen 100nF Keramikkondensator direkt am ATtiny85 (+5V und GND) platzieren.
Ich setze diese an jedes IC oder Modul einer Schaltung. Somit auch an den 433 MHz Sender.

Damit verhinderst du Störungen die sich in der Schaltung ausbreiten können.

Hi HotSystems,
wie genau meinst du das? Zwischen +5V und GND einen Kondensator hängen?
Beim Code hab ich beim Forum-Eintrag einen Kopierfehler gemacht. Das war mein Testcode für den Arduino. Auf dem Tiny ist die 3.

Vielen Dank das du mich "meiner annimmst" ^^

Kleine Ergänzung:
Ich habe nochmal das Senden-Beispiel aufgespielt.Es werden sporadisch Daten gesendet. Folgt also keiner Regel. Hilft das?

Jendrik:
wie genau meinst du das? Zwischen +5V und GND einen Kondensator hängen?

Ein Kondensator hat 2 Anschlüsse, einer davon auf GND, der andere auf +5Volt, direkt am ATtiny.

Kleine Ergänzung:
Ich habe nochmal das Senden-Beispiel aufgespielt.Es werden sporadisch Daten gesendet. Folgt also keiner Regel. Hilft das?

Das hilft nicht weiter.
Wenn es nur sporadisch funktioniert, ist noch was anderes faul.
Vermutlich, weil am Sender keine Antenne verbaut ist.
Oder du einen sehr schlechten Empfänger verwendest.

Deinen aktuellen Sendercode solltest du dahin gegen reduzieren, das dieser nur ein (alle 10 Sek.) Signal sendet. Ohne die ganze andere Spielerei. Da ist sicher noch ein Fehler drin.
Das muss ich mir in Ruhe noch mal ansehen.

Edit: Nachtrag Antenne

Ich konnte das jetzt besser einkreisen.
Danke schon mal für den Tipp mit den Kondensatoren. Einmal für dumme erklärt :wink:
Ich habe jetzt einen am Tiny, als auch am Funksender. Es werden weiterhin keine Daten empfangen. Wenn ich jedoch das Messgerät an den Datenkanal vom Sender setze, kommt die Sendung an. Was kann ich da dran löten, um - was auch immer mein Messgerät macht - dies zu simulieren?

Antenne: bei max 20cm Abstand sollte das Ding funktionieren. Ich hab bei Funksteckdosen eine Reichweite durch die ganze Wohnung, inkl. Wände + Türen. Und das mit den normalen, aufgelöteten Dingern.

Jendrik:
Ich konnte das jetzt besser einkreisen.
Danke schon mal für den Tipp mit den Kondensatoren. Einmal für dumme erklärt :wink:
Ich habe jetzt einen am Tiny, als auch am Funksender.

Das ist ok.

Es werden weiterhin keine Daten empfangen.
Wenn ich jedoch das Messgerät an den Datenkanal vom Sender setze, kommt die Sendung an. Was kann ich da dran löten, um - was auch immer mein Messgerät macht - dies zu simulieren?

Merkwürdig, du musst den Fehler finden.
Wackelkontakt, schlechte Lötverbindung. K.A. was da schief läuft.

Mach mal ein Foto deines Aufbaus.

Antenne: bei max 20cm Abstand sollte das Ding funktionieren. Ich hab bei Funksteckdosen eine Reichweite durch die ganze Wohnung, inkl. Wände + Türen. Und das mit den normalen, aufgelöteten Dingern.

Eine Antenne muss der Sender haben. Ohne kann er kaputt gehen. dann wird die Leistung im Sendetransistor verbraten und der wird heiß.

Was meinst du mit aufgelötetem Ding ?

Welchen Empfänger nutzt du ?

Edit:
Ich seh gerade, du verwendest die "billigen" Empfänger. Die sind "sorry" Schrott.
Die empfangen mehr Müll als alles andere.
Damit hast du keine Reichweite.

Nimm diese hier: 433 MHz Empfänger
Ist nur ein Beispiel, aber deutlich besser als der billig-Empfänger.

Das Neukaufen ist leider gerade keine Option, bei den Versandzeiten. Ich verlasse Montag für 5 Monate das Land und ich muss das vorher fertig haben. Ich versteh es einfach nicht, warum es nicht geht. Ich hatte mit den Modulen auch nie Probleme.
Das Messgerät zeigt deutlich, dass in dem Takt vom Senden-Code auch wirklich gesendet wird. Also kann es, wie von dir vermutet, sich nur noch um den Empfänger als Problem handeln.
Ich habe hier noch zwei RFM69 Module mit 433Mhz rumliegen. Gibt es dafür ggf eine “Minimalkonfiguration” für den Empfang? Meine Hoffnung ist, den Empfänger auch mit einem ATTiny85 zu betreiben. Weiß aber noch nicht, ob das klappt, weil ich noch ein MP3-Player-Modul damit betreiben muss.

Sender und Empfänger sind die aus meinem Link im original-Post.

PS: bist du den ganzen Tag im Forum unterwegs? o.O

Wie sollen wir das feststellen, was nicht arbeitet.

Wo ist das Foto deines Aufbaus?

Und für die RFM69 ist mir keine Library für den ATtiny bekannt.

Bau doch mal eine Minimalkonfiguration auf, wie ich es schon beschrieben habe.

Weniger Code und so testen.
Sonnst findest du den Fehler nicht.

Edit:

Das Messgerät zeigt deutlich, dass in dem Takt vom Senden-Code auch wirklich gesendet wird. Also kann es, wie von dir vermutet, sich nur noch um den Empfänger als Problem handeln.

Woher willst du es wissen, dass auch etwas gesendet wird. Du misst vermutlich nur am Datenausgang des Ardu. Den Sender kannst du sicher nicht messen.

Hier ist der Aufbau
Hier ist der Prototyp

Und das ist der Code mit dem ich es momentan versuche. (beim ATTiny natürlich Pin 3)

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

void setup() {

  Serial.begin(9600);
  
  // Transmitter is connected to Arduino Pin #10  
  mySwitch.enableTransmit(10);
  pinMode(13, OUTPUT);
}

void loop() {
  mySwitch.switchOn("11111", "00010");
  delay(10000);
 
}

Direkt am Datenport vom Sender gemessen, sehe ich im Sekundentakt einen Ausschlag von ~5V
Daher ging ich davon aus, dass gesendet wird. Ab und zu kommen ja Daten auch an.

Wenn der Empfänger kein Tiny wird ist es auch nicht schlimm. Kann man mit meinem billig-Sender senden und mit dem RFM69 die Daten empfangen? Wenn ja, wie?

Ok, am Aufbau kann man leider nicht viel erkennen.

Dein Test-Sketch arbeitet aber anders, als du es zu Anfang gepostet hast.
Hier wird die Anweisung mySwitch.switchOn("11111", "00010"); verwendet.

Du solltest auch mit Test-Sketch die Anweisungen verwenden, die du sonnst auch nimmst.

Was ich in deinem Sketch komplett vermisse ist:

mySwitch.setPulseLength(320);

Setze die mal im Setup ein. Ich bin nicht sicher ob das hilft, aber ein Versuch ist es Wert.

Und die Kombination "billig-Sender" und RFM69 funktioniert nicht.
Der Sender sendet in AM, der Empfänger empfängt nur FM.

Ja, der Code ist anders. Beim Endprodukt sollen Ganzzahlen versendet und empfangen werden. Damit teste ich jetzt schon länger.

Pulslänge ist eingefügt ohne Auswirkungen auf die Funktionalität.

Danke für die Erläuterung mit dem RFM

Ich habe jetzt mal den Empfänger-Arduino gewechelt und alle meine 10 Empfängermodule getestet. Es bleibt dabei, nur sporadischer Empfang bei Messen mit Messgerät. (Sender ist der Prototyp wie auf dem Bild)
Ich versuche Derweilen irgendwo einen anderen Empfänger bis Sa zu bekommen...

Jendrik:
Ja, der Code ist anders. Beim Endprodukt sollen Ganzzahlen versendet und empfangen werden. Damit teste ich jetzt schon länger.

Dann solltest du es so machen, wie im ersten Post.

Ich habe jetzt mal den Empfänger-Arduino gewechelt und alle meine 10 Empfängermodule getestet. Es bleibt dabei, nur sporadischer Empfang bei Messen mit Messgerät. (Sender ist der Prototyp wie auf dem Bild)
Ich versuche Derweilen irgendwo einen anderen Empfänger bis Sa zu bekommen...

Hast du am Sender und Empfänger eine Antenne dran?
Optimal ist ein Draht 17,4 cm Länge.

Und mach mal den Abstand zwischen den Sendungen länger. 5 - 10 Sek. sollten da reichen.
Dann hat auch der Empfänger genug Zeit, sich darauf einzustellen.

Es sind nur die Antennen dran, die von Werk aus angelötet sind. Ich denke bei 20cmAbstand sollten auch die es hinbekommen.
Ich melde mich nochmal, wenn die neuen RX TX da sind. Dann sehe ich ja, ob es am Gerät oder mir liegt... Es sind jetzt genug Stunden da rein geflossen.

Es sind nur die Antennen dran, die von Werk aus angelötet sind. Ich denke bei 20cmAbstand sollten auch die es hinbekommen.

weder am Sender noch am Empfänger sind Werkseitig Antennen angelötet. Löte an beide wie schon gesagt ein 17,4 cm Draht an.

Jendrik:
Es sind nur die Antennen dran, die von Werk aus angelötet sind. Ich denke bei 20cmAbstand sollten auch die es hinbekommen.
Ich melde mich nochmal, wenn die neuen RX TX da sind. Dann sehe ich ja, ob es am Gerät oder mir liegt... Es sind jetzt genug Stunden da rein geflossen.

Es sind Werkseitig keine Antennen dran. ardubu hat dir das schon geschrieben. Ich habe auf dem Bild von dir auch keine gesehen. Das Loch, wo die Antenne am Sender rein gehört, ist leer.

Ich muss mich da wiederholen. Es müssen Antennen dran. Am Empfänger und auch am Sender.

Und es müssten nicht so viel Stunden sein.