Forum: Mikrocontroller und Digitale Elektronik Hallsensor TLE 4905 - Schaltung


von Mauritz M. (mauritz)


Lesenswert?

Hallo liebes µC-Board,
leider kenne ich mich nicht so recht mit der Elektrotechnik aus. Aber 
ich versuche es trotzdem =)
Es geht um einen Hallsensor und seine Verkabelung mit dem 
AVR-Funk-Evaluationsboard, auf dem ein ATmega8 hockt, was aber nicht so 
wichtig sein wird. Ich habe auch schon ordentlich gesucht, nur ist das 
Problem, dass alles immer viel zu speziell ist, und mit Vokabeln um sich 
geschmissen wird, mit denen ich meist nur bedingt was anfangen kann.

Zu meinem Problem:
Ich möchte den Hallsensor (TLE4905L) mit meinem µC verkabel, sodass ich 
das Output-Signal an einem Pin des J4-Steckers anlegen kann, und mein 
ATmega8 diesen dann einließt. So wie ich es erklärt bekommen habe muss 
ich den Pullupwiederstand des Pins aktivieren, um so aus den Outputpin 
einen Ausgang zu machen, da dieser eigentlich ein Eingang ist.
Mir wurde gesagt, ich müsse dann nicht mehr die Schaltung anpassen, die 
bislang wiefolgt angeschlossen ist:

P1 des Sensors:
VCC

P2:
GND

P3
Output

Ich habe den funktionstüchtigen Hall auch schon getestet, die aber mit 
Oszilloskop, vor dem dann ein Widerstand hing. Und was mich jetzt so 
irritiert, ist, dass ich an das Oszilloskop die Spannung geführt und sie 
zurück auf den "Eingang" des Sensors geleitet habe. Das macht für mich 
ja auch Sinn. Nur verstehe ich nicht, wie es funktionieren soll, wenn 
ich das Signal auf den Pin lege und der Pullup aktiviert ist.

Vielen Dank schonmal für eure Erklärungsversuche,

MfG
Mauritz

von spess53 (Gast)


Lesenswert?

Hi

>So wie ich es erklärt bekommen habe muss
>ich den Pullupwiederstand des Pins aktivieren, um so aus den Outputpin
>einen Ausgang zu machen, da dieser eigentlich ein Eingang ist.

Nein. Der Pin bleibt Eingang. Der Pull-Up-Widerstand legt lediglich 
einen definierten Pegel an den Eingang, wenn dieser offen ist.

>Und was mich jetzt so
>irritiert, ist, dass ich an das Oszilloskop die Spannung geführt und sie
>zurück auf den "Eingang" des Sensors geleitet habe. Das macht für mich
>ja auch Sinn. Nur verstehe ich nicht, wie es funktionieren soll, wenn
>ich das Signal auf den Pin lege und der Pullup aktiviert ist.

Ich, ehrlich gesagt auch nicht.

Der Sensor hat einen Transistor als Ausgangsstufe. Wenn kein Magnetfeld 
da ist, ist der Transistor gesperrt. Der Pull-up-Widerstand zieht jetzt 
den Eingang auf VCC (Logisch H). Kommt jetzt ein Magnetfeld in die Nähe 
des Sensors wird der Transistor angesteuert und schaltet den Eingang auf 
Masse (logisch L).

MfG Spess

von Mauritz M. (mauritz)


Lesenswert?

Hallo Spess,
vielen Dank. Mal sehen, ob ich das richtig verstanden habe. Ich fasse 
zusammen:

Fall 1: kein Magnetfeld aufgebaut:
- Transistor ist gesperrt
- Pullup zieht P3 auf VCC

Fall 2: Magnetfeld aufgebaut
- Transistor aktiv
- Transistor zieht P3 auf GND


Fall 2 ist glaube ich klar. Wenn jetzt im Fall 1 der Pullup-Widerstand 
"zieht", ist es dann so, dass die Spannung über den µC in den Hallsensor 
und dann über P2 des Halls auf die Masse läuft?
Und wenn ich dann mit meinem µC den Pin abfrage, an dem der Eingang mit 
seinem Pullup-Widerstand liegt, erkennt er diese "anliegende" Spannung?
Ist sie denn dann noch eigenhend und nicht eher ausgehend? Oder 
unterscheidet die Abfrage dabei nicht?

Vielen Dank nochmal,

MfG
Mauritz

von spess53 (Gast)


Lesenswert?

Hi

>Wenn jetzt im Fall 1 der Pullup-Widerstand
>"zieht", ist es dann so, dass die Spannung über den µC in den Hallsensor
>und dann über P2 des Halls auf die Masse läuft?

Die Spannung 'läuft' nirgendwo hin. Ersetze mal gedanklich den 
Transistor durch einen Schalter. Wenn der Schalter offen ist ( 
Transistor gesperrt) sieht der Eingang nur den Widerstand nach VCC. Bei 
geschlossenem Schalter (Transistor durchgeschaltet) sieht der Eingang 
Masse.

MfG Spess

von Mauritz M. (mauritz)


Lesenswert?

Ah! Aber der Schalter schaltet von dem Eingang, dann entweder zur Masse 
oder zur Spannung, oder?
Warum ist dann der Pin 3 eigentlich noch ein Eingang? Kommt nicht 
trotzem Spannung heraus?
Oder habe ich das wieder falsch verstanden?
Sind das die beiden Möglichkeiten?

P3->P2
oder
P3->P1

Müsste es eigentlich funktionieren und ich habe meine Pinabfrage falsch 
programmiert?

Danke, MfG
Mauritz

von spess53 (Gast)


Angehängte Dateien:

Lesenswert?

Hi

Sieh dir doch mal das Schaltbild auf S.3 an. Der Ausgang des Sensors ist 
Kollektor des Ausgangstransistors. Aus diesem Kollektor kann aber keine 
Spannung herauskommen . Der Transistor kann nur eine Verbindung nach 
Masse herstellen. Und damit an deinen µC-Eingang bei gesperrten 
Transistor eine Spannung anliegt wird der Pull-Up-Widerstand benutzt.

MfG Spess

von Mauritz M. (mauritz)


Lesenswert?

Okay, ich nehme das einfach mal so hin, und denke auch, dass ich das so 
zu 80 % verstanden habe! :)
Wo liegt denn dann jetzt aber mein Problem?
Ich habe an P1 - VCC hängen
an P2- GND und an P3 meinen µC an Pin 26 (PD0).
Mit folgender Abfrage überprüfe ich nun, ob der Transisor gesperrt ist 
oder nicht:
1
while(1) 
2
{
3
DDRD |= (1<<PD5));           // PD5 als Ausgang festlegen
4
DDRD &= ~(1 << PD0);        // PD0 als Eingang festlegen
5
PORTD |= (1 << PD0);       // Pullup für PD0 aktivieren
6
if (PIND & (!(1 << PD0))) // Wert von PD0 prüfen 
7
{ 
8
LED_AN(PD5);
9
} 
10
}

Danke nochmal für deine Hilfe!

Mauritz

von spess53 (Gast)


Lesenswert?

Hi

>Mit folgender Abfrage überprüfe ich nun, ob der Transisor gesperrt ist
>oder nicht:...

Aber nur ein mal. Wann, oder besser wie, soll die Led wieder ausgehen?

MfG Spess

von Mauritz M. (mauritz)


Lesenswert?

Ahso, entschuldigung. Die Antwort ist: gar nicht, sie geht ja nicht mal 
an! ;)

Danke!

Mauritz

von spess53 (Gast)


Lesenswert?

Hi

Mess doch einfach mal am Eingangspin, ob du überhaupt eine 
Spannungsänderung hast. Hast du auch den richtigen Pol vom Magneten (ich 
glaube Südpol) benutzt?

MfG Spess

von Mauritz M. (mauritz)


Lesenswert?

Hi,
irgendwie hat es jetzt geklappt, dass ich an dem Pin eine 
Spannungsänderung von 0 auf 5V habe.
leider tut sich nichts bei meinen LEDs:
1
#include <avr/io.h>
2
#include <util/delay.h>
3
4
#define LED_AN(LED)      (PORTD |=  (1<<(LED)))
5
#define LED_AUS(LED)  (PORTD &= ~(1<<(LED)))
6
#define LED1    PD6
7
#define LED2    PD5
8
#define HALL1    PD0
9
10
int main(void)
11
{
12
    while(1) 
13
  {
14
    DDRD |= (1<<LED1) | (1<<LED2);   // Port D: Ausgang für LED1 und LED2
15
    DDRD &= ~(1 << HALL1);        // PD0 als Eingang festlegen
16
    PORTD |= (1 << HALL1);       // Pullup für PD0 aktivieren
17
    if (PIND & (!(1 << HALL1))) // Wert von PD0 prüfen 
18
    { 
19
      LED_AN(LED1);
20
      LED_AUS(LED2);
21
      
22
    } 
23
    else
24
    {
25
      LED_AUS(LED1);
26
      LED_AN(LED2);
27
    }
28
  }
29
}

Danke nochmal, MfG
Mauritz

von spess53 (Gast)


Lesenswert?

Hi

Vielleicht solltest du mal die Portinitialisierung aus der 
'While'-Schleife herausnehmen. Einmal initialisieren reicht.

MfG Spess

von Mauritz M. (mauritz)


Lesenswert?

Upps, was für ein Quatsch. Aber leider hats auch nichts gebracht! =/

Vielleicht noch eine Idee?
MfG
Mauritz

von spess53 (Gast)


Lesenswert?

Hi

>Vielleicht noch eine Idee?

Nicht so richtig. Bin eigentlich notorischer Assemblerprogrammierer mit 
rudimentären C-Kenntnissen.

MfG Spess

von Mauritz M. (mauritz)


Lesenswert?

Und die Verkabelung ist einwandfrei, oder?

P1 - > J4-Pin40 (VCC)
P2 - > J4-PIN39 (GND)
P3 - > J4-PIN26 (PD0)


Vielleicht noch jemand anders, der noch eine Idee hätte?

Danke danke,
Gruß Mauritz

von Mauritz M. (mauritz)


Lesenswert?

Hi Leute, ich habs! =)
Ich weiß zwar nicht so genau was daran falsch war, aber ich habe was 
weggelassen und nun gehts:
1
if (PIND & (1 << HALL1))

Würde trotzdem gerne mal wissen, was daran falsch war! =)

Juchee, gute Nacht,
Gruß Mauritz

von Manuel B. (j-manuel)


Lesenswert?

Hallo Mauritz,

irgendwie passt deine jetzige beschriebene Code Zeile, nicht mir der im 
Beitrag wieter oben !!

Vorher:
if (PIND & (!(1 << HALL1))

Weggelassen:
if (PIND & (1 << HALL1))

Sieht schon im grunde anderst aus zumindest eine Klammer war zuviel.

Gruss

von MaWin (Gast)


Lesenswert?

Du wolltest
if (PIND & (~(1 << HALL1))
schreiben (Tilde statt Ausrufungszeichen,
bitweises komplementieren statt *-1

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.