PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : GP1A038RBK völlig verzweifelt



schilly
25.09.2009, 21:13
Hallo Forumsmitglieder,

völlig am Boden zerstört berichte ich hier von meiner "Niederlage" mit oben genannten Sensor.

Vielleicht kann mir jemand einen grundlegenden Tip geben, denn ich weiss keinen Rat mehr... Ich habe so ziemlich alles gelesen und bin am ENDE...

3 x Gp1A038RBK habe ich (nacheinander) nun angeschlossen aber leider erhalte ich keinen einzigen Wert. Ich benutze eine Encoderscheibe (120).

Das schlimme daran, ganz am Anfang habe ich mal Werte bekommen (Testumgebung auf einem Steckbrett) aber das habe ich nach Tagelangen versuche nicht mehr hinbekommen.

Ich nutze mit einem ATMEGA88 Testboard bestücktes Controllerboard. Pind.2 (INT0) lösst auch den externen Interrupt aus, wenn ich +5 Volt anziehe, jedoch nicht beim Sensor.


Ich hab derzeit Sensor Nr. 3 angschlossen und leider bekomme ich da gar keine Reaktionen auf dem Multimeter.

Die Schaltung basiert auf einer standard Schaltung z.B. aus dem Buch "Roboter selber bauen".

Ich sende gerne hier die Fotos rein bzw. die Bascomquellen, aber dezeit bin ich so down... ich möchte es erst mal mit ein paar grundsätzliche Fragen versuchen.

Frage1: Ich messe bei einem durchziehen eines objektes am Sensor an Voa eine Spannungsveränderung. Ist das Richtig so?

Frage2: Kathode und GND zusammen mit dem Board auf ein gemeinsammes GND. Da mache ich doch nichts falsch oder?

Frage3: Ist es üblich, das die Sensoren durch das verlöten einen Defekt bekommen haben? LED funktioniert getestet mit einer Kamera. Sind diese art Sensoren sensibler?

Frage4: Die meisten Beispiele basieren auf einen m32def.dat (Mega32). Das ändere ich auf m88def.dat um... alles andere sollte danach (quarz16) aber doch kein Problem darstellen oder?

Was mich noch so wunderte:
Der Port int0 wird nicht immer sauber als Input port definiert. Braucht man das nicht? in dem gleichen oben genannt Buch wird im Bereich ext. Interrupt das aber gemacht. Leider hat es aber nicht gehofen.. und grundsätzlich funktioniert der Interruptauslöser bei mir ja ...

Vielleicht hat je jemand von Euch einen ähnlichen "Leidensweg" und kann mir helfen....

Gruß Schilly




'################################################# #########################
'Drehzahl_Messung.BAS
'
'Aufgabe:
'Dieses Testprogramm demonstriert wie man mit Drehgeber
'die Umdrehungszahl von Motoren anzeigen kann
'Als Drehgeber wird ein Sharp GP1A038 mit Codescheibe
'In diesem Code wird nicht die Drehrichtung ausgewertet, daher
'wird nur ein Interrupt Port (INT0) an den Sensorausgang (VOA)
'angeschlossen. Zudem noch +5V, GND und +5V wüber 330 Ohm
'Widerstand an Anode des Sensors. Also einfachste Beschaltung.

'Wenn man nun Programm startet wird jede Sekunde die Drehzahl
'ermittelt und alle 3 Sekunden über RS232 auf einem
'Terminalprogramm ausgegeben.

'Das Programm eigent sich somit zum Messen von Drehzahlen als
'als auch zur Überprüfung der Drehgeberfunktion. Es läßt sich
'sehr einfach zu Wegstrecken Auswertung ausbauen. Statt
'an einem Interrupt könnte man Sensor auch an einen Timereingang
'anschließen, jedoch wird dies hier im Programm nicht berücksichtigt.
'################################################# ##########################

$regfile = "m88def.dat"
$framesize =
$swstack = 10
$hwstack = 40

$crystal = 16000000 '16Mhz Quarz
$baud = 19200 'UART auf 9600 Baud einstellen
Config Portd.2 = Input

Config Int0 = Falling 'Int0 reagiert auf fallende Flanke

Config Timer1 = Timer , Prescale = 256 'Timer1 einstellen
Const Timervorgabe = 3036 'Startwert Timer1
Const Markierungenproscheibe = 120

Dim Zaehlerirq0 As Long
Dim Impulseprosekunde As Long
Dim Impulseprominute As Long
Dim Umdrehungenprominute As Integer
Print 'Info über UART ausgeben
Print "Drehzahl Messung" "

Zaehlerirq0 = 0
On Int0 Irq0 'beim auslösen von Int0 springe in die Sub Irg0
Enable Int0 'Int0 aktivieren

On Timer1 Timer_irq 'bei Timer1 Irq springe in Timer_irq
Enable Timer1 'Timer1 einschalten

Enable Interrupts
'Globale Irq´s aktivieren
'------------------------ Haubtprogramm ----------------------------------------
Do
Print
Print "Impulse Sek: " ; Impulseprosekunde 'Messwerte über UART ausgeben
Impulseprominute = Impulseprosekunde * 60
Umdrehungenprominute = Impulseprominute / Markierungenproscheibe
Print "Umdreh. Min: " ; Umdrehungenprominute
Wait 3
Loop
End

'------------------------ Sub - Rutinen -----------------------------------------

'Pro Impuls (Markierung auf Scheibe) ein Aufruf
Irq0:
Print "interrupt"
Incr Zaehlerirq0 'Zaehlerirq0 = Zaehlerirq0 +1
Return

'Pro Sekunde ein Aufruf
Timer_irq:
Timer1 = Timervorgabe 'Timer mit Startwert laden
Impulseprosekunde = Zaehlerirq0
Zaehlerirq0 = 0
Return

uwegw
25.09.2009, 21:45
Du benutzt aber einen Vorwiderstand für die Diode, oder?

schilly
25.09.2009, 21:50
Hallo uwegw


Du benutzt aber einen Vorwiderstand für die Diode, oder?

Ja, Wiederstand von 330 Ohm wurde jedesmal verbaut. 1.3 Volt liegt an der LED an.

Gruß Schilly

Hyla
26.09.2009, 09:09
Hi Schilly,

ich hab das Buch, das Du erwähnst, zufällig nicht zur Hand :)
Vielleicht solltest Du doch eine kleine Schaltskizze posten ...
Gibst Du den Ausgang des Sensors direkt auf den Micro, oder verwendest Du einen Spannungsteiler?

Eine Spannung am Ausgang zu messen ist genau das, was passieren soll. Ist doch schon mal gut. Und Deine LED geht auch noch (der Vorwiderstand für die LED kam mir auch als erstes in den Sinn ...).

GND bzw. Kathode von LED und Chip selbst kannst Du miteinander verbinden, keine Problem.

Sharp schreibt im Datenblatt, dass die Teile sensibel für statische Entladungen sind:

"OPIC chip due to micro design is easily affected by the Electro static discharge"

Dass Du aber gleich alle drei Teile gefetzt haben solltest scheint mir doch etwas unwahrscheinlich (hast Du beim Basteln einen "Plaste und Elaste" Pulli an?
:)

Als letztes noch: hat das irgendwas mit den Pull-up-Widerständen im Chip zu tun? Schalte die doch mal an (oder aus, je nachdem).


Ciao,
Christoph

schilly
27.09.2009, 19:37
Hallo,

ich habe mein Problem gelöst. Die Sensoren sind alle ok gewesen. Ich nutze als Board das ATMEGA0815 Streifenrasterboard (in einer Variante.. aber Ihr seht auf dem Link sofort wo mein Fehler lag http://www.streifenraster.de.vu/) Der Pin INT0 wird von der RS232/USB anschluss genutzt. Sobald ich INT1 nutze (einen Pin weiter) kann ich auch die von dem Sensor generierten Werte sehen. Als Kabel benutze ich das (TTL-232R 5V). Mir ist noch nicht ganz klar, warum das Kabel diesen Pin benutz. Werde ich mal gleich nachlesen.

Hat mich leider etliche Tage gekostet.. na ja was solls.. wieder einen Schritt weiter...

Vielen Dank für Eure Tips...

Gruß Schilly