Forum: Mikrocontroller und Digitale Elektronik Analoge Spannung an Digitalem Pin


von Christian U. (alfki)


Lesenswert?

Hi,
Ich benutzte eine Platine, welche in einem Kammmuster 
ineinandergreifende Leiterbahen, die sich gerade nicht berühren, 
benutzt, um mit meinem Arduino zu erkennen ob es regnet. Wenn ich die 
Platine zu einem analogen Eingang stecke bekomme ich je nach Wassermenge 
auf der Platine Spannungswerte zwischen 1-4 V , was ja auch so gewollt 
ist. Ich plane aber alle meine analogen Pins anderswo zu verwenden und 
möchte die Platine deshalb an einen digitalen Pin anschließen ( Müsste 
dann ab 0,6*VCC , also 3V, auf HIGH schalten). Wenn ich das jedoch mache 
lese ich am digitalen Eingang überhaupt kein Signal.

Kann mir hierbei jemand behilfliche sein?

von code (Gast)


Lesenswert?

Code?

von Christian U. (alfki)


Lesenswert?

1
 bool RaindropDigital;
2
float RaindropAnalog;
3
float RaindropSpannung;
4
5
void setup() {
6
pinMode(13,INPUT);
7
Serial.begin(9600);
8
}
9
10
void loop() {
11
delay(1000);
12
RaindropDigital = digitalRead(13);
13
RaindropAnalog = analogRead(7);
14
RaindropSpannung = RaindropAnalog * (5.0/1023.0);
15
16
Serial.println(RaindropSpannung);
17
Serial.println(RaindropDigital);
18
19
}

Wenn ich mit Pin A7 Messe funktionierts, wie gesagt Spannungswerte 
zwischen 1-4V , wenn ich auf Pin D13 umschließe, bekomme ich dort kein 
HIGH Signal

von M. K. (sylaina)


Lesenswert?

Christian U. schrieb:
> Wenn ich das jedoch mache
> lese ich am digitalen Eingang überhaupt kein Signal.

Also weder High noch Low? Der Code wäre wahrscheinlich hilfreich.

EDIT: OK, hat sich überschnitten. Hast du die Spannung mit 
Multimeter/Oszi parallel mal mit geprüft? Vielleicht bist du immer 
unterhalb der High-Schwelle (0.6*Vcc).

: Bearbeitet durch User
von Christian U. (alfki)


Lesenswert?

So habe mit dem Multimeter nachgemessen. Wenn ich mein Raindrop Modul 
mit Pin D13 habe ich weniger als die hälfte der Spannung zwischen den 
beiden Leiterbahnen der Platine als wenn ich mit A7 verbinde.

Haben die digitalen Widerstände einen anderen Eingangswiderstand?
Da ich im Code nur PinMode(13,INPUT) geschrieben habe dürfte der interne 
Pull up Widerstand nicht aktiv sein richtig?

Irgendwelche Ideen wo das Problem liegen könnte?

von Wolfgang (Gast)


Lesenswert?

Christian U. schrieb:
> Haben die digitalen Widerstände einen anderen Eingangswiderstand?

Das hängt wohl von dem Prozessor ab, der da auf deinem Arduino Board 
werkelt. Wenn du schon dabei bist, verrate doch auch gleich, welche 
Portpins dein Analog-Pin 7 und dein Digital-Pin 13 sind.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Christian U. schrieb:
> Wenn ich das jedoch mache lese ich am digitalen Eingang überhaupt kein
> Signal.
Ein Signal kann Low oder High sein. Dass irgendwo "überhaupt kein 
Signal" ist, kann man sich nur durch eine Unterbrechung erklären...

Christian U. schrieb:
> Wenn ich mein Raindrop Modul mit Pin D13 habe ich weniger als die
> hälfte der Spannung zwischen den beiden Leiterbahnen der Platine als
> wenn ich mit A7 verbinde.
Zwischen welchen Leiterbahnen welcher Platine?
Meinst du vom Pin D13 bzw. A7 gegen Masse?
Wie hast du denn das ganze Zeug miteinander verbunden?

Christian U. schrieb:
> RaindropSpannung = RaindropAnalog * (5.0/1023.0);
Diese Rechnung ist prinzipiell falsch, auch wenn sie evtl. schönere 
Werte ergibt. 1024 ist korrekt. Aber das wurde schon des öfteren 
diskutiert...
Aber am Schlimmsten an /1023 ist, dass das wirklich eine richtige 
Rechnung ist, wogegen /1024 super optimiert werden könnte. Du bräuchtest 
beispielsweise keine Fließkommazahl, wenn du deine Spannung in mV 
skalierst und so schreibst:
Raindrop_mV = (RaindropAnalog*5000)/1024;

: Bearbeitet durch Moderator
von M. K. (sylaina)


Lesenswert?

Christian U. schrieb:
> Haben die digitalen Widerstände einen anderen Eingangswiderstand?

Sicher meinst du "digitale Eingänge" und nicht "digitale Widerstände". 
Und ja, sie sind unterschiedlich, das kann schon zwischen 
unterschiedlichen digitalen Eingängen vorkommen (ist aber eher 
unwahrscheinlich). Ich meine der Eingangswiderstand darf beim Atmega328 
(ich nehme an du benutzt den Arduino Uno, da wäre der Atemga328 drauf) 
zwischen 50kΩ und 200kΩ liegen, mit Pullupp liegts dann zwischen 20kΩ 
und 50kΩ. Hier weiß sicher das Datenblatt mehr (hab ich jetzt nicht 
reingeschaut).
Da die Analogen Eingänge aber auch prinzipbedingt schon anders aufgebaut 
sind als die Digitalen ist hier definitiv mit unterschiedlichem 
Verhalten zu rechnen. Möglicher Weise hilft dir schon ein simpler 
Spannungsfolger (z.B. mit LM358) zwischen deinem Sensor und dem 
digitalen Eingang.

Christian U. schrieb:
> RaindropSpannung = RaindropAnalog * (5.0/1023.0);

Kann man machen, muss man aber nicht und ist, wie schon gesagt wurde, 
prinzipell falsch. Du musst nämlich, um richtig zu rechnen, nicht durch 
den maximal zu erwartenden Wert dividieren sondern durch die maximale 
Zahl der Schritte und das wären 1024. Der Compiler sollte so klug sein 
aus einem /1024 eine entsprechende Shift-Operation zu generieren.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Christian U. schrieb:
> Wenn ich mein Raindrop Modul mit Pin D13 habe ich weniger als die
> hälfte der Spannung zwischen den beiden Leiterbahnen der Platine als
> wenn ich mit A7 verbinde.
Zumindest bei den beiden Arduino, deren Schaltpläne ich hier habe, 
hängt am Signal D13 noch eine LED...
Welchen Arduino hast du?
Hast du dir mal den Schaltplan deines Arduino angesehen?

: Bearbeitet durch Moderator
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.