www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anfänger sucht Rat "Kettenöler"


Autor: Ralph Müller (revolt3c)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:

;Reset and Interrupt vector             ;VNr.  Beschreibung
  rjmp  main  ;1   POWER ON RESET
  rjmp  takt  ;2   Int0-Interrupt
  reti    ;3   Int1-Interrupt
  reti    ;4   TC2 Compare Match
  reti    ;5   TC2 Overflow
  reti    ;6   TC1 Capture
  reti    ;7   TC1 Compare Match A
  reti    ;8   TC1 Compare Match B
  reti    ;9   TC1 Overflow
  reti    ;10  TC0 Overflow
  reti    ;11  SPI, STC Serial Transfer Complete
  reti    ;12  UART Rx Complete
  reti    ;13  UART Data Register Empty
  reti    ;14  UART Tx Complete
  reti    ;15  ADC Conversion Complete
  reti    ;16  EEPROM Ready
  reti    ;17  Analog Comparator
  reti    ;18  TWI (I²C) Serial Interface
  reti    ;19  Store Program Memory Ready
;------------------------------------------------------------------------
;Start, Power ON, Reset
main:  ldi  r16,lo8(RAMEND)
  out  SPL,r16
  ldi  r16,hi8(RAMEND)
  out  SPH,r16


  ldi  r16,0xFF
  out  DDRB,r16

  ldi  r17,0x00
  out  DDRD,r17


  ldi  r16,0b00001010
  out  MCUCR,r16

  ldi  r16,0x11000000
  out  GICR,r16

  sei


impuls:  ldi  r16,0x11111111
  inc  r17
  cp  r16,r17         ;äußerer Zähler (bis 255)
  brne  impuls          ;wenn äußerer Zähler = 255 dann springen
  ldi  r17,0           ;wieder auf 0 zurücksetzen
  rjmp  takt





takt:  inc  r18
  cpi  r18,200           ;innerer Zähler (bis 200)
  brne  impuls            ;wenn inerrer Zähler = 200 springen
  ldi  r18,0             ;wieder auf 0 setzen
  rjmp  aktion



;------------------------------------------------------------------------
aktion:  wdr
  "Fehlt noch"
  
  rjmp  main
;------------------------------------------------------------------------


Gruss Ralph

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Z8 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Z8 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An alle Anfänger:

"ldi  r16,0x11111111" ;falsch   entspricht dezimal 17
           -
"ldi  r16,0b11111111" ;richtig  entspricht dezimal 255
           -

Autor: ms (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Wenn ja halte ich das für einen etwas zu frühen Aprilscherz

Vor ein paar Tagen hat(te) das jemand schon mal vor.

MfG Spess

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Ist der Gleiche

Sah das da auch schon so schlimm aus? Hab das nur überflogen.

MfG Spess

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo spess53,

entscheide selber: Beitrag "Umdrehung zählen und Aktion durchführen"

Gruss Otto

Autor: ms (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: ms (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: H.Joachim Seifert (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: FRAGENSTELLER (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Ralph Müller

sieh dir das einmal an:
http://www.alpentourer.de/shop/schwaboiler/schwaboiler.html

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Jürgen H. (nobody)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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ß

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine C-Control für einen Kettenöler? Das ist 'Overkill' um Faktor 
Fünftausend.

Autor: Norgan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Habe einen Code geschrieben

Hast du nicht. Du hast ein (Assembler-)Programm geschrieben. Ein Code 
(oder Kode) ist eine Vereinbarung von Symbolen zum 
Informationsaustausch.

Autor: Ralph Müller (revolt3c)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: ms (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Ralph Müller (revolt3c)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Blackbird (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: ms (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: Blackbird (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Andrew Taylor (marsufant)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Ralph Müller (revolt3c)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?


;**********************************************************
.include "m8def.inc"  
;**********************************************************





.org INT_VECTORS_SIZE


.org 0x00
           rjmp main            ; Reset Handler

.org INT0addr
           rjmp int0_handler    ; IRQ0 Handler




.def temp = r16

main: ldi temp,low(RAMEND)  ; Stackpointer initialisieren
      out SPL,temp

      ldi  temp,high(RAMEND)
      out  SPH,temp
      
      ldi r18, 0

      ldi r19, 0

      ldi  temp,0xFF
      out  DDRB,temp

  
      ldi r17,0x00
      out  DDRD,r17


      ldi temp, 0b00000011  ; INT0 und INT1 konfigurieren
      out MCUCR, temp
 
      ldi temp, 0b11000000  ; INT0 und INT1 aktivieren
      out GICR, temp
 
      sei                   ; Interrupts allgemein aktivieren

loop: rjmp loop




int0_handler:


      ldi r16, 0b11001000    ; zählt bis 200
      inc r18 
      cp   r16, r18

      breq step

      reti



reset1:  ldi r19, 0x00         ; resetet r19  
      



reset2:  ldi r18, 0x00      ; resetet r18      
         reti




step:
      ldi r16, 0b11111111   ; zählt bis 255
      inc r19
      cp r16, r19

      breq schmieren

      rjmp reset2


schmieren:                    ; "fehlt noch"
      
               inc r20        ;"zählt anzahl der schmierungen"

               rjmp reset1


Autor: McCoi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der Name ist Programm in Sache µC-Kettenschmierung.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Warum so umständlich?
main: ldi temp,.....
      
      ldi r18, Low(50000)
      ldi r19,High(50000)
      .....


int0_handler:
     
     sbiw r19:r18,1
     brne int0_handler10

schmieren:                    ; "fehlt noch"
      
    inc r20        ;"zählt anzahl der schmierungen"
     
    ldi r18, Low(50000)
    ldi r19,High(50000)

int0_handler10:
     reti
 

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du liebst Binärzahlen :-)
      ldi r16, 0b11001000    ; zählt bis 200
schreibs doch gleich so
      ldi r16, 200
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.

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:
      ldi temp, 0b00000011  ; INT0 und INT1 konfigurieren
      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
      ldi temp, ( 1 << ISC01 ) | ( 1 << ISC00 )  ; INT0 und INT1 konfigurieren
                                                 ; INT0: steigende Flanke
                                                 ; INT1: low Level
      out MCUCR, temp

(PS: Bist du sicher, dass du INT1 auf Interrupt bei low-Level haben 
willst?)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PS: man kann Registern auch Namen geben :-)

zb.
.def Pulse200 = r18
....


Dann wird aus deinem Code
int0_handler:
      ldi r16, 0b11001000    ; zählt bis 200
      inc r18 
      cp   r16, r18

      breq step

      reti

das hier
int0_handler:
      inc Pulse200 
      cpi Pulse200, 200

      breq step

      reti

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.

Autor: Ralph Müller (revolt3c)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Gast4 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Autor:  Z8 (Gast)
> Datum: 31.03.2009 23:32
>An alle Anfänger:

>"ldi  r16,0x11111111" ;falsch   entspricht dezimal 17

Besser nicht merken ist naemlich:

   286331153


Gast4

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.