www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Variable um 1 erhöhen + ausgeben mit variablen


Autor: Skater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tach!!

ich meld mich mal wieder mit fragen:

wie ihr vielleicht schon wisst hab ich vor eine digitaluhr zu bauen.
ich realisiere die mit schieberegistern. da ich 6 stellen hab (2 für
stunden, 2 für minuten und 2 für sekunden) benötige ich für jede
anzeige ein 8-bit schieberegister. wenn alle schieberegister
angeschlossen sind, habe ich also ein 48-bit schieberegistern.
die ausgabe erfolgt über PD4, 5 und 6. PD4 ist clock, PD5 ist data und
PD 6 ist strobe. momentan ist jede ziffer in einer variablen
gespeichert. eine eins sieht z.b. so aus:

eins:   sbi PORTD, 4                ;der punkt
  cbi PORTD, 4

  sbi PORTD, 4                  ;segment g
  cbi PORTD, 4

  sbi PORTD, 4                  ;segment f
  cbi PORTD, 4

  sbi PORTD, 4                  ;segment e
  cbi PORTD, 4

  sbi PORTD, 4                   ;segment d
  cbi PORTD, 4

  sbi PORTD, 5                   ;data wird auf 1 gesetzt
  sbi PORTD, 4                   ;segment c (leuchtet)
  cbi PORTD, 4

  sbi PORTD, 4                  ; segment b
  cbi PORTD, 4
  cbi PORTD, 5                  ; data wieder auf null

  sbi PORTD, 4                  ;segment a (leuchtet nicht)
  cbi PORTD, 4

        sbi PORTD, 6                  ;strobe (die 8 bits
        cbi PORTD, 6                   werden gesetzt


nun brauche ich einen "counter" der die variable "sekunde" um 1
erhöht (vojn 0 auf 1 auf2 auf 3 auf 4 auf 5 auf 6.....) ein zweites
sub-programm soll dann zur passenden variable der ziffer springen (bei
6 zu sechs bei 7 zu sieben) wenn nun die zahl 0 wieder erricht wird,
soll die variable "zehnersekunden" auf 1 gesetzt werden... und so
weiter bis stunden....
wichtig ist, das immer alle 48bis ausgegeben werde... um z.b. 00:00:03
darzustellen muss ich 5 mal die null und dann die eins ins
schieberegister eingeben. das ist aber unwichtig.. ich brauche eher
diesen "counter" und die "auswerte" routine...

Autor: :-) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wo ist, von der unschlagbaren Umständlichkeit des Programms einmal
abgesehen, das Problem? Du bist doch aufm richtigen Weg.

sekunden_einer inkrementieren
wenn sekunden_einer=10 dann sekunden_einer=0 und sekunden_zehner
inkrementieren...
wenn sekunden_zehner=6 dann sekunden_zehner=0 und minuten_einer
inkrementieren
usw..

Autor: Skater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, das ist natürlich klar... aber wie gehen die befehle dazu??? ich hab
AVR studio 5.6. und da in den "help topics" stehen irgendwo auch die
verschiedenen befehle, wobei ich mit denen net weit gekommen binn, weil
die beispiele beschissen sind. klann ich das so wie in basic
schreiben?? also sekunden_einer = sekunden_einer + 1??

zum thema umständlichkeit: wie gehts denn einfacher??

Autor: :-) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guckst Du http://www.avr-asm-tutorial.net/avr_de/beginner/index.html ,
mit den Befehlen cp, cpi, breq und brne kommst Du wahrscheinlich aus.
Aber les Dir ruhig mal den Rest durch... kann nicht schaden...

Und weniger umständlich wärs wenn Du für alle Zeichen die Du auf den
Anzeigen darstellen willst einen Lookup-Table einrichtest der die
entsprechenden Bitmuster enthält; dann kannst Du die Sekunden-Einer,
Zehner usw zur indirekten Adressierung benutzen. Guckst Du
http://www.avr-asm-tutorial.net/avr_de/beginner/re...

Have phun!

Autor: Skater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich blick des von vorne bis hinten nicht... gibts da keine
einfachere möglichkeit?? vielleicht in nem c-compiler??

Autor: :-) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wollte ich Dir auch schon vorschlagen. Lad Dir nen Basic-Compiler
runter, einfacher gehts nun wirklich nicht mehr ;-D

http://www.mcselec.com/download_avr.htm

Ich glaub in der Demoversion ist die Programmgröße begrenzt, aber für
sowas kleines sollte es reichen.

Autor: Skater (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok... dann hol ich den mir mal... werd mich da zwar auch mal
reinarbeiten müssen, aber ich hab schjon viel mit visual basic
programmiert.. also wird das auch gehen

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.