[Problem] ATtiny84A SoftwareSerial gibt nur falsche Zeichen aus.

Also hallo erstmal,
ich bin in der Regel nicht der, der sofort wegen einem kleinen problem einen Forum Post erstellt aber nun komme ich nach 8 Stunden suchen einfach nicht mehr weiter.

Ich planen einige ATtiny84A 433 mhz Sensoren im Haus zu verteilen und darüber Heizung und Lüftung im Bad (wenn Luftfeuchtigkeit zu hoch etc) zu installieren. Um Strom zu sparen (und Geld natürlich auch) habe ich mit erstmal 5 ATtiny84A bestellt und wollte diese nun mit meinem Sketch flashen. Also alles angeschlossen attiny hardware Bibliothek geladen (High-Low Tech – Programming an ATtiny w/ Arduino 1.6 (or 1.0)), 8 Mhz intern bootloader gebrannt & test sketch geflashed mit Softwareserial um zu sehen ob der Sensor richtig ausgelesen wird.

Nun weiß ich natürlich das ich 8Mhz für SoftwareSerial brauch aber es kommt nur Blödsinn an. Habe mich sogar schon auf einen einfachen Test reduziert nur um die SoftwareSerial zu testen.

Mein aktueller Sketch:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(99, 1); // RX, TX
void setup()  
{
  mySerial.begin(9600); 
  delay(1000);  
}

void loop()
{
  mySerial.print("test ");
  delay(100);
}

Serialmonitor kommt nur an

������������������������������������������������������������������
  • Baudrate stimmt.
  • normaler Blink Skatch einer LED Funktioniert.
  • mit andere tiny hardware lib hatte ich die gleichen Ergebnisse (https://code.google.com/p/arduino-tiny/) und TinyDebugSerial gleiches Ergebnis.
  • Dachte mir dann ich benutze TinyTuner. Auch damit bekomme ich nur Fragezeichen.
  • Bootloader mit 8Mhz eingestellt und geflashed

Ich bin gedanklich leider echt am ende :sob:
Ich hoffe jemand kann mir von meiner Leitung Helfen

Danke schonmal

SoftwareSerial + RC Oszillator ist vielleicht keine so gute Idee

Du kannst mal probieren den Oszillator zu kalibrieren:

Oder mal testweise einen Quarz spendieren ob es dann besser wird.

Nehm testweise die kleinstmögliche Baudrate der IDE!

Serenifly:
Du kannst mal probieren den Oszillator zu kalibrieren:

Ich klugscheiße mal: Oszillator “abgleichen” ist richtig, beim Kalibrieren wird die mögliche Abweichung vom Soll festgestellt.

Und jetzt schalte ich den Klugscheißermodus wieder aus 8)

Stimmt denn die Anzahl Fragezeichen mit der Anzahl Buchstaben überein ?

void setup() {
SoftwareSerial mySerial(-1,1);  // Rx mit -1 deaktivieren
}
void loop () {
  mySerial.write('8');
  delay(500);
}

dieses Zeichen ( 0x38 ) hat zwischen start- und stopbit drei zusammenhängende Bits gesetzt.

Auf einem Logikanalyzer sähe es etwa so aus:

  .....111111110000111001111111111....

Da sollte eigentlich irgendwas “ähnliches” ankommen, sogar bei falscher Baudrate.

Diese Seite Communication with Tiny's oder was ähnliches scheinst du zu kennen…

Interessanterweise ist die Anzahl der Zeichen bei einem der ATtiny84 (bei ein und dem selben Sketch) immer gleich lang aber länger "test" sinn machen würde, bei einem anderen (habe ich mal getestet um einen Defekt aus zu schließe) sendet er unendlich viele sehr schnell.
Quarz werde ich mir mal besorgen (fehlt eh noch in meiner Sammlung) und kalibrieren bzw nachjustieren werde ich mal probieren solange bis der Quarz geliefert wird.

Mich wundert nur das es unendlich viele Tuts gibt bei denen alles auf anhieb funktioniert und bei mir nicht. Konnte mir aber auch nicht vorstellen was, da es ja nicht all zu schwierig ist. Da hatte ich die Befürchtung ich übersehen irgendwas grundlegendes wie Fusebit oder ka.
Aber immer her mit den tipps :slight_smile:

Habe sogar mal das alte Hameq Oszi raus geholt nur leider scheitere ich daran etwas. Bin wohl doch nur n GUI Klick DSO Kind und verwöhnt von unseren XTausend € Oszis aus der FH die alles alleine machen.

Oder wie von sschultewolter einfach mal eine niedrigere Baudrate probieren. Das geht auch viel kleiner. Kann sein dass 9600 schon zu hoch ist.

Wenn du einen Blink Sketch hochlädst, stimmt dann die Blinkfrequenz?
Kannst du die Fuses auslesen?

Frequenz stimmt beim Sketch.
Wie kann man die auslesen? Ich seh nur was in bootloader hinterlegt ist und ich somit aufspiele.
Hab leider gerade vor lauter Ärger und mutwilligem Ausprobieren meinen Nano geschossen. Hoch den optokopplern die dazwischen waren. Hatte schon Angst um mein MacBook :o
Morgen ab 9 hab ich dank Semesterferien wieder den ganzen Tag Zeit.
Gute Nacht erstmal :slight_smile:

Aktuelle Zusammenfassung:
Ext. Quarz kein erfolg. Es wird immer wieder die gleiche Anzahl von falschen Zeichen gesendet.
langsam bin ich wirklich fraglos

Niedrigere Baudrate bringt auch nichts?

andere Bausrate leider nein.
Es kommt immer Z.B. bei
mySerial.println("test");
-->> ����� (also 5 mal-> bei 4 Char plus \n passt das zumindest von der Anzahl der Zeichen)
Anderer ATtiny auch nicht.

ich wollte mal andere Librarys probieren wie tinydebugserial allerdings finde ich dazu wenig Informationen.

Gut rein theoretisch geht es ja nur um debug aber langsam gehts mir ums Prinzip das ich das zum laufen bringen will. ich könnte auch ein Sketch schreiben auf m UNO zum laufen bringen und dann nur noch alles richtig verkabeln und sehen ob es läuft. Aber ich benötige früher oder später auch mal die Möglichkeit auch mal Werte so aus zu lesen.

Das ist sehr seltsam. Dass SoftwareSerial irgendwann nicht mehr geht ist normal, aber sehr niedrige Baudraten sollten eigentlich funktionieren.

nilscrescendo:
Es kommt immer Z.B. bei
mySerial.println(“test”);
–>> ����� (also 5 mal-> bei 4 Char plus \n passt das zumindest von der Anzahl der Zeichen)
Anderer ATtiny auch nicht.

Welche Version der Arduino IDE verwendest Du?

SoftwareSerial funktioniert mit der neuen GCC-Compilerversion (IDE Version 1.5.7 oder höher bei Windows, bei Linux abhängig von installierten Paketen) noch viel beschissener als es mit der alten Compilerversion bereits der Fall ist.

Falls Du unter Windows arbeitest: Hast Du auch mal eine IDE Version 1.0.x getestet, ob dann mit SoftwareSerial derselbe Fehler auftritt?

Aktuell verwende ich die Aktuellste 1.6.1 Java 8 auf meinem mac.
Danke für den Hinweis bez. der Version. Ich werde mal mit der 1.0 usw probieren.
Die alternativen TinyCores funktionieren mit er 1.6 ja eh nicht. Den Gedankengang hatte ich heute nacht aber mir nicht gemerkt. (jetzt kommts mit wieder)

werde jetzt erstmal die Freundin bekochen, sonst darf ich nachher nicht weiter basteln :grin:

In der Version 1.6.1 wurden Änderungen an der Software Serial vorgenommen. Möglich dass es in Verbindung mit dem Attiny noch nicht gefixt ist.

Also ich habe es jetzt jeweils immer mit den GitHub - damellis/attiny: ATtiny microcontroller support for the Arduino IDE cores probiert.
Allerdings bekomme ich heute andere Zeichen :astonished:

  • 1.5.8 und 1.6.1 ich bekomme heute “ˇˇˇˇˇ”
  • 1.0.5 und Terminal “ÿÿÿÿÿ”

Ich versteh die Welt nicht mehr o.O

Sketch bisschen erweitert um zu sehen ob es denn grundsätzlich funktioniert.

#include <SoftwareSerial.h>
SoftwareSerial mySerial(0,1);

void setup() {
  mySerial.begin(9600);
  pinMode(2, OUTPUT);
  
}

void loop() {
  digitalWrite(2, HIGH);   
  delay(1000);              
  digitalWrite(2, LOW);    
  delay(1000);              
  mySerial.println("test");

}

nilscrescendo:
Ich versteh die Welt nicht mehr o.O

Im Prinzip mußt Du mal austesten, wie schnell der Controller tatsächlich taktet und dazu brauchst Du ein zweites "richtiges" Arduino Board zum messen.

Auf Deinem mit internem Takt laufenden Bastel-Controller läßt Du dann einen Sekundentakt an einem Ausgang laufen, etwa mit

void setup() {
  pinMode(2, OUTPUT);
}

void loop() {
  digitalWrite(2, (millis()/1000)%2);   
}

Und mit Deinem richtigen Arduino-Board mißt Du dann diesen Takt mal aus, z.B. mit der pulseIn() Funktion und läßt Dir das genaue Timing anzeigen.

Und dann siehst Du ja, ob und um wieviel die Zeit auf Deinem intern getakteten Bastelcontroller anders läuft als sie laufen sollte.

Also des Rätsels Lösung. Ich habe mal zum Spaß nicht den RX vom Arduino genommen mit dem ich den ATtiny programmiere sondern einen rs232 Adapter. Da kommt genau das an was ich per softwareserial verschicken will ohne Fehler.
Kann mir einer sagen warum es beim Arduino nicht geht aber beim anderen problemlos?

Hast Du den seriellen Port des ATtiny direkt an den Computer geklemmt oder wie? Stehe gerade ein wenig auf der Leitung.

Falls ja, kann das nicht gehen.

  1. sind die RX und TX Signale invertiert und
  2. stimmen die Pegel der Sinale nicht