Sodele......
Hab nun soweit ein Demoprojekt fertig und es funktioniert auch einwandfrei.
Das hier ist erstmal der Schaltplan:

http://s10.directupload.net/file/d/2...f2kqx8_pdf.htm

Die beiden Lötjumper sind dafür da damit man den Tiny noch programmieren kann, weil ich nicht genau wusste ob an den Anschlüssen Spannung anliegen darf während man programmiert.

Das hier ist einer der zwei Sensoren:
http://s5.directupload.net/file/d/2162/k96zw73u_jpg.htm

Bei den Sensoren handelt es sich um TL4095 und das sind Hallsensoren mit integriertem Schmitt-Trigger und Open-Collector Ausgang.

Hier kann man das Ergebniss auf meinem RN-Control sehen. Der Widerstand oben in der Ecke ist dafür da um den Pin, der für den Neutralgang da ist und der immer auf 4,5V liegt, auf GND zu ziehen sobald die erste Schleife abgearbeitet wurde und man normalerweise im Motorrad einen Gang drin haben würde.

So und zu allerletzt noch der Code für den Controller. Eigentlich war der Code für einen Tiny24 gedacht aber da ich es erstmal mit meinem RN-Control testen wollte musst ich die Regfile und den Crystal etwas ändern.

Code:
'Mikrocontrollereinstellungen:
$regfile = "m32def.dat"                                   'Einstellen des verwendeten Chips
$crystal = 16000000                                          'Taktfrequenz (hier der Takt aus dem
                                                            'internen kalibrierten Oszillator
'Variablen:
Dim Gang As Byte                                            'Festlegen der Variable und des Types
Dim Ort As Byte
Dim Zelle As Byte
Dim Loeschen As Byte
Dim R As Byte
Dim Gangneu As Byte

'Ports:
Config Portc = Output                                       'PortA wird als Ausgang festgelegt
Config Pinb.0 = Input                                       'Neutralstellung
Config Pinb.1 = Input                                       'Signal vom Sensor "oben"
Config Pinb.2 = Input                                       'Signal vom Sensor "unten"
Config Pinb.3 = Input                                       'Gangwahl

Declare Sub Speichern
Declare Sub Nullstellung                                    'Deklarieren der Sub-Programme
Declare Sub Schalten
Declare Sub Lesen

R = 255
Zelle = 0
Ort = 0
Gangneu = 0
Gang = 0                                                    'Variable "Gang" wird auf 0 gesetzt

If Pinb.0 = 0 Then Call Lesen                               'Unterprogramm "Lesen" wird aufgerufen
Gang = Gangneu                                              'Gang wird mit dem Inhalt der Variable
                                                            'Gangneu beschrieben


Do                                                          'Das eigentliche Do-Loop Programm
   If Pinb.0 = 1 Then Gang = 0                              'Wenn der Neutralgang eingelegt wird, wird
                                                             'die Variable Gang auf 0 gesetzt
   If Pinb.0 = 1 Then Call Nullstellung                     'Abfragen des Ports für Neutralstellung
   Waitms 100                                               'und ausführen der entsprechenden Sub-Routine
   If Pinb.0 = 0 Then Call Schalten                         'Low-Abfrage für den Port für die Nullstellung
   Waitms 100

   Call Speichern                                           'Unterprogramm "Speichern" wird aufgerufen
   Waitms 100


   If Gang = 0 Then Ddrc = &B00000000

   If Gang = 1 Then Ddrc = &B00000001                       'Anzeigen des Variablenwertes auf der
                                                             '7-Segment Anzeige (hier Wert 1)

   If Gang = 2 Then Ddrc = &B00000010


   If Gang = 3 Then Ddrc = &B00000011


   If Gang = 4 Then Ddrc = &B00000100


   If Gang = 5 Then Ddrc = &B00000101


   If Gang = 6 Then Ddrc = &B00000110


Loop
End                                                         'Programmende

Sub Nullstellung                                            'Festlegen der Sub-Programme
   While Gang = 0                                           'Beginn der WHile-Schleife

   If Pinb.2 = 0 Then Gang = Gang + 1                       'Gang wird um eins erhöht wenn der
                                                              'untere Hall-Sensor aktiviert wird
   If Pinb.1 = 0 Then Gang = 2                              'Gang wird auf 2 gesetzt wenn der
                                                             'obere Hallsensor auf GND gezogen
   Wend                                                     'wird (falls man direkt von Neutral auf 2 Schaltet)
                                                             'Ende der While-Schleife
End Sub                                                     'Sub-Programm Ende



Sub Schalten(byval Gang As Byte)                            'Festlegen des zweiten Sub-Programmes

   If Pinb.1 = 0 And Pinb.2 = 0 Then Waitms 10
   If Pinb.1 = 0 Then Gang = Gang + 1                       'Gang wird um 1 erhöht wenn der obere
                                                               'Sensor gegen GND gezogen wird
   If Pinb.2 = 0 Then Gang = Gang -1                        'Gang wird um 1 verringert wenn der
                                                               'untere Sensor gegen GND gezogen wird
   If Gang < 1 And Pinb.2 = 0 Then Gang = 1                 'Wenn Gang 1 eingelegt ist und runtergeschaltet wird
                                                              'wird die Variable "Gang" auf 1 gesetzt
   If Gang > 5 And Pinb.3 = 1 Then Gang = 5                 'Gänge sind auf 5 beschränkt
   If Gang > 6 Then Gang = 6

End Sub                                                     'Sub-Programm Ende

Sub Speichern(byval Gang As Byte)                           'Unterprogramm "Speichern" wird begonnen

   Writeeeprom Gang , Ort                                   'Schreibt die Variable "Gang" in die Speicher-
                                                              'zelle die durch die Variable "Ort" festgelegt
                                                              'wird
   Loeschen = Ort - 1                                       'Variable "Loeschen" ist Variable "Ort" nur um
                                                            'eins verringert
   Writeeeprom R , Loeschen                                 'Schreibt in die Zelle die durch die Variable
                                                              '"Loeschen" festgelegt wird den Inhalt der Variable
                                                              '"R"(255)
   Ort = Ort + 1                                            'Variable "Ort" wird um eins erhöht


End Sub                                                     'Sub-Programm Ende

Sub Lesen(byval Gangneu As Byte)                            'Unterprogramm "Lesen" wird begonnen

   Zelle = 0
   Readeeprom Gangneu , Zelle
   While Gangneu = 255
   Zelle = Zelle + 1
   Readeeprom Gangneu , Zelle
   Wend


End Sub                                                     'Sub-Programm Ende