so, habe weiter getestet und bin auf einiges drauf gekommen:
egal wie PB5 konfiguriert ist:
als eingang mit einem 10k R gegen GND
oder als ausgang mit einer led+1k an GND
dann geht der tiny in den RESET modus !!!
der int0 funktioniert weder mit + noch mit - flanke.
habe alle varianten im MCUCR gesetzt und probiert.
nur pinchange funktioniert (ausgenommen an PB5 - siehe oben).
das habe ich mit folgendem testprogramm raus gefunden:
Code:
; TEST
#include "tn13def.inc"
.cseg
.org 0x000 ; Interrupt Vektoren
rjmp MAIN ; Hauptprogrammroutine (Reset)
rjmp IMPULS ; Interrupt0
rjmp IMPULS ; PinChangeInterrupt Tor zu
rjmp SCHLEIFE ; TimerOverFlow für Warteschleife
rjmp SCHLEIFE ; Hauptprogrammroutine
rjmp SCHLEIFE ; Hauptprogrammroutine
rjmp SCHLEIFE ; Hauptprogrammroutine
rjmp SCHLEIFE ; Hauptprogrammroutine
rjmp SCHLEIFE ; Hauptprogrammroutine
rjmp SCHLEIFE ; Hauptprogrammroutine
.def PORT = R16
.def TEMP = R17
MAIN:
cli
ldi temp,LOW(RAMEND)
out SPL,temp
ldi temp,0b00011000 ; Register für DDRB in/out laden
out DDRB,temp ; 0 1 2 5 Eingänge 3 4 Ausgänge
ldi temp,0b00000010 ; Register für PORTB in/out laden
out PORTB,temp ; Eingang 1 pullup
ldi temp,0b00000011 ; 0b00000010 INT0 N-Flanke
out MCUCR,temp
ldi temp,0b01100000 ; GIMSK Interrupt Mask setzen
out GIMSK,temp ; Int0 und PinChange enable
ldi temp,33 ; PinChange auf PB0 + PB5 beschränken
out PCMSK,temp
sei
SCHLEIFE:
nop
rjmp schleife
IMPULS:
cpi port,0
brne next
ldi port,8 ; mit 8 und 16 PB3 + PB4 ein
NEXT:
out portb,port
lsl port
cpi port,32
brne end
clr port
END:
sei
reti
nur PB3 + 4 liegen mit einer led + 1k an masse, sonst ist der tiny nicht beschalten.
als "schalter" an PB0+PB1 für die interrupts verwende ich einen 1k widerstand gegen Vcc oder Vdd.
wenn ich an PB5 als pin change tippe = reset!
am simulator des AVR studio4 funktioniert obiger code tadellos.
warum nicht am tiny??
kann es sein, dass er defekt ist?
kann mir jemand weiter helfen?
Lesezeichen