PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Drehgeber GP1A038RBK über ATmega328p auslesen



Balu18
04.01.2014, 19:11
Hey Leute habe ein kleines Problem (Mal wieder :( )
Also wir wollen die Drehzahl eines Motors mit dem Oben genannten inkremental drehgeber messen und auf einem Display ausgeben.
zur hilfe haben wir das beispiel in der Wiki genommen und es als Vorlage benutzt. http://www.rn-wissen.de/index.php/Beispiel_Drehzahlmessung_mit_RN-Control
Jetzt ist unser problem das der Atmega 328p keine Impulse zählt obwohl welche an den eingäng PinD.2 anliegen. (einmal mit led sichtbar und gemessen 2,23V )
Jetzt meine frage ob das dran liegt das die Spannung zu klein ist und der mc das signal nicht als HIGH erkennt. Wenn das der Fall ist wie kann ich das Signal dann verstärken und wodran liegt das in sämtlichen foren habe ich nehmlich immer gelesen das der sensor dierekt an den mc angeschlossen wurde :(
ich hoffe ihr könnt mir weiterhelfen!!!
LG Balu18

Siro
04.01.2014, 20:28
Hallo Balu18,

Laut Datenblatt liegt der Ausgang der Lichschranke bei minimal Vcc-0,3 Volt

Wenn also am Pin 6 der Lichtschranke 5 Volt dran liegen, sollte dein High Signal mindestens 4,7 Volt sein.
bei 2,7 Volt Versorgung also mindestens 2,4 Volt am Ausgang.

Da Du nur 2,23 Volt misst, sollte da irgendwas faul sein.
Ich würd den Pin vom Controller erstmal unterbrechen und dann miss mal nochmal dein High Signal and der Lichtschranke.

Dann mal prüfen welcher LED Strom in der Lichtschranke fließt. Sollten so ca. 11 mA sein.


Steht der Pin vom Controller auch richtig (auf Eingang) Sonst arbeiten 2 Ausgänge gegeneinander.

Welche Spannung hast Du am Pin 6 der Lichtschranke und welche als Versorgung am Controller ?

Funktioniert das Zählen überhaupt. Du müsstes den Pin mal mit einen Draht oder Taster von High noch Low ändern und schauen ob der Controller
die Signale überhaupt zählt.

EDIT:
wenn ich den Parameter VIH des Controllers grade richtig interpretiere, dann muss ein High Signal mindestens 0,6*VCC sein
also bei 5 Volt Versorgung mindestens 3 Volt und da hast Du dann auf jeden Fall ein Problem.
Dann brauchst Du nämlich 3 Volt für ein High.
Das sollte aber richtig funktionieren, wenn deine Lichtschranke auch mit +5V versorgt wird.
Du must unbedingt klären warum dein Ausgangspegel der Lichtschranke so gering ist.

Wenn Du an dem Pin zum gucken noch eine LED zum prüfen dran hast, dann geht es nicht mehr. Die muss weg.
Die begrenzt Dir nämlich den Pegel auf die Durchflussspannung der LED. Ich würd jetzt sagen Du hast ne grüne oder gelbe LED dran ;)

Mehr fällt mir im Moment nicht ein.
Siro

Balu18
05.01.2014, 14:23
erstmal danke für die schnelle antwort
Also an pin 1 habe ich 1,3V mit 14,5 ampeere halt von 5V über 330OHM
An pin 2 klar gnd
an pin 3 ebenfals klar gnd
an pin 4 habe ich nichts da ich keine drehrichtung bestimmen möchte
an pin 5 habe ich klar 2,3 V
und an pin 6 habe ich VCC vom mc 4,78V
Die LED war blau :D
das einzige was nach entfernen der led noch auf der leitung liegt ist ein 10k Ohm wiederstand der als pull down wiederstand fungiert damit ich ein klares signal erhalte :D könnte es vielleicht daran liegen.

hier noch unser genauer code :

$regfile = "m328pdef.dat"

$framesize = 32
$swstack = 32
$hwstack = 32

$crystal = 16000000 'Quarzfrequenz
$baud = 9600

Config Portd.2 = Input

Dim Ist As Word
Dim Soll As Word
'Interrupt Messung
Const Timervorgabe = 3036
Const Markierungenproscheibe = 60
Dim Zaehlerirq0 As Long
Dim Impulseprosekunde As Long
Dim Impulseprominute As Long
Dim Umdrehungenprominute As Integer
Dim Umdrehungenprosekunde As Integer

'LCD
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 2

'Interrupt Messung
Config Int0 = Falling
Config Timer1 = Timer , Prescale = 256

Zaehlerirq0 = 0
On Int0 Irq0
Enable Int0

On Timer1 Timer_irq
Enable Timer1


Enable Interrupts

Cls
Do

'Umrechnen der Messgrößen
Impulseprominute = Impulseprosekunde * 60
Umdrehungenprominute = Impulseprominute / Markierungenproscheibe
Umdrehungenprosekunde = Impulseprosekunde / Markierungenproscheibe


Locate 1 , 1
Lcd "Min" ; Umdrehungenprominute
Locate 2 , 1
Lcd "Impuls" ; Impulseprominute


Loop

End 'end program

Irq0:
Incr Zaehlerirq0 'Pro Impuls (Markierung auf Scheibe) ein Aufruf
Return


Timer_irq: 'Pro Sekunde ein Aufruf
Timer1 = Timervorgabe
Impulseprosekunde = Zaehlerirq0
Zaehlerirq0 = 0
Return

Siro
05.01.2014, 20:39
Die 1,3 Volt an Pin 1 sind richtig.
Bei einer Versorgung von 5V must Du die Spannung der LED im Optokoppler abziehen
Also 5V - 1,3 Volt. Das ist dann die Spannung die an dem Vorwidertsand abfallen muss, also 3,7 Volt
Der Strom ist dann bei deinem 330 Ohm 3,7 / 330 und damit 11,2 mA (!!!! MILLI ;) Ampere)
Das scheint also auch okay.

Aber:

Die Lichtschranke hat einen eingebauten Pullup von 10K laut Datenblatt, wenn Du dann zusätzlich einen Pulldown mit 10K hast, teilt sich die Sapnnung durch 2
wenn deine 4,78 Volt an Pin 6 durch 2 teilst kommst Du auf 2,39 Volt was annähernd in Richtung deinr Messung kommt mit 2,3 Volt.
Da muss auf jeden Fall der Pulldown Widerstand raus. Du benötigst NICHTS an dem Pin der CPU.
Einfach den Ausgang von der Lichtschranke direkt ran ohne Pullup oder Pulldown und auch KEINE LED ran.

Das "klare" Masse Signal wird durch den internen Transistor in der Lichtschranke erzeugt wenn er leitend wird. Das High Signal erzeugt der interne Pullupwiderstand in der Lichtschranke.

Dann sollte dein Pegel auch "richtig" HIGH werden


Siro

Balu18
05.01.2014, 21:00
super danke für die hilfe hat gefunzt :D
ich habs leider nicht so mit Datenblättern :P hab ich nie gezeigt bekommen wo man als erstes dierekt erstmal drauf gucken muss etc :D
aber naja jetzt gehts ja :D
lg Balu18