www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT Mega 8515 Timer1 geht nur im Simulator


Autor: Marco Schicke (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Habe einen AT MEga 8515 mit einem externen 8 MHZ tackt betrieben.
in AVR Studio geht alles, in Realität erkene ich an den LED´s an port
A, das der erste interrupt nach 7,5 Sekunden auftritt.
jedoch muss er dann diesen interrupt sehr häufig ausführen, da, wenn
ich das Bord mit den LED´s schüttel ein Blinken feststellen kann.
Hatte zuerst die Fusebits in verdacht, habe die dann in den
Auslieferungzustand laut Datenblatt gebracht, doch der Timer ging immer
noch nicht.
Vermute das ich einen Fiesen Fehler im Programm habe.
ich habe aus dem Programm nun alles ausser den Timer rauskopiert, funzt
aber immer noch nicht.
Habe bis jetzt noch nicht mit einem Timer gearbeitet.

hat jemand ne Ide, was ich falschgemacht habe ?

Marco

Marco

Autor: Andreas B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ob der ASM Code stimmt weiss ich nicht, aber ich hatte mal ein Problem
mit dem Timer eines 8515 weil ich ihm zu wenig Spannung gegeben
hatte... Soweit ich mich erinnern kann waren es etwas unter 4.5V, und
ausser den Timern lief auch alles richtig...

mfg Andreas

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"The TCNTn, OCRnA/B/C, and ICRn are 16-bit registers that can be
accessed by the AVR CPU via the 8-bit data bus. The 16-bit register
must be byte accessed using two read or write operations".... "To do
a 16-bit write, the high byte must be written before the low byte. For
a 16-bit read, the low byte must be read before the high byte."

Du beschreibst nirgends OCR1AL. Das Beschreiben des Low-Bytes eines
16-Bit-Registers triggert den Schreibvorgang - zumindest interpretiere
ich das Datenblatt so.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau, das ist ein beliebter Fehler. Seite 99 im Datenblatt beschreibt
den Zugriff. Der Wert wird erst beim Schreiben des Low-Bytes
übernommen, in Deinem Fall also nie.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
out  ocr1ah,high(DELAYF)
out  ocr1al,low(DELAYF)

Versuchs mal so ;)

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> out  ocr1ah,high(DELAYF)
> out  ocr1al,low(DELAYF)

Das dürfte so nicht gehen, denn "out" geht nur mit Registern, nicht
mit Konstanten, "high()" und "low()" dagegen geht nicht mit
Registern, sondern nur mit Konstanten.

Duck & wech...

...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DELAYF ist ein Register, das 8 Bit breit ist. Da gibts eh kein 'High'
und 'Low'. Warum auch so kompliziert? Einfach
ldi TEMP, 0x00
out ocr1ah, DELAYF
out ocr1al, TEMP

Autor: Marco Schicke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke, Fehler behoben !!!

Seber baut man(n) immer Fehler ein,
und findet sie nie.

Danke an alle

Marco

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.