Probleme mit Int Capt ISR ATmega48PA

Gast #4750641
Lesenswert?

Hallo,

ich habe Probleme mit der Nutzung des ICP1/PB0 eines ATmega48PA und bin 
beim besten Willen nicht in der Lage das Problem zu lösen.

Prinzipiell läuft mein Programm wie gewünscht bloß wird grundlos 
wiederholt die ICP1 ISR angesprungen und es folgt dann wie gewollt der 
Aufruf weiterer Routinen im Hauptprogramm - u.a. Ausgabe an TX. Selbst 
wenn ich 0<<ICIE setze, auskommentiere oder was auch immer wird die ISR 
angesprungen.
Eine Auskommentierung in der ISR bringt TX dann zum schweigen, das 
Programm läuft also tatsächlich über die INT CAPT ISR in dieses Problem.

Grundsätzlich verstehe ich, dass man ICP1 extern triggern kann und in 
Software über PORTB0 - aber wie in drei Teufels Namen geht der Sprung 
mit 0<<ICIE? Ist die Vectoradresse im Datenblatt falsch, das übrigens 
keine DIL Gehäuse beinhaltet? Oder habe ich ein grundlegendes Problem 
bei der Konfiguration?
Timer1 ist im Mode 4 konfiguriert also CTC mit max Wert in OCR1A - evtl. 
ist hier auch das Problem. Ich brauche aber einen verstellbaren 16bit 
Timer mit OCIE1A ISR bei OCR1A match und gelegentlich eben auch einen 
Timestamp bei ICIE1 an ICP1.

Achso CKOUT fuse kein Haken.

Vielen Dank schonmal für eure Zeit und sachdienliche Hinweise.
Gruß
Wolfgang

1
.org 0x00A  
2
rjmp INT_TIMER1_CAPT    
3
....
4
ldi r16,1<<ICF1
5
out TIFR1,r16    ; Clear ICF1/clear pending interrupts
6
; TIMSK1 Timer/Counter1 Interrupt Mask Register
7
ldi  temp, (1<<ICIE1)|(1<<OCIE1A)
8
sts  TIMSK1, temp
9
; TCCR1A Timer/Counter1 Control Register A
10
clr  temp              
11
sts  TCCR1A, temp
12
; TCCR1B Timer/Counter1 Control Register B
13
ldi  temp, (1<<ICNC1)|(0<<ICES1)|(0<<WGM13)|(1<<WGM12)|(0<<CS12)|(0<<CS11)|(0<<CS10)
14
sts    TCCR1B, temp
15
; TCCR1C Timer/Counter1 Control Register C
16
clr  temp
17
sts  TCCR1C, temp
18
....
19
; PORTB - Configuaration
20
ldi  temp, (1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(0<<DDB0)  
21
out  DDRB, temp
22

23
ldi  temp, (1<<PORTB0)
24
out  PORTB, temp
Angehängte Dateien:
Gast #4750729
Lesenswert?

W.S. schrieb:

> aber wie in drei Teufels Namen geht der Sprung
> mit 0<<ICIE?

Nun entweder springst du irgendwie durch einen Programmfehler dorthin 
oder durch instabil laufende Hardware.

Ob es ein Programmfehler ist, kann man nicht beurteilen, denn das, was 
du gepostet hast, kann ja wohl nicht das vollständige Programm sein 
kann.

Und ob die Hardware eventuell instabil läuft, kann man ebenfalls nicht 
beurteilen, da du dazu überhaupt nix gesagt hast, ausser, dass es ein 
M48 ist.

> Timer1 ist im Mode 4 konfiguriert also CTC mit max Wert in OCR1A - evtl.
> ist hier auch das Problem.

Nein, das sorgt eigentlich nur dafür, das mit der Capture-Funktion nicht 
mehr wirklich etwas anzufangen ist. Zumindest verkompliziert es deren 
sinnvolle Nutzung erheblich. Auf die prinzipielle Funktionsweise der 
Capture-Einheit hat es aber keinen Einfluss.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren