Hallo leute!
Ich versuche jetzt seid ein paar Tagen mein encoder zum laufen zu bringen wobei ich eine Hardware seitige lösung angestrebt habe da ich noch zu wenig ahnung habe vom programmieren. ich habe T3 und T4 sowie D2 und D3 entfernt sowie die widerstände R6 und R7.ich habe dazu den Original schaltplan als Anhang hochgeladen falls es jemanden hilft. danach vcc und gnd ganz normal auf masse und 5v angeschlossen. Output habe ich auf x_9 und x_10 also an die pins wo vorher T3 und T4 waren. Nun ich habe versuche unternommen am Testprogramm werte zu erhalten aber leider tut sich nix.
'************************************************* ******************************
'Projektname: Radencoder_Check.cprj
'Benötigte Libs´s: IntFunc_lib.cc
'Routinen: RadencoderCheck.cbas
'Autor: UlliS
'Datum: 26.03.2008
'
'Funktion: Radencoder Test
' Laden Sie das Programm in den Roboter und starten Sie
' dieses mit der Taste F10 oder den kleinen Blitz in der
' Menüzeile. Schieben Sie den Robby auf einer glatten sauberen
' Oberfläche (Tisch) ein paar cm nach vorne. Die Zählimpule
' im Ausgabefenster, müssen sich gleichmässig erhöhen.
' Sollte das nicht der Fall sein, müssen Sie die Encoder
' (siehe Anleitung) leicht nachjustieren.
' Wichtig: Die Räder müssen guten Kontakt zum Boden besitzen
' und es muss gleichmäßig gerade nach vorne geschoben werden!
'
'************************************************* ******************************
#define Encoder_IR 8
Dim Text(40) As Char
Dim Encoder_left As Integer
Dim Encoder_right As Integer
'Mainprogramm
Sub main()
SPI_Disable() 'SPI "OFF"
Port_DataDirBit(Encoder_IR,1) 'Port For IR LED = Output
Port_WriteBit(Encoder_IR,PORT_OFF) 'IR Diode PORT_OFF = IR "Ein"
'Radencoder Interrupts
Irq_SetVect(INT_6,Ext_ISR_R) 'Interrupt Service Routine right encoder
Irq_SetVect(INT_7,Ext_ISR_L) 'Interrupt Service Routine left encoder
Ext_IntEnable(6,2) 'Interrupt right falling edge
Ext_IntEnable(7,2) 'Interrupt left falling edge
Do While True
Msg_WriteInt(Encoder_left)
Text = " left"
Msg_WriteText(Text)
Msg_WriteChar(13)
Msg_WriteInt(Encoder_right)
Text = " right"
Msg_WriteText(Text)
Msg_WriteChar(10)
Msg_WriteChar(13)
AbsDelay(100)
End While
End Sub
'Interrupt Service Routine "Encoder right"
Sub Ext_ISR_R()
Dim irqreq As Integer
irqreq = Irq_GetCount(INT_6) 'Interrupt Request Counter = 0
Encoder_right = Encoder_right + 1
End Sub
'Interrupt Service Routine "Encoder left"
Sub Ext_ISR_L()
Dim irqreq As Integer
irqreq = Irq_GetCount(INT_7) 'Interrupt Request Counter = 0
Encoder_left = Encoder_left + 1
End Sub
ich komme nicht weiter da ich nicht weiss ob alles richtig verlötet ist oder nicht und habe zweifel das das alles so ok ist. ich habe nach programme gesucht die ähnlich funktionieren also nicht wie bei der led steuerung blinken lassen, sondern andersrum. ich habe probleme mit den befehlen
irqreq = Irq_GetCount(INT_6)
Irq_SetVect(INT_6,Ext_ISR_R)
und finde auch nichts wo das erklärt wird da das ein conrad basic ist. ich hoffe ich bekomme einen tritt in die Richtige Richtung auch gerne anfänger Tutorial , um verständnis zu bekommen wie das ganze funktioniert . Wie gesagt mit den led-s habe ich schon kapiert , da bekommt man aber einen feedback ob man alles richtig gemacht hat oder nicht . Hier ist es genau anders rum , Signal geht rein und ich habe keine ahnung ob hardware mässig was nicht stimmt oder die programmierung falsch ist. Danke schon mal im voraus für die Hilfe.
ach ja nochwas, im Buch C-Control Pro selbstprogrammieren und in der Praksis einsetzen habe ich gelesen das der µC interrupt einggänge hat unter anderem x_9 und x_10 wo standardmässig auch die T3 und T4 waren. ich weiss auch nicht ob wichtig ist wieder die interruptpins zu benutzen da alle besetzt sind es sei den ich verwende die ports wo vorher die geber sassen.
Lesezeichen