www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmel mega64 Timer dringend


Autor: Captain Chaos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Ich habe Probleme damit den Timer1 beim mega64 zu Initialisieren.
Ich möchte in ohne Vorteiler, mit Interrupt initialisieren und verwende 
Assembler und würde mich über schnelle Hilfe freuen.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guck gaaanz schnell ins Datenblatt!

Autor: Captain Chaos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bin ich zu faul für!

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin auch zu faul...

Autor: Captain Chaos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ldi r17,0x01
ldi r16,0xFF
out TCNT0H,r17
out TCNT0L,r16
; Read TCNT0 into r17:r16
in r16,TCNT0L
in r17,TCNT0H

So das funzt net!

Autor: Captain Chaos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das ist mein code:
.def mp = r16
.org 0x001C jmp tc0i

...

ldi   mp,0x00 ;
     out   TCCR1A,mp
  ldi   mp,0x01
  out   TCCR1B,mp

  ldi mp,0x02
     out TIMSK,mp
      sei
...

und wenn ich das jetzt auf meinen Chip mache funktioniert gar nix!

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Timer 0 ist ein 8-Bit Timer. TCNT0 ist ein Byte groß und nicht 2 Byte. 
Das steht auch im Datenblatt.

MW

Autor: Captain Chaos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach...
Ich möchte aber gar nichts mit Timer 0 machen sondern mit dem 16-bit 
Timer1

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was willst du mit dem Timer machen? Overflow-Interrupt auswerten? (es 
gibt diverse Interruput-Quellen im Zusammenhang mit Timern...)

Autor: Captain Chaos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja genau das möchte ich machen. Ich weiss nur nicht was ich falsch 
mache.
Beim mega8 hat das alles prima funktioniert.

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ldi mp,0x02

müsste

ldi mp,0x04

heissen.

Da ist es doch immer wieder sinnvoll, die Makro-Schreibweise zu 
verwenden:

ldi mp,(1<<TOIE1)

Autor: Captain Chaos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
klasse!
das wars vielen dank!

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
30 Sekunden Datenblatt-Recherche...

Autor: Captain Chaos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tjo... hab am montag erst angefangen mit assembler und yC 
programmierung...

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lesen kannst du aber schon länger, oder?
Programmieren eines µC ("µ" griech. "mikro", ALT-m) ist grundsätzlich 
mit der Lektüre des Datenblattes (complete datasheet) verbunden.

Autor: Jörg B. (manos)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da schreib ich jetzt schon geraume Zeit hier im Forum und mir ist das 
"µ" auf der M-Taste noch nie aufgefallen :)

Aber bei uC wusste bisher wahrscheinlich auch jeder was ich meinte^^.

Autor: Captain Chaos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
µC schon verstanden. Seid mir trotzdem nicht böse, wenn ich schon mal 
fragen stelle, die man auch mit dem data-sheet lösen könnte!

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Seid mir trotzdem nicht böse

Wenn man wenigstens zugibt, dass die Faulheit gesiegt hat...

Autor: Captain Chaos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so hab jetzt aber doch noch eine Frage:
Wie initialisiert man den USART vom mega64? Habe mir den Code
aus dem Datenblatt angesehen und versucht in mein Programm einfliessen 
zu lassen, jedoch bekomme ich folgende Fehler:
UBRR0H  = error: Operand 1 out of range: 0x90
out UBRR0L, UBRRVAL = error: Invalid register
(.equ UBBRVAL = 2000000/(16*9600)-1)
UCSR0C = error: Operand 1 out of range: 0x95

nein diesmal hat nicht die Faulheit gesiegt, sondern das Anfängerwissen
hat nicht ausgereicht!

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zeichmal, was du geschrieben hast. Die USART-Parameter (Baudrate etc) 
wären auch interessant.

Autor: Captain Chaos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
.equ CLOCK = 2000000
.equ BAUD = 9600
.equ UBRRVAL = CLOCK/(BAUD*16)-1
.def mp, r16

ldi   mp, 0x00;
out   UBRR0H, mp
ldi   mp ,UBRRVAL               ; Baud einstellen
out   UBRR0L, mp
ldi   mp, (1<<RXEN0)            ; Empfang aktivieren
out   UCSR0B,mp
ldi   mp, (0<<USBS0)|(3<<UCSZ00); frame format einstellen: 8data, 1stop 
bit
out UCSR0C,mp

Autor: Tassilo Böhr (big_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seite 24 in meiner Version vom AtMega64-Datenblatt:

...
The ATmega64 is a complex microcontroller with more peripheral units 
than can be supported within the 64 location reserved in Opcode for the 
IN and OUT instructions. For the Extended I/O space from 0x60 - 0xFF in 
SRAM, only the ST/STS/STD and LD/LDS/LDD instructions can be used.
...

-> bei allen Registerbezeichnungen in der 'm64def.inc' des AVR-Studios, 
bei denen ein 'MEMORY MAPPED' dahintersteht, funktioniert in/out nicht. 
Stattdessen muß mithilfe eines 'normales' Register und den Befehlen 
lds/sts gearbeitet werden.

Statt

out UBRR0L, UBRRVAL

muß es beispielsweise heißen

ldi R16, UBRRVAL
sts UBRR0L, R16

Warum darauf in den Beispielen der Datenblätter keine Rücksicht genommen 
wird, weiß ich auch nicht.

Tassilo

Autor: Captain Chaos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
seid ihr jetzt umgefallen weil das so falsch ist oder was?

Autor: Captain Chaos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nicht schlecht! leute ihr gefallt mir immer besser!

Autor: Tassilo Böhr (big_t)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt auch Leute, die so ein Forum nur nebenbei beobachten können und 
nicht den ganzen Tag darauf warten, daß irgendjemand was wissen will...

Tassilo

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Seite 24 in meiner Version vom AtMega64-Datenblatt:

Bei mir steht sowas ähnliches (eher in Bezug auf die Beispiele im 
Datenblatt) auf Seite 7.

Ich war deswegen etwas ratlos, weil ich in C programmiere und mich 
deswegen nicht um Alternativ-Befehle kümmern muß...

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.