Forum: Compiler & IDEs ATTINY 2313 Assembler Programmieren


von Boris (Gast)


Lesenswert?

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

von Hans Lang (Gast)


Lesenswert?

Hallo ,
welchen Assembler benutzt ihr und welche Include Datei ?
MfG
Hans

von Boris (Gast)


Lesenswert?

Wir benutzen den von Atmel AVR Tools -> Avr Studio 4
die include datei heißt
.INCLUDE "2313def.inc"

thx

Boris

von Rolf Magnus (Gast)


Lesenswert?

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

von Boris (Gast)


Lesenswert?

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

von johnny.m (Gast)


Lesenswert?

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

von Boris (Gast)


Lesenswert?

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

von Wolfram (Gast)


Lesenswert?

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?

von Matthias Schulz (Gast)


Lesenswert?

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?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Rofl Zeerdoll (Gast)


Lesenswert?

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

von peter dannegger (Gast)


Lesenswert?

@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

von ujjk (Gast)


Lesenswert?

llol

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.