Ik heb ADS1115 gekocht om mee te stoeien.
na veel leeswerk in de documentatie en proberen ben ik zover
dat ik een spanning kan meten en die op het scherm heb staan.
nu komt mijn probleem :
hoe kan ik de 4 poorten tegelijk op mij scherm krijgen.
individueel lukt mij dat wel.
Device 16F628A
Config HS_OSC, WDT_OFF, PWRTE_ON, LVP_OFF, BODEN_OFF, MCLRE_OFF
Xtal 20
All_Digital TRUE
Clear
Symbol ADS_SDA = PORTA.0 ; ADS1115
Symbol ADS_SLC = PORTA.1 ; ADS1115
; 76543210
PORTA = %00000000
TRISA = %00000011
Dim Dat15 As Word
Dim Resultaat_0 As Float
Dim Resultaat_1 As Float
Cls
DelayMS 100
Lees_ADC:
While 1 = 1
;5432109876543210
I2COut ADS_SDA, ADS_SLC, $90, $01, [%1100000100000011] ; configuratie
; |||
; 100 = AIN0 ingang en met ADDR naar aarde.
; 101 = AIN1 ingang en met ADDR naar aarde.
; 110 = AIN2 ingang en met ADDR naar aarde.
; 111 = AIN3 ingang en met ADDR naar aarde.
DelayMS 15
I2CIn ADS_SDA, ADS_SLC, $90, $48, [ Dat15 ] ; uitlezen
DelayMS 5
Resultaat_0 = Dat15 * 0.0001869
Resultaat_1 = Dat15 * 0.1869
Print At 1,1, Dec3 Resultaat_0, " Volt"
Print At 2,1, Dec0 Resultaat_1, " mvolt"
DelayMS 15
Wend
EndArco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Je kunt die A/D toch gewoon 4x uitlezen en dat op het display zetten?
Meestal is een wat nieuwere pic met A/D (bijv. 16F1847) wat handiger... (als je aan 10bit A/D genoeg hebt)
[Bericht gewijzigd door Arco op (44%)]
waarom ik deze gebruik is omdat deADS1115 net zo duur is als een referentie chip.
en ik heb nog nooit zo`n stabiele uitlezing gehad tot op de mvolt.
ik moet ze alle 4 apart instellen via de configuratie.
na elke keer de configuratie in te stellen op de goede ingang kan ik deze uitlezen uit bit15.
als ik dus ingang 1 configureer en uitlees en naar regel 1 lcd schrijf is er niets aan de hand.
configureer ik ingang 2 en schrijf deze weg naar regel 3 van de lcd
komt die ook op regel 1 te staan.
zowel regel 1 als regel 3 wisselen van ingang 1 en 2
er zit een multiplexer in de ADS1115 en dat verklaart misschien het een en ander maar
ik weet niet goed hoe ik daar mee om moet gaan gaan.
hier het voorbeeld :
Device 16F628A
Config HS_OSC, WDT_OFF, PWRTE_ON, LVP_OFF, BODEN_OFF, MCLRE_OFF
Xtal 20
All_Digital TRUE
Clear
Symbol ADS_SDA = PORTA.0 ; ADS1115
Symbol ADS_SLC = PORTA.1 ; ADS1115
; 76543210
PORTA = %00000000
TRISA = %00000011
Dim Dat15 As Word
Dim Resultaat_0 As Float
Dim Resultaat_1 As Float
Dim Data2 As Word
Dim Resultaat_2 As Float
Dim Resultaat_3 As Float
Cls
DelayMS 100
Lees_ADC:
While 1 = 1
;5432109876543210
I2COut ADS_SDA, ADS_SLC, $90, $01, [%1100000100000011] ; configuratie
; |||
; 100 = AIN0 ingang en met ADDR naar aarde.
; 101 = AIN1 ingang en met ADDR naar aarde.
; 110 = AIN2 ingang en met ADDR naar aarde.
; 111 = AIN3 ingang en met ADDR naar aarde.
DelayMS 15
I2CIn ADS_SDA, ADS_SLC, $90, $48, [ Dat15 ] ; uitlezen
DelayMS 5
Resultaat_0 = Dat15 * 0.0001869
Resultaat_1 = Dat15 * 0.1869
Print At 1,1, Dec3 Resultaat_0, " Volt"
Print At 2,1, Dec0 Resultaat_1, " mvolt"
DelayMS 15
;5432109876543210
I2COut ADS_SDA, ADS_SLC, $90, $01, [%1101000100000011] ; configuratie
; |||
; 100 = AIN0 ingang en met ADDR naar aarde.
; 101 = AIN1 ingang en met ADDR naar aarde.
; 110 = AIN2 ingang en met ADDR naar aarde.
; 111 = AIN3 ingang en met ADDR naar aarde.
DelayMS 15
I2CIn ADS_SDA, ADS_SLC, $90, $48, [ Data2 ] ; uitlezen
DelayMS 5
Resultaat_2 = Data2 * 0.0001869
Resultaat_3 = Data2 * 0.1869
Print At 3,1, Dec3 Resultaat_2, " Volt"
Print At 4,1, Dec0 Resultaat_3, " mvolt"
DelayMS 15
Wend
EnRoland van Leusden
It's the rule that you live by and die for It's the one thing you can't deny Even though you don't know what the price is. It is justified.
als ik dus ingang 1 configureer en uitlees en naar regel 1 lcd schrijf is er niets aan de hand.configureer ik ingang 2 en schrijf deze weg naar regel 3 van de lcd komt die ook op regel 1 te staan.
Aansturing van het LCD dus, geen ADS1115 probleem.
Je PIC Basic code lijkt niet compleet, maak van Lees_ADC een functie waarin je ook het kanaal meegeeft, bv Lees_ADC(2), vervolgens de cursor van het LCD op de juiste regel zetten, 2 voor dat je de gemeten waarden erop zet.
Hunter
Damn the torpedoes, full speed ahead!
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Niet alle libraries ondersteunen 4x20 displays. Vaak werkt het dan wel als je regel 1 en 3 als 1 geheel ziet...
(door hisoriche opbouw zitten veel displays qua geheugen nogal verknipt in elkaar...
)
"Regel 1.............Regel 3"Sjoerd Kreyns
Golden Member
SMD weerstandjes zoeken in grijze vloerbedekking is ook een uitdaging ... 8*1=255 ... Het nadeel van ruimte: Als je het hebt, staat het binnen de kortste keren weer vol.
Volgens mij moet je met declare aan het begin van het programma doorgeven welke interface je gebruikt voor het LCD.
Iets als
DECLARE LCD_INTERFACE 4Daarna werkt
PRINT AT 4,1wel
[Bericht gewijzigd door Sjoerd Kreyns op (13%)]
@Roland.
als ik dus ingang 1 configureer en uitlees en naar regel 1 lcd schrijf is er niets aan de hand.configureer ik ingang 2 en schrijf deze weg naar regel 3 van de lcd komt die ook op regel 1 te staan.
nog een keer.
als ik meting 1 weg schrijf naar regel 1 werkt dit goed.
als ik meting 2 weg schrijf naar regel 3 werkt het goed.
nu komt het vervelende deel. ik heb dus twee waardes die elkaar wisselen zowel op regel 1 als regel 3 komen de twee waardes te staan.
net als een scanner ( multiplexing ? )
dit gebeurt zowel op regel 1 als regel 3( het maakt niet uit welke regel combinatie ik gebruik )
het aansturen van de lcd werkt gewoon goed. gaat met proton basic.
ik zit zelf een beetje aan de adressering te denken van de ads1115.
volgens mij doe ik daar iets verkeerd en worden de gemeten waardes elke keer naar het zelfde adres weg geschreven waardoor het afwisselend te voor schijn komt. welke regel ik dan ook gebruik.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Als de tekst op de verkeerde regel van het display staat, heeft dat niks met de A/D converter te maken, maar met de aansturing van het display.
Display wel als 4 regelig ingesteld? Schrijf eerst eens 4 vaste teksten naar de regels en kijk of dat wel goed gaat.
@Arco
@Sjoerd
@Hunter
@Roland
het printen is helemaal geen probleem.
werkt uitstekend alle regels geen problemen mee.
alles waar het hoort te staan. welk commando dan ook.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik lees toch heel wat anders:
configureer ik ingang 2 en schrijf deze weg naar regel 3 van de lcd komt die ook op regel 1 te staan.
Verder niet belangrijk voor de werking, maar 'ADS_SLC' zou 'ADS_SCL' moeten zijn... 
[Bericht gewijzigd door Arco op (23%)]
@Arco
configureer ik ingang 2 en schrijf deze weg naar regel 3 van de lcd komt die ook op regel 1 te staan.
ik lees de Waarde uit AIN0 zet dit in Dat15 dit komt op het scherm
daarna lees ik de Waarde uit AIN1 zet dit in Data2 dit komt op het scherm
en dan komt het probleem dat de waardes van Dat15 en Data2 elkaar afwisselen.
ik lees apart in maar flipflopt het door elkaar
hoop dat het nu duidelijker is.
het gaat om de waardes en niet om het scherm zelf.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik ken picbasic niet verder, maar zo te zien klopt je adres niet. (1e parameter zou adres met '1' ervoor moeten zijn voor 16 bit. (vreemde notatie...)
Verder zou adres '00' of '01' moeten zijn. (hoe je aan 0x48 komt weet ik niet...)
I2COut ADS_SDA, ADS_SLC, $C8, $01, [%1100000100000011]
..
I2CIn ADS_SDA, ADS_SLC, $C8, $00, [ Dat15 ]
..
I2COut ADS_SDA, ADS_SLC, $C8, $01, [%1101000100000011]
..
I2CIn ADS_SDA, ADS_SLC, $C8, $00, [ Data2 ]
het probleem zat hem in de DelayMS 15 tussen beide metingen.
heb dit op DelayMS 100 gezet en het werkt nu goed.
weer iets geleerd tja stom stom stom.
dank allen voor het mee denken.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Een delay van 100mS is dan nog steeds te kort; je hebt de SPS op 8 ingesteld... (dus moet > 125mS zijn...)
hadv
Just find out what you like and let it kill you
Op 28 november 2018 01:24:31 schreef Arco:
Ik ken picbasic niet verder, maar zo te zien klopt je adres niet. (1e parameter zou adres met '1' ervoor moeten zijn voor 16 bit. (vreemde notatie...)
Verder zou adres '00' of '01' moeten zijn. (hoe je aan 0x48 komt weet ik niet...)I2COut ADS_SDA, ADS_SLC, $C8, $01, [%1100000100000011] .. I2CIn ADS_SDA, ADS_SLC, $C8, $00, [ Dat15 ] .. I2COut ADS_SDA, ADS_SLC, $C8, $01, [%1101000100000011] .. I2CIn ADS_SDA, ADS_SLC, $C8, $00, [ Data2 ]
Arco: de compiler voegt zelf de 0 of 1 toe afhankelijk van de richting. Als er al een 0 of 1 staat wordt die overschreven.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik had dit gelezen:
I2CIN Control, Address, Var{, Var}
Sends Control and Address out the I2C clock and data lines and puts the byte(s) received into Var.
The lower 7 bits of the Control byte contain the control code along with chip select or additional address information, depending on the particular device.
The high order bit is a flag indicating whether the following Address is to be sent as an 8 bit or 16 bit address. If this flag is low, the Address is sent as 8 bits. The control code for a serial EEPROM is %1010.
;5432109876543210
I2COut ADS_SDA, ADS_SLC, $90, $01, [%1100000100000011] ; configuratie
; |||
; 100 = AIN0 ingang en met ADDR naar aarde.
; 101 = AIN1 ingang en met ADDR naar aarde.
; 110 = AIN2 ingang en met ADDR naar aarde.
; 111 = AIN3 ingang en met ADDR naar aarde.
DelayMS 15
I2CIn ADS_SDA, ADS_SLC, $90, $48, [ Dat15 ] ; uitlezen
$90 = %10010000 dit is het adres van de ADC
$01 = %00000001 dit is de config adres van de ADC
$48 = %01001000 dit is pointer register van de ADC, zie plaatje
I2COut ADS_SDA, ADS_SLC, $C8, $01, [%1100000100000011]
..
I2CIn ADS_SDA, ADS_SLC, $C8, $00, [ Dat15 ]
..
I2COut ADS_SDA, ADS_SLC, $C8, $01, [%1101000100000011]
..
I2CIn ADS_SDA, ADS_SLC, $C8, $00, [ Data2 ]
$C8 = %11001000 ??? niet voor deze ADC
maar het werkt nu in ieder geval goed.
Clear
Symbol ADS_SDA = PORTA.0 ; ADS1115
Symbol ADS_SLC = PORTA.1 ; ADS1115
; 76543210
en inderdaad, het moet ADS_SCL / ADS_SDA zijn.
ik ben creatief ha ha ha.
groet Piet
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Ik heb schijnbaar niet de goede datasheet gehad...
(kan die niet meer terugvinden nu)
Blijft wel dat 100mS te kort is bij 8 SPS (samplerate), minimum is dan 125mS.
De chip heeft trouwens een conversion_ready output, waarom gebruik je die niet? (dan wacht je nooit langer als nodig)
Had het al op 125ms gezet.
De chip heeft trouwens een conversion_ready output, waarom gebruik je die niet? (dan wacht je nooit langer als nodig)
hoe wie wat waar.
conversion_ready output, dat moet ik dan eerst eens op en uitzoeken in het manual.
ik ga eens kijken
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
