www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer beim atmega16


Autor: Philipp Steinemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

meiner Meinung nach, müsste der Timer sofort nachdem das Programm
gestartet wurde, die 2 LEDs an PORTB wieder ausschalten, aber sie
bleiben komischerweise an.

Vielleicht hat jemand einen Hinweis, was ich falsch gemacht habe.

Vielen Dank im voraus!

Gruß
Philipp



.include "m8def.inc"

.def temp = r16

;-----------------
;Interrupt-Tabelle
;-----------------
.org 0x000
  rjmp reset
.org 0x009
  rjmp timer0
;-----------------

timer0:
  ldi temp, 0b11111111
  out PORTB, temp
reti

reset:

  ;----------------------
  ;Interrupts ausschalten
  ;----------------------
  cli
  ;----------------------

  ;--------------
  ;Stack anlgegen
  ;--------------
        ldi temp, LOW(RAMEND)   ; LOW-Byte der obersten RAM-Adresse
        out SPL, temp
        ldi temp, HIGH(RAMEND)  ; HIGH-Byte der obersten RAM-Adresse
        out SPH, temp
  ;--------------

  ;----------------------
  ;Interrupts einschalten
  ;----------------------
  sei
  ;----------------------

  ;-----------------
  ;PortB als Ausgabe
  ;-----------------
  ldi temp, 0xFF
  out DDRB, temp
  ;-----------------

  ;---------------------
  ;beide LEDs anschalten
  ;---------------------
  ldi temp, 0b11111100
  out PORTB, temp
  ;--------------------

  ;----------
  ;Timer-Init
  ;----------
  in temp, TIMSK
  sbr temp, 0b00000001
  out  TIMSK, temp
  ldi temp, 0
  out TCNT0, temp   ; Startwert des Timers
  ldi temp, 0b00000101
  out TCCR0, temp    ; Timer starten mit Vorteiler 1024
  ;----------


main:

  rjmp main

Autor: conlost (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich hab es grade mal mit Studio 4 simuliert und es geht.
Gruß,
Arno

Autor: Philipp Steinemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Arno,

das ist komisch! Ich hab es auf den MC übertragen, aber es leuchten
beide LEDs weiter. :/

Gruß
Philipp

Autor: conlost (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte es sein das mit dem Takt was nicht stimmt?
Laut Studio vergehen 65.538,25 µs.
Wenn dein Takt zu langsam ist, dauert es eventuell lange.

Autor: conlost (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun weiss ich woran es liegt.
In deinem listing steht inklude m8dev.inc,
deshalb habe ich zuerst mit mega8 simuliert.
Für den mega16 stimmt aber dann der Interruptvector nicht.
Schreib mal statt .org 0x009 , OVF0adr oder .org 0x012.
Dann geht es.

Autor: Philipp Steinemann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super!!!! Tausend Dank, jetzt tut es!!!!

Gruß
Philipp

Autor: ukofumo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo...??

Mir ist da noch was aufgefallen....?
Eigentlich sollte der TIMER inizialisiert werden während die
Interrupt's ausgeschaltet sind???? sO Hab ichs bisher in allen anderen
Listings gesehen..
Hier werden die Interupt's aber nur während der Stack Initialisierung
ausgeschaltet...

Autor: conlost (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
da es sich hier nur ein Testprogrammchen handelte habe ich nichts dazu
gesagt.
Der Befehl "sei" ist dort wo er jetzt steht nicht nötig,
da das int-Flag nach dem Reset gelöscht ist.
Den Befehl sollte man direkt nach dem Start des Timers setzen.

 ldi temp, 0b00000101
  out TCCR0, temp    ; Timer starten mit Vorteiler 1024
  sei

Aber es war ja nur ein Testprogramm.
Gruß,
Arno

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.