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







Zitieren


Lesezeichen