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...
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..
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??
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!
also ich blick des von vorne bis hinten nicht... gibts da keine einfachere möglichkeit?? vielleicht in nem c-compiler??
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.