www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Assembler - Ein paar Anfänger Fragen


Autor: Henry J. (indy85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
ich habe vor kurzem mein atmega16-board bekommen, und auch schon das 
tutorial hier durchgemacht. grundsätzlich würde ich ja die einzelnen 
schritte verstehen, wenn ich sie aber dann selbst programmieren will, 
stoße ich immer noch auf manche probleme.

ich würde gerne einen einfachen zähler für meine 7-segment-anzeige 
bauen, der einfach nur mal von 0-9 an der stelle DIGIT0 zählt.
ich habe mir das so überlegt, dass ich einfach einen timer hernehme, 
diesen überlaufen lasse, und jedesmal, wenn ein überlauf passiert ist, 
ich die anzeige der DIGIT0 um eine ziffer erhöhe (der nächste schritte 
wäre dann wohl, bei einem tastendruck den zähler rückwärts laufen zu 
lassen). gleich mal vorweg: kann man das so machen? würde sich das mit 
den (verzögerungs-)zeiten ausgehen? oder ist das völliger quatsch, den 
ich mir hier überlegt habe? da ich noch sehr unsicher bei dem ganzen 
bin, würde ich mich über ein paar tipps sehr freuen!

dann hätte ich noch eine zweite frage: wenn ich über meine knoppix-cd 
(also auf einer virtuellen linux version) das µC-board programmieren 
will, funktioniert alles ohne probleme. ich würde jedoch auch gerne das 
AVR Studio 4 in Windows XP benutzen, jedoch habe ich irgendwie keine 
treiber für mein board. ich kann es also über USB anschließen, und mein 
PC erkennt es auch, jedoch kann ich keine treiber dafür installieren und 
wenn ich im AVR Studio über "Tools" -> "Programm AVR" -> "Connect" etc. 
auf mein Board zugreifen möchte, funktioniert das nicht. gibt es 
irgendwo vielleicht windows-treiber für das atmega16-board? googeln hat 
mir bis jetzt nicht geholfen.

vielen dank für eure hilfe/tipps!

Autor: Düsentrieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1 - ja
2 - mein atmega16-board bekommen  - schön für dich - welches ?

Autor: Henry J. (indy85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es ist ein atmega16 16pu.

ich habe das mit dem timer-overflow-interrupt schonmal beim ansteuern 
der leds ausprobiert, und den prescaler auf 1024 gestellt. sie blinken 
auch für ca. 1-2 sekunden, danach hören sie aber auf zu blinken und 
leuchten nur mehr, wobei sie den zustand ja eigentlich nicht verlassen 
sollten (wegen d. endlossschleife), oder? kann ich den timer-overflow 
eigentlich auch länger - sagen wir 1-2 sekunden - einstellen? wenn ja, 
wie? sodass also alle 2 sekunden eine andere ziffer am led erscheint. 
vielen dank!

Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Prinzipiell kannst du alles programmieren was du möchtest, selbst wenn 
man dafür nachher keine Verwendung hat. Unsinnig gibt es nicht.
Versuche doch einfach die verschiedenen Tutrials miteinander zu 
kombinieren.
In deinem Fall kannst du das Tutorial mit dem Timer und das Tutorial 
über den Speicher miteinander kombinieren. Die Segmantanzeige hängst du 
einfach an einen der Ports des AVRs.
Das Programm kannst du dann beliebig ausbauen, da sind deiner Phantasie 
dann keine Grenzen gesetzt.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> grundsätzlich würde ich ja die einzelnen schritte verstehen, wenn ich
> sie aber dann selbst programmieren will, stoße ich immer noch auf
> manche probleme.

Das ist ganz normal am Anfang. Allerdings hängt es vielleicht auch mit 
deiner fehlenden Shift-Taste zusammen.

> gleich mal vorweg: kann man das so machen?

Ja, kann man.

> würde sich das mit den (verzögerungs-)zeiten ausgehen?

Wenn's dir zu schnell geht, kannst du ja noch eine Schleife einbauen, so 
daß nicht bei jedem Überlauf der Zähler inkrementiert wird, sondern nur 
nach einer bestimmten Zahl von Überläufen. Aber mit einem passend 
eingestellen Presacler sollte es eigentlich reichen. Wenn du den 
16-Bit-Timer voll durchrennen läßt und den Prescaler auf 1024 stellst, 
bekommst du alle 1024*65536 = 67108864 Taktzyklen einen Überlauf. Bei 16 
Mhz Takt wären das ca. 4,2 Sekunden.

Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wenns mal klemmt, poste einfach deinen Code mit.
Soweit ich weiß gibt es einen 16Bit Counter, abhängig von deinem MC-Takt 
erzeugt der einen Überlauf. Um die Zeit für einen Überlauf zu verkürzen 
kannst du das Vergleichsregister mit einem Wert laden.
 ;Timer einstellen
  ldi temp,HIGH(TIMERWERT)    
   out OCR1AH,temp        ; Vergleichsregister (LowByte) mit Var Timerwert laden
  ldi temp,LOW(TIMERWERT)
   out OCR1AL,temp        ; Vergleichsregister (HighByte) mit Var Timerwert laden

  ldi temp,(1<<CS12)|(1<<WGM12)  ; Prescaler  Systemtakt durch 256 teilen 
   out TCCR1B,temp        ; und Timer im CTC-Modus, siehe Tabelle S.99
  
  ldi temp,(1<<OCIE1A)      ; Interrupt für CTC Modus freigeben
   out TIMSK,temp

den Timer betreibst du im CTC Modus, schau dir einfach das Datenblatt zu 
deinem AVR an.

Fragen beantwortet?

Autor: Henry J. (indy85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen dank für die antworten.

ein paar fragen hätte ich noch: damit ich die einzelnen ziffern ausgeben 
kann, sollte ja nach jedem timer-overflow eine neue ziffer ausgewählt 
werden, d.h. ich sollte die einzelnen bitmuster irgendwo abspeichern. 
wie macht man das am besten? im tuturial wurde es mit ".db" gemacht, das 
scheint aber mein assembler nicht zu kennen. gibt es da noch eine andere 
möglichkeit? und soll man die ausgabe-schleife gleich in der 
interrupt-routine programmieren?

> Wenn's dir zu schnell geht, kannst du ja noch eine Schleife einbauen, so
> daß nicht bei jedem Überlauf der Zähler inkrementiert wird, sondern nur
> nach einer bestimmten Zahl von Überläufen.
wie meinst du das, wo genau soll ich diese schleife einbauen?

dankeschön!

Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau doch erst mal ob du mit dem 16Bit Timer klarkommst. Mit 
zusätzlichen Schleifen würde ich erst mal nix machen. Wie Rolf dir 
vorgerechnet hat bekommst du alle 4,2 sekunden eine neue Zahl, das 
sollte erst mal reichen.

Hast du das speicher-tutorial mal durchgearbeitet? Den db. Befehl kennt 
dein AVRStudio mit Sicherheit.

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.