Hallo, Nun wir haben hier in der Schule ein Problem. Wir sollen den AT Tiny 2313 mit Assembler Programmieren. Aufgabenstellung: Das Programm soll im Sekunden Takt eine 7 Segment anzeige hochzählen, auf Tastendruck soll die Zählrichtung umgekehrt werden. wir brauchen: Hauptprogramm, Timer Interrupt, Taster Interrupt und Unterprogramm. Bitte zu allem den Programmiercode mit Erklärung thank you. mfg Boris
Hallo , welchen Assembler benutzt ihr und welche Include Datei ? MfG Hans
Wir benutzen den von Atmel AVR Tools -> Avr Studio 4 die include datei heißt .INCLUDE "2313def.inc" thx Boris
> Nun wir haben hier in der Schule ein Problem. Wir sollen den AT > Tiny 2313 mit Assembler Programmieren. Ich wünschte mir, sowas hätt's zu meiner Zeit schon an der Schule gegeben. > Aufgabenstellung: > Das Programm soll im Sekunden Takt eine 7 Segment anzeige > hochzählen, auf Tastendruck soll die Zählrichtung umgekehrt > werden. wir brauchen: > Hauptprogramm, Timer Interrupt, Taster Interrupt und > Unterprogramm. Bitte zu allem den Programmiercode mit Erklärung > thank you. Lol... sonst noch Wünsche? Die Aufgabe war bestimmt nicht, jemanden zu suchen, der es euch programmiert, sondern dies selbst zu tun, oder ist es vielleicht eine Management-Schule? Also: Wenn ihr spezifische Probleme habt, wird euch hier sicher geholfen, aber euer Arbeit macht euch hier keiner. Ehrlich gesagt finde ich so eine Frage schon ziemlich dreist und unverschämt.
@rolf Is keine Schulaufgabe oder sowas, ist nur ein kleines Projekt, bei dem wir halt überhaupt nicht wissen wie wir es hinbekommen sollen. Wär halt cool wenn uns jemand helfen könnte.
>Wir sollen den AT Tiny 2313 mit Assembler Programmieren. Das klingt aber schon nach einer Schulaufgabe >wir brauchen: >Hauptprogramm, Timer Interrupt, Taster Interrupt und Unterprogramm. >Bitte zu allem den Programmiercode mit Erklärung thank you. ...Und das ist wirklich dreist und unverschämt!
Wir sind in einer Computerfachschule, in der wir in 6 wochen abschlusspfüfung haben, es ist eine Abschlussübung, wir haben leider kein plan. für eine schulaufgabe wär die zeit zu kurz, um die Frage ins forum zu schreiben. thx mfg
Wenn du keinen Plan hast, dann hast du jede Menge Zeit, da du das Jahr sehr wahrscheinlich wiederholen wirst. 6 Wochen sind aber eigentlich auch genug Zeit, um sich nochmal hinter die Bücher zu klemmen. Was willst du eigentlich nach dem Abschluss deiner Ausbildung werden?
Ich möchte bei Microsoft als Assembler Programmierer einsteigen und nicht so ein freak sein der bei solchem wetter vorm pc hockt und bescheuerte assembler fragen beantwortet. wir wurden gleich zusammengeschissen mfg, wir werden das jahr wiederholne logisch ja, und was bist du vom beruf?
Wenn du dann allmählich verstanden hast, worum's geht, kannst du bitte gleich noch die Aufgabenstellung korrigieren. Ihr braucht keinen Taster-Interrupt, sondern nur den Timer-Interrupt. Mechanische Tasten prellen sowieso immer, daher ist es eine blöde Idee, sie einen Interrupt auslösen zu lassen. Stattdessen fragt man deren Zustand im Timer-Interrupt ab und meldet die Taste als gedrückt, wenn sie z. B. über 20 ms eine stabile Lage signalisiert hat (Tasten entprellen, Englisch: "key debouncing"). > überhaupt nicht wissen wie wir es hinbekommen sollen. Wie immer beim Programmieren: in kleinen Stücken. Zerleg das Problem in Teilprobleme: . Timer-Interrupt; sinnvoll ist sowas wie 10 ms (du sollst ja die Taste mit abfragen darin), wenn er 100mal getriggert hat, war eine Sekunde um. Beim ersten Test wirst du in diesem Takt eine LED blinken lassen, damit hast du den Timer komplett vom Rest (z. B. der 7-Segment-Anzeige) entkoppelt. . 7-Segment-Anzeige. Ich vermute, sie hat mehr als nur eine Stelle und muss daher multiplex betrieben werden. Das setzt natürlich einen funktionierenden Timer voraus, da man mit dem Interrupt jeweils die nächste Stelle ausgeben kann (die 10 ms wären wieder ein brauchbarer Wert hier, damit es nicht zu sehr flimmert). Fang mit einer Stelle an, den Dekoder zu bauen, der muss aus einer Tabelle dann die Segmentbelegung für die jeweilige Ziffer auslesen und auf den Port ausgeben. Mal in der Annahme, dass die Segmente A bis G auf den Bits 0 bis 6 eines Ports auszugeben sind und dass die Segmente high-aktiv sind, dann wäre die Codierung für die Ziffer 0 also 0b00111111 oder 0x3F. Sind die Segmente low-aktiv, musst du das Bitmuster negieren, entweder manuell (0b11000000 alias 0xC0, wobei das Bit 7 hier "don't care" ist), oder gleich per ~-Operator (oder was auch immer dein Assembler versteht -- du postest im GCC-Forum, daher gehe ich vom GNU-Assembler aus, für den Atmel- Assembler lies das bitte in dessen Manual nach). . Taster-Erkennung in den Timer-Interrupt einbauen, damit du die Zählrichtung umschalten kannst. . Das Hauptprogramm ergibt sich von selbst. Das wird im Wesentlichen so aussehen: main: rcall ioinit l1: rjmp l1 ; Interrupts are doing the rest oder besser so: main: rcall ioinit l1: sleep rcall l1 In ioinit sammelt sich alles, was an Peripheriegeräten zu initialisieren ist, einschließlich der Aktivierung des nötigen Interrupts. Da praktisch alle Aktivitäten im 10-ms-Rhythmus durch den Timer-Interrupt erledigt werden, besteht das Hauptprogramm aus einer Endlosschleife. SLEEP lässt den Prozessor Strom sparen (und wird von einem Interrupt wieder verlassen), wobei das bei einer LED-Anzeige sicher wenig von Belang ist. Kann aber nicht schaden, sich das gleich mal grundlegen anzugewöhnen, dass die main loop die CPU schlafen legt, wenn nix mehr zu tun ist. OK, die Hausaufgaben müsst ihr natürlich selbst machen...
Nun ja, wenn ich dir das schreibe, dann hast du deine Abschlussarbeit. Das Problem ist nur: Danach hast du immer noch keinen Plan. Irgendwann wirst du einen Job bekommen, und da hast immer noch keinen Plan. Vielleicht arbeitest du eines Tages mit einem aus dem Forum zusammen und hast immer noch keinen Plan. Du verdienst gutes Geld (obwohl du immer noch keinen Plan hast) aber Dein Partner macht die ganze Arbeit. Das will ich nicht und ich denke auch sonst niemand in diesem Forum. Was wir aber tun können: Wir können Dir helfen das Pgm zu schreiben. Ist ja auch nicht sooo schwer. (Eigentlich sollte jemand der in einer Computer- fachschule seinen Abschluss macht, damit überhaupt keine Probleme haben. Die Aufgabenstellung ist eher in die Kategorie: 'Übung nach der 10 Unterrichtseinheit' einzuordnen und nicht 'Abschlussarbeit'. Aber was solls) Womit hast du denn konkret Probleme. Konzentrier dich mal auf die Teile die du alleine hinkriegst. Kannst du auf einer 7-Segment Anzeige die verschiedenen Ziffern erzeugen? Kannst du einen Timer aufsetzen? Kannst du die Dinge so einrichten, dass der Timer im Sekunden- rythmus irgendetwas macht (zb. eine stinknormale LED blinken lassen)? Kannst du einen Taster einlesen? Du weisst wie man ein µC-Register hochzählt bzw. runterzählt? Jeder einzelne dieser Punkte ist nicht besonders schwer. Und die Einzelteile miteinander zu verbinden, ist auch nicht gerade Raketentechnik.
>Wir sind in einer >>Computerfachschule<<, in der wir in 6 wochen >abschlusspfüfung haben, es ist eine Abschlussübung, wir haben leider >kein plan. Harrrr!! Was soll man dazu sagen? Vielleicht: - DU bist Deutschland! (Nein! Hoffentlich nicht!) - Öfter mal hingehen UND zuhören! (Ja!!) - Nach der Computerfachschule in die Fachschule für normalen Umgangston und Betragen (Ja, aber.. hab kein Plan, Alter.) Naja, wir waren alle mal 15, oder? :)
@Boris "Bitte zu allem den Programmiercode mit Erklärung thank you." Da fehlen mir glatt die Worte. "es ist eine Abschlussübung, wir haben leider kein plan." Ist bei euch der Unterricht total ausgefallen ? Irgendwas müssen doch die Lehrer die ganze Zeit gemacht haben. Wenn davon wirklich nichts hängengeblieben ist, dann dürfte der Computerkurs die falsche Wahl gewesen sein und Du solltest besser zu Musik, Malerei o.ä. wechseln. Ich fürchte, die große Mühe, die sich Jörg mit seinen Erklärungen gegeben hat, wird total vergebens gewesen sein. Im GCC-Forum sind auch nicht so viele zu finden, die sich gerne in Assembler anstrengen wollen. Man hat ja schließlich C gelernt, um es bequemer zu haben. Peter
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.