Hallsensor TLE 4905 - Schaltung

OP #1637931
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
Gast
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
OP
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
Gast
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
OP
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
Gast
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
Angehängte Dateien:
OP
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
Gast
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
Gast
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
OP
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
OP
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
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.