stfan1409
07.01.2012, 22:20
Hallo,
ich möchte LEDs zur Musik ansteuern(bassgetaktet).
Eine Elektronik wertet das Basssignal aus und gibt das Signal auf den INT0 eingang vom µC (NPN Transistor schaltet bei aktiv gegen Masse).
Leider bekomme ich immer 2 Signale vom INT0 Eingang. Also 1 Signal zu viel. Das möchte ich softwaremäßig ändern!
Meine Idee:
Sobald der INT0 aufgerufen wird, wird der INT0 deaktiviert - leider kommen immer noch 2 Impulse!
Nun habe ich einen Zähler und einen Printbefehl in die INT0_ISR reingeschrieben - der Zähler zählt bis 1 und es kommen 2 Printbefehle! Aber warum zählt der Zähler dann nicht bis 2?
Kann mir das bitte einer erklären?
Tobi
hier die empfangenen Daten über die serielle Schnittstelle
==============<\r><\n>
0<\r><\n>
==============<\r><\n>
0<\r><\n>
==============<\r><\n>
0<\r><\n>
==============<\r><\n>
int0 Aufruf<\r><\n>
1<\r><\n>
==============<\r><\n>
int0 Aufruf<\r><\n>
1<\r><\n>
==============<\r><\n>
0<\r><\n>
==============<\r><\n>
0<\r><\n>
==============<\r><\n>
$regfile = "m32def.dat"
$hwstack = 40
$swstack = 40
$framesize = 40
$crystal = 14745600
$baud = 19200
Wait 2 'damit erst die Spannung anliegt und dann der µC startet
'-------------------------------------------------------------------------------
'Ein- Ausgänge:
Ddra = &B00000000
Ddrb = &B00000000 '1 Ausgang, 0 Eingang => Pin PB5-0 als Ausgang 6&7 als Eingang
'Ddrc = &B00000000 '1 Ausgang, 0 Eingang => Pin PC7-0 als Ausgang
Ddrd = &B00000000 '1 Ausgang, 0 Eingang
'-------------------------------------------------------------------------------
'Interrupt von Bassauswertung
On Int0 Irq0
'Enable Int0
Config Int0 = Falling 'wechsel von High auf Low
Enable Interrupts
Dim Zaehler_do As Single
Dim Zaehler_int0 As Byte
Enable Int0
'Do - Looproutiene:
Do
Incr Zaehler_do
If Zaehler_do > 50000 Then
Print Zaehler_int0
Print "=============="
Zaehler_do = 0
Zaehler_int0 = 0
Enable Int0
End If
Loop
'_________________________________________________ ______________________________
Irq0:
Disable Int0
Incr Zaehler_int0
Print "int0 Aufruf"
Return
ich möchte LEDs zur Musik ansteuern(bassgetaktet).
Eine Elektronik wertet das Basssignal aus und gibt das Signal auf den INT0 eingang vom µC (NPN Transistor schaltet bei aktiv gegen Masse).
Leider bekomme ich immer 2 Signale vom INT0 Eingang. Also 1 Signal zu viel. Das möchte ich softwaremäßig ändern!
Meine Idee:
Sobald der INT0 aufgerufen wird, wird der INT0 deaktiviert - leider kommen immer noch 2 Impulse!
Nun habe ich einen Zähler und einen Printbefehl in die INT0_ISR reingeschrieben - der Zähler zählt bis 1 und es kommen 2 Printbefehle! Aber warum zählt der Zähler dann nicht bis 2?
Kann mir das bitte einer erklären?
Tobi
hier die empfangenen Daten über die serielle Schnittstelle
==============<\r><\n>
0<\r><\n>
==============<\r><\n>
0<\r><\n>
==============<\r><\n>
0<\r><\n>
==============<\r><\n>
int0 Aufruf<\r><\n>
1<\r><\n>
==============<\r><\n>
int0 Aufruf<\r><\n>
1<\r><\n>
==============<\r><\n>
0<\r><\n>
==============<\r><\n>
0<\r><\n>
==============<\r><\n>
$regfile = "m32def.dat"
$hwstack = 40
$swstack = 40
$framesize = 40
$crystal = 14745600
$baud = 19200
Wait 2 'damit erst die Spannung anliegt und dann der µC startet
'-------------------------------------------------------------------------------
'Ein- Ausgänge:
Ddra = &B00000000
Ddrb = &B00000000 '1 Ausgang, 0 Eingang => Pin PB5-0 als Ausgang 6&7 als Eingang
'Ddrc = &B00000000 '1 Ausgang, 0 Eingang => Pin PC7-0 als Ausgang
Ddrd = &B00000000 '1 Ausgang, 0 Eingang
'-------------------------------------------------------------------------------
'Interrupt von Bassauswertung
On Int0 Irq0
'Enable Int0
Config Int0 = Falling 'wechsel von High auf Low
Enable Interrupts
Dim Zaehler_do As Single
Dim Zaehler_int0 As Byte
Enable Int0
'Do - Looproutiene:
Do
Incr Zaehler_do
If Zaehler_do > 50000 Then
Print Zaehler_int0
Print "=============="
Zaehler_do = 0
Zaehler_int0 = 0
Enable Int0
End If
Loop
'_________________________________________________ ______________________________
Irq0:
Disable Int0
Incr Zaehler_int0
Print "int0 Aufruf"
Return