www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Weckzeit bei ATmega einstellen, seltsamer Fehler !


Autor: Olli R. (downunderthunder42)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Die angefügte Datei soll nur dazu dienen per Tastendruck die Weckzeit 
einer
Uhr zu stellen.

Hier ein paar Rahmenbedingungen:

Tasterport 7 6 5 4 3 2 1 0
                     1 1   --> z.B. Tasten 2 und 3 wurden gedrückt

Die zu letzt gedrückten Tasten sind in "temp4" gespeichert

Die Subroutine wird nur ausgeführt, wenn die Weckzeit auch ausgegeben 
wird!
Das wird durch Bit 6 in "ind_flag" angezeigt.


Jetzt zum Eigentlichen:

wenn also die Weckzeitausgegeben wird,
soll über Taster 2 eine Auswahl getroffen werden können,
was an der Weckzeit verändert werden soll (momentan entweder
Minuten oder Stunden)

1.Mal Drücken Taste 2  -->Wert 4
2.Mal Drücken Taste 2  -->Wert 2


Wenn man dann Taster 3 betätigt wird die jeweilige Größe (Minuten oder 
Stunden) inkrementiert

Vorherige Auswahl von Taster 2 mit Taster 3 verknüpfen:

also entweder Wert 4 + 1
oder Wert 2 + 1

Diese beiden Werte dienen nun als Entscheidungshilfe für den 
auszuführenden Programmteil


das klappt soweit auch,


???--> allerdings wird, wenn ich jetzt Taster 2 ein drittes und viertes 
Mal drücke nicht auf die erste Stellgröße (Minuten einstellen) 
zurückgesprungen, sondern erst beim fünften Mal.

Wodran mag das liegen?

Autor: Olli R. (downunderthunder42)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Der Code war noch etwas durch Tabs gestört.
also hier nochmal übersichtlicher.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>alert_select:
>           lsr   r16
>           dec   r16

>           brne  alert_select_01
>           ldi   r16, 2                 <- r16 = 2
>           lsl   r16                    <- r16 = 4
>           sts   dt_alert_select, r16
>alert_select_01:
>           lsl   r16                    <- r16 = 8
>           sts   dt_alert_select, r16
....
>           add   r17, r16


Bist du sicher, das das so gedacht ist?

MfG Spess

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du solltest Dein Programm einfach halten. Gerade in Assembler sind 
Tricksereien undurchschaubar und Du stellst Dir nur selber ein Bein.

Laß diese Schiebeorgien sein. Ich seh da jedenfalls nicht durch.

Ein Zustandszähler zählt immer von 0 ... n-1 und bei n setzt Du ihn 
wieder auf 0.
Bei n = 2, 4, 8 ... kannst Du auch maskieren:
if( taste gedrückt )  state = (state + 1) and 1


Peter

Autor: Olli R. (downunderthunder42)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
> Bist du sicher, das das so gedacht ist?

Oh Mann ja klar das ist natürlich nicht so gemeint.
Manchmal sieht man den Wald vor lauter Bäumen nicht.
Es war aber auch schon ziemlich spät. ;)
Deswegen hat ich dann auch als ich für r16 einfach mal weitaus höhere 
Werte
verwendet habe, eine Bereichsverletztung!

Peter Dannegger schrieb:
> Ein Zustandszähler zählt immer von 0 ... n-1 und bei n setzt Du ihn
> wieder auf 0.
> Bei n = 2, 4, 8 ... kannst Du auch maskieren:
> if( taste gedrückt )  state = (state + 1) and 1

Ok das ist aber doch eher etwas für ein C-Programm?

Dieses "if taste gedrückt" wollte ich ja mit dem aktuellen Zustand + dem 
Wert für die Taste(2, 4 oder 6 z.B. + Taste gedrückt also 1, Taste 2 hat 
natürlich den Wert 4 deswegen 2mal shift right)

Wie "inetwa" könnte eine alternative Methode aussehen?

zum Zustandszähler:

ich hatte gedacht, dass es eher von Vorteil ist ihn zu dekrementieren, 
da ich dann keine dezidierte "cp/cpi"-Anweisung benötige?

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.