stekohl
06.04.2008, 14:47
Ich bekomme einfach keine Signale vom Portexpander. Raus gar kein Problem. Irgendwie erschließt sich mir die Logik des Registerwarterloo nicht ganz so. Können die nicht einen Kippschalter oben an des DIP gehäuse dranmachen. =P~ Da würde ich mir das schreiben von endlosen Registern sparen. Kleiner Witz.
Also wer von Euch Spitzenkräften kann mir bei meinem Problem helfen?
Nich alle auf einmal ;-)
Hier erstmal der Code. (Ist das BASCOM Beispielprogramm ein wenig in die länge gezogen. Ich teste erst alle Einzelschnittstellen bevor ich den Hauptcode schreibe.)
Dim B As Word
Dim A(10) As Byte
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.5 = Output
Config Pinb.6 = Input
Config Pinb.7 = Output
Open "com1:" For Binary As #1
Spiinit
' MCP23S17 Register RO=ReadOnly
' Adresse 00 01 IODIR Richtung Port a/b 0=Output 1=Input
' Adresse 02 03 IPOL Polarität 1=umgekehrt
' Adresse 04 05 GPINTEN Interrupt aktivieren 1=an 0=aus
' Adresse 06 07 DEFVAL Vergleichsregister für Interrupt
' Adresse 08 09 INTCON 1=PIN<->DEFVAL 0=PIN neu <->PIN alt
' Adresse 0A 0B IOCON Configuration
' Adresse 0C 0D GPPU PullUp 1=aktiv 0= aus
' Adresse 0E 0F INRF Interrupt Flag register RO
' Adresse 10 11 INTCAP Interrupt Capture Register RO
' Adresse 12 13 GPIO Port Werte RW
' Adresse 14 14 OLAT Output Latch Register
' Ausgabe klappt wie Teufel
Portb.0 = 0 'Reset
Waitus 100
Portb.0 = 1
A(1) = &B01000000 'Richtung Porta
A(2) = $00
A(3) = $0
A(4) = $00
Spiout A(1) , 4
A(1) = &B01000000 'PullUp
A(2) = $0c
A(3) = $00
A(4) = $00
For B = 0 To &B1111111111111111
A(1) = &B01000000 'Ausgänge ansteuern
A(2) = $12
A(3) = High(b) ' Port A gleich MSB von B
A(4) = Low(b)
' Port B gleich LSB von B
Spiout A(1) , 4
Next B
Portb.0 = 0 'Reset
Waitus 100
Portb.0 = 1
'Ab hier still ruht der See!!
Test:
A(1) = &B01000000 'Richtung Porta
A(2) = $00
A(3) = $ff
A(4) = $ff
Spiout A(1) , 4
A(1) = &B01000000 'Polarität umkehren
A(2) = $02
A(3) = $ff
A(4) = $ff
Spiout A(1) , 4
A(1) = &B01000000 'PullUp
A(2) = $0c
A(3) = $ff
A(4) = $ff
Spiout A(1) , 4
A(1) = &B01000001 'Ausgang PORTA/B lesen
A(2) = $12
Spiout A(1) , 2
Spiin A(1) , 2
Print #1 , A(1) ; A(2)
Goto Test
Waitus 100
End
Danke für Eure Hilfe. Kommentieren ist nicht so meine stärke bin eher Küchenprogrammierer. Erst den Code haben dann strukturieren, da bekommt jeder Informatiker einen Mittelschweren Ausraster.
Gruß,
Stephan
Also wer von Euch Spitzenkräften kann mir bei meinem Problem helfen?
Nich alle auf einmal ;-)
Hier erstmal der Code. (Ist das BASCOM Beispielprogramm ein wenig in die länge gezogen. Ich teste erst alle Einzelschnittstellen bevor ich den Hauptcode schreibe.)
Dim B As Word
Dim A(10) As Byte
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.5 = Output
Config Pinb.6 = Input
Config Pinb.7 = Output
Open "com1:" For Binary As #1
Spiinit
' MCP23S17 Register RO=ReadOnly
' Adresse 00 01 IODIR Richtung Port a/b 0=Output 1=Input
' Adresse 02 03 IPOL Polarität 1=umgekehrt
' Adresse 04 05 GPINTEN Interrupt aktivieren 1=an 0=aus
' Adresse 06 07 DEFVAL Vergleichsregister für Interrupt
' Adresse 08 09 INTCON 1=PIN<->DEFVAL 0=PIN neu <->PIN alt
' Adresse 0A 0B IOCON Configuration
' Adresse 0C 0D GPPU PullUp 1=aktiv 0= aus
' Adresse 0E 0F INRF Interrupt Flag register RO
' Adresse 10 11 INTCAP Interrupt Capture Register RO
' Adresse 12 13 GPIO Port Werte RW
' Adresse 14 14 OLAT Output Latch Register
' Ausgabe klappt wie Teufel
Portb.0 = 0 'Reset
Waitus 100
Portb.0 = 1
A(1) = &B01000000 'Richtung Porta
A(2) = $00
A(3) = $0
A(4) = $00
Spiout A(1) , 4
A(1) = &B01000000 'PullUp
A(2) = $0c
A(3) = $00
A(4) = $00
For B = 0 To &B1111111111111111
A(1) = &B01000000 'Ausgänge ansteuern
A(2) = $12
A(3) = High(b) ' Port A gleich MSB von B
A(4) = Low(b)
' Port B gleich LSB von B
Spiout A(1) , 4
Next B
Portb.0 = 0 'Reset
Waitus 100
Portb.0 = 1
'Ab hier still ruht der See!!
Test:
A(1) = &B01000000 'Richtung Porta
A(2) = $00
A(3) = $ff
A(4) = $ff
Spiout A(1) , 4
A(1) = &B01000000 'Polarität umkehren
A(2) = $02
A(3) = $ff
A(4) = $ff
Spiout A(1) , 4
A(1) = &B01000000 'PullUp
A(2) = $0c
A(3) = $ff
A(4) = $ff
Spiout A(1) , 4
A(1) = &B01000001 'Ausgang PORTA/B lesen
A(2) = $12
Spiout A(1) , 2
Spiin A(1) , 2
Print #1 , A(1) ; A(2)
Goto Test
Waitus 100
End
Danke für Eure Hilfe. Kommentieren ist nicht so meine stärke bin eher Küchenprogrammierer. Erst den Code haben dann strukturieren, da bekommt jeder Informatiker einen Mittelschweren Ausraster.
Gruß,
Stephan