Df Miniplayer an Attiny 45 anschließen

Hallo,

ich möchte meinen DF Miniplayer über einen Attiny ansteuern. Das soll ja möglich sein, oder?
Ich möchte aktuell nur, dass eine MP3 abgespielt wird, wenn der Attiny Strom bekommt. Also, nichts kompliziertes. Leider bekomme ich es nicht hin.
Hat mir evtl. jemand einen BeispielSketch?
Hier im Forum habe ich folgendes gefunden:
Just set the processor in the IDE to the ATtiny and see if it compiles.

Ich weiß leider nicht, was damit gemeint ist.
Kann das Problem evtl. am Clock hängen? Habe den Attiny auf 1Mhz laufen. Habe dort noch nie etwas geändert.
Evtl. definiere ich die RX und TX Ports im Sketch auch falsch.

Hier mal mein Sketch:


#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(3, 4); // RX, TX

const int Rx = 3; // this is physical pin 2

const int Tx = 4; // this is physical pin 3

DFRobotDFPlayerMini myDFPlayer;


void setup()
{


pinMode(Rx, INPUT);

pinMode(Tx, OUTPUT);
  
  mySoftwareSerial.begin(9600);
  
  
  
  
  myDFPlayer.volume(25);  //Set volume value. From 0 to 30
 myDFPlayer.play(1);  //Play the first mp3
 
}

void loop()
{
  
  static unsigned long timer = millis();
  
  if (millis() - timer > 120000) {
   timer = millis();
  myDFPlayer.next();  //Play next mp3 every 3 second.
  }
  
 
}

Vielleicht hilf es ja, wenn Du das myDFPlayer Objekt mal mit begin() initialisierst.

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

const int Rx = 3; // this is physical pin 2
const int Tx = 4; // this is physical pin 3

SoftwareSerial mySoftwareSerial(Rx, Tx); // RX, TX
DFRobotDFPlayerMini myDFPlayer;

void setup()
{
  //pinMode(Rx, INPUT);
  //pinMode(Tx, OUTPUT);

  mySoftwareSerial.begin(9600);
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    while (true) {}
  }
  myDFPlayer.volume(25);  //Set volume value. From 0 to 30
  myDFPlayer.play(1);  //Play the first mp3
}

void loop()
{
  static unsigned long timer = millis();

  if (millis() - timer > 120000) {
    timer = millis();
    myDFPlayer.next();  //Play next mp3 every 3 second.
  }
}

Die Library SoftwareSerial läuft nicht, wenn der Controller mit 1MHz getaktet wird.
Setze die Taktfrequenz auf 8MHz und dann sollte es kein Problem sein. Dazu muss aber der Sketch funktionieren, was ich mir noch nicht angesehen habe.

Allerdings brauchst du für dein beschriebenes Projekt keinen ATtiny, das geht auch mit einem DFplayer alleine.

Ich pflichte bei und möchte erweitern:

Habe auch schon massive Schwierigkeiten damit gehabt.
Auch 16MHz intern helfen da nicht.

Es drehte sich allerdings nicht um so ein MP3 Dingen sondern um RS232C, aber das sollte egal sein
Der interne Takt war bei mir einfach zu ungenau, und ist zudem Temperaturabhängig.

Geholfen hat damals eine Kalibriertabelle im EEPROM.
Der Tiny hat ein OSCCAL Register und einen Thermo Sensor

Danke für eure Antworten. Leider hatte ich noch keinen Erfolg.
Dass du pinMode in // gesetzte hast ist richtig? Muss ich die Ports nicht definieren?
Kann ich denn die RX und TX Ports an einem Attiny frei definieren? Ich bin was die RX und TX Ports mittlerweile komplett verwirrt.

const int Rx = 3; // this is physical pin 2
const int Tx = 4; // this is physical pin 3

Das sind doch die Pins zwischen Reset und Ground, oder?

Ich danke euch auf alle Fälle mal!

Der Tiny85 kann auf allen Pins PCINT, also ja.

Die Belegung sollte sich in den Dokus zu deiner geheimen Boarddefinition finden lassen.

Dann beschreibe doch mal, was du alles probiert hast.
Wenn du die Taktfrequenz nicht änderst, wird es auch nicht funktionieren.

Nein, das erledigt mySoftwareSerial

Ja, so wie es in den Kommentaren steht.

Hast du die Taktfrequenz erhöht, wie von @HotSystems und @combie vorgeschlagen?

Darüber habe ich auch schon oft gelesen, kann es allerdings bisher an eigenen Projekten noch nicht feststellen.

Habe den Takt angepasst und den Sketch hochgeladen. Die LED am Player leuchtet kurz auf.

Auch die Fuses gesetzt?
Oder wenigstens im Programm den Teiler geändert?

Du musst dazu auch den "Bootloader" neu flashen.
Dabei werden die Fuses (combie hat es geschrieben) angepasst.

Ich habs mit dem Oszi gesehen.

Aus meiner Erinnerung:
Bis ca 2,5% Abweichung ist alles ok
Wenn es auf 10% zu geht wird es zusehens schlimmer, bis zum Versagen.

Etwas liegts auch am Gegenüber, denn das ist auch nicht 100% exakt.
Die beiden Abweichungen können sich ausgleichen, aber auch addieren.
Eine 50/50 Chance

Also, ich habe in der Arduino Software den Clock geändert und dann Bootloader brennen gedrückt.
Dann den Sketch hochgeladen.

Das glaube ich dir zu 100%.

Bootloader brennen geht nur per ISP, also nicht seriell.

Abgesehen vom Micronucleus gibts kaum/keinen Bootloader für den Tiny85 und Arduino.
Also immer mit dem ISP Adapter!

Übrigens der Micronucleus möchte/macht 16,5MHz intern um zu funktionieren

Ich gehe auf Werkzeuge "Bootloader brennen".

Ist jemand von euch auf Discord?

Ok, die Frage ist, mit welchem Programmer ?

Ich verwende je nach Laune den ArduinoAsISP, den USBasp oder den Armel ICE.
Und wenn es ganz schlimm kommt sogar den FuseDoctor

Macht alles keinen wirklichen Unterschied.