Das Projekt finde ich super, bin mal gespannt was daraus wird.
Gruß Michael
Druckbare Version
Das Projekt finde ich super, bin mal gespannt was daraus wird.
Gruß Michael
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.
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
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 ;-)
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.
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.
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?
So hier mal ein kleiner Zwischenstatus des Projektes (Ohne Breakout-Detection):
Schaltplan:
http://www.filedealer.com/freeupload...e362c21a3c.pdf
Quellcode für den Tiny24:
Und ist der $EEPROM Befehl im Bascom dafür da das interne EEPROM des Controllers zu beschreiben?Code:'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
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.
Naja vielleicht hab das auch nur falsch gelesen. Ich werd da nochmal genauer nachschauen aber die idee ist gut.