Kann mir jemand da weiter helfen, ich finde denn Fehler nicht. Muss mit
einem dht11 die Temperatur und die Luftfeuchtigkeit in einem Raum messen
mit einem Mikrocontroller der Familie 8051 Vlt hat jemand von euch schon
eine fertiges Projekt.
Hi
Ich verstehe Deinen Ansatz nicht ganz.
Zumindest der DHT22 (den 11er wollten die Chinesen nicht liefern, lange
ist's her) werden 40 Bits eingelesen, Welche aber wohl identisch zum
DHT11 angeordnet sind.
Auch die Prüfsumme (Summe der 4 Nutz-Bytes = CRC-Byte) findet sich in
Deinem Code.
Mir sagt der timer2() in Deinem Code nicht viel - erkläre bitte, was Du
Dir wo gedacht hast, was Du erwartest und was Du akut bekommst.
Mit 'geht nicht' wird's echt schwer, Hilfe zu leisten.
MfG
Also der zeigt mir keine werte an bin die ganze zeit schon dran.. möchte
die Temperatur und die luftfeuchtigkeit vom dht11 lesen mit dem arduino
war es recht einfach das zu programmieren jetzt haben wir in der schule
den mikrocontroller t89c51cc01 bekommen zeigt mir kein fehler an aber
lcd zeigt mir auch nix an. da tut sich gar nix einfach -.- und im
internet findet man auch kaum was darüber
Mir sagt der timer2() in Deinem Code nicht viel - erkläre bitte, was Du
Dir wo gedacht hast, was Du erwartest und was Du akut bekommst.
kann dazu relativ wenig sagen da mir der mikrcontroller sehr schwer
fällt. dachte vlt könntet ihr mir helfen wo was ich machen könnte oder
wo der fehler liegt wollte die daten vom dht 11 auslesen dacht echt
nicht das es so schwer werden würde.
Hi
Läuft das Display überhaupt?
Wenn nicht: Kein Wunder, daß Du nix siehst ;)
Wenn doch: Dann hast Du die Möglichkeit, Dir anzeigen zu lassen, wo der
µC sich gerade befindet, also eine '1' auf's Display schreiben, bevor Du
eine Funktion anspringst, eine '2', vor der Nächsten.
Wenn sich die Zahl nicht laufend (und sehr schnell) ändert, siehst Du,
wo der µC 'stirbt'.
Dann noch:
Das Programm ist ja irgendwo her, scheinbar aber nicht von Dir selber
geschrieben?
Die Funktionen timer1()/timer2() scheinen das Laufzeit-Kriterium der
Bits bzw. Pausen zu sein (müsste bei meinem DHT22-Programm das Listing
auch erst wieder durchlesen, da ASM, hilft Dir Das aber wohl hier nicht.
Was passiert bei z.B. bei
1
while(DHT11==1);
und warum?
Wer setzt 'DHT11' ungleich 1 ?
In Assembler muß man zwar ALLES selber machen, kann sich aber stur an's
Datenblatt halten.
Hier (also allgemein bei den C-Listings) sehe ich das Problem, daß man
sich an die Syntax einer unbekannten LIB halten muß.
Und: Richtig geraten, ich habe mit C noch Nichts am Hut gehabt :/
MfG
PS: freute mich in Deinem Post über das groß geschriebene 'Du'.
Leider hattest Du mich nur zitiert
Martin H. schrieb:> möchte die Temperatur und die luftfeuchtigkeit vom dht11 lesenMartin H. schrieb:> Muss mit einem dht11 die Temperatur und die Luftfeuchtigkeit ... messen
Möchtest du oder musst du?
Martin H. schrieb:> im internet findet man auch kaum was darüber
Hier gibt es Beispiele zum T89C51CC01:
http://www.keil.com/dd/chip/3134.htm
Aber Du hast ja ein fertiges Programm.
> Also der zeigt mir keine werte an
Das LCD zeigt an:
Temp=0 Luft=0
Oder gar nichts?
Was auch noch Sinn macht: in main in while (1) {} eine LED blinken zu
lassen, ob das Programm noch läuft oder abgestürzt ist.
Auch eine LED an dem DHT11 P0.0 ist zur Überwachung gut.
Patrick J. schrieb:> Hier (also allgemein bei den C-Listings) sehe ich das Problem, daß man> sich an die Syntax einer unbekannten LIB halten muß.
In C musst du dich an die C-Syntax halten und an sonst nichts.
Libs sollten dir spätestens dann nicht mehr ganz unbekannt sein, wenn du
einen Blick in die Doku und die Header-Datei geworfen hast ;-)
Hi
Syntax ist vll. das falsche Wort.
Irgend Wer hat sich ja eine ganze Menge Gedanken zu dieser Lib gemacht -
meist differieren meine Gedanken/Lösungsansätze bei fremdem Code ;)
Ist aber mein Problem ... vll. bin ich deshalb bei Assembler gelandet,
fand ich aber schon vor >20 Jahren
MfG
Vielen dank erst mal für die ganzen antworten. ja diesen code habe ich
vom einer Internet seit weil ich echt keine ahnung habe wie ich da
vorgehen soll. und ja leider muss ich es irgendwie hin kriegen bin schon
tage lang drann aber leider ohne erfolg -.- und habe noch 1 monat zeit
dann muss ich die arbeit abgeben.. und verzweifle an diesen projekt mit
einem arduino wäre das ganze kein problem findet man dutzend sachen im
internet.. -.-
diesen code habe ich von dieser internet seite
http://www.electronicwings.com/8051/dht11-sensor-interfacing-with-8051
Hi
Wird überhaupt was ausgegeben?
Mindestens 'Error' sollte dann regelmäßig im Display auftauchen.
Denke, Du hast ein Timing-Problem.
Das Protokoll ist ziemlich zeitkritisch (ok, bei 1MHz 18 Takte LOW-Pegel
zwischen den Bits, also durchaus noch Zeit).
Alternativ nur das erste Byte einlesen und auf's Display bringen, gerne
auch als Binär-Zahl.
Wenn Das klappt, bis Byte 2 einlesen, denke, spätestens hier hast Du das
Problem, da die Funktionsaufrufe zu viel Zeit brauchen und so ab dem
2.te Byte nur Müll raus kommt.
MfG
Also der zeig mir gar nix an leider nicht mal error würd das ja gerne
selber schreiben denn code aber habe keine ahnung wie ich da vorgehen
soll die der hat da ne header datei eingefügt mit reg51.h vlt ist das
das problem wenn ich den header einbinde zeig er mir nur fehler an -.-
muss ich mal versuchen vlt liegt das echt daran das er mir nur müll
aussgibt ^^
Hi
Dann versuche erst, eine LED blinken zu lassen - wirklich, das ganz
banale Zeug zuerst!
Dann, ob das Display zur Anzeige von 'egal was' zu bewegen ist - wird
ein Balken auf dem Display ausgegeben? (-> Display fehlerhaft/gar nicht
initialisiert)
Hier müssen wir den Fehler eingrenzen, bis wohin der µC überhaupt kommt
und wo es hakt.
MfG
das würd nicht alles vlt ohne timer funktionieren? nur die werte aus dem
dht11 aufnehmen und ausgeben lassen ardunio ist es so einfach aber 8051
ist da schon etwas komplizierter wenn ich header daten einbinden würde
wäre es auch einfacher aber egal was ich einbinden tu der zeigt mir
immer zieg fehler an. :/
Hi
Da das Timing beim DHT echt fix ist, wird Das ohne Timer Nichts.
Selber habe ich Das so angegangen, daß ich einen Timer mitlaufen lasse
und diese Laufzeit bei jedem Bit speicher - in Deinem Code wäre Das das
c = (c<<1)|(0x01);
bzw
c = (c<<1);
Wenn der Zähler überläuft, habe ich einen Fehler und dieses Auslesen ist
beendet, sonst wird bei Low-High-Flanke der Timer genullt und 'auf ein
Neues'.
So weit kommen wir aber bei Dir gar nicht.
Da mir Dein µC gänzlich unbekannt ist, kann ich auch nur Tips in irgend
eine Richtung geben, Umsetzen musst Du Das komplett selber.
MfG
Martin H. schrieb:> ardunio ist es so einfach aber 8051 ist da schon etwas komplizierter
Arduino ist nur einfach wenn es jemand anders schon gemacht hat :-)
Aber warum machst Du es dann nicht mit Arduino?
Und wenn mit T89C51CC01 vielleicht ist es gar nicht das Programm sondern
ein elektrisches Problem. Hast Du genau den Schaltplan wie hier?
Schwingt der Quarz überhaupt?
http://www.electronicwings.com/8051/dht11-sensor-interfacing-with-8051
hi
vielen danke für deine hilfe ich versuch noch dies sachen mal
umzusetzten halt dich auf dem laufenden hoffe bekomm das hin hab noch
ein heft da von der schule als ein handbuch für denn mikrocontroller
würd es als pdf datei reinstellen wenn es dir weiter helfen würd^^
Muss es mit diesem mikrcontroller machen ist so vorgegeben.. also hab es
so übernommen bis auf das lcd display.. also kann mal ein bild schicken
von dem mikrcontroller aber denk wird nicht viel helfen
mfg
Hi
Da ist doch eine Anzeige :)
Wenn das Einlesen nur 0 liefert, passt auch die Prüfsumme (0+0+0+0=0 ...
passt).
Lasse die Werte für t1 in der mail() stur hochzählen (aka t1++;) und
NICHT per datei(); setzen.
Ändert sich die Anzeige auf dem Display?
Gleiches für t2, l1, l2
MfG
hi
also hab ein neus programm programmiert nur um zu sehen ob ich im
display was angezeigt bekomm also das alte hab ich gelöscht xD versuch
jetzt ein programm zu schreiben vlt fällt mir da mehr ein. ^^ bei dem
code von oben zeigt er mir nix an auf dem display.. bin jetz ganz am
anfang wieder
#include "t89c51cc01.h"
#include "fvs_bib_lcd.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
sbit DHT11=P0^0;
int h,t;
char txt[10];
char txt1[10];
char txt2[10];
void main (void)
{
init_lcd();
while(1)
{
pos(0);
sprintf(txt,"Temp=%i",(int)t);
lcdsend(txt);
pos(9);
sprintf(txt1,"Luft=%i",(int)h);
lcdsend(txt1);
//pos(40);
//sprintf(txt,"WandT=%2.0f",(float)w);
//lcdsend(txt);
//pos(49);
//sprintf(txt,"Taup=%2.0f",(float)p);
//lcdsend(txt);
}
}
und somit in dem stand xD
Hi
Martin H. schrieb:> void antwort ()> {> while(DHT11==1);> while(DHT11==0);> while(DHT11==1);>> }
Wenn Das dort durch ging, müsste irgendwo der Bus hochgezogen worden
sein, da auf beide Pegel gewartet wird.
Da die Display-Ausgabe erst hinter diesen Bedingungen stehen, müsste der
Bus halbwegs passen.
In der While-Schleife vermisse ich noch ein
h++;
oder
inc h
vor dem pos(0); um sehen zu können, ob das Display aktuell Daten erhält.
MfG
also mit dem vorwiederstand hab ich weg gelassen wollt es nur mal testen
ob er mir überhaupt etwas anzeigt. also sicher bin ich mir nicht aber so
weit ich weis ist der port 0.0 komplett frei fehler zeigt er mir keinen
an kann auch da programm laufen lassen nur bekomm auf dem display nix
angezeigt.. bin auch schon seit tagen dran und leider ohne erfolg -.-
Hi
Wie ist die aktuelle Lage?
Was ist wie angeschlossen?
Ist das Display beleuchtet?
Ist 'Irgendetwas' auf dem Display zu sehen?
Hast Du andere Beispiel-Codes, Die auf dem Board laufen und eine der
LEDs blinken lassen?
Hätte gerne zu ALLEN der Fragen eine Antwort.
Es würde auch nicht schaden, wenn Du Dir die Zeit nehmen würdest, hier
und da einen großen Buchstaben zu verstecken - ja, geht auch mit dem
Handy.
Wenn Du eh am Rechner bist, sollte das Posten am Monitor um Welten
entspannter von Statten gehen, als per Smart-Phone.
Ich habe gelesen, daß Dir die Zeit davon läuft - immerhin einen Monat
haben wir wohl noch.
Bitte bemühe Dich, und das Helfen etwas leichter zu machen.
Gerade mit dem auch uns unbekanntem Controller können wir nur versuchen,
Dich in die richtige Richtung zu schubsen, die angedachten Anpassungen
und die Antworten auf die gestellten Fragen liegen bei Dir.
So, unsere Posts haben sich überschnitten:
Glückwunsch!!
Das Display läuft und wir bekommen aktuelle Daten angezeigt.
Nun den Code von Oben wieder zurück kopiert und in den einzelnen Phasen
der Abfrage eine Zahl auf das Display ausgeben, damit wir sehen, wie
weit wir kommen bzw. wo es ggf. hakt.
Martin H. schrieb:> init_lcd();> frage();
... Anzeige auf's Display "Pkt 1"
> antwort();
... Anzeige auf's Display "Pkt 2"
> t1=datei();
... Anzeige auf's Display "Pkt 3"
> t2=datei();
... Anzeige auf's Display "Pkt 4"
> l1=datei();
... Anzeige auf's Display "Pkt 5"
> l2=datei();
... Anzeige auf's Display "Pkt 6"
> summe=datei();
... Anzeige auf's Display "Pkt 7"
MfG
Martin H. schrieb:> vorwiederstand hab ich weg gelassen
!!! Den kannst Du nicht weglassen ohne den geht gar nichts. Ein
1-Wire-Bus braucht einen Pull-Up und der T89C51CC01 hat an P0.0 keinen
internen Pull-Up. Das ist wohl genau der Grund warum es am Arduino ging,
da ist interner Pull-Up.
wer dir versuchen so viel zu sagen damit es dir leichter fällt
Wie ist die aktuelle Lage?
Was ist wie angeschlossen?
Ist das Display beleuchtet?
Ist 'Irgendetwas' auf dem Display zu sehen?
Hast Du andere Beispiel-Codes, Die auf dem Board laufen und eine der
LEDs blinken lassen?
mit dem oben kopierten code ziegt das display mir nix an so weit waren
wir.
denn dht 11 habe ich auf 5v versorgungspannung + und GND -
angeschlossen auf dem port0 für die daten habe ich denn port 0.0
angeschlosse habe ein bild vom Port0 eingefügt. ja das display ist
beleuchtet aber bekomme leider nix angezeigt. ja habe noch paar Bsp
programme wie man timer einstellt oder leds zum blinken bringt werde als
anhang bei fügen.
lothar gast
Hab ich jetzt mit einem vorwiederstand gemacht also es ist trotdem genau
gleich wie davor da tut sich leider auch nix.. komm nicht auf denn
fehler weis auch nicht was ich machen soll leider -.-
Martin H. schrieb:> vorwiederstand
Also um sicherzugehen: ein Vorwiderstand ist was anderes als ein
Pull-Up-Widerstand. Zeig mal Foto wo Du den angeschlossen hast.
Hi
hab denn fehler gefunden also ich bekomm keine anfrage auf den dht11
bekomm an dem port kein high bit und kein low bit raus 0 und keine 1
deswegen bringt der sensor keinen wert heraus..
mfg
Martin H. schrieb:> Hi hab denn fehler gefunden
Das ist nicht Dein Ernst, oder?
Handgeschriebener Quelltext als Foto?
Es heißt übrigens "den". Mit einem "n". Das wird mit einem gedehnten
"e" ausgesprochen.
"Denn" ("Wann kommst Du denn?" "Bist Du denn mit Deinen Hausaufgaben
schon fertig?") wird mit kurzem "e" ausgesprochen.
Die Konsonantenverdoppelung ("nn") wird dann angewandt, wenn der davor
stehende Vokal kurz ausgesprochen wird.
Klasse, Masse, Kasse. Aber: Hase, Vase, Phase.
Wenn, denn, wann. Aber: Wen und den. ("Wen hast Du gerade beschenkt? Den
Peter?")