Controle Paneel |
|
|
Site info |
»
»
»
»
» Upload Archief
|
|
Stats |
Totaal online: 8 8 gasten 0 leden: |
|
|
Forum > Digitaal > MCP23017 |
|
|
Gepost op zondag 12 Oktober 2014 23:58:54 |
 |
Hoi Henk,
Nu lees ik een stukje in je tekst dat je de code werkend hebt gekregen van de MCP23017, ik neem aan dat die bij jou dan ook op I2C staat.
Nu zelf ben ik hier al 2 dagen mee bezig en het wil van geen meter lukken.
Ik wil die gaan gebruiken om 13 leds aan te sturen.
Nu is mijn vraag welk adres heb je gekozen met A0/A1/A2? en zou je die code willen delen met ons, hopelijk krijg ik hem hier dan ook aan de praat.
Zelf heb ik mijn lopende project 3 PCF8574AP's lopen en ook een I2C klok (weet even niet meer welke zou ik moeten kijken).
Als die I2C klok bij mij het zelfde zou zijn wil ik je gerust de code hier ook even plaatsen zodat jij ook deze hebt. |
http://pascalbianca.blogspot.nl/ |
|
Gepost op maandag 13 Oktober 2014 12:16:13 |
 |
Ik heb de code niet 1-2-3 bij de hand maar bij het aanzetten (POR dus) is het van belang dat je de Register Tabel goed leest, met name de laatste kolom dat is de POR/RST value kolom op pagina 11, daar staat dat de IOCON 00000000 is na het opstarten, dus het adres is dan 0A (hex) en 0B ze zijn beide aan elkaar gekoppeld als ik in de pdf goed lees, en bij de MCP23008 is dit (alleen) 05 hex.
Ik had er over gedacht om IOCON.BANK = 1 te zetten maar als er een stoorpuls binnenkomt zou het IC zich kunnen (mogelijk) resetten,
Dus ik hou IOCON.BANK = 0.
Daarmee voorkom ik dus dat vanuit de PIC. dan na zo'n POR verkeerde registers benader.
Samengevat;
IODIRA = 00 hex. het zelfde adres als de MCP23008
IODIRB = 01 hex.
IOCONA = 0A hex. IOCONB hoef je niet in te stellen, A&B zijn gelijk
GIOA = 12 hex.
GIOB = 13 hex. Deze laatste 2, ipv. 09 hex. bij de MCP23008
A0, A1, A2 adressen zijn gelijk als bij de vorige topic dus resp. 42&43hex. [Bericht gewijzigd door Henk (NL) op Maandag 13 Oktober 2014 12:24:44] |
|
|
Gepost op maandag 13 Oktober 2014 15:26:14 |
 |
Hoi Henk,
Welke vorige topic?
Als je de code bij de hand zou hebben later op de dag, zou je hem alsnog eens kunnen plaatsen?
Ik heb hier nog even gekeken voor je welk I2C clock ik gebruik en ik maak gebruik van een PCF8583 Clock/Calendar 240b-RAM.
Als je eventueel daar de code van zou willen hebben , kan ik die voor je plaatsen.
De code die ik heb is zowel om datum als tijd in te stellen en om deze uit te lezen. [Bericht gewijzigd door pascalbianca op Maandag 13 Oktober 2014 15:27:21] |
http://pascalbianca.blogspot.nl/ |
|
Gepost op maandag 13 Oktober 2014 19:02:16 |
 |
Deze link pascal.
http://www.schematheek.net/index.php?p=forum/topic&t=880&n=4
MCP23008 code;
Code |
I2COUT SDA,SCL,$42,[$00,%00000000]
I2COUT SDA,SCL,$42,[$05,%00010010]
I2COUT SDA,SCL,$42,[$09,%11110000]
|
Voor de MCP23017 wordt dit dan;
Code |
I2COUT SDA,SCL,$42,[$00,%00000000] 'uitgangspoorten, bv.
I2COUT SDA,SCL,$42,[$01,%00000000]
I2COUT SDA,SCL,$42,[$0A,%00010010]
I2COUT SDA,SCL,$42,[$12,%11110000] '4-bit aan&uit,bv.
I2COUT SDA,SCL,$42,[$13,%11110000]
|
|
|
|
Gepost op zaterdag 18 Oktober 2014 18:54:49 |
 |
Henk als ik je onderstaande schema zou voorschotelen, hoe krijg jij die aan de praat want hier lukt het niet.
|
http://pascalbianca.blogspot.nl/ |
|
Gepost op zaterdag 18 Oktober 2014 19:47:16 |
 |
Omdat A0 = aan GND.
Terwijl in topic zie link van 13oct is A0 = 1 dus $42 hex.
Kortom;
In het jouw schema is dit $40 hex. |
|
|
Gepost op zaterdag 18 Oktober 2014 20:00:56 |
 |
Ik heb deze code maar er gebeurd niets.
Code |
Device 16F877A
Config CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_off, PWRTE_on, WDT_off, HS_OSC, BOREN_off, WDT_off
Xtal = 20
Declare LCD_DTPin =PORTB.4
Declare LCD_ENPin = PORTB.3 '2
Declare LCD_RSPin = PORTB.2 '3
Declare LCD_Lines = 4
;De standaard snelheid voor de I2C bus is 100KHz. Sommige apparaten gebruik een hogere bus snelheid van 400KHz.
;De bovenstaande Declare kan de I2C bussnelheid worden verhoogd of verlaagd. Gebruik dit
;declareren met de nodige voorzichtigheid, als een te hoge bitsnelheid gekozen word als wat mag in de
;apparaat specs, dan zal dit resulteren in intermitterende transacties, of in sommige gevallen, helemaal geen transacties.
;Het gegevensblad van het apparaat, informeert u van betreffende bussnelheid. De standaard bitsnelheid is de standaard 100 KHz.
;Declare Slow_Bus On
Declare Hbus_Bitrate 400 ' Bits per second 100, 400, 1000 etc.
All_Digital TRUE ;Alle ingangen digitaal
;I2C poorten aanwijzen
Symbol SCL_Pin = PORTC.3
Symbol SDA_Pin = PORTC.4 ;Alias voor de SDA_Pin (Data) lijn
Symbol Control %01000010
Dim Received As Byte ; Variabelen
Dim VAR1 As Byte ' We'll only read 8-bits
Dim Address As Byte ' 8-bit address required
Cls
DelayMS 500
Clear
Print At 1,1, "MCP23008 Test"
Print At 2,1, "02-01-2014"
Address = 40
I2COut SDA_Pin, SCL_Pin, Control , Address , [%00010010]
Address = 0
I2COut SDA_Pin, SCL_Pin, Control , Address , [%00000000]
Loop:
I2COut SDA_Pin,SCL_Pin,$00,$40,[%00000000]
I2COut SDA_Pin,SCL_Pin,$05,$40,[%00010010]
I2COut SDA_Pin,SCL_Pin,$09,$40,[%11110000]
DelayMS 500
I2COut SDA_Pin,SCL_Pin,$40,[$00,%00000000]
I2COut SDA_Pin,SCL_Pin,$40,[$05,%00010010]
I2COut SDA_Pin,SCL_Pin,$40,[$09,%11110000]
DelayMS 500
GoTo Loop ' Loop forever
|
Maar normaal gebruik ik HBUSOUT. |
http://pascalbianca.blogspot.nl/ |
|
Gepost op zaterdag 18 Oktober 2014 20:04:35 |
 |
Je verwijst naar register 05 ipv 0A enz.
Lees even even de tabel zoals in 13oct hierboven. |
|
|
Gepost op zaterdag 18 Oktober 2014 20:14:04 |
 |
Help helaas ook niet.
Code |
;I2C poorten aanwijzen
Symbol SCL_Pin = PORTC.3
Symbol SDA_Pin = PORTC.4 ;Alias voor de SDA_Pin (Data) lijn
Symbol Control %01000010
Dim Received As Byte ; Variabelen
Dim VAR1 As Byte ' We'll only read 8-bits
Dim Address As Byte ' 8-bit address required
Cls
DelayMS 500
Clear
Print At 1,1, "MCP23008 Test"
Print At 2,1, "02-01-2014"
Address = 40
I2COut SDA_Pin, SCL_Pin, Control , Address , [%00010010]
Address = 0
I2COut SDA_Pin, SCL_Pin, Control , Address , [%00000000]
Loop:
I2COut SDA_Pin,SCL_Pin,$00,$40,[%00000000]
I2COut SDA_Pin,SCL_Pin,$0A,$40,[%00010010]
I2COut SDA_Pin,SCL_Pin,$09,$40,[%11110000]
DelayMS 500
I2COut SDA_Pin,SCL_Pin,$40,[$00,%00000000]
I2COut SDA_Pin,SCL_Pin,$40,[$0A,%00010010]
I2COut SDA_Pin,SCL_Pin,$40,[$09,%11110000]
DelayMS 500
GoTo Loop ' Loop forever
|
ps. deze kan toch gewoon op 5V? of moet die op 3.3v?
Had gelezen dat hij op beide kon meen ik. [Bericht gewijzigd door pascalbianca op Zaterdag 18 Oktober 2014 20:19:10] |
http://pascalbianca.blogspot.nl/ |
|
Gepost op zaterdag 18 Oktober 2014 20:34:50 |
 |
Hoop niet dat de Moderators mij waarschuwen ivm. dubbele postings, maar goed...
Voor de MCP23017
Code |
I2COUT SDA,SCL,$40,[$00,%00000000] 'uitgangspoorten, bv.
I2COUT SDA,SCL,$40,[$01,%00000000]
I2COUT SDA,SCL,$40,[$0A,%00010010]
I2COUT SDA,SCL,$40,[$12,%11110000] '4-bit aan&uit,bv.
I2COUT SDA,SCL,$40,[$13,%11110000]
|
[Bericht gewijzigd door Henk (NL) op Zaterdag 18 Oktober 2014 20:35:42] |
|
|
Gepost op dinsdag 21 Oktober 2014 07:21:39 |
 |
Thx Henk, werkt nu
En aan de hand van de werkende code heb ik deze nu ook werkend kunnen omzetten naar HBUSOUT, zodat het nu zo is geworden.
Code |
HBusOut MCP23017_ADDR,[$00,%00000000] 'uitgangspoorten, bv.
HBusOut MCP23017_ADDR,[$01,%00000000]
HBusOut MCP23017_ADDR,[$0A,%00010010]
HBusOut MCP23017_ADDR,[$12,%00000000] '8-bit aan&uit,bv. $12 GPIO-A
HBusOut MCP23017_ADDR,[$13,%00000000] '8-bit aan&uit,bv. $13 GPIO-B
|
[Bericht gewijzigd door pascalbianca op Woensdag 22 Oktober 2014 13:19:04] |
http://pascalbianca.blogspot.nl/ |
|
Gepost op vrijdag 24 Oktober 2014 19:44:00 |
 |
Het grappige is dat ik juist ook HBusOut gebruik en juist 'speciaal' voor jou omgezet had naar I2COUT! |
|
|
Gepost op zaterdag 25 Oktober 2014 07:58:04 |
 |
Inderdaad grappig ja, maar dat had ik wel aangegeven dat ik HBusout gebruik. [Bericht gewijzigd door pascalbianca op Zaterdag 25 Oktober 2014 20:06:59] |
http://pascalbianca.blogspot.nl/ |
|
|
|
|
|
|
|