TinyWireM und IrRemote - Probleme mit den Empfangenen Daten

Widerstände hatte ich gerade keine anderen,schließe ich aber mal aus da ich testweise auch schon mal ohne Widerstände Schaltungen aufgebaut habe.Auf Dauer aber einbauen. Zum 4838 kann ich leider keine Angaben machen.

Hey Thorsten

Welchen AtTiny core und welche IRremote lib verwendest du?

In deiner "void data(int howMany)" stecken mehrere Probleme!

  1. Diese läuft im ISR Kontext, also ist dort Serial.print verboten.
  2. bigNum hat volatile zu sein, und der Zugriff darauf ist atomar zu gestalten.
  3. Vergiss das überflüssige while und werte stattdessen howmany aus, um einen vollständigen Datensatz zu erkennen

combie:
In deiner "void data(int howMany)" stecken mehrere Probleme!

  1. Diese läuft im ISR Kontext, also ist dort Serial.print verboten.
  2. bigNum hat volatile zu sein, und der Zugriff darauf ist atomar zu gestalten.
  3. Vergiss das überflüssige while und werte stattdessen howmany aus, um einen vollständigen Datensatz zu erkennen

Hi Combie

Danke für den hinweis, werde es sofort testen.

Aber da ich noch anfänger im Programmieren bin hab ich noch ne frage:

Also 1. ok, habe ich entfernt.
zu 2. also volatile unsigned long bigNum in master und Slave?
atomar gestalten? sorry aber was meinst du damit.
3. while (Wire.available() > 0) { einfach entfernen?

Aber warum funktioniert mein Code bei Thorsten plug & play wenn er das delay entfernt?

Aber warum funktioniert mein Code bei Thorsten plug & play wenn er das delay entfernt?

(solche Sprüche nerven mich etwas)
Ich sehe was an deinem Slave Code falsch ist.
Der Master Code interessiert mich nicht.

#include <util/atomic.h>
#define CriticalSection ATOMIC_BLOCK(ATOMIC_RESTORESTATE)


#include <Wire.h>
#define DEVICE_ID 69

volatile unsigned long bigNum; 



 
void doIr()
{
  unsigned long irCode = 0; // von der ISR unbeeinflusstes Zwischenlager
  CriticalSection
  {
    if(bigNum) irCode = bigNum;
    bigNum = 0;
  }

  if(irCode)
  {
    Serial.print("code empfangen: ");
    Serial.println(irCode);
  }
}


void data(int howMany) 
{
      byte a,b,c,d;
      if(howMany != 4) return; // Fehler erkennen
      a = Wire.read();
      b = Wire.read();
      c = Wire.read();
      d = Wire.read();
      
      bigNum = a;
      bigNum = (bigNum << 8) | b;
      bigNum = (bigNum << 8) | c;
      bigNum = (bigNum << 8) | d;
}

void setup()
{
  Wire.begin(DEVICE_ID);
  Wire.onReceive(data);
  Serial.begin(9600);
  Serial.println("Start");
}

void loop()
{
  doIr();
}

Hey combie

Danke für deine Hilfe aber dara liegt es leider auch nicht :frowning:

Habe gerade deinen code getestet und die ausgabe am Seriellen Monitor ist wieder unterschiedlich.

Ausgabe am Seriellen Monitor beim drücken der Power Taste an der Fernbedienung

Start
code empfangen: 4113423823
code empfangen: 3804997044
code empfangen: 1295016109
code empfangen: 2766132147
code empfangen: 3041136694
code empfangen: 2901642190
code empfangen: 2353337871
code empfangen: 582931523
code empfangen: 864231895
code empfangen: 2931256966
code empfangen: 3459727720
code empfangen: 1918434222

Trotzdem danke für deine Hilfe, hätte ja klappen können.

Angeblich unterstützt die IRremote Library den AtTiny85 > GitHub - Arduino-IRremote/Arduino-IRremote: Infrared remote library for Arduino: send and receive infrared signals with multiple protocols

Ich habe mir auch den core von hier Installiert > GitHub - SpenceKonde/ATTinyCore: Arduino core for ATtiny 1634, 828, x313, x4, x41, x5, x61, x7 and x8

Ich habe auch noch einen anderen AtTiny85 hier der noch nie benutzt wurde und mit ihm ist es das selbe
Problem.

@Thorsten

Wenn es geht lade mir mal bitte deine IR Library hoch oder schick mir einen Link welche du benutzt.

Hallo bei mir ist die Irremote 2.2.3 von Ken Shirriff installiert über Bibliothek einbinden/Bibliotheken verwalten. Nichts Besonderes oder Außergewöhnliches.

Gruß
Thorsten

Thorsten4171:
Hallo bei mir ist die Irremote 2.2.3 von Ken Shirriff installiert über Bibliothek einbinden/Bibliotheken verwalten. Nichts Besonderes oder Außergewöhnliches.

Gruß
Thorsten

Dann versteh ich nicht wo das Problem bei mir ist denn genau die habe ich auch drin. Welchen tiny core hast du?

j0k3r187:
Dann versteh ich nicht wo das Problem bei mir ist denn genau die habe ich auch drin. Welchen tiny core hast du?

Dann solltest du deinen Sketch mal komplett überarbeiten.
Ein funktionierendes Beispiel habe ich dir schon gezeigt.

Ich habe damals nach dieser Anleitung angefangen https://www.frag-duino.de/index.php/maker-faq/37-atmel-attiny-85-mit-arduino-arduinoisp-flashen-und-programmieren und auch über die Links(geht nur "aktueller Mirror")
auf der Seite gearbeitet.Lief auf Anhieb, was sich bis Heute geändert hat ist die IDE Version von 1.6.1
nach 1.8.3 die ich verwende. Zeige doch mal einen Schaltplan deines Aufbaus.

Hey Leute

Vielen dank für eure Hilfe und die zahlreichen Lösungsvorschläge, ich habe gerade nochmal meinen Scetch auf den Tiny geladen und es funktioniert.

@Thorsten

Den link kenne ich, nach dieser Anleitung habe ich meinen Tiny Adapter für den UNO gebaut.
Die Anleitung zum Programmieren des Tiny über die Arduino IDE ist ja überall gleich und nach der bin ich immer vorgegangen.

Kann jetzt leider nicht genau sagen wo der fehler lag aber die hauptsache ist es funktioniert :slight_smile:

Nochmals vielen Dank euch allen