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


von Skater (Gast)


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...

von :-) (Gast)


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..

von Skater (Gast)


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??

von :-) (Gast)


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/register.html#Pointer

Have phun!

von Skater (Gast)


Lesenswert?

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

von :-) (Gast)


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.

von Skater (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.