also bei dem Listing hat es funktioniert.
Habe den Port 3 und 4 für das Beispiel genommen.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
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.







Zitieren

Lesezeichen