www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Timer


Autor: Mark Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Habe hier nen Codeschnipsel der mich zum Verzweifeln bringt.
Der Timer funzt auf einem 8535 wunderbar, soll aber leider auch auf nem
8515 laufen, damit ich nicht die ganze Platine umändern muss. Bekomme es
also nicht hin, das der Sprung auch auf einem 8515 ausgeführt wird.

Vielen Dank für eure Hilfe...

.equ  tm1end=  10000  ;Timer1 Endwert (entspricht 100 Interrupts/s oder
Zykluszeit 10ms)
.cseg
.org  0x0000
t1coma:  rjmp  t1int    ;Zeitzählung alle 10ms
;
ldi  r16,high(tm1end)  ;Timer1 Endwert1 H
out  ocr1ah,r16    ;ausgeben
ldi  r16,low(tm1end)    ;Timer1 Endwert1 L
out  ocr1al,r16    ;ausgeben
clr  r16      ;Timer1 kein PWM, kein Comp-Out
out  tccr1a,r16
ldi  r16,(1<<ctc1)+(1<<cs11)  ;Timer1 Löschen nach Vergleich
out  tccr1b,r16    ;und Vorteiler=8 setzen
;
;  - Interrupt aktivieren
;
clr  r16
out  gimsk,r16    ;externe Interrupts sperren
ldi  r16,1<<ocie1a
out  timsk,r16    ;Timer1 Vergleich1 freigeben
sei

Autor: Mark Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nachobenschieb...

bitte um hilfe, sitze seit einer woche dran und bekomme es nicht hin.

bitte helft mir...

Autor: Malte Bayer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.org  0x0000
t1coma:  rjmp  t1int    ;Zeitzählung alle 10ms

Schau dir mal im Datenblatt (auf www.atmel.com) die Interrupt-Table
an.

an ORG 0x0 steht soweit ich weiss bei allen AVR Controllern ein Jump
auf RESET

T1/T2 kommen irgendwo danach; das müsste dein einziger Fehler sein (ist
ja nicht der komplette code den du gepostet hast)

Autor: Mark Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, das wars aber nicht, habe in auszügen gepostet:

.cseg
.org  0x0000
;
reset:  rjmp  start    ;Programmstart
exint0:  reti        ;nicht genutzt
exint1:  reti        ;nicht genutzt
t2comp:  reti        ;nicht genutzt
t2ovfl:  reti        ;nicht genutzt
t1icap:  reti        ;nicht genutzt
t1coma:  rjmp  t1int    ;Zeitzählung alle 10ms
t1comb:  reti        ;nicht genutzt
t1ovfl:  reti        ;nicht genutzt
t0ovfl:  reti        ;nicht genutzt
spiint:  reti        ;nicht genutzt
uartrx:  reti        ;nicht genutzt
uartem:  reti        ;nicht genutzt
uarttx:  reti        ;nicht genutzt
adccom:  reti        ;nicht genutzt
eeprom:  reti        ;nicht genutzt
ancomp:  reti        ;nicht genutzt

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was kommt denn für ne Fehlermeldung bzw. was passiert?

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste doch mal das ganze Programm (als Anhang), dann kann man vielleicht
auch Fehler entdecken. Die Sprungmarke "t1int" find ich in Deinen
Fetzen nämlich auch nicht...

Autor: Mark Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim compilieren kein fehler. Wenn ich den Code für nen 8535 mache und
im stk500 teste, läuft alles (testweise ne LED anblitzen). mache ich
den code für den 8515 passiert nichts, die led bleibt aus.
bin nicht unerfahren mit avr programmierung, nur bin nun zum ersten mal
dabei die timer zu benutzen.

Autor: Mark Zimmermann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ok, hier der code, soll eine funkuhr werden.
(alpha entwicklungsstadium)

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Macht er denn im Simulator was er soll? Haben beide die selben
Taktfrequenzen? ...
Wenn die LED nur alle 10 ms mal kurz eingeschaltet wird sieht man
bestimmt nich viel. Aber ohne ein paar weitere Infos kann man da nicht
viel sagen.

Autor: Mark Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich gebe auf....
baue nun auf 8535 um

danke für eure hilfe!

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich konnte es in den paar minuten so nebenbei noch nicht ganz
einschränken, aber es scheint an einem falschen Timerprescaler oder
etwas in dieser Richtung zu liegen. Sieht im Simulator jedenfalls so
aus!

Autor: Mark Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
verstehe ich nicht ganz...
auf dem 8535 läufts, takt geteilt duch 8, alle 10000 takte, also 80000
total, sprung in die interrupt routine. naja, versuche auch mal zu
debuggen. bin für jede hilfe dankbar.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Simulator "springt" TCNT1L, aber TCNT1H und TCNT1L ergeben niemals
0x2710 (10000)...
Deshalb vermute ich da den Fehler im Prescaler...

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nö, hab mist erzählt, Deine Vektortabelle stimmt tatsächlich nicht:

;  ---------------------------------
;  Prgrammbeginn, Interrupt-Vektoren
;  ---------------------------------
;
.cseg
.org  0x0000
;
reset:  rjmp  start    ;Programmstart
exint0:  reti        ;nicht genutzt
exint1:  reti        ;nicht genutzt
t1icap:  reti        ;nicht genutzt
t1coma:  rjmp  t1int    ;Zeitzählung alle 10ms
t1comb:  reti        ;nicht genutzt
t1ovfl:  reti        ;nicht genutzt
t0ovfl:  reti        ;nicht genutzt
spiint:  reti        ;nicht genutzt
uartrx:  reti        ;nicht genutzt
uartem:  reti        ;nicht genutzt
uarttx:  reti        ;nicht genutzt


Probier die mal... :-)

Autor: Mark Zimmermann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MEIN RETTER!!!
Bin dir zu ewigem Dank verpflichtet!

Heisst das also, dass zuviele Sprungvektoren probleme verursachen...

VIELEN DANK!

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Vektortabelle ist "fest verdrahtet", also stark Modellabhängig.
Vergleiche mal die beiden Vektortabellen in den Datenblättern.
Der 8515 hat beispielsweise gar keinen Timer2, weshalb er auch keinen
IR-Vektor dafür hat...

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.