erst mal ein gutes neues
bin am verzweifeln. warum wird der Timer0 8-Bit nicht eingeschaltet, was
mach ich falsch?
lass ich das in AVR-Studio laufen wird CS0 im TCCR0B nicht gesetzt. im
register temp1=r16 steht aber eine 1.
bei TOIE0 im TIMSK0 geht es doch auch.
1
; Timer0 8-Bit vorbereiten
2
ldi temp1, (1<<CS00) ; CS0 setzen: Teiler 1
3
sts TCCR0B, temp1
4
5
ldi temp1, (1<<TOIE0) ; TOIE0: Interrupt bei Timer Overflow
Klaus schrieb:> wann benutze ich sts und wann out wo liegt der uterschied?
ich merk mir das so:
- sts nur für store direct to sram, also nur für Datenspeicher
- out für die In/Out-Speicher
:-)
Klaus schrieb:> geht nicht. ist TIMSK0 ein datenspeicher und TCCR0B ein In/Out-Speicher.>> wo kann ich nachlesen was was ist?
Datenblatt Kapitel 30: "Register Summary"
Klaus schrieb:> geht nicht. ist TIMSK0 ein datenspeicher und TCCR0B ein In/Out-Speicher.
Muss gehen.
Alle Speicherstellen, die besondere Funktionen für die Hardware haben,
sogenante SFR (special function registers) kannst du meines Wissens über
in / out ansprechen.
siehe dazu auch Datenblatt, Register set summary.
sts und lds geht nur bis zu einer bestimmten Speicheradresse, das ist
ein bisschen inkonsistent gemacht.
:-)
Hi
>Alle Speicherstellen, die besondere Funktionen für die Hardware haben,>sogenante SFR (special function registers) kannst du meines Wissens über>in / out ansprechen.>siehe dazu auch Datenblatt, Register set summary.>sts und lds geht nur bis zu einer bestimmten Speicheradresse, das ist>ein bisschen inkonsistent gemacht.
Genau umgedreht. Alle SFRs kann man mit sts/lds ansprechen. Mit in/out
nicht. Wenn im Register set summary zwei Adressen angeben sind, dann
in/out. Ansonsten sts/lds.
MfG Spess
Hi
>bei timer1 16-bit muss es so sein:>.....
und bei timer0 8-bit muss es so sein:
>....
Ja. Die Register von Timer0 liegen im mit in/out erreichbaren
Adressbereich.
Die von Timer1 nicht.
MfG Spess
nochmal danke
gibt es hier im forum eine registerübersicht für den meag88
gerade was die timer betrifft TCCR1B u.s.w. tu mich da noch sehr schwer.
möchte eine input capture machen mit timer1.
Also im Datenblatt (mega32) hab ich folgendes gefunden:
"All ATmega32 I/Os and peripherals are placed in the I/O space. The I/O
locations are accessed
by the IN and OUT instructions, transferring data between the 32 general
purpose working registers
and the I/O space. I/O Registers within the address range $00 - $1F are
directly bitaccessible
using the SBI and CBI instructions. In these registers, the value of
single bits can be
checked by using the SBIS and SBIC instructions. Refer to the
Instruction Set section for more
details. When using the I/O specific commands IN and OUT, the I/O
addresses $00 - $3F must
be used. When addressing I/O Registers as data space using LD and ST
instructions, $20 must
be added to these addresses."
also:
2 Adressen da (also alle SFR), egal, kann mit in/out oder mit lds/sts
arbeiten, muss allerdings auf den Versatz von 0x20 achten (bei sts/lds
dazuzählen, oder macht das der Assembler?).
spess53 schrieb:> Genau umgedreht. Alle SFRs kann man mit sts/lds ansprechen. Mit in/out> nicht.
Hast du da zufälligerweise ein Beispiel parat, dachte es wär immer
umgekehrt gewesen (was irgendwie auch nicht stimmt) ?
:-)
Ok Beispiel gefunden -.-
Ich sollte auch mal einen nueren uC anschauen.
mega88:
"The ATmega48/88/168 is a complex microcontroller with more peripheral
units than can be supported
within the 64 locations reserved in the 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."
:-)
Hi
>Hast du da zufälligerweise ein Beispiel parat, dachte es wär immer>umgekehrt gewesen (was irgendwie auch nicht stimmt) ?>:-)
Die Register r0...r31, die IO-Register und der RAM liegen praktisch in
einem Speicherbereich. Auf diesen Speicher kannst du mit der absoluten
Adresse mit sts/lds zugreifen. Es ist also auch folgendes möglich:
1
ldi r16,$AA
2
sts 0,r16 ; lädt r0 mit r16
Allerdings haben sts/lds eine Befehlslänge von 2 Word.
In/out kann nur Adressen von 0...63 verarbeiten. Bei der Abarbeitung
werden zu der Adresse $20 (r0...r31) addiert und auf die richtige
Adresse $20...$5F zugegriffen. Dafür haben in/out nur eine Befehlslänge
von einem Word.
MfG Spess
Hi
>müsste ich nicht in HWert und LWert immer den gleichen wert haben bei>einer frequenz von 10Hz?
Wobei?
> lds HWert, ICR1H> lds LWert, ICR1L
Beim Lesen von 16-Bit-Registern erst L-Teil dann H-Teil lesen. Beim
Schreiben umgedreht.
> ldi temp1,0> sts ICR1H, temp1> sts ICR1L, temp1
Das macht keinen Sinn. Wenn schon, dann solltest du TCNT1 löschen. ICR1
dient nur der Speicherung des Timerwertes zum Zeitpunkt des Ereignisses.
Der Timer läuft weiter.
MfG Spess