PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt mit PCF und Rnbfra



Unregistriert
28.01.2015, 20:50
Hallo!

Ich habe das Rnbfra nun aufgebaut und bin am austesten wie es funktioniert.

Diesbezüglich gibt es einen I/O Porterweiterer PCF8547. Kommunikation mittels I2C klappt einwandfrei.

Jetzt hätte ich alle Ports auf high gesetzt. Mittels Kabel kann ich erkennen, wenn ich einen Pin gegen Masse setze, dass sich der Registerwert des PCF ändert.

Nun würde ich gerne den Interrupt, der vom PCF generiert werden sollte mit dem Atmega32 auslesen. Dazu verwende ich den Pinb.2. Leider sitze ich jetzt schon Tage dabei, ohne den interrupt zu empfangen.
Wenn ich an dem pinb.2 direkt eine pegeländerung herbeiführe, wird der interrupt ausgelöst. Es müsste also funktionieren. Ich denke das ich vom PCF den interrupt nicht bekomme. Ist das möglich, oder habe ich einen gröberen Gedankenfehler?




Hier mein kleines Testprogramm:

'################################################# ##
$regfile = "m32def.dat" ' oder bei Mega16 $regfile = "m16def.dat"

Const Writeeingabeport_adr = &H7E 'I2C Adr PCF 2
Const Readeingabeport_adr = &H7F 'I2C Adr PCF 2

Dim I2cdaten As Byte

Dim I2cdaten2 As Byte 'Datenbyte aus PCF8574

Dim B1 As Byte
Dim I As Byte

$hwstack = 100
$swstack = 100
$framesize = 100

$baud = 9600
$crystal = 8000000 'Quarzfrequenz
Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1




Config Portb.2 = 0

Config Pinb.2 = Input

'Config Portd.3 = 1


Enable Interrupts
Enable Int2
Config Int2 = Rising

On Int2 Int2_isr


Portd.6 = 0 'Schrittmotoren erst mal ausschalten
I2cinit

'******** Diese 4 Befehle sind nur ab RNBFRA Version 1.2 (nicht in V 1.1)
' notwendig und bzw. möglich (erweiterte Energiesparfunktion und LED´s)
' Bei Board 1.1 bitte auskommentieren oder löschen
I2cstart
I2cwbyte &H74 'Schreibbefehl an PCF3 schicken
' Led´s ein ,Motorendstufen ein, Port-Peripherie ein, RBN-Bus Sleep Modus aus (also Peripherie aktiv)
I2cwbyte &B00000010 'Datenbyte an PCF3
I2cstop
'*********

I = 0
I2cdaten = 1



I2cstart
I2cwbyte Writeeingabeport_adr
I2cwbyte &B11111111
I2cstop



Do



Loop




Int2_isr:
Print "interrupt"

Return




*************************

Danke!

021aet04
01.02.2015, 10:55
Für Code gibt es eigene Code Tags. Ist besser zu lesen.
Mit Bascom kenne ich mich nicht aus, aber wie schaut deine Schaltung aus. Hast du einen pull up Widerstand an der Interrupt Leitung?

MfG Hannes