PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ganganzeige für Motorrad



Kampi
28.04.2010, 19:27
Hallo
Wir haben heute in der Schule ein Projekt bekommen wo wir eine Ganganzeige für ein Motorrad entwerfen sollen.
Das ganze soll digitaltechnisch realisiert werden wobei jeder Gruppe selbst überlassen ist wie und mit welchen Bauteilen man das realisiert. Nur die Schaltung sollte 1. nicht zu groß und 2. nicht zu teuer werden (max. 5€). Desweiteren müssen noch gewisse andere Bedingungen erfüllt werden aber um die kümmer ich mich später.
Mein Problem ist nun die Gangschaltung am Motorrad. Wenn man im neutralen Gang startet muss man ja zuerst runtertreten um in den 1. Gang zu kommen und dann rauftreten um in den 2-6. Gang zu kommen. Und da hab ich noch so meine Probleme wie ich das realisieren soll.
Ich habe vor das mit einem kleinen Tiny zu bewerkstelligen und der Code wird dann in Basic geschrieben, weil ich das für die Präsentation besser erklären kann. Die "Ganganzeige" werden dann 6 rote Leuchtdioden die jeweils für Gang 1-6 stehen und einer grünen für den Neutral-Gang.
Desweiteren hab ich vor die Schaltung über zwei Batterien zu betreiben.

Als Schalter für das Pedal damit der Controller merkt wann geschaltet wird wollt ich drei Hallsensoren verwenden, damit kein mechanischer Verschleiß entsteht.

Wäre das zu realisieren wie ich mir das vorstelle und kann mir eventuell jemand einen Denkanstoß geben?
Danke schonmal.

Searcher
28.04.2010, 20:49
Wie stellt man fest, ob der Gang auch wirklich drin ist und man nicht nur raufgetreten hat ohne das der Gang reinrutscht?

(Dumme Frage von einem der schon Urzeiten nicht mehr Motorrad gefahren ist)

Gruß
Searcher

Kampi
28.04.2010, 20:58
Naja das soll nur eine kleine Schaltung werden als Hilfe (sonst muss man sich das ja immer merken ^.^). Aber ich hatte daran gedacht die Hallsensoren jeweils auf Höhe der N-Stellung zu machen, sowie auf der Höhe wo der Gang sicher rein geht und das einmal unten und einmal oben.

Crazy Harry
29.04.2010, 14:30
ein paar fragen/anmerkungen:
- hat das motorrad keine gangsensor den du auswerten könntest ?
- wieso batteriebetrieb ?
- wenn schon dann nimm einen linearen magnetfeldsensor zum ermitteln der bewegungen (das funktioniert ;) )

@searcher: stichwort hysterese und synchronisation mit dem immer vorhandenen leerlaufschalter

Kampi
29.04.2010, 14:46
So ich habe schonmal etwas weitergemacht.
@ Crazy Harry: Nein hat das Motorrad nicht. Es geht darum eine universelle Schaltung zu machen die man für jedes Motorrad nehmen kann, deswegen fällt die Idee mit dem Gangsensor weg.
Und vom Batteriebetrieb bin ich auch weggegangen, die Idee doch nicht so toll war wie ich ursprünglich gedacht habe.
Hab hier mal eine erste Schaltung entworfen:

Ich greife einfach das Signal von dem Motorrad ab wo angezeigt wird das man in Neutral-Stellung ist und benutze das zur synchronisation. Je nach Signalstatus wird eine andere Schleife gestartet. Wenn man in Neutralstellung ist merkt der Controller das und springt in die eine Schleife wo er, wenn der untere Hallsensor ausgelöst wird die Variable um eins hoch setzt und wenn der obere aktiviert wird (falls man direkt in Gang 2 schaltet) wird die Variable direkt auf 2 rauf gesetzt. Dann kommt der nächste Durchlauf des Programms und da merkt der Controller, da man nicht mehr in Neutral-Stellung ist und das Signal dementsprechend 0 ist, das er in die andere Schleife springen muss wo er dann wenn der obere Sensor betätigt wird die Variable plus 1 zählt und wenn der untere betätigt wird die Variable -1 zählt. Und das solange bis man wieder in Neutral ist und das Neutral- Signal wieder 1 ist und er wieder in die erste Schleife springt und je nachdem sofort in Gang 2 geht oder die Variable +1 hochzählt. Und die Variable wird dann an der 7-Segmentanzeige ausgegeben.

radbruch
29.04.2010, 16:32
Hallo

Das zuverlässige Erfassen des Schalthebel sehe ich auch als Hauptproblem. Auch wenn man das Neutralsignal zur Synconisation nutzt wird sich die Anzeige mit zunehmender Fahrtdauer immer mehr vom gewählten Gang entfernen.

Viel eleganter wäre es doch, wenn man die Motorumdrehungen während einer Radumdrehung zählen würde indem man Tacho und Drehzahlmesser anzapft ;)

Gruß

mic

Kampi
29.04.2010, 16:41
Naja die Schaltung muss inklusive Referat und Erklärung usw. in 3 Wochen realisierbar sein und muss recht einfach aber dennoch universell für jedes Motorrad einsetzbar sein. Ich weiß jetzt nicht ob das mit deiner Lösung so einfach geht.

Andree-HB
29.04.2010, 16:53
...bei ELV gibt es einen Bausatz mit Beschreibung der "Sensoren", vielleicht gibt Dir das weitere Ideen :

Bausatz :
http://www.elv.de/output/controller.aspx?cid=74&detail=10&detail2=7640&flv=1&bereich=&marke=

Doku :
http://www.elv-downloads.de/service/manuals/447587_MGA1_km_web_um.pdf

Kampi
29.04.2010, 17:06
Hey danke für den Tipp. Und ja das hat mir etwas geholfen was die Befestigung angeht. Und zwar find ich die Idee mit dem Federblech und den Mikroschaltern nicht schlecht. Außerdem ist das mit dem LDR nicht schlecht, muss mal überlegen ob ich das vielleicht mit einbaue und dann mit PWM oder so die Anzeige heller oder dunkler mache. Ebenso die Idee mit dem Jumper..... .

Was ich nur nicht verstehe was der Widerstand an den Quarzanschlüssen (XTAL 1 und XTAL2) macht. Muss der da sein wenn man den internen Oszillator nimmt?

radbruch
29.04.2010, 19:39
Hallo

Eine Gruppe sollte in drei Wochen doch schon einiges bewegen können ;)

Mein Moped (XV750SE (http://radbruch.roboterbastler.de/pics/moped.jpg), Bj. 81) hat noch mechanische Wellen für Tacho und Drehzahlmesser. Hier würde ich dann mit einem Adapter ansetzen und die Wellendrehungen mit Impulsgebern auswerten. Blöderweise wird die Anzeige im Stand aber wohl nicht richtig funktionieren.

Mal 'ne kleine Anmerkung zum Sinn einer Ganganzeige beim Moped: Meine GS hatte in den 80ern auch eine Anzeige für ihr Sechganggetriebe. Als die dann nach einem Crash total ausfiel, hatte ich sie nicht vermisst ;)

Und noch eine Offtopic-Anmerkung: Fahrt umsichtig und vorsichtig und laßt euch nicht von elektronischen Schnickschnack ablenken!

Gruß

mic

Michael_238
29.04.2010, 21:21
Das Projekt finde ich super, bin mal gespannt was daraus wird.

Gruß Michael

Kampi
29.04.2010, 21:38
Naja muss mich nächste Woche erstmal mit meinen Gruppenmitgliedern kurzschließen, aber ich denke das wir das so machen werden ^.^. Leider haben wir von unserem Lehrer ein maximales Platinenkapital von 5€ gegeben bekommen und dementsprechend kann ich das mit dem LDR als Helligkeitsanpassung nicht machen, weil das das Budget überschreitet =(. Aber die Idee mit den Jumpern für die maximale Gangzahl werd ich denk ich mal aufgreifen.

Kampi
30.04.2010, 11:29
So ich habe ein neues Problem. Und zwar will ich das die Schaltung auch bei abgeschalteter Spannung den Wert der Gang-Variable beibehält (für den Fall das einer im 4. Gang das Motorrad abstellt und die SPannung wegfällt und man dann wieder los fährt das die Anzeige nicht wieder bei 1 anfängt sondern bei 4). Für diesen Fall wollte ich vom Tiny24 das interne EEPROM verwenden. Und zwar soll das so aussehen das er jedesmal wenn sich die Variable ändert (also ein Gang hochgeschaltet wird) er diese Variable in eine Speicherzelle reinschreibt und dann eine Speicherzelle weiterspringt und dort die nächste neue Variable reinschreibt (das mach ich weil das EEPROM pro Zelle eine Lebensdauer von 100000 Schreibzyklen hat und man so die gesamt Lebensdauer des EEPROMs erhöht). Und beim Neustarten des Motorrads soll er halt die Zellen alle absuchen bis er bei der letzten Zelle ist und diesen Wert dann übernehmen und mit diesem weiterarbeiten.
Kann mir da jemand helfen wie ich das in Bascom vernünftig programmieren kann? Weil mit EEPROM benutzen kenn ich mich nicht so wirklich aus.
Danke schonmal

oZe
30.04.2010, 22:09
Ich würd da eventuell einen anderen Ansatz wählen: Die Verorgungsspannung über nen Elko puffern und über die Brownout detection der Controller den aktuellen Gang speichern im EEPROM. Dadurch haste nicht so viele Schreibzyklen und kannst einfach immer in die Gleiche Zelle schreiben. Bis du da 100000 Zyklen voll hast kannste schon ein bischen Motorrad fahren ;-)

Kampi
30.04.2010, 22:27
mmmh also du meinst ich sollte am Tiny24 zwischen Vcc und GND einen 3F Elko z.B. schalten (hab auch 1F falls 3 zuviel ist :D). Und wie bewerkstellige ich die Brownout Detection dann? Der rest ist ja dann mit der Detection zusammengekoppelt also wenn die dann ausgeführt wird speichert er die Variable in einer Speicherzelle.
Kannst du mir da eventuell einen Ansatz geben wie man so eine Detection in Bascom programmiert? ODer macht man das mittels ADC? Und dann bräuchte ich auch noch Hilfe bei dem Befehl um die Variable ins interne EEPROM zu schreiben.....ich steig da nicht so ganz durch. Den Code habe ich bis auf die beiden punkte (hoffe) ich funktionsfähig fertig.

oZe
30.04.2010, 23:26
Ich glaube sogar das das hoffnungslos überdimensioniert ist. Überleg mal wie viele Takte es benötigt die Variable ins EEPROM zu schreiben und wie schnell der Controller arbeitet. Einen fixen Wert kann ich dir nicht nennen aber ich denke das 470µF reichen sollten. Ich denke mal das es hier einige Leute gibt die damit erfahrung haben. Ich selber habe das nie wirklich in der Praxis genutzt. Hängt auch alles davon ab wie viel deine Schaltung frisst an Strom.

Kampi
30.04.2010, 23:40
Naja gut zur not muss ich auf der Arbeit fragen ..... bin ja da bei Leuten die sowas studiert haben *hust* die können mir den ganzen Tag irgendwelche Formeln über sowas an den Kopf werfen.
Und zu dem Breakout Detector hab ich mich etwas eingelesen. VErstehe ich das richtig das man in den Fuses ein Fuse-Bit setzen muss um den zu aktivieren und dann noch ein oder zwei extra Fuse-Bits um die Mindestspannung festzulegen? Und da steht das er bei aktivieren des Detectors einen Reset durchführt. Aber sowas will ich ja nicht er soll ja dann was ins EEPROM schreiben. WIe teile ich dem das mit das er das machen soll?

Kampi
30.04.2010, 23:53
So hier mal ein kleiner Zwischenstatus des Projektes (Ohne Breakout-Detection):
Schaltplan:
http://www.filedealer.com/freeupload/367b963855b07a4ebd3cafe362c21a3c.pdf

Quellcode für den Tiny24:


'Mikrocontrollereinstellungen:
$regfile = "attiny24.dat" 'Einstellen des verwendeten Chips
$crystal = 8000000 'Taktfrequenz (hier der Takt aus dem
'internen kalibrierten Oszillator
'Variablen:
Dim Gang As Byte 'Festlegen der Variable und des Types

'Ports:
Config Porta = 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"


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

Gang = 0 'Variable "Gang" wird auf 0 gesetzt

Do 'Das eigentliche Do-Loop Programm
If Pinb.0 = 1 Then Call Nullstellung Else Waitms 1000 'Abfragen des Ports für Neutralstellung
'und ausführen der entsprechenden Sub-Routine
If Pinb.0 = 0 Then Call Schalten Else Waitms 1000 'Low-Abfrage für den Port für die Nullstellung


If Gang = 1 Then Ddra = &B00110000 Else Waitms 100 'Anzeigen des Variablenwertes auf der
'7-Segment Anzeige

If Gang = 2 Then Ddra = &B01101101 Else Waitms 100


If Gang = 3 Then Ddra = &B01111001 Else Waitms 100


If Gang = 4 Then Ddra = &B00110011 Else Waitms 100


If Gang = 5 Then Ddra = &B01011011 Else Waitms 100


If Gang = 6 And Pina.7 = 0 Then Ddra = &B00011111 Else Waitms 100


Loop
End 'Programmende

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

Sub Schalten(byval Gang As Byte) 'Festlegen des zweiten Sub-Programmes
If Pinb.1 = 0 Then Gang = Gang + 1 Else Waitms 100 'Gang wird um 1 erhöht wenn der obere
'Sensor gegen GND gezogen wird
If Pinb.2 = 0 Then Gang = Gang -1 Else Waitms 100 'Gang wird um 1 verringert wenn der
'untere Sensor gegen GND gezogen wird
End Sub 'Sub-Programm Ende


Und ist der $EEPROM Befehl im Bascom dafür da das interne EEPROM des Controllers zu beschreiben?

oZe
01.05.2010, 00:14
Ich war eigentlich davon ausgegangen das eine ISR aufgerufen wird... Ich hab wie gesagt nie damit gearbeitet. Sorry wenn ich dich da auf eine falsche Idee gebracht haben sollte.

Kampi
01.05.2010, 09:44
Naja vielleicht hab das auch nur falsch gelesen. Ich werd da nochmal genauer nachschauen aber die idee ist gut.

wkrug
01.05.2010, 10:28
Brownout Detection
Eventuell könntest Du das abspeichern des aktuellen Ganges über den Analog Komperator realisieren.
Direkt am Eingang der Schaltung auf der 12V Seite wird eine Diode reingebaut, die das zurückfließen des Stromes in das Bordnetz verhindert.
Vor dieser Diode machst Du einen Spannungsteiler rein, der auf den Analog Komperator arbeitet.
Wird dabei die Referenzspannung unterschritten wird ein Interrupt ausgelöst, der dann den aktuellen Gang in einer EEPROM Variable abspeichert.

Mit dieser Methode wäre dann die Bordspannung, ab der gespeichert wird, einstellbar.
Am Meß- Eingang des Tiny wär auch ne Z-Diode nicht schlecht, die vor Überspannungen aus dem Bordnetz schützt.

Ausserdem wär noch ein Varistor vor dem Spannungsregler gut, der die selbe Aufgabe für den Spannungsregler erfüllt, aber der wird wohl dem Rotstift zum Opfer fallen !

Kampi
01.05.2010, 10:54
Meinst du in etwa so:
http://www.filedealer.com/freeupload/232a11b3bc944615edca236ab1f910d8.pdf

wkrug
01.05.2010, 11:05
Nein! so hab ich das nicht gemeint!

Der Spannungsteiler aus R8 und R9 wird vor die Diode zwischen +12V und Masse gemacht.
Die Werte für die Widerstände sollten so berechnet werden, das wenn die Spannung unter 9V abfällt der Interrupt getriggert wird.
Beim Analog Komperator kann man auf einen Eingang die interne Referenzspannung schalten. Beim Tiny24 weiß ich es jetzt nicht genau, es dürften aber so um die 2,56V sein.
Zur Sicherheit und zum Schutz des Porteinganges kann man noch eine Z-Diode parallel zum Widerstand schalten, der nach GND geht.

Eigentlich braucht man die bei 12V Versorgung nicht, allerdings treten beim Motorrad ( wie auch beim Auto ) gerne mal Überspannungen auf der 12V Seite auf, die man abfangen sollte.

Für dein DEMO Projekt kannst Du das wegen der Kostendeckelung mal weg lassen. Für ein Gerät, das ständig im Fahrzeug bleiben soll würd ichs aber auf jeden Fall vorsehen.

Noch was-
bei mechanischen Schaltern solltest Du Dir eine Entprellung mit einbauen.
Bei BASCOM gibts da den Befehl "debounce" - soweit ich weiß ( Komm aus ner anderen Ecke ).
Oft hat man auch zu wenig Eingänge ( DIP Schalter / Jumper ? ), der ATMEGA 8 bewgt sich in etwa auf dem gleichen Preisniveau wie der TINY.

Kampi
01.05.2010, 14:22
Gut dann werd ich das mal ändern.
Und mechanische Schalter habe ich nicht. Ich benutze Hallsensoren und an den Ganghebel bring ich einen Magneten an. Das einzigste was dann prellen kann ist der Ganghebel aber da muss ich mal am Motorrad gucken ob der das überhaupt macht, weil ganz genau weiß ich das auch nicht.

wkrug
02.05.2010, 09:28
Ich benutze Hallsensoren und an den Ganghebel bring ich einen Magneten an
Das würde ich auch für die Bessere Idee halten!
Welchen Typen hast Du dennn vorgesehen ? TLE4905L oder was anderes ?

Kampi
02.05.2010, 09:54
Jop genau die. Ist auch noch ne relativ günstige Methode finde ich. Und halt komplett Berührungslos.
Und noch eine Frage. Ich benutze vom ADC ja jetzt nur einen der 8 Pine und die anderen werden als Ausgang beschaltet. Muss man das in der Programmierung irgendwie beachten, also Bascom sagen das nur der ADC7 benutzt wird für den ADC und der rest nicht (dadrüber wird ja die 7-Segment Anzeige gesteuert) oder ist das egal?

Crazy Harry
03.05.2010, 07:53
So ich habe ein neues Problem. Und zwar will ich das die Schaltung auch bei abgeschalteter Spannung den Wert der Gang-Variable beibehält (für den Fall das einer im 4. Gang das Motorrad abstellt und die SPannung wegfällt und man dann wieder los fährt das die Anzeige nicht wieder bei 1 anfängt sondern bei 4).
Absolut unnötig. Wenn derjenige wegfährt, wird er vorher den 1.Gang einlegen und beim runterschalten über den Leerlauf gehn und damit die Schaltung synchronisieren.
Ich würde trotzdem EINEN linearen Magnetfeldsensor nehmen, denn dann weißt du immer wo der Hebel gerade ist ;)

Kampi
03.05.2010, 08:16
Hast du vielleicht einen relativ billigen (so bis 1,5€) weil alle die ich gefunden habe sind über 3€ gewesen und das sprengt das Budget.

the_muck
03.05.2010, 09:38
Hallo,
schau mal hier in sachen Ring-Buffer

http://www.mikrocontroller.net/articles/FIFO

Ich kenne das Moped nicht, aber ich würde auf jeden Fall jetzt schon mal testen ob das mit den Schaltern 100% Funktioniert. Ich werde das Gefühl nicht los das bei meiner Kiste die Hebel nicht auch wenn der Gang schon drin ist sich "weit" bewegen.

An der Ampel z.b ziehe ich die Kupplung und "Tippe" Mehrmals den Gang rein... keinen Plan warum ;). Des weiteren wäre ein Racing Mode nett, da geht es ja oft anders herum, also ich muss von oben auf den Hebel drücken zum hoch schalten. OK dann muss man die Sensoren einfach vertauschen ;)

Kampi
03.05.2010, 09:53
Jop wollte die Schaltung jetzt mal die Tage aufbauen. Hab mir die Sachen vorhin alle bei Reichelt bestellt und die sind dann in den nächsten 1-2 Tagen in der Firma. Nur das Mopped konnt ich mir leider nicht mitbestellen :-b .
Und dein Beispiel mit dem tippen. Nagut das sind dann so "Sonderfälle". Ich denke mal wenn man die alle beachten würde, würde das den Code für den Tiny ziemlich kompliziert machen und ich versuche ihn schon so einfach wie möglich zu halten und dabei soviele Funktionen wie möglich reinzumachen, weil ich den Code schließlich 25 Leuten die nicht mal wissen was ein Mikrocontroller ist, erklären muss 8-[ .
Die Sache mit dem Buffer ist nicht schlecht. Dank dir, da werd ich mich mal durchwühlen und schauen ob ich das implementieren werde.

XBert
03.05.2010, 19:23
Ich hab den Thread zwar nicht ganz durchgelesen, aber vor ein paar Tagen das hier gefunden: http://biobug.org/index.php/2010/04/30/motocomp-my-diy-speedohealermotorcycle-computer/
Vielleicht gibts da noch ein paar Ideen zu holen.
LG

Crazy Harry
03.05.2010, 21:18
Ich verwende den SS496A1.
Platinengröße 35x7mm - diese wird komplett vergossen. Magnet am Schaltgestänge - nicht am Hebel.

[EDIT].... das war das falsche (alte) Layout

Kampi
03.05.2010, 23:09
mmmh grad bei RS geguckt....der Sensor kostet leider 2,80€ =( also nichts fürs Projekt.....leider :/

the_muck
04.05.2010, 10:26
Das ist doch für die Schule ;), in meinen Augen hast du schon recht viel zusammen und eine ordentliche Ausarbeitung. Ich würde einfach mal fragen wie das mit Sponsoring (Mustern) aussieht... eigentlich, so meine Erfahrungen lässt sich da oft was machen...

Kampi
04.05.2010, 11:18
Naja morgen erstmal Lehrer fragen was er davon hält das ich das so mache 8-[ . Vielleicht findet er es gut vielleicht aber auch nicht, dann hab ich natürlich Pech gehabt. Und ansonsten an der Ausarbeitung feilen wir noch etwas und muss morgen auch erstmal die anderen 2 aus meiner Gruppe auf den gleichen Stand bringen. Mal schauen morgen gibbet sicher paar neue Infos.

BlackDevil
05.05.2010, 09:43
Bei unserem Mopped ist das Problem das der Hebel zwar den vollen Weg zurücklegen kann aber deshalb der Gang noch nich drin sein muss

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

http://s10.directupload.net/file/d/2162/mof2kqx8_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.



'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

Andree-HB
07.06.2010, 12:42
...hier wird übrigens ein ähnliches Projekt vorgestellt :

http://www.electronics-lab.com/projects/automotive/006/index.html

Kampi
07.06.2010, 13:23
Ja so habe ich es auch gemacht. Nur meine Platine ist etwas größer (glaube so ca 50x50mm). Wollte es eigentlich auch am Mittwoch zusammen mit der Präsentation vorführen aber durch einen sau blöden Fehler mit den Fusebits hab ich mir den Reset-Pin weggefused und ich hatte keine möglichkeit innerhalb von zwei Tagen einen neuen Tiny zu bekommen ](*,)
Deswegen konnte ich es nur mit meinem RN-Control zeigen aber es hat 1a funktioniert.......
Mal schauen ob man da noch ein bischen was hinzufügen kann.

oberallgeier
11.03.2012, 19:39
Hi Crazy Harry, hi Hall-Spezialisten.


Ich verwende den SS496A1 ...So ein hübsches Gimmik versuche ich grad auch aufzubauen. Allerdings will ich so zwischendurch wohl zusätzlich ne Glaubwürdigkeitsprüfung mithilfe von Drehzahlmesser und Tacho einbauen. Deren Signale habe ich schon geprüft - da suche ich nur noch passende Optokoppler.

Ist der SS496A1 einigermassen "optimal" oder lag der bei Dir grad rum? Ich hatte den gesucht und bei Mouser Electronics, München, gefunden. (http://de.mouser.com/Search/ProductDetail.aspx?qs=%2Ffq2y7sSKcI1O1EoPtkFJQ%3D% 3D) Hoffentlich liefern die auch an "normale Sterbliche. BTW: Hättest Du noch nen Tipp für nen Minimagneten ? Denn das Teil, das ich für meinen (digitalen) Tacho an die linke Bremsscheibe (Bandit GSF600) gebaut hatte, würde vermutlich beide Sensoren gleichzeitig ansprechen. Danke schon mal für die Hilfe.

Kampi
12.03.2012, 12:45
Hi,

also wir haben damals dann noch Hallsensoren genommen. Wir haben uns für den TLE4905 entschieden. Das was du jetzt verwenden willst ist ja ein Magnetfeldsensor oder?

oberallgeier
12.03.2012, 13:25
... haben ... TLE4905 entschieden. Das was du jetzt ... Magnetfeldsensor oder?Danke für den Hinweis. Stimmt - das ist ein Magnetfeldsensor aus der Parts List von hier (klick). (http://www.electronics-lab.com/projects/automotive/006/index.html) Ich baue derzeit die Geschichte labormäßig mit zwei Reedschaltern aus alten Fahrrad-Tachos auf. Wenn das funktioniert, sehe ich weiter. Der TLE4905 klingt ja schon mal gut.

Crazy Harry
12.03.2012, 14:10
@oberallgeier: wieso bitte willst du bei einer Bandit das mit Magnetsensoren machen ? Das Möp hat doch sowieso nen Gangsensor.
Was für ein Baujahr ist das ? [EDIT] war ne blöde Frage :D Wenn das eine 600er ist vor 2006. Die hat einen masseschaltenden Gangsensor unter der linken Ritzelabdeckung. Allerdings ist der nicht voll bestückt. Das kann man aber leicht selber machen. Wennst mir eine PM mit deiner Mailaddy schickst kann ich dir die nötigen Unterlagen zukommen lassen.

[nommal EDIT]der SS496A1 wurde speziell dafür ausgewählt. Der Magnet ist ein 5x20mm Neodymmagnet in einer speziell dafür gefrästen Halterung am Schaltgestänge. Von Reedschaltern halt ich nichts wegen der fummligen Einstellerei. Einen Magnetfeldsensor kann ich per bzw. in der Software kalibrieren und auch eine Hysterese programmieren. Immer wenn der Leerlauf "überstrichen" wird (1-0-2 oder umgekehrt) wird der Zähler synchronisiert. Ganganzeigen die aus Drehzahl und Geschwindigkeit den Gang errechnen funktionieren nicht im Stand, im Leerlauf und bei gezogener Kupplung. Deswegen hab ich das auch nicht gemacht.

oberallgeier
12.03.2012, 19:08
... wieso bitte ... bei einer Bandit ... Magnetsensoren ... Baujahr .. ? ...Eben. Das Moped ist fast älter als ich - voooor 2006.


... hat einen masseschaltenden Gangsensor ... nicht voll bestückt ... selber machen ...Ich wusste doch, warum ich mir von Dir eine kompetente Antwort erhoffte. Mein Händler meint dass sie keinen Gangsensor hat und mein Motorradguru (die ersten 20 Dakars selbst oder als Monteur mitgefahren) kennt praktisch nur Enduros. Dann bräuchte ich ja keinen Magnet und keinen SS496A1 *ggg* - whow - Klasse. Ich wusste doch, warum ich mir von Dir ...


... Ganganzeigen die aus Drehzahl und Geschwindigkeit ... funktionieren nicht im Stand ...Ja, das war mir schon klar. ABER - ich kann natürlich nach etwa einer Sekunde taktenden Signalempfangs vom Tacho zählen, wieviel Umdrehungen der Motor für eine Radumdrehung braucht. Und damit die Ganganzeige nachjustieren. Sozusagen ein Stilfser-Joch-Gimmick. Wobei es beim Umbrail wichtiger ist wegen seiner Sandpiste.

Jedenfalls danke ich Dir Crazy Harry für den ausführlichen, kompetenten Rat.