Guten Tag.
Ich habe mir wirklich viel Zeit gelassen und nachgeschlagen sowie im
Datenblatt nachgeblättert aber kahm leider nicht zum Ergebnis.
Im Tutorial
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Interrupts wird
der Befehl "GICR" verwendet um den Interrupt für Int0 und Int1 zu
aktivieren. von der Vorgehensweise sollte das so wie ich mich eingelesen
habe beim Attiny 2313 auch nicht anders sein, nur kennt er den Befehl
GICR nicht.
Es handelt sie dabei zunächst um das Testprogramm aus dem Tutorial:
1
.include "tn2313def.inc"
2
3
.def temp = r16
4
5
.org 0x000
6
rjmp main ; Reset Handler
7
.org INT0addr
8
rjmp int0_handler ; IRQ0 Handler
9
.org INT1addr
10
rjmp int1_handler ; IRQ1 Handler
11
12
13
main: ; hier beginnt das Hauptprogramm
14
15
ldi temp, LOW(RAMEND)
16
out SPL, temp
17
ldi temp, HIGH(RAMEND)
18
out SPH, temp
19
20
ldi temp, 0x00
21
out DDRD, temp
22
23
ldi temp, 0xFF
24
out DDRB, temp
25
26
ldi temp, (1<<ISC01) | (1<<ISC11) ; INT0 und INT1 auf fallende Flanke konfigurieren
27
out MCUCR, temp
28
29
ldi temp, (1<<INT0) | (1<<INT1) ; INT0 und INT1 aktivieren
30
out GICR, temp
31
32
sei ; Interrupts allgemein aktivieren
33
34
loop: rjmp loop ; eine leere Endlosschleife
35
36
int0_handler:
37
push temp ; Das SREG in temp sichern. Vorher
38
in temp, SREG ; muss natürlich temp gesichert werden
39
40
sbi PORTB, 0
41
42
out SREG, temp ; Die Register SREG und temp wieder
43
pop temp ; herstellen
44
reti
45
46
int1_handler:
47
push temp ; Das SREG in temp sichern. Vorher
48
in temp, SREG ; muss natürlich temp gesichert werden
49
50
cbi PORTB, 0
51
52
out SREG, temp ; Die Register SREG und temp wieder
Michael Dierken schrieb:> der Befehl "GICR" verwendet um den Interrupt für Int0 und Int1 zu> aktivieren.
GICR ist kein Befehl, sondern ein Register. Das nennt sich im Tiny2313
anders. Für den neuen Namen schaut man im Datenblatt unter Externe
Interrupts nach.
Michael Dierken schrieb:> Im Tutorial> http://www.mikrocontroller.net/articles/AVR-Tutorial:_Interrupts wird> der Befehl "GICR" verwendet um den Interrupt für Int0 und Int1 zu> aktivieren. von der Vorgehensweise sollte das so wie ich mich eingelesen> habe beim Attiny 2313 auch nicht anders sein, nur kennt er den Befehl> GICR nicht.
Beim ATtiny2313 muß es statt GICR GIMSK heißen.
Christian
Grad nochml getestet, geht .... meinte eigentlich das ich diesen
Register Namen bereits probiert hatte ... (muss mal nachschauen wenn ich
wieder am anderen Rechner bin, da er ne ältere AVRStudio Version drauf
hat.
Vielen Dank
Habe nun auf dem anderen Rechner getestet ... geht auch, wenn ich das
aber auf den AVR Schreibe funktioniert es nicht.
Muss man da noch irgendwelche Fuses umstellen?
Kann der AVR defekt sein?
Testprogramme für die einzelnen Aus/Eingänge funktionieren alle.
1
.include "tn2313def.inc"
2
3
.def temp = r16
4
5
.org 0x000
6
rjmp main ; Reset Handler
7
.org INT0addr
8
rjmp int0_handler ; IRQ0 Handler
9
.org INT1addr
10
rjmp int1_handler ; IRQ1 Handler
11
12
13
main: ; hier beginnt das Hauptprogramm
14
15
ldi temp, LOW(RAMEND)
16
out SPL, temp
17
18
ldi temp, 0x00
19
out DDRD, temp
20
21
ldi temp, 0xFF
22
out DDRB, temp
23
24
ldi temp, (1<<ISC01) | (1<<ISC11) ; INT0 und INT1 auf fallende Flanke konfigurieren
25
out MCUCR, temp
26
27
ldi temp, (1<<INT0) | (1<<INT1) ; INT0 und INT1 aktivieren
> Muss man da noch irgendwelche Fuses umstellen?
Müssen ist relativ. Hier muss man vermutlich nicht.
> Kann der AVR defekt sein?
Klar. Wenn Du ihn noch nicht misbraucht hast ist das aber eher
unwahrscheinlich.
> Testprogramme für die einzelnen Aus/Eingänge funktionieren alle.
Was tun die und wie äussert sich das?
> wenn ich das aber auf den AVR Schreibe funktioniert es nicht.
#define 'funktioniert nicht'
Wie sieht denn die Außenbeschaltung aus? Insbesondere, aber nicht
ausschließlich, von PD2 und PD3.
Missbraucht habe ich das IC nochnicht.
Die Testprogramme sind wie folgt:
1. PB wird 0 - 255 Hochgezählt. Anzeige LED (High = An).
2. Durch drücken der PD (Taster auf Masse) werden die gleichwertigen PB
geschaltet (sobald alle gedrückt wird wird PB7 auf High geschaltet.
Funktioniert nicht bedeutet das keine LED ausser die für die
Betriebsspannung auf meinem Board leuchtet.
Programm war auf jeden Fall das richtige ... könnte aber sein das ich
irgendwo ne Kalte Lötstelle oder so habe weil jetzt gehts ??
Trotzdem vielen Dank