also bei dem Listing hat es funktioniert.
Code:
'******************************************************************************
$regfile = "m32def.dat"
$baud = 9600
$crystal = 8000000 'Quarzfrequenz
Config Scl = Portc.0 'Ports fuer I2C-Bus
Config Sda = Portc.1
Config Pind.6 = Output 'Schrittmotoren Ein/Aus
Config Pinc.5 = Output 'Schrittmotor Links Richtung
Config Pinc.3 = Output 'Schrittmotor Links Step
Config Pinc.4 = Output 'Schrittmotor Rechts Richtung
Config Pinc.2 = Output 'Schrittmotor Rechts Step
Config Pinb.2 = Input 'Interrupt Int2
Config Portb.2 = 0
Config Portd.3 = 1
Config Int2 = Falling
Enable Int2
Enable Interrupts
On Int2 Int2_isr
Const Writeeingabeport_adr = &H7E 'I2C Adr PCF 2
Const Readeingabeport_adr = &H7F 'I2C Adr PCF 2
Dim I2cdaten As Byte 'Datenbyte aus PCF8574
Dim Taste1 As Word
Dim Taste2 As Word
Dim I As Word
Dim Flag As Bit
I2cinit
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
Portd.6 = 0 'Schrittmotoren erst mal ausschalten
I2cdaten = 0
Flag = 0
Taste1 = 247 'Taste 1 (Eingangsport-Port3)
Taste2 = 251 'Taste 2 (Eingangsport-Port4)
I = 0
'******************** Hauptprogramm ********************************************
Do
If Flag = 1 Then Gosub Motor1_2
If Flag = 0 Then Gosub Motoren_aus
Loop
'********************* Unterprogramme ******************************************
Motor1_2:
Portc.5 = 0 'Richtung Motor 1
Portc.4 = 1 'Richtung Motor 2
Portd.6 = 1 'Motoren einschalten
Portc.2 = 0 'Step rechts
Portc.3 = 0 'Step links
Waitms 1
Portc.2 = 1 'Step rechts
Portc.3 = 1 'Step links
Waitms 1
Portd.6 = 0 'Motoren ausschalten
Return
Read_data:
Return
Motoren_aus:
Portd.6 = 0 'Motoren ausschalten
Return
Int2_isr:
I2cstart
I2cwbyte Readeingabeport_adr 'Lesebefehl an PCF schicken
I2crbyte I2cdaten , Nack 'Datenbyte von PCF lesen
I2cstop
Waitms 50
Print I ; " Eingangsport Wert " ; I2cdaten ; " war beim Int2"
Incr I
If I2cdaten = Taste1 Then Flag = 1
If I2cdaten = Taste2 Then Flag = 0
Return
Habe den Port 3 und 4 für das Beispiel genommen.
Steht auch im Listing mit drin.
Damals habe ich einfach nur Taster genommen und die Eingänge mit Pull-Up´s(für den sauberen Pegel) versehen.
Was für Signale gibt deine LS ab?
Am PCF sollen definierte Pegel anliegen. 0V Low oder 5V High.
Zum Schalten am PCF würde ich den Low-Pegel empfehlen. Also von 5V auf GND.
Wenn also deine LS schaltet, weil der Endpunkt erreicht ist, soll eine Pegeländerung von High auf Low am PCF erfolgen.
Das solltest du bei der Verdrahtung deiner Schaltung beachten.
Lesezeichen