Sensorwerte werden bei zeitdiskreter Abfrage nur unregelmäßig dargestellt

OP #3190456
Hi Leute,

ich habe einen digitalen Sensor (HYT-221) für Relative Luftfeuchtigkeit 
und Temperatur an meinen Atmega32 angeschlossen und möchte die Werte in 
Labview darstellen.
Ich will die Werte folgendermaßen auslesen: Die Werte sollen nur dann an 
den Rechner übertragen werden, wenn Labview danach fragt. Somit schickt 
Labview in regelmäßigen Abständen einen kleinen String an den 
controller, welcher daraufhin die Werte auslesen und ausgeben soll.
Problem: Es werden nur jedes zweite Mal richtige Werte dargestellt. Die 
dazwischen sind negativ oder sehr gering. Ich weiß nicht, wo er die her 
hat. Außerdem reagiert der Sensor auf Änderungen nur sehr spät. Das ist 
innerhalb meiner Anwendung nicht besonders tragisch, ich würde aber 
einfach gerne wissen warum. Hat jemand von euch Ideen? Danke!!!

Mein Basic-Programm ist so aufgebaut:
1
Do
2

3
Input #1 , Eingabe
4

5
Wert = Left(eingabe , 1)
6

7
If Wert = "1" Then
8

9
   Sound Portd.7 , 400 , 450
10
   Measurement
11

12
End If
13

14
Loop
15

16

17

18
Sub Measurement()
19

20
I2cstart
21
   I2cwbyte Hyt221write
22
I2cstop
23

24
I2cstart
25
   I2cwbyte Hyt221read
26
   I2crbyte Humhigh , Ack                                   ' Auslesen der 4 Bytes
27
   I2crbyte Humlow , Ack
28
   I2crbyte Temphigh , Ack
29
   I2crbyte Templow , Nack
30
I2cstop
31

32

33
Humidity = Humhigh * 256                                    ' Umrechnen von Humhigh und Humlow in 16Bit-Wert
34
Humidity = Humidity + Humlow
35
Humidity = Humidity And &H3FFF                              ' Rauskürzen der Status-Bits
36

37
Temperature = Temphigh * 256                                ' Umrechnen in 16-Bit-Wert
38
Temperature = Temperature + Templow
39
Temperature = Temperature / 4                               ' Verschieben um 2 Bits nach Rechts
40

41

42
Print Humidity ; Temperature
43

44

45
End Sub
Gast #3190485
Hi

>Die Werte sollen nur dann an
>den Rechner übertragen werden, wenn Labview danach fragt. Somit schickt
>Labview in regelmäßigen Abständen einen kleinen String an den
>controller,...

BASCOM verwendet Nullterminierte Strings. Wie sieht denn der von Labview 
gesendete String aus?

MfG Spess
#3190562
R. W. schrieb:
> Außerdem reagiert der Sensor auf Änderungen nur sehr spät. Das ist
> innerhalb meiner Anwendung nicht besonders tragisch, ich würde aber
> einfach gerne wissen warum. Hat jemand von euch Ideen? Danke!!!


Natürlich habe ich Ideen.
Was, zum Bleistift, macht der

   Sound Portd.7 , 400 , 450

da drinnen? Und du wunderst dich, dass das zäh geht?
#3190568
> Ich weiß nicht, wo er die her hat.

Fehler suche so wie immer:

Schau nicht nur auf das Ergebnis, sondern auch auf die Ausgangswerte. In 
deinem Fall dann eben auf die Bytes, die du vom Sensor bekommst bzw. den 
String, den sich LabView von der SChnittstelle holt.
Gast #3190692
Hi

>@ Spess: Ich habe ein Wagenrücklaufsymbol an meinen eigentlichen String
>mit drangehängt. Das habe ich schon mit beachtet.

Genau das ist ja meine Befürchtung/Vermutung. Was ist, wenn INPUT auf 
ein NULL-Zeichen wartet, aber in deinem String keins enthalten ist?

MfG Spess
OP #3190699
Ich weiß jetzt, woran es liegt. Er gibt mir bei jedem zweiten Mal den 
String "1" zurück - also quasi den String, der eigentlich nur an den 
Atmega gesendet werden soll. Habt Ihr eine Idee, weshalb er das macht?
#3190704
spess53 schrieb:

> Genau das ist ja meine Befürchtung/Vermutung. Was ist, wenn INPUT auf
> ein NULL-Zeichen wartet, aber in deinem String keins enthalten ist?

Laut
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/uart_rs232_vom_computer/

wartet INPUT auf einen CR. Das würde also stimmen.

Aber das ist interessant: INPUT macht ein Echo. Das würde ich gleich mal 
ausschalten. Das könnte auch der Grund sein, warum die Rückmeldung der 
Werte nicht richtig bzw nur jedes 2. mal funktioniert.
#3190719
R. W. schrieb:
> Spess, Du bist der Beste. Das mit dem lokalen Echo des Befehls Input ist
> das Problem. Ich verwende jetzt Inkey().

Kann man machen.
Man hätte aber auch einfach mit
  ECHO OFF
das Echo einfach abschalten können.


Manchmal frag ich mich ehrlich wozu ich mir eigentlich die Mühe mache, 
für andere die Tutorien im Web zu suchen, die zu lesen und dann auch 
noch die relevanten Links zu posten, wenn es eh kein Schwein 
interessiert.
Gast #3190724
Hi

>Spess, Du bist der Beste. Das mit dem lokalen Echo des Befehls Input ist
>das Problem. Ich verwende jetzt Inkey(). Läuft 1A. Sogar die Verzögerung
>ist weg.

Das war Karl-Heinz.

MfG Spess
#3190725
@ Karl Heinz Buchegger (kbuchegg) (Moderator)

>Manchmal frag ich mich ehrlich wozu ich mir eigentlich die Mühe mache,
>für andere die Tutorien im Web zu suchen, die zu lesen und dann auch
>noch die relevanten Links zu posten, wenn es eh kein Schwein
>interessiert.

Helfersyndrom. Kein Witz.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.