Hi @ all,
bin zwar neu in dem Gebiet aber habe schon mein erstes Projekt im
Visier.
Habe einen Code geschrieben und suche Rat ob der so funktionieren
könnte.
Vermutlich noch nicht, aber das will ich ja wissen ;P
Funktion:
Ich möchte an meinem Motorrad über einen Reedkontakt einen Controller
ansteuern. Sprich je Radumdrehung = 1 signal. Nach 50000x Signalen
sollte der Controller einen Ausgang für ca 5sek ansteuern. (letzteres
fehlt noch) Danach wieder
von vorne.
Hier der Code:
Ralph Müller wrote:
> Habe einen Code geschrieben und suche Rat ob der so funktionieren> könnte.> Vermutlich noch nicht, aber das will ich ja wissen ;P
Bis jetzt besteht dein Code lediglich aus ein paar
ineinandergeschachtelten Zählschleifen, die einfach nur Zeit verbrutzeln
und einigen unmotivierten Jump-durch-die-Gegend.
Ich seh ehrlich noch nicht wirklich, wie man diesen Code zu der von dir
gewünschten Funktionalität ausweiten könnte.
Da du den INT0 Interrupt anscheinend benutzen willst: Du willst doch
hoffentlich nicht wirklich den Kontakt an einen Interrupt eingang legen?
Mechanische Kontakte prellen immer, so dass es keine gute Idee ist, die
einen Interrupt auslösen zu lassen.
PS: Wenn du schon die Programmierung lernen musst, warum machst du das
dann nicht einfach in C? Der Compiler würde dir viele lästige kleine
Details abnehmen, wie zb. wie zählt man in 2 Registern bis 50000, etc.
Ob du bei 0-Ahnung in Asembler oder in C einsteigst ist erst mal gehupft
wie gesprungen. Nur sind deine Chancen in Assembler wesentlich größer,
dich selbst ins Knie zu schiessen.
PS2: Im AVR-Studio gibt es einen Simulator. Wenn du wissen willst, ob
dein Code auch das macht, was du dir vorstellst, dann gehs einfach mal
im Simulator Schritt für Schritt durch.
PS3: Fang erst mal mit Vorübungen an: Wie wertet man einen Eingang aus,
wie kann man 16 Bit Arithmetik betreiben, etc. Dein Projekt ist für dein
Vorwissen zur Zeit noch eine Nummer zu groß so dass du dich verzetteln
wirst.
Furchtbar. Gibt noch nicht mal einen Stack-Überlauf.
Wie langweilig. Ein Int. ohne reti.
> cpi r18,200 ;innerer Zähler (bis 200)> brne impuls ;wenn inerrer Zähler = 200 springen
...
> ldi r16,0x11000000> out GICR,r16
...
haste von mir "0"b"11000000" was?.
Gute Nacht!
@ Ralph Müller
Also ich tippe mal das dein Reedkontakt an Int0-Interrupt hängt.....
Der Programmablauf ist irgendwie kaputt. Der AVR arbeitet schön Zeile
für Zeile von deinem Programm ab. d.h nach dem sei macht er mit
"ldi r16,0x11111111" weiter zählt dann bis 255 und springt nach
"takt:" von da aus wiederholt alles 200 mal ab "impuls:".
Danach springt er nach "aktion:", setzt die watchdog zurück
und macht danach einen Software "reset" ("rjmp main").
Von Impuls zählen ist da weit und breit nix zu sehen....
Beschäftige dich doch mal mit ret, reti und call bzw rcall
Hi
1. Von wo kommt jetzt in deinem Programm der Takt vom Reedschalter?
2. Wenn du ein Register inkrementierst ist das nach 256mal wieder Null.
Das wird dann durch Zeroflag signalisirt. Der Vergleich mit r16 ist
überflüssig.
3. Für einen gösseren Bereich (z.B. 50000) bietet sich der Befehl 'adiw'
an, z.B. adiw r25:r24,1 überstreicht einen Bereich von 0 bis 65535.
4. Als Erstes solltest du den Reedschalter Einlesen können.
Erfahrungsgemäss prellen die ganz erheblich. Dann kannst du zählen. Und
zum Schluss den Ölschalter betätigen.
5. ....
6. ....
MfG Spess
Mal davon abgesehen, möchtest du während der Fahrt immer deine Kette
geölt haben und das alle 50-100km? Und dann immer schön während der
Fahrt auf die Kette sprühen und die Straße und dein Motorrad mit dem
zeug einsauen?
Wenn ja halte ich das für einen etwas zu frühen Aprilscherz
> Mal davon abgesehen, möchtest du während der Fahrt immer deine Kette> geölt haben und das alle 50-100km? Und dann immer schön während der> Fahrt auf die Kette sprühen und die Straße und dein Motorrad mit dem> zeug einsauen?>> Wenn ja halte ich das für einen etwas zu frühen Aprilscherz
Das machen auch die kommerziell käuflichen Systeme (mechanisch oder
elektronisch) so - das verwendete Öl ist dafür geeignet.
Alternative ist, alle 500-1000 km die Kette mit einem guthaftenden
Sprühfett einzusprühen, was man aber gerne immer weiter verschiebt.....
> Vor ein paar Tagen hat(te) das jemand schon mal vor.
Ist der Gleiche
Otto
Ich hab jetzt mal nachgesehen und tatsächlich solche Teile gibts
wirklich. Wer denkt sich sowas aus? Wozu soll das gut sein?
Wie gesagt alle 500-1000km (bei mir waren es auch schon mal 2000km) wird
eben die Kette mal eingesprüht, hatte damit noch nie Probleme. Ich bin
anscheinend zu Konservativ.
Was für ne Pumpe hast du dir denn vorgestellt?
Ich bezweifle irgendwie die Wirkung trotzdem, ich sprüh dann nen Tropfen
drauf und der Fliegt doch sofort wieder weg wenn ich ordentlich Feuer
gebe.
Und wenn ich richtig viel draufsprühe dann sauts mir erst recht alles
ein.
Also ich finds blödsinn bei der Fahrt die Kette schmieren zu wollen.
Hallo ms,
nee, das kann schon was (z. B. Scott-Oiler) - ich fette meine Kette
übrigens auch mit der Sprühdose - die mit einem automatischen
Schmiersystem geschmierten Ketten halten i. A. doppelt so lange (es sei
denn, Du gibst immer zu viel Stoff) und sehen immer nett aus.
Gruss Otto
Anscheinend geb ich nicht genug Stoff um mir um sowas gedanken machen zu
müssen. Ich weiß gar net wie alt meine Kette schon ist und is immernoch
Top.
Wie heißts doch in meiner Gegend immer: "Wenns schee macht"...
Ich verabschiede mich aus dieser Diskussion und rate bei betrachtung des
Codes dem Threadersteller erstmal davon ab sowas als erstes Projekt
realisieren zu wollen.
Zum Projekt möchte ich auch nichts sagen, da sind zu viele Baustellen
und es gibt gute und ausgereifte Lösungen.
Aber ein Öler an sich ist ne prima Sache. Hat viele Vorteile:
1. du brauchst dich im Prinzip gar nicht mehr um die Kette kümmern.
Immer gut geschmiert. Und da das Zeug nicht klebt wie Fett oder anderer
Kram, bleibt auch der Dreck nicht kleben und verwandelt sich nicht im
Lauf der Zeit zu perfekter Schmirgelpaste.
2. Ölverbrauch ist minimal, wenn richtig eingestellt. Habe meinen
Scottoiler vor 2 Jahren drangebaut, vom mitgelieferten Öl (0,5l) ist
noch etwa die Hälfte da, gefahren bin ca. 35.000km.
3. ich fahre schon mal Touren >500km, wer es Ernst meint mit der
Kettenpflege, muss dann ein Sprühdöschen mitführen.
4. du musst die Kette auch nicht mehr reinigen wie bei Fett oder
diversen Sprays
5. Ein Kettensatz hält damit wesentlich länger. Der 1. war nach 20.000
komplett hinüber, jetzt weitere 33.000 mit Öler, Kettensatz noch
ziemlich gut.
Otto wrote:
> Hallo spess53,>> entscheide selber: Beitrag "Umdrehung zählen und Aktion durchführen">> Gruss Otto
Da sieht das Programm aber viiiieeel besser aus :-)
Die Beschreibung passt zwar nicht zum Programm, und mit der Verwendung
von binären Vergleichskonstanten hat sich der Autor selbst ein Ei
gelegt, aber grundsätzlich, wenn wir mal von der Verwendung des
Interrupts absehen, ist das schon nicht so schlecht. Zumindest ist ein
Sinn erkennbar.
Wie hat sich der Autor eigentlich gedacht, dass er das Problem löst,
dass er an 200 Nachmittagen jeweils 10km fährt und danach jeweils der µC
den Strom verliert. Er ist ja dann 2000km gefahren, nur hat der µC
jedesmal beim Einschalten der Zündung wieder bei 0 angefangen :-)
Sprich: Die erforderliche Anzahl an Impulsen kommt nicht zustande und
die Kette wird nie geölt.
Du kannst ja mal unter
http://www.mccoi.de/ nach schauen. Dort ist so ein Projekt.
Das Problem wird die Pumpe sein. Die ist teuer, aber die könntest du
dort auch einzeln bestellen. Auch anderes Zubehör wie Regensensor usw.
Zudem gibt es dor Tips und info's.
Würde mir den aber fertig kaufen da alleine die Teile wahrscheinlich
schon teuerer sein werden.
Gruß
> Habe einen Code geschrieben
Hast du nicht. Du hast ein (Assembler-)Programm geschrieben. Ein Code
(oder Kode) ist eine Vereinbarung von Symbolen zum
Informationsaustausch.
So da bin ich wieder, hat sich ja einiges getan :P
Ja ich weiss ich bin blutiger Anfänger, habe mich erst seit 2 Woche mit
dem Thema Mikrocontroller beschäftigt. Mir sagte man es wäre besser mit
Assembler anzufangen bevor man auf die Hochsprache wechselt, hier ratet
man mir genau das Gegenteil?
Zum Kettenöler selbst. Klar läasst sich darüber streiten ob man sowas
haben muss. Natürlich kann ich die Kette auch von Hand schmieren aber
der Tüftler will ja was basteln ;) Aber ich seh schon ich muss wohl
erstmal kleinere Brötchen backen :(
Das der "Zähler" wieder auf 0 springt (Zündung aus) war auch so
eingeplant.
Bin letzes Jahr 17000 Kilometer gefahren. Darunter das meiste
Langstrecken (über 50km am Stück) Da spielt es keine Rolle wenn mal nach
ein paar Kurzstrecken nicht geölt wird.
@nobody: Eigentlich will ich garkeine Pumpe verwenden. Habe ein 12V
Hydroventil rumliegen, das Öl ist so Viskos das es durch die erhöhte
Lage des Tanks alleine zum Ziel findet.
Gruss
Doch nochmal hier einschalt
>Eigentlich will ich garkeine Pumpe verwenden. Habe ein 12V>Hydroventil rumliegen, das Öl ist so Viskos das es durch die erhöhte>Lage des Tanks alleine zum Ziel findet.
Das hab ich mir fast gedacht. Soviel zum Thema Sauerei auf der Straße,
der Felge, und was weiß ich wo das Zeug noch hinfließt wenn du das
einige sek einfach durch nen Schlauch rausläuft.
Wenn man sowas schon macht, dann sollte das Öl auch entsprechend Dosiert
werden.
Und ob dus mit Assembler oder in Hochsprache schreibst ist hier nach
eigenem Gusto und können.
Das gibt keine Sauerei, ein Drosselventil kommt dazwischen und gut ist.
Ich weiss nicht wie du dir das vorstellst, die Kette soll nicht geflutet
werden.
Das Öl muß sehr gut haften, sonst wird es sofort abgeschleudert. Da ist
nicht viel Auswahl. Ich verwende Kettensägenöl von Stihl. Und geschmiert
wird so alle 3 bis 12 km ein Tropfen per Pumpe, kann ich einstellen.
Pumpe deshalb, weil das Öl so hoch viskos ist.
Und bei Regen (Regensensor ist auch dran) wird das eingestellte Interval
halbiert, weil das Wasser das Öl früher abwäscht.
Einen "Cross"-Modus gibt es auch noch. Der ist fürs Gelände und
Sandstrecken, da wird statt einem dann 8 Tropfen auf die Kette gegeben.
50km sind eher Kurzstrecke, da ist ein Reset ungünstig bei Deinem
geplanten Tropfenintervall.
Mein Rat ist, kaufe Dir sowas, die jahrelangen Erfahrungen und
Rückschläge der anderen Fahrer mit so einem Teil kannst Du nicht allein
machen ohne zu verzweifeln.
Im schlimmsten Falle ölst Du Dir Deinen Reifen ein und legst Dich in
einer Kurve hin.
Blackbird
Genau darauf wollte ich hinaus. Vielleicht hab ichs nur falsch
formuliert, bzw gedacht man muss es nicht so direkt sagen.
Kettensägenöl wär mir auch eingefallen aber da läuft die Kette ja auch
wesentlich langsamer (der verbrauch ist natürlich aufgrund der Nutzung
der Kette exorbitant höher)
Kettensägenöl (normales, nicht die Bio-Variante) hat sich als das Beste
herausgestellt. Auch die Intervallzeiten und alles Andere sind
Erfahrungswerte von vielen, vielen hunderttausenden "Test"-Kilometer von
zig. Fahrern.
Trotzdem spricht nichts dagegen, sowas selbst zu machen. Aber man sollte
sich, schon um der eigenen Sicherheit wegen, zuvor mal kundig machen:
www.mccoi.de (keine Werbung, aber dort tummeln sich auch µC-Fans,
schließlich ist da ein ATtiny2313 verbaut und mit BASCOM programmiert).
Aber der ATtiny und das Programm sind das kleinste Problem.
Ich hatte schon genug zu tun, den fertigen Bausatz FACHGERECHT an mein
Motorrad zu adaptieren.
Lohn der Mühe: ca. 10000km ohne Kettengeschmiere alle 400km.
Blackbird
Blackbird wrote:
> Lohn der Mühe: ca. 10000km ohne Kettengeschmiere alle 400km.>>> Blackbird
Und das ist ja schon mal eine Menge wert. Denn die Kette ist ja auch
nicht ganz billig, auch wenn man diese ggfs. selber tauscht.
10 Tkm ist schon mal gut.
Automati. Kettenöler ist eine feine Sache. Ich hatte das auch mal
gebaut, allerdings in der schlichten Variante mit einfachem Taktgeber,
Dosierpumpe und ohne Reed-Input etc. Hat auch gute Werte an der Kette
für 8-9 Tkm geliefert.
Man sieht, es braucht nicht übermäßig viel Aufwand bei der Steueung. Es
geht so mit bescheidenen Mitteln.
hth,
Andrew
so 2 wochen später ein neuer anlauf ;) diesesmal ist das programm
hoffentlich etwas besser geworden ---> da mehr eingelesen. was meint ihr
könnte das in der praxis funktionieren? ist bestimmt nicht die
eleganteste lösung aber würde es so funktionieren?
Hat 2 min gedauert.
Zu deinem Programm: Wenn Zählen, dann rückwärts. Damit ersparst du das
'cp...'. Grössere Zahlen kannst du in mehreren Registern halten. Für
Zahlen bis 65535 gibt es zum Zählen die Befehle adiw und sbiw.
Bei Interruptroutinen sollte man SREG sichern. Hat bei dir hier keinen
Einfluss, kann aber bei anderen Programmen zu interessaten
Überraschungen führen.
MfG Spess
dann brauchst du auch keinen Kommentar und niemand muss überlegen, ob
0b11001000 tatsächlich 200 ist, oder du aus irgendwelchen Gründen
vielleicht 1 mehr oder weniger oder sonstwas hat.
Merke: Überleg bei jedem Kommentar, ob man das was der Kommentar
aussagt, nicht auch im Code unterbringen könnte.
1
reset1: ldi r19, 0x00 ; resetet r19
schön, das du dazuschreibst, dass hier r19 resettet wird. Aber leider:
das seh ich auch, wenn ich den Code anschaue. Was ich aber nicht sehe,
wenn ich den Code betrachte: Warum wird r19 auf 0 gesetzt und was zum
Teufel befindet sich logisch gesehen eigentlich in r19? Ist das die
Anzahl der Schmierungen, oder die Anzahl der Kilometer oder die
Tankfüllung oder was?
Merke: Kommentier nicht das, was sowieso im Code auch steht. Kommentiere
was nicht im Code steht! Das sind meist Logik-Dinge, also: warum
passiert etwas.
In diesem Sinne:
1
ldi temp, 0b00000011 ; INT0 und INT1 konfigurieren
2
out MCUCR, temp
Was bedeutet INT0 und INT1 konfigurieren? Auf welchen Modus werden sie
konfiguriert? Gib mir im Code ein paar Stichworte mit denen ich zur Not
in der µC Doku suchen gehen kann
und das hat dann schon eine ganz andere selbstdokumentierende Qualität.
Und noch was: hüte dich vor wilden Sprungorgien. Du bist momentan drauf
und drann, dich in einem Sprungdickicht zu verlieren, wenn du wie wild
mit rjmp hin und her springst.
jaja ich bin ein kleiner binärzähler :) hab mir hier die ersten
tutorials angeschaut bei denen auch mit binärzahlen gearbeitet wurde.
warscheinlich nur zum verständniss. ist bei mir eben noch
hängengeblieben genau so wie ich beim festlegen des richtungsregisters
ein hexzähler bin :P
das mit den registernamen werde ich dann so umsetzen. danke
und zu dem r19, falls das keine rethorische frage war: ich benötige
50000x signale = 50000 radumdrehungen. zähle in dem r18 bis auf 200 und
im r19 auf 255 ergibt 200*255 = 50000. habe ich ja schon oben erwähnt.
gruss ralph
Ralph Müller wrote:
> und zu dem r19, falls das keine rethorische frage war:
:-) Doch, war es.
Bei meinen letzten Antworten ging es hauptsächlich um Prinzipien und
weniger um dein konkretes Programmproblem.
> ich benötige> 50000x signale = 50000 radumdrehungen. zähle in dem r18 bis auf> 200 und im r19 auf 255 ergibt 200*255 = 50000. habe ich ja schon> oben erwähnt.
Siehst du: Genau das wäre zb. etwas was in einen Kommentar am Anfang des
Interrupt Handlers rein könnte/sollte/müsste:
Der Handler soll bis 50000 zählen. Der Zähler ist realisiert indem r18
bis 200 zählt und bei einem Überlauf von r18 r19 bis 255 hochgezählt
wird.
Genau das sind Dinge, die man mit einem Kommentar dokumentiert.
Hi
>200*255 = 50000?????>PS: man kann Registern auch Namen geben :-)
Mag bei kleinen Programmen etwas Sinn machen. Wenn ein Register aber
sehr unterschiedliche Funktionen haben kann, eher lästig (versuch mal
das vernünftig zu debuggen).
>jaja ich bin ein kleiner binärzähler :)
Alles wo es hin gehört. Einen Dezimalwert unbedingt binär wiederzugeben
ist etwas sinnfrei.
MfG Spess
Ich grabs nochmal aus, weil mich im XJ-Forum jemand auf ne Idee gebracht
hat:
Die Dosierung könnte man idiotensicher von der gefahrenen Wegstrecke
abhängig machen (wurde ja hier auch getan). Idiotensicher, weil man den
Geberkontakt nicht einmal an Reifen oder Kette montieren/kleben müsste!
Amerikanische Motorräder haben da so eine Blinkerschaltung verbaut, die
den Blinker automatisch nach einer Zeit bzw. nach einer gefahrenen
Strecke wieder abstellen, und die nehmen die Wegstrecke direkt vom
Magneten im Tacho ab. Wäre doch eigentlich eine geniale wie saubere
Lösung :-D
@Gast4
Um den Sven zu zitieren: Käse
Der 8-Bit Assembler interessiert sich nicht für mehr als zwei Stellen
nach dem '0x'. Z8s Aussage ist demnach korrekt.
> keine Werbung, aber dort tummeln sich auch µC-Fans,> schließlich ist da ein ATtiny2313 verbaut und mit BASCOM programmiert
Das ich da mit BASCOM gecodet hab, das wüßte ich aber :-)
Das ist alles feinster Assembler...
Grüße aus dem McCoi-Lager