OLED display met ST7789 en MikroBasic

Bavelt

Golden Member

Toch lukt dit niet:

pic basic code:

APFCON0 = %01000000                              'SDO1 to PORTA.6

Op Poort A6 krijkg ik geen SDO1...

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik ben er uit:

De datasheet bracht uitkomst:

pic basic code:

• SDOx must have corresponding TRIS bit cleared

M.a.w. de SDO moet als output worden gedefinieerd in de TRIS. (in dit geval A.6)

pic basic code:

TRISA  =  %10101111

Ik begreep altijd dat je van de MSSP modules de poorten altijd als input moest hebben.
Dat is dus niet altijd zo.

E.e.a. afhankelijk of je 'Master mode' of 'Slave mode' gebruikt.
Dat zal wel in de SPI1_INIT worden geregeld neem ik aan?

[Bericht gewijzigd door Bavelt op zondag 5 april 2020 12:41:11 (14%)

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Voor de liefhhebber.

Een uitgewerkt programma in Mikro Basic met een Oled display 0,96"(128 * 64), SPI protocol.
En een temperatuur sensor MCP9801, I2C.

Het aardige is dat in dit programma met een PIC16F1847 als processor, zowel de ingebouwde I2C als de SPI modulen tegelijk worden gebruikt. In dit geval SPI-2 en I2C-1. Dat gaf de minste instellingen.

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Omdat je het slave adres van de MCP9801 zelf kan instellen (bit 1-3), is het vrij eenvoudig om een tweede sensor aan te sluiten.

In dit geval heb ik er twee en toon de waarden op het schermpje.

Beide geven wel nagenoeg dezelfe waarden aan, maar volgens mij wel een iets
te hoge temperatuur (ca 0,5 graad).

Wat ik me afvroeg: zijn deze sensors wel gemaakt voor het meten van de omgeving, zoals huiskamertemperatuur of eigenlijk bedoeld om ergens aan vast te monteren?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Waar je er mee meet doet weinig ter zake: temperatuur is temperatuur... (zolang het geen extreme omgeving is)
Die 0.5° is netjes binnen de grenzen van +/- 0.5°... ;)

Waarmee vergelijk je trouwens? (ik heb hier diverse thermometers en sensors, maar er is er geen bij die ik op de graad nauwkeurig zou vertrouwen)
Als referentie heb je meestal toch wel een serieuze kwaliteit (en dus prijzige) thermometer nodig.

Voor iets minder nauwkeurige temperatuurmetingen kun je ook nog de interne temperatuursensor van de 16F1847 (TIM) gebruiken...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Voor iets minder nauwkeurige temperatuurmetingen kun je ook nog de interne temperatuursensor van de 16F1847 (TIM) gebruiken...

Hé.. die kende ik nog niet. Dat ga ik dan ook maar eens proberen.

Mijn vergelijkingsmateriaal is inderdaad ook niet 100% zeker. Maar ik baseer het ook een beetje op de door de MCP9801 gemeten en getoonde waarden van 25,5 Graad voor mijn hobbykamer (staat geen zon op). Dat leek me wat aan de hoge kant.

Een andere losse thermometer geeft 24,8 aan. Ik was geneigd die eerder te geloven.

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Let er wel op dat de twee temperatuurmeters ook op dezelfde plaats liggen. 15cm verschil kan ook al een graad afwijking geven. Hoogteverschil ook.
Interne temeratuurmodule: http://ww1.microchip.com/downloads/en/AppNotes/00001333B.pdf

[Bericht gewijzigd door Arco op maandag 6 april 2020 15:35:15 (23%)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Is toch redelijk dichtbij... :)

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Zo'n goedkoop ding van Banggood heb ik ook liggen, wijkt behoorlijk af...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Goedkoop was hij zeker...Maar nogmaals 25,3 graden leek me wat veel. Maar enfin, misschien is het ook wel zo.
Maakt niet zoveel uit. Beide moduultjes MCP9801 werken in ieder geval leuk.

Eén keer SPI en 2 I2C temp-sensortjes op een 1847. Grappig dat het allemaal kan. ;)

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik had een tijdje geleden ook een tweetal TCN75 sensors besteld, die schijnen ook vaak te worden toepgepast.

Qua formaat en pinbezetting exact gelijk. Ook de resolutie en config registers zijn gelijk aan de MCP9801.

MCP9801:

Toch geeft de TCN75 de temperatuur in 0,5 graad nauwkeurig weer, dwz niet nauwkeuriger dan 2 macht -1 (bit 7 lower half).

Het commando voor de TCN75 (1001000 is slave adres, laatste bit = write = 1).

pic basic code:

MCP9800_Write(0x91, MCP9800_CONFIG, %01100000)  '12 bits resolution Unit 1

.

Toch gaat hier iets niet goed...

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Er valt niks te '12 bitsen'... ;) (de TCN75 is 9 bits = 0.5°C)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Ik zie dat ik een TCN75 heb. De TCN75A heeft wél de hogere resolutie.

Ik dacht dat ik die ook had besteld (Bij Farnell). Er staat N75-5 op...

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Deze TCN75 'knippert' tussen 26,5 en 27 graden, daar waar de MCP9801 nu 25,68 aangeeft. (ik toon nu 2 decimalen).

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Wat mij een beetje bevreemd:
Na het slave adres van de MCP9801 volgt het R/W bit.
1=lezen, 0 = schrijven.

Bit 8 in the address byte is a read/write bit. Setting this
bit to ‘1’ commands a read operation, while ‘0’
commands a write operation.

Dus zou je verwachten (bij slave adres 1001000) voor een READ %1001 000 1 = 91

Toch is dit niet zo, het is precies andersom, hij wil een 0 voor het lezen en een 1 voor het schrijven

%10010000 = 0x90 (read)
%10010001 = 0x91 (write)

Zo werkt het wel, maar dus niet conform de sheet.

?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Dat klopt niet wat je zegt, de datasheet wel... ;)
Read is altijd '1' en write altijd '0', bij iedere i2c peripheral. Als dat niet klopt doe je wat verkeerd.

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Op 7 april 2020 02:10:08 schreef Arco:
Dat klopt niet wat je zegt, de datasheet wel... ;)
Read is altijd '1' en write altijd '0', bij iedere i2c peripheral. Als dat niet klopt doe je wat verkeerd.

Ja.

Gelukkig maar, nu klopt het zoals het hoort (er zat een fout in de leesroutine :X )

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Inmiddels heb ik een nieuw 'speeltje' binnen: de BME 280. Een temperatuur, vochtigheid en luchtdruk sensor. Kan met I2C en SPI werken.

Is zo'n ding nog wat? Wel eens mee gewerkt?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Ik gebruik meestal de SHT21.
(luchtvochtigheid en temp, Luchtdruk boeit me niet erg, is meestal voor bewaking humi/temp op printen.)

Voordeel is ook dat de SHT21 te solderen is... ;) (hoe ga je dat met die BME280 doen?)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Voordeel is ook dat de SHT21 te solderen is... ;) (hoe ga je dat met die BME280 doen?)

Zo:

Zit op een adaptertje, alleen de Headerpinnen zelf nog solderen...

Fouten zijn het bewijs dat je het probeert..
Bavelt

Golden Member

Ik ben nog wel wat aan het hannesen met de level shifters, vanwege de 3,3 V logica van die BME280.

Ik heb de spanningdeler gemaakt met 1k / 2K2 weerstanden. Maar die samen (3K2) trekken wel de Poort (SDA en SCL) te laag, waardoor de 5V I2c het niet meer doet...(Pull_up van 4K7).

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Waarom gebruik je dan 5v? (dat gebruik ik al heel lang niet meer...)
Alles als LCD, MCP9800, PIC werkt toch op 3.3v?

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Dat had ik nog niet bedacht... Ik zal al naar level shifter iC's te kijken.
Want met weerstanden de boel omzetten geeft weer allerlei toestanden, zoals met de PullUps.

Dus ook de processor, de Oled's etc werken allemaal op 3,3 V?

Vanaf de Pickit3 komt er wel 5V uit. Dan moet ik die dus weer gaan omzetten naar 3,3V met een regulator o.i.d?

Fouten zijn het bewijs dat je het probeert..
Arco

Special Member

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Bavelt

Golden Member

Ja, op 3,3 Volt werkt het ook. En je kan dan de SCL en SDA lijnen gewoon parallel zetten. :)

Nu heb ik de datasheet van de BME280 sensor proberen door te worstelen, maar het ziet er knap ingewikkeld uit moet ik zeggen.
Ik mis ook een beetje een overview, of een 'quick guide. Of zoiets als bij de MCP9801.

Weet niet of ik hier wat mee kan.

Fouten zijn het bewijs dat je het probeert..