PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : INT3 macht probleme



Apollo
20.05.2005, 01:41
weil mein ATmega komische Sachen gemacht hat, hab ich mal folgendes Testprogramm geschrieben.

$crystal = 16000000
$regfile = "M128def.dat"
$baud = 9600

Ddrg = 7
Porta = 255
Portb = 255
Portc = 255
Portd = 255
Porte = 255
Portf = 255
Portg = 7

Config Int3 = Falling
Enable Interrupts
Enable Int3
On Int3 Zaehle

Dim I As Byte

Do
Nop
Loop

End

Zaehle:
Incr I
Print I
Return

Damit habe ich dann mal alle Interrupteingänge durchgetestet.
auf INT3 scheint er das "Config Int3 = Falling" zu ignorieren.
Der Interrupt löst bei beiden flanken aus.
bei den anderen Interrupteingängem wird nur bei der fallenden Flanke ausgelöst.
Hab ich da irgendwo nen Denkfehler, oder ist das bei INT3 so?

PicNick
20.05.2005, 07:33
Bei der Flanken/Level einstellung bin ich auch am diskutieren mit dem BasCom. Er hat da eigene Vorstellungen, was die INT können und was nicht. Ev. das neue Update vom BasCom ?
Auf jeden Fall Vorsicht damit.

Apollo
20.05.2005, 10:29
aber bei sämtlichen anderen INT funktioniert das wie vorgesehen, nur nicht beim INT3.
soll das an bascom liegen?

PicNick
20.05.2005, 10:54
So Apollo, jetzt hast du was zu tun

Dein Programm (config etc) setzt der BasCom folgendermaßen um:



----------------------- Ddrg = 7
00C8 LDI r24,$07
00CA STS DDRG,r24

Porta = 255
00CE LDI r24,$FF
00D0 OUT PORTA,r24

Portb = 255
00D2 LDI r24,$FF
00D4 OUT PORTB,r24

Portc = 255
00D6 LDI r24,$FF
00D8 OUT PORTC,r24

Portd = 255
00DA LDI r24,$FF
00DC OUT PORTD,r24

Porte = 255
00DE LDI r24,$FF
00E0 OUT PORTE,r24

Portf = 255
00E2 LDI r24,$FF
00E4 STS PORTF,r24

Portg = 7
00E8 LDI r24,$07
00EA STS PORTG,r24

Config Int3 = Falling
00EE LDS r24,EICRA
00F2 ANDI r24,$3F das ist interessant
00F4 ORI r24,$20 ebenfalls
00F6 STS EICRA,r24

Enable Interrupts
00FA SEI

Enable Int3
00FC IN r24,EIMSK
00FE ORI r24,$08 enable int3
0100 OUT EIMSK,r24

; --------- DO / LOOP -------------------------
L_$0102:
0102 NOP
0104 JMP L_$0102
0108
; ---------- END --------------------------
L_$010A:
010A RJMP L_$010A


Jetzt müßtest du anhand des Datasheet des 128-er die gesetzten Bits klitzeklein kontrollieren, ob das stimmt oder nicht

Apollo
20.05.2005, 12:59
Ich weiß nur nicht wie ich da anfangen soll.
Wenn ich im Datenblatt des mega128 z.B. nach r24 suche, findet er nichts.

PicNick
20.05.2005, 13:15
Ah so, seh' schon, na ja, egal, ich hab selber nachgesehen:

Bei CONFIG INT3 = falling
setzt er im Register EICRA die die Flags für "FALLING Edge"

Also hat der BasCom keine schuld. Da ich auch nicht glaube, daß der Mega so einen Fehler bringt, mußt du Dich wahrscheinlich getäuscht haben oder es is was anderes

Apollo
20.05.2005, 14:36
getäuscht, ne. Hab das mehrmals durchprobiert. Ich hab da nen DCF-Empfänger dran. Der zählt an INT3 jede sekunde um 2 weiter. An allen anderen INT funktionierts ja richtig.
Kann das mit der 2-ten UART zusammenhängen?

PicNick
20.05.2005, 15:01
Was soll ich sagen, bei Int0-3 gibt es lt. Sheet keine Funktion für Falling UND Rising. nur für 4-7.
Zusammenhang mit sonstwas seh ich eigentlich nicht

Aber ich seh grad, du hast recht, int3 ist ja der 4. ( ](*,) )
Den setzt er ja garnicht, also arbeitet er auf Low Level , d,h, er kann sich leicht verzäheln

UUUUiiiiiiiiiii das is ja 'n BUG vom BasCom !!!! :Haue

PicNick
20.05.2005, 15:16
Vielleicht hilft das inzwischen

config int3 = falling

Eicra = Eicra Or &H80 ' zu Fuß das "falling" Bit setzen

Apollo
21.05.2005, 00:49
das hat funktioniert, besten dank

Apollo
21.05.2005, 15:28
Jetzt hatte ich nur noch den Fehler gemacht, das ich beide Zeilen verwendet hatte. Damit hatte er beide Bits (&HC0) gestetzt, was dann ja einem "rising" entsprechen würde. Jetzt hab ich das glaub ich auch endlich verstanden :)
Ohne der config-zeile gehts jetzt aber richtig.
Jetzt funktioniert der DCF77 decoder auch am INT3.

PicNick
21.05.2005, 19:58
Es zählt nur der Erfolg. Aber der Bug is mir nicht egal, sowas kostet dich ja Stunden (Nächte)