ATTiny85 und RX/TX-Pins

Hallo

Ich habe einen Nano, welcher mittels Bluetooth Daten von einem ATTiny85 empfangen soll. Vorab habe ich das Ganze mittels einem 2ten Nano programmiert und getestet. Dies funktioniert.
Nun habe ich den Code des 2ten Nanos für einen ATTiny85 korrigiert und hinaufgeladen. Zumindest das hat funktioniert. Leider bekomme ich den ATTiny nicht dazu, Daten zu senden. Ich habe schon verschiedene Pins ausprobiert, jedoch erfolglos. In einigen Artikeln wird beschrieben, dass man prinzipiell alle Datenpins des Attiny verwenden kann, sofern man diese richtig konfiguriert.
Vlt. habe ich dabei etwas missverstanden oder diese Aussage ist nicht korrekt. Bitte um Unterstützung. Danke !

#include <SoftwareSerial.h>
const int rx = 3;
const int tx = 4;
SoftwareSerial BTserial(rx, tx);

#include <DHT.h>
#define DHTPIN 0       // Digital pin connected to the DHT sensor
#define DHTTYPE DHT21  // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  pinMode(rx, INPUT);
  pinMode(tx, OUTPUT);
  BTserial.begin(38400);
  dht.begin();
}

void loop() {
  char buffer[10];
  float volt = getVoltage();
  String volter = dtostrf(volt / 1000, 5, 2, buffer);

  delay(250);
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  if (isnan(t) || isnan(h)) {
    BTserial.print("<Error>");
  } else {
    String tem = dtostrf(t, 5, 1, buffer);
    String temper = (tem);
    String hum = dtostrf(h, 3, 0, buffer);
    String humper = (hum);
    BTserial.print("<" + temper + "C " + humper + "% " + volter + ">");
  }
}
// Read the voltage of the battery the Arduino is currently running on (in millivolts)
int getVoltage(void) {
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)  // For mega boards
  const long InternalReferenceVoltage = 1115L;                  // Adjust this value to your boards specific internal BG voltage x1000
  ADMUX = (0 << REFS1) | (1 << REFS0) | (0 << ADLAR) | (0 << MUX5) | (1 << MUX4) | (1 << MUX3) | (1 << MUX2) | (1 << MUX1) | (0 << MUX0);
#else  // For 168/328 boards
  const long InternalReferenceVoltage = 1091L;  // Adjust this value to your boards specific internal BG voltage x1000
  ADMUX = (0 << REFS1) | (1 << REFS0) | (0 << ADLAR) | (1 << MUX3) | (1 << MUX2) | (1 << MUX1) | (0 << MUX0);
#endif
  ADCSRA |= _BV(ADSC);  // Start a conversion
  while (((ADCSRA & (1 << ADSC)) != 0))
    ;                                                                     // Wait for it to complete
  int results = (((InternalReferenceVoltage * 1024L) / ADC) + 5L) / 10L;  // Scale the value; calculates for straight line value
  return results * 10;                                                    // convert from centivolts to millivolts
}


Auf welcher Geschwindigkeit läuft dein Tiny und für welche Geschwindigkeit wird dein Code kompiliert?

Wenn der Tiny mit 1MHz läuft und der Code für 8MHz geschrieben ist, passen die Baudraten nicht.

Und als Ergänzung, SoftwareSerial läuft mit 1MHz Takt überhaupt nicht. Also die fuses auf 8MHz und den Sketch ebenso.

Was die Pins betrifft, sollte es so funktionieren.
Hier habe ich Beispiele, die so funktionieren.

Ich verwende die alte IDE 1.6.13. Eingestellt ist Clock internal 8MHz.
Ich habe schon öfters ATTiny85er programmiert, jedoch bislang nicht als BT-Sender.
Ich bin nicht sicher, was du mit "die fuses auf 8MHz und den Sketch ebenso" meinst.
P.S.: Die beiden HC-05 finden sich und blinken dann im Gleichklang.

Du musst quasi erst den ATtiny85 mit seinen "Basis-Informationen" flashen. Das sind die "fuses", mit der IDE ist das der "Bootloader". Damit erhält er die nötige Taktfrequenz von 8MHz. Und der Sketch muss ebenfalls mit 8MHz geflasht werden, was du offensichtlich gemacht hast. Ohne die läuft SoftwareSerial nicht.
Wenn du den Blinksketch aus den Beispielen drauf spielst, siehst du, das die Taktfrequenz nicht stimmt.

Die ist allerdings sehr alt. Du könntest auch die 1.8.19 installieren, evtl. sogar als portable Version.
Dann bleibt die andere erhalten.

Alles klar. Ja, Bootloader hab ich mit 8MHz geflasht. Deshalb verwende ich nur für den Tiny die v1.6.13, da ist alles richtig voreingestellt und ich muss dann nicht immer umstellen.

Dann bleibt nur die Verkabelung.
Hast du RX und TX richtig angeschlossen ?
Also über Kreutz ?
Du kannst auch ein Foto des Aufbaus posten.




Hier ein paar Fotos. Allerdings sind die nicht hilfreich, da man nichts genaues erkennen kann.
Verkabelung, etc. hab ich nochmal gecheckt. Ausserdem wollte ich ein OLed-Display anhängen, um zu sehen, ob der Tiny denn überhaupt irgendwas macht. Auch das hat nicht funktioniert (wegen Fehler in der Wire.h). Ich denke, ich werde statt dem Tiny wohl einen Nano verschwenden müssen.

Ich erkenne da weder einen Stütz- noch einen Abblockkondensator.

Passt nicht, oder schau ich schief?

Bitte um Erklärung.

Sorry, hab vergessen, den aktuellen Sketch anzuhängen:

#include <SoftwareSerial.h>
const int rx = 4;
const int tx = 3;
SoftwareSerial BTserial(rx, tx);

#include <DHT.h>
#define DHTPIN 0       // Digital pin connected to the DHT sensor
#define DHTTYPE DHT21  // DHT 21 (AM2301)
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  pinMode(rx, INPUT);
  pinMode(tx, OUTPUT);
  BTserial.begin(38400);
  dht.begin();
}

void loop() {
  char buffer[10];
  float volt = getVoltage();
  String volter = dtostrf(volt / 1000, 5, 2, buffer);

  delay(250);
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  if (isnan(t) || isnan(h)) {
    BTserial.print("<Error>");
  } else {
    String tem = dtostrf(t, 5, 1, buffer);
    String temper = (tem);
    String hum = dtostrf(h, 3, 0, buffer);
    String humper = (hum);
    BTserial.print("<" + temper + "C " + humper + "% " + volter + ">");
  }
}
// Read the voltage of the battery the Arduino is currently running on (in millivolts)
int getVoltage(void) {
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)  // For mega boards
  const long InternalReferenceVoltage = 1115L;                  // Adjust this value to your boards specific internal BG voltage x1000
  ADMUX = (0 << REFS1) | (1 << REFS0) | (0 << ADLAR) | (0 << MUX5) | (1 << MUX4) | (1 << MUX3) | (1 << MUX2) | (1 << MUX1) | (0 << MUX0);
#else  // For 168/328 boards
  const long InternalReferenceVoltage = 1091L;  // Adjust this value to your boards specific internal BG voltage x1000
  ADMUX = (0 << REFS1) | (1 << REFS0) | (0 << ADLAR) | (1 << MUX3) | (1 << MUX2) | (1 << MUX1) | (0 << MUX0);
#endif
  ADCSRA |= _BV(ADSC);  // Start a conversion
  while (((ADCSRA & (1 << ADSC)) != 0))
    ;                                                                     // Wait for it to complete
  int results = (((InternalReferenceVoltage * 1024L) / ADC) + 5L) / 10L;  // Scale the value; calculates for straight line value
  return results * 10;                                                    // convert from centivolts to millivolts
}


Google mal wieder kaputt?

Auf einem Tiny85 willst du keine Strings verwenden!
Nein, das willst du nicht.

Yep, Rechnung mal wieder nicht bezahlt.
Ok, schön und gut ... aber wozu brauche ich diese Kondensatoren ? Für den HC-05 mal nicht und der Tiny benötigt auch keine.

Wieso braucht der keine ?
Faustregel:
Jeder IC, egal ob MC oder sonstwas, benötigt einen Abblockkondensator.

Genau die Begründungen habe ich dir verlinkt.
Natürlich darfst du die Ansage auch ignorieren/ausblenden.

Frei nach dem Motto:

Jeder ist seines Glückes eigener Schmied.

Ich habe schon öfters Tinys verwendet und noch nie Kondensatoren gebraucht.
Schön, dass du mir gestattest, die Ansage zu ignorieren. Das ist nett.

Wahrscheinlich ohne Last eines HC-05.

Dann hast du bisher viel Glück gehabt.
In jedem Datenblatt steht das. Die muss man natürlich auch lesen.
Da wird dir deine Ironie auch nicht weiterhelfen.

Ich verstehe euch Leutchen manchmal nicht. Man fragt bez. eines Problems und bekommt als Antwort "Umpalumpa". Wieso macht ihr so auf geheimnisvoll ? Ist das so, wenn man mehr als andere weiss ? Wie auch immer ... danke und so.