Toch lukt dit niet:
APFCON0 = %01000000 'SDO1 to PORTA.6
Op Poort A6 krijkg ik geen SDO1...
Golden Member
Toch lukt dit niet:
APFCON0 = %01000000 'SDO1 to PORTA.6
Op Poort A6 krijkg ik geen SDO1...
Golden Member
Ik ben er uit:
De datasheet bracht uitkomst:
• 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)
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%)
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.
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?
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...
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.
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%)
Special Member
Zo'n goedkoop ding van Banggood heb ik ook liggen, wijkt behoorlijk af...
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.
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).
MCP9800_Write(0x91, MCP9800_CONFIG, %01100000) '12 bits resolution Unit 1
.
Toch gaat hier iets niet goed...
Special Member
Er valt niks te '12 bitsen'... (de TCN75 is 9 bits = 0.5°C)
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...
Golden Member
Deze TCN75 'knippert' tussen 26,5 en 27 graden, daar waar de MCP9801 nu 25,68 aangeeft. (ik toon nu 2 decimalen).
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.
?
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.
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 )
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?
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?)
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).
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?
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?
Special Member
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.