mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik steigender und fallender wert


Autor: Rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
halllo an alle spezialisten.

ich weiß nicht so recht wie ich das machen soll

ich brauche einen ansteigenden wert von 0->255 wenn der maximalwert
erreicht ist soll das ganze wieder zurücklaufen also von 255->0
So eine Art halber sinus

gibts da irgendwo beispiele

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

Bewertung
0 lesenswert
nicht lesenswert
int i;
  while( 1 ) {
    for( i = 0; i < 256; ++i )
      /* mach was mit i */

    for( i = 254; i > 0; --i )
      /* mach was mit i */
  }

Autor: Rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für dieb Schnelle Antwort

und wie geht das im assembler

Sorry hatte ich nicht gesagt

Autor: Ludwig Wagner (lordludwig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder asm:

loop:

        'mache irgendwas
        '...
  cpi temp, 255    'zähler mit 255 vergleichen
  breq loop2    'wenn 255 dann anfangen mit runter zählen
  inc temp    'temp um 1 erhöhen
  rjmp loop    'zu loop springen

loop2:

        'mache irgendwas
        '...
  cpi temp, 0    'zähler mit 255 vergleichen
  breq loop    'wenn 255 dann anfangen mit rauf zählen
  dec temp    'temp um 1 verniedrigen
  rjmp loop2    'zu loop2 springen

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

Bewertung
0 lesenswert
nicht lesenswert
Im Prinzip genau so.

Du schnappst Dir ein Register und initialisierst
es mit 0.
Dann machst Du etwas mit dem Wert
und zaehlst ihn hoch. Ist 256 (aka 0, da wir ja 8 bit
Register haben) noch nicht erreicht springst Du zurueck
zu 'mach was mit dem Wert'.
Das war die erste Schleife, wie die zweite aussieht
muesstest Du eigentlich jetzt auch selbst hinkriegen.
Da kannst doch eine Zaehl-Schleife programmieren, oder?

Autor: Ludwig Wagner (lordludwig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich war schneller ;-)

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

Bewertung
0 lesenswert
nicht lesenswert
Mist :-)

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

Bewertung
0 lesenswert
nicht lesenswert
Dein Code hat nur einen Fehler :-)

mit 255 und 0 machst Du 2 mal 'mach irgendwas

(Ich weiß, die Loesung ist trivial, aber Rene soll auch noch
was zu tun haben).

Autor: Rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke euch;-)

nur noch ein Problem
ich habe nicht mehr viele Register Frei und habe schon alles
"verbraten"
und müsste alles im RAM zwischenspeichern mit STS und LDS gibts da auch
noch andere methoden. werte im RAM kan man ja nicht über den umweg eines
Registers verändern oder?

Autor: Ludwig Wagner (lordludwig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl Heinz Buchegger: ne, ich spring wieder zu loop zurück:

breq loop    'wenn 255 dann anfangen mit rauf zählen

@Rene dann solltest du generell auf SRAM umsteigen. Es ist nie gut wenn
alle register benutzt sind

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

Bewertung
0 lesenswert
nicht lesenswert
> loop:
>
>        'mache irgendwas
>        '...
>  cpi temp, 255    'zähler mit 255 vergleichen
>  breq loop2    'wenn 255 dann anfangen mit runter zählen
>  inc temp    'temp um 1 erhöhen
>  rjmp loop    'zu loop springen
>
> loop2:
>
>        'mache irgendwas
>        '...
>  cpi temp, 0

fang mal oben an und nimm an dass temp den Wert 255 hat

  'mach irgendwas    ; hier machst Du das erste mal was mit 255

  cpi temp, 255      ; ist der Fall
  breq loop2         ; also wird der breq genommen

loop2:

  'mach irgendwas    ; und hier machst du schon wieder was mit 255

Autor: Ludwig Wagner (lordludwig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achso hast du das gemeint... hast recht.

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.