• R/O
  • SSH
  • HTTPS

pasripherals: Commit


Commit MetaInfo

Revision30 (tree)
Time2019-09-15 02:12:46
Authorderekwildstar

Log Message

- Mais documentação a ser revisada antes de continuar o desenvolvimento

Change Summary

Incremental Difference

--- trunk/src/lib/UADS1115.pas (revision 29)
+++ trunk/src/lib/UADS1115.pas (revision 30)
@@ -1,6 +1,59 @@
11 unit UADS1115;
22 {:< Esta unit contém todas as entidades necessárias que permitem o acesso
3-simplificado ao ADS1115}
3+simplificado ao ADS1115
4+
5+ Ao escrever
6+
7+ byte 1 = endereço **
8+ byte 2 = pointer
9+ byte 3 = MSB a escrever no registrador indicado no pointer *
10+ byte 4 = LSB a escrever no registrador indicado no pointer *
11+
12+ ** não é necessário, o RPI já envia o endereço automaticamente
13+ * é opcional e depende do registrador que se deseja escrever
14+
15+
16+
17+
18+ Ao ler, simplesmente leia. O valor a ser lido é o valor do ultimo registrador
19+ selecinado com uma operação de escrita no registrador POINTER
20+
21+
22+1. O registro POINTER só pode ser escrito, logo, seu status é guardado em um
23+ campo privado da classe tão logo ele for alterado (escrito) a fim de evitar
24+ operações de escrita desnecessárias para mudança do registro apontado. Este
25+ registrador mantém seu estado entre as operações
26+
27+2. Operações de leitura lêem diretamente o registrador que foi selecionado
28+ anteriormente no registrador POINTER.
29+
30+3. Para ler um dos dois registradores legíveis (CONVERSION E CONFIG), primeiro
31+ use uma operação de escrita para escrever no registrador POINTER o valor que
32+ corresponde ao registrador a ser lido. Esta etapa não precisa ser realizada
33+ caso o registrador POINTER já tenha sido configurado para apontar para o
34+ registrador a ser lido em uma operação anterior.
35+
36+ Em uma segunda operação, agora de leitura, leia o registrador desejado.
37+
38+4. Para escrever nos registradores escrevíveis (POINTER e CONFIG) a operação
39+ precisa ser feita de uma só vez, levando em conta a ordem da informação que o
40+ ADS espera receber. Veja a seção "Ao escrever" mostrada anteriormente. O ADS
41+ espera receber um máximo de 4 bytes e um mínimo de 2 bytes. Os dois bytes
42+ obrigatórios são o byte 1 que define o endereço com a operação de gravação e
43+ o byte 2 que escreve no registrador POINTER. Os bytes opcionais são os bytes
44+ 3 e 4. Ao se gravar o registrador POINTER, são necessários apens 2 bytes. Ao
45+ se gravar no registrador CONFIG são necessários de 3 a 4 bytes: 2 bytes
46+ obrigatórios (endereço + pointer) e os 2 bytes (16 bits) referentes aos
47+ valores contidos no registrador CONFIG. O terceiro byte (primeiro opcional)
48+ recebe o MSB do registrador config. O quarto byte (segundo opcional) recebe o
49+ LSB do registrsdor config.
50+
51+ MSB = most significant byte
52+ LSB = less significant byte
53+
54+
55+
56+}
457 {$mode objfpc}{$H+}
558
659 interface
@@ -10,7 +63,7 @@
1063
1164 type
1265 //: Esta enumeração representa os possíveis ganhos programáveis do ADS1115
13- TADS1115ProgramableGainAplifier = (apgaTwoThirds,apga1,apga2,apga4,apga8,apga16);
66+ TProgramableGainAplifier = (pgaTwoThirds,pga1,pga2,pga4,pga8,pga16);
1467 //: Esta enumeração representa as possíveis taxas de transferência de dados
1568 //: que o ADS1115 suporta
1669 TADS1115DataRate = (adr8SPS,adr16SPS,adr32SPS,adr64SPS,adr128SPS,adr250SPS,adr475SPS,adr860SPS);
@@ -163,7 +216,7 @@
163216 //: @Param(AOperationalStatus Leia @Link(OperationalStatus))
164217 //: @Returns(Valor completo que pode ser usado com a função
165218 //: @Link(SetConfigRegister) para configurar de uma só vez o ADS1115)
166- function AssembleConfigRegister(AComparatorQueue: TADS1115ComparatorQueue; AComparatorLatching: TADS1115ComparatorLatching; AComparatorPolarity: TADS1115ComparatorPolarity; AComparatorMode: TADS1115ComparatorMode; ADataRate: TADS1115DataRate; AMode: TADS1115Mode; AProgramableGainAplifier: TADS1115ProgramableGainAplifier; AInputMultiplexer: TADS1115InputMultiplexer; AOperationalStatus: Boolean): UInt16;
219+ function AssembleConfigRegister(AComparatorQueue: TADS1115ComparatorQueue; AComparatorLatching: TADS1115ComparatorLatching; AComparatorPolarity: TADS1115ComparatorPolarity; AComparatorMode: TADS1115ComparatorMode; ADataRate: TADS1115DataRate; AMode: TADS1115Mode; AProgramableGainAplifier: TProgramableGainAplifier; AInputMultiplexer: TADS1115InputMultiplexer; AOperationalStatus: Boolean): UInt16;
167220
168221 function GetComparatorQueue: TADS1115ComparatorQueue;
169222 function GetComparatorLatching: TADS1115ComparatorLatching;
@@ -171,24 +224,10 @@
171224 function GetComparatorMode: TADS1115ComparatorMode;
172225 function GetDataRate: TADS1115DataRate;
173226 function GetMode: TADS1115Mode;
174- function GetGainAplifier: TADS1115ProgramableGainAplifier;
227+ function GetGainAplifier: TProgramableGainAplifier;
175228 function GetInputMultiplexer: TADS1115InputMultiplexer;
176229 function GetWorking: Boolean;
177-// function GetConversionValue(AInputMultiplexer: TADS1115InputMultiplexer): SmallInt;
178230
179- //é interessante ter uma propriedade para configurar o mux porque isso evita
180- //de se ter uma operação de gravação sempre que se for ler um valor analogico
181- //a forma de fazer será, configura-se sempre o mux correto e obtém o valor
182- //correspondente. não se pode usar essa biblioteca em threads sem tomar cuidado
183- //
184- //Nãosei como proceder :( estou sem ideias. Gravar o mux antes de ler, garante integriade, mas é uma operaçao de escrita a mais
185- //Não gravar o mux, evita uma escrita, mas a integridade fica comprometida :(
186-
187- //function GetAIn0: SmallInt;
188- //function GetAIn1: SmallInt;
189- //function GetAIn2: SmallInt;
190- //function GetAIn3: SmallInt;
191-
192231 procedure SetComparatorQueue(AComparatorQueue: TADS1115ComparatorQueue);
193232 procedure SetComparatorLatching(ALatchingComparator: TADS1115ComparatorLatching);
194233 procedure SetComparatorPolarity(AComparatorPolarity: TADS1115ComparatorPolarity);
@@ -195,7 +234,7 @@
195234 procedure SetComparatorMode(AComparatorMode: TADS1115ComparatorMode);
196235 procedure SetDataRate(ADataRate: TADS1115DataRate);
197236 procedure SetMode(AMode: TADS1115Mode);
198- procedure SetGainAplifier(AGainAmplifier: TADS1115ProgramableGainAplifier);
237+ procedure SetGainAplifier(AGainAmplifier: TProgramableGainAplifier);
199238 procedure SetInputMultiplexer(AInputMultiplexer: TADS1115InputMultiplexer);
200239 public
201240 constructor Create(AI2CController: TPRI2CController; ASlaveAddress: TPRI2CSlaveAddress); reintroduce;
@@ -208,7 +247,7 @@
208247 //: @Returns(A função retornará um valor entre -32768 e +32767 que
209248 //: corresponde ao valor lido a partir do registrador CONVERSION)
210249 function ConversionValue: SmallInt; overload;
211- function ConversionValue(AComparatorQueue: TADS1115ComparatorQueue; AComparatorLatching: TADS1115ComparatorLatching; AComparatorPolarity: TADS1115ComparatorPolarity; AComparatorMode: TADS1115ComparatorMode; ADataRate: TADS1115DataRate; AProgramableGainAplifier: TADS1115ProgramableGainAplifier; AInputMultiplexer: TADS1115InputMultiplexer): SmallInt; overload;
250+ function ConversionValue(AComparatorQueue: TADS1115ComparatorQueue; AComparatorLatching: TADS1115ComparatorLatching; AComparatorPolarity: TADS1115ComparatorPolarity; AComparatorMode: TADS1115ComparatorMode; ADataRate: TADS1115DataRate; AProgramableGainAplifier: TProgramableGainAplifier; AInputMultiplexer: TADS1115InputMultiplexer): SmallInt; overload;
212251
213252 property ComparatorQueue: TADS1115ComparatorQueue read GetComparatorQueue write SetComparatorQueue;
214253 property ComparatorLatching: TADS1115ComparatorLatching read GetComparatorLatching write SetComparatorLatching;
@@ -216,16 +255,9 @@
216255 property ComparatorMode: TADS1115ComparatorMode read GetComparatorMode write SetComparatorMode;
217256 property DataRate: TADS1115DataRate read GetDataRate write SetDataRate;
218257 property Mode: TADS1115Mode read GetMode write SetMode;
219- property GainAplifier: TADS1115ProgramableGainAplifier read GetGainAplifier write SetGainAplifier;
258+ property GainAplifier: TProgramableGainAplifier read GetGainAplifier write SetGainAplifier;
220259 property InputMultiplexer: TADS1115InputMultiplexer read GetInputMultiplexer write SetInputMultiplexer;
221260 property Working: Boolean read GetWorking;
222- //property SingleShotConversionValue[AInputMultiplexer: TADS1115InputMultiplexer]: SmallInt read GetConversionValue;
223-
224- { -37768 até 32767}
225- //property AIn0: SmallInt read GetAIn0;
226- //property AIn1: SmallInt read GetAIn1;
227- //property AIn2: SmallInt read GetAIn2;
228- //property AIn3: SmallInt read GetAIn3;
229261 end;
230262
231263 EADS1115 = class(EPasRipherals);
@@ -250,59 +282,6 @@
250282 CONFIG_MUX = 12; CONFIG_MUX_SIZE = 3;
251283 CONFIG_OS = 15; CONFIG_OS_SIZE = 1;
252284
253-
254-{
255- Ao escrever
256-
257- byte 1 = endereço **
258- byte 2 = pointer
259- byte 3 = MSB a escrever no registrador indicado no pointer *
260- byte 4 = LSB a escrever no registrador indicado no pointer *
261-
262- ** não é necessário, o RPI já envia o endereço automaticamente
263- * é opcional e depende do registrador que se deseja escrever
264-
265-
266-
267-
268- Ao ler, simplesmente leia. O valor a ser lido é o valor do ultimo registrador
269- selecinado com uma operação de escrita no registrador POINTER
270-
271-
272-1. O registro POINTER só pode ser escrito, logo, seu status é guardado em um
273- campo privado da classe tão logo ele for alterado (escrito) a fim de evitar
274- operações de escrita desnecessárias para mudança do registro apontado. Este
275- registrador mantém seu estado entre as operações
276-
277-2. Operações de leitura lêem diretamente o registrador que foi selecionado
278- anteriormente no registrador POINTER.
279-
280-3. Para ler um dos dois registradores legíveis (CONVERSION E CONFIG), primeiro
281- use uma operação de escrita para escrever no registrador POINTER o valor que
282- corresponde ao registrador a ser lido. Esta etapa não precisa ser realizada
283- caso o registrador POINTER já tenha sido configurado para apontar para o
284- registrador a ser lido em uma operação anterior.
285-
286- Em uma segunda operação, agora de leitura, leia o registrador desejado.
287-
288-4. Para escrever nos registradores escrevíveis (POINTER e CONFIG) a operação
289- precisa ser feita de uma só vez, levando em conta a ordem da informação que o
290- ADS espera receber. Veja a seção "Ao escrever" mostrada anteriormente. O ADS
291- espera receber um máximo de 4 bytes e um mínimo de 2 bytes. Os dois bytes
292- obrigatórios são o byte 1 que define o endereço com a operação de gravação e
293- o byte 2 que escreve no registrador POINTER. Os bytes opcionais são os bytes
294- 3 e 4. Ao se gravar o registrador POINTER, são necessários apens 2 bytes. Ao
295- se gravar no registrador CONFIG são necessários de 3 a 4 bytes: 2 bytes
296- obrigatórios (endereço + pointer) e os 2 bytes (16 bits) referentes aos
297- valores contidos no registrador CONFIG. O terceiro byte (primeiro opcional)
298- recebe o MSB do registrador config. O quarto byte (segundo opcional) recebe o
299- LSB do registrsdor config.
300-
301- MSB = most significant byte
302- LSB = less significant byte
303-
304-}
305-
306285 procedure TADS1115.SelectRegister(ARegister: TADS1115Register);
307286 begin
308287 if not (ARegister in [FSelectedRegister,arUnknown]) then
@@ -396,7 +375,7 @@
396375 I2C[FI2CController,FSlaveAddress].Read16Bits(Result,'Erro ao ler o registrador de conversão',True);
397376 end;
398377
399-function TADS1115.AssembleConfigRegister(AComparatorQueue: TADS1115ComparatorQueue; AComparatorLatching: TADS1115ComparatorLatching; AComparatorPolarity: TADS1115ComparatorPolarity; AComparatorMode: TADS1115ComparatorMode; ADataRate: TADS1115DataRate; AMode: TADS1115Mode; AProgramableGainAplifier: TADS1115ProgramableGainAplifier; AInputMultiplexer: TADS1115InputMultiplexer; AOperationalStatus: Boolean): UInt16;
378+function TADS1115.AssembleConfigRegister(AComparatorQueue: TADS1115ComparatorQueue; AComparatorLatching: TADS1115ComparatorLatching; AComparatorPolarity: TADS1115ComparatorPolarity; AComparatorMode: TADS1115ComparatorMode; ADataRate: TADS1115DataRate; AMode: TADS1115Mode; AProgramableGainAplifier: TProgramableGainAplifier; AInputMultiplexer: TADS1115InputMultiplexer; AOperationalStatus: Boolean): UInt16;
400379 begin
401380 Result := UInt8(AOperationalStatus) shl CONFIG_OS
402381 or UInt8(AInputMultiplexer) shl CONFIG_MUX
@@ -409,7 +388,7 @@
409388 or UInt8(AComparatorQueue) shl CONFIG_COMP_QUE;
410389 end;
411390
412-function TADS1115.GetGainAplifier: TADS1115ProgramableGainAplifier;
391+function TADS1115.GetGainAplifier: TProgramableGainAplifier;
413392 var
414393 Value: Byte;
415394 begin
@@ -419,9 +398,9 @@
419398 // mesmo ganho, os outros são diferentes entre si e podem ser obtidos a partir
420399 // de um cast direto
421400 if Value > 4 then
422- Result := apga16
401+ Result := pga16
423402 else
424- Result := TADS1115ProgramableGainAplifier(Value);
403+ Result := TProgramableGainAplifier(Value);
425404 end;
426405
427406 function TADS1115.GetInputMultiplexer: TADS1115InputMultiplexer;
@@ -524,7 +503,7 @@
524503 //
525504 //end;
526505
527-procedure TADS1115.SetGainAplifier(AGainAmplifier: TADS1115ProgramableGainAplifier);
506+procedure TADS1115.SetGainAplifier(AGainAmplifier: TProgramableGainAplifier);
528507 begin
529508 SetConfigField(CONFIG_PGA,CONFIG_PGA_SIZE,UInt8(AGainAmplifier));
530509 end;
@@ -586,7 +565,7 @@
586565 Result := GetConversionRegister;
587566 end;
588567
589-function TADS1115.ConversionValue(AComparatorQueue: TADS1115ComparatorQueue; AComparatorLatching: TADS1115ComparatorLatching; AComparatorPolarity: TADS1115ComparatorPolarity; AComparatorMode: TADS1115ComparatorMode; ADataRate: TADS1115DataRate; AProgramableGainAplifier: TADS1115ProgramableGainAplifier; AInputMultiplexer: TADS1115InputMultiplexer): SmallInt;
568+function TADS1115.ConversionValue(AComparatorQueue: TADS1115ComparatorQueue; AComparatorLatching: TADS1115ComparatorLatching; AComparatorPolarity: TADS1115ComparatorPolarity; AComparatorMode: TADS1115ComparatorMode; ADataRate: TADS1115DataRate; AProgramableGainAplifier: TProgramableGainAplifier; AInputMultiplexer: TADS1115InputMultiplexer): SmallInt;
590569 begin
591570 if GetMode = amContinuous then
592571 raise EADS1115.Create('Esta função é projetada para ser usada no modo "single-shot" mas o modo atual é "contínuo". Por favor use a outra versão desta função ou altere o modo');
Show on old repository browser