Hallo alle.
Ich habe wieder Problemchen. Und zwar spiele ich nezuerdings mit OCXOs
rum und suchte nach einem Thermometer mit zwei Stellen hinter dem Komma.
Dann habe ich genau das gefunden was ich suchte und zwar hier:
http://www.dl8ma.de/Arduino/Thermometer_Dallas_ds1820/
Mit unten angehangenem Code. Es soll der DS1822 genutzt werden.
Vorweg, ich habe nicht die geringste Ahnung vom Programmieren. Fuses bei
einem AVR setzen, kleine Aenderungen, das war es auch schon.
Also flux einen Arduino und solch ein passendes LCD bestellt und dachte
einfach mal eben den Code kompillieren und dann geht das. Ja von wegen.
Der Quelltext ist wohl schon aelter, musste ich dann feststellen.
In der aktuellen Umgebung, Arduino 1.0.5 gibt es die OneWire.h nicht
mehr. Diese habe ich dann einfach durch die Wire.h ersetzt die schon in
den libraries drin steht. Hat auch etwas weniger Fehler gemacht.
Mit der LCD4Bit_mod.h kann ich nun garnichts anfangen. Da habe ich mit
einer cristal.h (oder so aehnlich) rumgespielt aber da kamen dann so
viele Fehler das ich ueberhaupt nicht mehr durchgeblickt habe.
Kurz und schmerzlos.
Ich mag jetzt kein C lernen, mich mit dem Arduino beschaeftigen, also
ganz bei Null anfangen nur wegen diesem bloeden Programm. Aber leider
ist genau dieses Progamm ideal fuer meine Zwecke.
Waere vielleicht jemand so nett und koennte mir den unteren Code so
anpassen, dass ich ihn mit der aktuellen Umgebung kompillieren kann ?
Die LCD Belegung bekomme ich dann schon hin.
Tuete Gummibaerchen oder eine andere Kleinigkeit bin ich gerne bereit
dafuer abzudruecken.
1
/*
2
Thermometer mit Dallas 18xx und LCD-Shield
3
4
03.09.2011 Jürgen Mayer, DL8MA, Grossheppach
5
6
Dieser Beispielcode ist public domain.
7
8
*/
9
10
#include<OneWire.h>
11
#include<LCD4Bit_mod.h>
12
13
LCD4Bit_modlcd=LCD4Bit_mod(2);
14
15
OneWireds(10);// Datenleitung für Tempatursensor Dallas DS18xx -> Pin 10
16
17
charbuffer[20]="";// Speicherbereich für Datenkonvertierung
18
19
voidsetup(void){
20
21
byteaddr[8];
22
Serial.begin(9600);
23
lcd.init();
24
lcd.clear();
25
26
if(!ds.search(addr)){// Sensor angeschlossen?
27
ds.reset_search();
28
lcd.printIn("Sensor nicht");
29
lcd.cursorTo(2,0);
30
lcd.printIn("gefunden :-(");
31
return;
32
}
33
34
lcd.printIn("Thermometer");// Ausgabe des Sonsortyps
35
36
if(addr[0]==0x10oraddr[0]==0x28)// 1-Wire family code
SWLer schrieb:> Es soll der DS1822 genutzt werden.
Nur so aus Interesse - Du hast schon gelesen, dass die Genauigkeit um 2
Grad schwanken kann? Wozu dann 2 Nachkommastellen?
Wenn Du Dich nicht damit beschäftigen willst, dann kauf doch lieber ein
fertiges Digitalthermometer.
Die Arduino Umgebung habe ich eben nochmal komplett geloescht und neu
installiert.
Version ist 1.0.5
Der Kompiler ist wohl dieser hier
~> avr-gcc --version
avr-gcc (GCC) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.
Rainer Unsinn schrieb:> Nur so aus Interesse - Du hast schon gelesen, dass die Genauigkeit um 2> Grad schwanken kann? Wozu dann 2 Nachkommastellen?
Die "Genauigkeit" interessiert mich nicht, es interessiert mich nur wie
weit die Temperatur unter bestimmten Verhaeltnissen, wie Lueften, Fan
an/aus, Gehaeuse offen/zu, Heizfasen usw. abweicht. Ob das nun auf 2°C
daneben liegt ist nicht wichtig. Ich brauche nur die Kurve und das ginge
damit perfekt, da ich es ja per RS232 auslesen koennte.
Rainer Unsinn schrieb:> Wenn Du Dich nicht damit beschäftigen willst, dann kauf doch lieber ein> fertiges Digitalthermometer.
Genau danach hatte ich ja gesucht, aber das sollte auch bezahlbar sein,
sofern man denn ueberhaupt was findet. Vor allem mit logging Funktion.
SWLer schrieb:> Genau danach hatte ich ja gesucht, aber das sollte auch bezahlbar sein,> sofern man denn ueberhaupt was findet. Vor allem mit logging Funktion.
Nun ja, entweder bauen oder kaufen. Bauen kannst du nicht, also....
> Ich mag jetzt kein C lernen, mich mit dem Arduino beschaeftigen, also> ganz bei Null anfangen nur wegen diesem bloeden Programm. Aber leider> ist genau dieses Progamm ideal fuer meine Zwecke.
Du willst selber also keine Zeit opfern, aber andere sollen ihre Zeit
opfern um dir Geld zu sparen? Schon dreist!
cyblord ---- schrieb:> aber andere sollen ihre Zeit> opfern um dir Geld zu sparen?
Na 'ne Türe Gummibärchen kannst Du Dir schon verdienen! Wenn Du gut
verhandelst, vielleicht sogar 2! :-)
Rainer Unsinn schrieb:> den Autor vom Programm hast Du schon per EMail gefragt, ob er die> Bibliothek noch hat?
Nein, habe ich nicht, da er mir schon das Programm zur Verfuegung
gestellt hat und er wohl kein Interesse hat es zu aktualisieren.
Vielleicht geht er auch einfach davon aus das es so einfach ist das es
jeder selber kann.
Sollte es aber jemand aktuell machen, werde ich es ihm
selbstverstaendlich schicken, es sollen ja auch andere davon profitieren
koennen.
Die Bibliotheken sind nicht das Problem, die Links stehen ja dabei. nur
dann meckert der Kompiler das er zu neu ist.
Ich hatte schon versucht das mit einer alten Version in einer Virtuellen
Maschine zu machen, aber wenn ich den Compiler dazu installieren
moechte, nimmt er natuerlich den Aktuellen.
cyblord ---- schrieb:> Du willst selber also keine Zeit opfern, aber andere sollen ihre Zeit> opfern um dir Geld zu sparen? Schon dreist!
Wieso ist das dreist ? Ich kann es einfach nicht. Und warum muss ich
jetzt von Grund auf C lernen, nur weil ich ein einziges Programm
geaendert haben moechte ?
Wenn hier alle so dreist waeren, koennte man dieses Forum automatisieren
und auf eben diese Antworten begrenzen.
Wie z.B. welchen Widerstand brauche ich fuer diese LED bei der un der
Spannung ? Autoantwort "Studiere Elektrotechnik".
Was ist nun also dreist ?
Ich habe nur nach Hilfe gefragt, finde ich nicht "Dreist".
cyblord ---- schrieb:> Du willst selber also keine Zeit opfern, aber andere sollen ihre Zeit> opfern um dir Geld zu sparen? Schon dreist!
Fuer jemanden der sich damit auskennt ist das vielleicht eine Sache von
5min. Ich dagegen habe ueberhaupt keine Ahnung und muesste
wahrscheinlich Monate investieren. Danach kann ich dann alles wieder
vergessen, weil es mich nicht interessiert und wahrscheinlich auch nie
wieder brauchen werde.
Habe ich gelesen und steht auch oben, ist eben alles zu alt. Deswegen
hatte ich sie gegen die wire.h getauscht. Einige Fehler sind dann auch
verschwunden, aber das hilft nichts, so lange ich das Problem mit der
LCD4mod und dem Kompiler nicht geregelt bekomme. Es sind einfach ZU
viele Fehler auf einmal.
Hi
>Deswegen hatte ich sie gegen die wire.h getauscht.
Der DS-Chip hat eine 1Wire-Schnittstelle (->OneWire). Wire ist aber beim
Arduino die TWI-Schnittstelle (I2C). Also etwas vollkommen anderes.
Kein Wunder wenn du Fehlermeldungen bis zu Abwinken bekommst.
MfG Spess
SWLer schrieb:> Habe ich gelesen und steht auch oben, ist eben alles zu alt.
Die OneWire-Library gibt es auch als aktuelle Version für die
Arduino-IDE ab 1.0 oder höher:
http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip
Musst Du halt die Library installieren, wenn Du sie verwenden möchtest.
Von der merkwürdigen LCD-Library in Deinem Sketch habe ich allerdings
noch nie etwas gehört. Das würde ich auf die standardmäßige
LiquidCrystal-Library umschreiben, die zur Arduino-Software dazugehört.
ds.write(0x44,1);// Start Konvertierung, mit power-on am Ende
49
50
delay(750);// Wartezeit
51
52
present=ds.reset();
53
ds.select(addr);
54
ds.write(0xBE);// Messwert ausgeben
55
56
for(i=0;i<9;i++){// 9 Bytes einlesen
57
data[i]=ds.read();
58
}
59
60
LowByte=data[0];
61
HighByte=data[1];
62
TReading=(HighByte<<8)+LowByte;
63
SignBit=TReading&0x8000;
64
if(SignBit)
65
{
66
TReading=(TReading^0xffff)+1;
67
}
68
if(addr[0]==0x10oraddr[0]==0x28)// Faktor abhängig vom Sensortyp
69
Tc_100=(6*TReading)+TReading/4;// multiply by (100 * 0.0625) or 6.25
70
if(addr[0]==0x22)
71
Tc_100=(TReading*100/2);
72
73
Whole=Tc_100/100;// Ganzzahlen und Brüche trennen
74
Fract=Tc_100%100;
75
76
/* Ausgabe auf serieller Schnittstelle */
77
78
if(SignBit)// negative Werte ermitteln
79
{
80
Serial.print("-");
81
}
82
Serial.print(Whole);
83
Serial.print(".");
84
if(Fract<10)
85
{
86
Serial.print("0");
87
}
88
Serial.print(Fract);
89
Serial.println();
90
91
/* Ausgabe auf LCD-Shield */
92
93
lcd.setCursor(0,1);
94
if(SignBit)// negative Werte ermitteln
95
{
96
lcd.print("-");
97
}
98
lcd.print(itoa(Whole,buffer,10));
99
lcd.print(".");
100
if(Fract<10)
101
{
102
lcd.print("0");
103
}
104
lcd.print(itoa(Fract,buffer,10));
105
lcd.print(" Grad");
106
}
Für einen probeweise drangehängten Testsensor vom Typ DS18B20 mußte ich
allerdings die if-Bedingung in der Zeile mit dem Kommentar "Faktor
abhängig vom Sensortyp" vertauschen, damit er die richtige Temperatur
anzeigt. Wenn bei Dir die falsche Temperatur angezeigt wird, tausche die
Bedingung zurück.
SWLer schrieb:> In der aktuellen Umgebung, Arduino 1.0.5 gibt es die OneWire.h nicht> mehr. Diese habe ich dann einfach durch die Wire.h ersetzt die schon in> den libraries drin steht.
Voellig falsch: Hat es nie in der Umgebung gegeben. Musste man schon
immer von Hand installieren. Einfach hier runterladen:
http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip
und als Library hinzufuegen. Dann sollten schon mal alle OneWire
Probleme verschwinden.
SWLer schrieb:> Ich mag jetzt kein C lernen, mich mit dem Arduino beschaeftigen, also> ganz bei Null anfangen nur wegen diesem bloeden Programm. Aber leider> ist genau dieses Progamm ideal fuer meine Zwecke.
Tja, dann wird das wohl nichts.
ZigZeg
Jürgen S. schrieb:> Von der merkwürdigen LCD-Library in Deinem Sketch habe ich allerdings> noch nie etwas gehört. Das würde ich auf die standardmäßige> LiquidCrystal-Library umschreiben, die zur Arduino-Software dazugehört.
Komisch, dass habe ich genau so versucht, es gibt ja genuegend
Beispiele wo das so drin steht. Aber beim kompilieren gab es immer
Fehler.
Ich mache das jetzt nochmal alles neu und lade die Dateien nochmal
frisch runter.
Das hast Du jetzt mit der aktuellen IDE gemacht ? Also mit der 1.0.5 ?
Und welche Kompilerversion ?
Kai S. schrieb:> Voellig falsch: Hat es nie in der Umgebung gegeben. Musste man schon> immer von Hand installieren. Einfach hier runterladen:
Stimmt, hatte ich auch mit der LCD4Bit_mod verwechselt, die gibt es seit
Version 0023 oder so nicht mehr, dann aendert sich das in diese
LiquidCrystal.h die ja schon drin ist.
Die OneWire.zip hatte ich natuerlich installiert. Die fehlenden
libraries stehen ja auch in der Anleitung.
Kai S. schrieb:> SWLer schrieb:>> Ich mag jetzt kein C lernen, mich mit dem Arduino beschaeftigen, also>> ganz bei Null anfangen nur wegen diesem bloeden Programm. Aber leider>> ist genau dieses Progamm ideal fuer meine Zwecke.>> Tja, dann wird das wohl nichts.
Warum nicht ? Bei Jürgen S. (jurs) funktioniert es doch. Da werde ich
wohl noch irgendeinen anderen Fehler haben. Und ich hoffe der ist gleich
mit der Neuinstallation verschwunden.
SWLer schrieb:> Das hast Du jetzt mit der aktuellen IDE gemacht ? Also mit der 1.0.5 ?> Und welche Kompilerversion ?
Der von mir gepostete Code kompiliert unter Arduino 1.0.5 fehlerfrei für
die 8-Bit Controller-Boards (UNO, MEGA etc.) zu einem funktionierende
Sketch, wenn man eine passende OneWire-Library richtig installiert hat.
Inwieweit der Sketch dann bei Dir tatsächlich "funktioniert" hängt
natürlich auch davon ab, ob alles richtig angeschlossen und eingestellt
ist.
Also insbesondere Baudrate 9600 Baud im seriellen Monitor für die
Serial-Ausgabe, die Anschluss-Pins des LCD-Displays so wie es im Sketch
definiert ist, und der Sensor am angegebenen Pin mit einem
PullUp-Widerstand angeschlossen.
Hi,
funktioniert einwandfrei. Ich habe auch das Sainsmart - LCD, brauchte da
also nichts zu aendern.
An was das jetzt genau lag bin ich ueberfragt.
Ich habe jetzt einfach alles geloescht, neu installiert, nur die
OneWire.h eingebunden, ist ja nur ein Klick, Deinen Quelltext
eingefuegt, abgespeichert und kompiliert. Hochgeladen, geht. Also
zumindest zeigt er "Sensor nicht gefunden" an, wie es sein soll.
Nur habe ich doof statt der Dallas Tuete eine Tuete BC irgenwas
Transistoren im halbschlaf eingepackt. Also ausprobieren kann ich das
leider erst morgen. Ich bin aber ueberzeugt das jetzt alles geht wie es
soll. Ich gebe dann eine Rueckmeldung.
Jedenfalls vielen Dank, Du hast mir sehr geholfen.
Wegen den Gummibaerchen melde ich mich noch. Und sag nicht nein, ich
hasse es wenn jemandem geholfen wird und man kann sich nicht bedanken
:o)
Ich meine ich haette mich hier mal registriert, kann aber den Zugang
nicht finden. Bekommen wir aber hin.
Einen fehler habe ich allerdings noch. Oder was heisst Fehler, eine
Warnung, und die soll man nicht so genau nehmen habe ich mal gelesen.
/usr/bin/avr-ld: warning: -z relro ignored.
Wenn ich in der avr-ld in die Hilfe gucke, gibt es den Befehl -z relro
garnicht. Nur von woher wird der aufgerufen ? Weiss das zufaellig jemand
? Ist nur interessehalber, funktioniert ja anscheinend auch so. Aber
vielleicht kann man das auch noch beheben, dann waere alles "sauber".
SWLer schrieb:> funktioniert einwandfrei. Ich habe auch das Sainsmart - LCD, brauchte da> also nichts zu aendern.> An was das jetzt genau lag bin ich ueberfragt.
Am LCD-Keypad-Shield ist das hier absolut tödlich, wie es in Deinem
Sketch stand, wenn Du das nicht geändert hast
1
OneWireds(10);
Pin-10 am LCD-Keypad-Shield ist nämlich der Pin für die Steuerung der
Hintergrundbeleuchtung des LCD-Displays.
Denselben Pin kannst Du natürlich nicht zweimal verbraten, einmal für
die Steuerung der Hintergrundbeleuchtung am LCD und einmal für den
OneWire-Bus zum Temperaturmessen.
Also lieber den Analogpin A0 als Digitalpin zweckentfremden als Pin-10
doppelt verbraten wollen.
Jürgen S. schrieb:> Am LCD-Keypad-Shield ist das hier absolut tödlich, wie es in Deinem> Sketch stand, wenn Du das nicht geändert hast> OneWire ds(10);
Hi,
Danke fuer den Hinweis, aber Du hast in dem oberen, "nicht
funktionierenden" Programm geguckt. Juergen hatte das auf A0 geaendert,
welcher aber bei mir durch einen Tester belegt ist. Es gibt mindetsens
100 verschiedene Sainsmart - LCD - Boards.
ALSO LEUTE !!
Ich kann nicht verstehen wie Ihr mit diesen voellig ueberteuerten
Arduino QUATSCH klar kommt.
Nun habe ich mir einen Arduino UNO Ver. 1 gekauft. Dazu brauchte ich ein
Schield, wie in der Beschreibung, nur um einen Widerstand zu plazieren,
dazu das Sainsmart LCD. Der ganze Spass kostete so um die 50.- und ich
bin echt enttaeuscht. (von der Hardware) Das das Programm nicht
funktionierte, dafuer kann der Autor nix. Unahnung meinerseits.
Okay, also habe ich nun von Juergen das !!! fertige und funktionierende
!!! Programm bekommen, nochmal herzlichen Dank, .....
ABER
Erst mal passt das Shield nicht an das Sainsmart. Ich dachte Arduino
waere ein "System", also zusammenstecken und gut. Ja Anfaenger, viel
Spass!
Dann sucht man sich einen Wolf nach den Belegungen/Schaltbildern, weil
es mindestens 100 verschiedene Versionen und voellig bekloppte
Belegungsbezeichnungen gibt.
Irgendwann habe ich aufgegeben und das Programm ueber die Konsole
kopiliert. Diesen AtMega in mein STK500 gesteckt, was easy war, weil da
die Belegungen so bezeichnet sind wie es sein soll.
Per AVRDude drauf geschoben, LCD und Dallas angeschlossen und alles ist
gut.
Sind Arduino Nutzer Masochisten, oder was soll das Alles ?
Keine gescheite Pinbelegung. Wie lange habe ich gesucht bis ich
rausbekommen habe wo dieser abge.... Pin 10 ist!
Warum bitte benennt man die Beinchen vom ATMega nicht so wie im
Datenblatt?
Ganz doll war es dann beim Sainsmart - LCD - Board. Da stand dann
garnichts mehr drauf. Zur Kroenung ist das auch noch eine schwarze
Platine wo man nix sieht. ohne Durchgangspruefer, kein Plan.
Nun laeuft es auf dem STK500 wie es soll, weil auf dem naemlich alles so
drauf steht wie es auch im Datenblatt steht.
Ich persoenlich werde nie wieder was mit dem Arduino zu tun haben
wollen.
Danke an alle, aber dieser Arduino .... ist fuer mich gestorben. Das ist
einfach nur Krampf. (Von einer absoluten C - Niete festgestellt)
@Juergen
Du hast Post
SWLer und fennec ist das Selbe, ich hatte nur meinen Zugang vergessen.
Ach so, von wegen Arduino und Preis.
Die ganze Geschichte kostete mich um die 50.-
Das ganze Spiel geht mit einem ollen Mega8 genauso gut. Dazu ein
bisschen Lochraster, ein LCD, der Dallas kostet etwas, aber mit 15.-
kommt man locker hin.
Programmiergeraet vorausgesetzt. Aber das braucht man ja eh
Hauptsache was geschrieben, oder wie interpretierst Du Deinen Beitrag ?
Du willst einen Ferrari? Bau Dir doch einen.
Warum halten die, die keine Ahnung haben, nicht einfach die Fresse
(Dieter Nuhr)