Go Down

Topic: Virtual.Wire Problem mit snprintf (Read 681 times) previous topic - next topic

Captain-DJ

Hallo.

Leider bekomme ich den DHT11 Sensor nicht ans laufen auf dem Attiny85.
Entweder es kommt 0 an oder -999.
Ich habe schon drei unterschiedliche Librarys getestet, auf dem Nano funktioniert es.
Dann habe ich gelesen, das mit der neuen IDE 1.6.6 das ganze nicht mehr funktioniert.
Ich natürlich direkt die 1.0.6 installiert, die Attinys rein, min Sketch auf....
Code: [Select]
  This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Arduino: 1.0.6 (Windows NT (unknown)), Board: "ATtiny85 (internal 1 MHz clock)"
c:/program files (x86)/arduino106/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr25/crttn85.o:(.init9+0x0): relocation truncated to fit: R_AVR_13_PCREL against symbol `main' defined in .text.main section in core.a(main.cpp.o)
c:/program files (x86)/arduino106/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr25/crttn85.o:(.init9+0x2): relocation truncated to fit: R_AVR_13_PCREL against symbol `exit' defined in .fini9 section in c:/program files (x86)/arduino106/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/avr25\libgcc.a(_exit.o)
core.a(main.cpp.o): In function `main':
C:\Program Files (x86)\Arduino106\hardware\arduino\cores\arduino/main.cpp:44: relocation truncated to fit: R_AVR_13_PCREL against undefined symbol `serialEventRun()'



Ja das wars dann schon wieder :(

Nun habe ich heraus gefunden, das es zu einem Fehler kommt, wenn man gleichzeitig snprintf benutzt.
Der Fehler tritt auf, wenn die Bittrate in virtual.wire mit
vw_setup(1000);
gesetzt wird.
Entferne ich dieses, oder das snprintf werden mir keine Fehler angezeigt.

Leider funktioniert es mit  itoa(humsens,hum,2); nicht, sonst hätte ich das schon verwendet.
Da kommen leider keine richtigen Zahlen raus.

Code: [Select]
void loop() {

 float tempsens=23;
 float humsens=51;
 
 itoa(humsens,hum,2);
 itoa(tempsens,temp,2);
 
 
 Serial.print("Temp: ");
 Serial.println(temp);
 Serial.print("Hum: ");
 Serial.println(hum);
 Serial.println("---------");
 
}


Dann kommt raus:

Temp: 10111
Hum: 1

Fehlt da irgend was ?


Serenifly

#1
Jan 24, 2016, 04:58 pm Last Edit: Jan 24, 2016, 05:01 pm by Serenifly
Liest du du dir nie die Dokus von Funktionen durch bevor du sie verwendest?
http://www.cplusplus.com/reference/cstdlib/itoa/

Der dritte Parameter bei itoa() ist die Basis des Zahlensystems. 2 = Binär. 10 = Dezimal


Und wie ich in dem anderen Thread gesagt habe. Passe bei printf() und Floats auf. Auf dem AVR werden keine Gleitkommazahlen unterstützt. Also entweder Integer übergeben oder Float auf int casten.

Der Fehler kommt zwar woanders her, aber wenn du dir nicht die Hintergründe verständlich machst wird das nie was.
Wie sieht es mit dem Speicher aus? printf() frisst da sehr viel davon, da die Funktion sehr umfangreich ist! Auf den winzigen Tinys kann das daher schnell Probleme verursachen.

Captain-DJ

Ach da hab ich dann total was verwechselt...sorry.
Ich dachte das wären die Anzahl der Stellen die übernommen werden.

Eigentlich wollte ich den Beitrag editieren, aber das Forum hat mich nicht gelassen.
Wenn das jetzt nicht funktioniert, werde ich nur Zahlen übertragen und fertig.
Dann mache ich eine Zuordnung für alle Dinge die ich brauche auf der Empfängerseite.

Jetzt muss erst mal der DHT11 laufen. Das andere bastel ich mir dann zusammen.
Oder ich kaufe mit 10 NANO (doof nur das ich mir gestern noch Atiny85 mit USB auf Platine bestellt habe)

Danke für den Hinweis.

Serenifly

itoa = integer to ascii

So eine Angabe braucht man erst bei dtostrf() für Floats, wo man die Mindestlänge des Gesamt-Strings und die Anzahl der Nachkommastellen angeben muss. Aber selbst wenn du tatsächlich Float Zahlen hast würde ich dir Raten die in Zehntel- oder Hunderstel-Grad als Integer zu übertragen.

Und passe bei sowas wie in dem anderen Thread gesagt mit den Puffer-Arrays auf. Der Puffer muss mindestens Platz für die Länge des Strings + 1 haben!

HotSystems

Jetzt muss erst mal der DHT11 laufen. Das andere bastel ich mir dann zusammen.
Oder ich kaufe mit 10 NANO (doof nur das ich mir gestern noch Atiny85 mit USB auf Platine bestellt habe)
Oder du nimmst einen Atmega328 StandAlone plus Usb-serialadapter.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Captain-DJ

Habe jetzt wei unterschiedliche Librarys ausprobiert, geht nicht !
Mit der einen kommt Null mit der anderen -999

Das kann doch nicht sein. Es gibt massenweise Beispiele mit einem Attiny85.
Ich versuche noch eine ältere IDE, ansonsten schönen Sonntag noch *genervtbin*

HotSystems

Habe jetzt wei unterschiedliche Librarys ausprobiert, geht nicht !
Mit der einen kommt Null mit der anderen -999

Das kann doch nicht sein. Es gibt massenweise Beispiele mit einem Attiny85.
Ich versuche noch eine ältere IDE, ansonsten schönen Sonntag noch *genervtbin*
Verwende mal die IDE 1.6.5.
Die ist sehr stabil.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Go Up