www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hallsensor TLE 4905 - Schaltung


Autor: Mauritz M. (mauritz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mauritz M. (mauritz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mauritz M. (mauritz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Mauritz M. (mauritz)
Datum:

Bewertung
0 lesenswert
nicht 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:
while(1) 
{
DDRD |= (1<<PD5));           // PD5 als Ausgang festlegen
DDRD &= ~(1 << PD0);        // PD0 als Eingang festlegen
PORTD |= (1 << PD0);       // Pullup für PD0 aktivieren
if (PIND & (!(1 << PD0))) // Wert von PD0 prüfen 
{ 
LED_AN(PD5);
} 
}

Danke nochmal für deine Hilfe!

Mauritz

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mauritz M. (mauritz)
Datum:

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

Danke!

Mauritz

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mauritz M. (mauritz)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <avr/io.h>
#include <util/delay.h>

#define LED_AN(LED)      (PORTD |=  (1<<(LED)))
#define LED_AUS(LED)  (PORTD &= ~(1<<(LED)))
#define LED1    PD6
#define LED2    PD5
#define HALL1    PD0

int main(void)
{
    while(1) 
  {
    DDRD |= (1<<LED1) | (1<<LED2);   // Port D: Ausgang für LED1 und LED2
    DDRD &= ~(1 << HALL1);        // PD0 als Eingang festlegen
    PORTD |= (1 << HALL1);       // Pullup für PD0 aktivieren
    if (PIND & (!(1 << HALL1))) // Wert von PD0 prüfen 
    { 
      LED_AN(LED1);
      LED_AUS(LED2);
      
    } 
    else
    {
      LED_AUS(LED1);
      LED_AN(LED2);
    }
  }
} 

Danke nochmal, MfG
Mauritz

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

MfG Spess

Autor: Mauritz M. (mauritz)
Datum:

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

Vielleicht noch eine Idee?
MfG
Mauritz

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Vielleicht noch eine Idee?

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

MfG Spess

Autor: Mauritz M. (mauritz)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mauritz M. (mauritz)
Datum:

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

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

Juchee, gute Nacht,
Gruß Mauritz

Autor: Manuel B. (j-manuel)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: MaWin (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.