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
Lesezeichen