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
Code:
'##########################################################################
'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
Lesezeichen