View previous topic :: View next topic |
Author |
Message |
avaumbn
Joined: 02 Jul 2022 Posts: 4
|
Unknown include header files |
Posted: Sat Jul 02, 2022 6:11 am |
|
|
In PIC CCS compiler, does it have a header file like this?
#include <regulator_ccs.h> |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sat Jul 02, 2022 6:48 am |
|
|
You probably got that from here, which you should have said:
https://www.scirp.org/pdf/cs_2018021115384766.pdf
The regulator_ccs.h file is created by the CCS IDE. Based on the schematic
on page 9 of the pdf, they are probably using a 455 KHz resonator.
I'm going to ignore that and put in statements for a 4 MHz crystal below.
The following code will work as the regulator_ccs.h file
Code: | #include <16F877A.h>
#fuses XT, PUT, BROWNOUT, NOWDT, NOLVP
#use delay(clock=4MHz)
|
Using that header, I was able to get the code in the pdf to compile.
However, I had to fix several typos. Example:
Currentt_bat should be Current_bat, etc. |
|
|
avaumbn
Joined: 02 Jul 2022 Posts: 4
|
issues by simulation |
Posted: Mon Jul 04, 2022 7:25 am |
|
|
You are very right.
I also fixed it but only two of the four ADC channels there are working, i.e. IPV and UPV both.
Others show that Ibat and Ubat are at a certain level
(Ubat =13.6 and Ibat =26.1) and cannot deviate from the 10k pot.
I have tried simulating it in Proteus. Everything else is showing well.
Do you have something to say?
Thanks for reply Sir |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Jul 04, 2022 4:39 pm |
|
|
I assume you're using a 16F877A as shown in his schematic on page 9.
https://www.scirp.org/pdf/cs_2018021115384766.pdf
Ubat is measured on pin AN2 (RA2). His circuit looks really weird.
He has the V1 12v battery in the lower right quadrant. It feeds a voltage
divider made from 10Meg resistors that reduce the voltage to 2v. It puts
the 12v through five 10Meg resistors. So the input impedance to the PIC
is 50 MegOhms. He does the same thing with the uPV voltage.
This is a bad design. The maximum recommended input impedance to the
A/D in the PIC is 2.5K ohms, not 50 Meg.
See the parameter A30 on page 194 of the 16F877A data sheet:
https://ww1.microchip.com/downloads/aemDocuments/documents/MCU08/ProductDocuments/DataSheets/39582C.pdf
------------------------------------
He displays Voltage_bat as Ubat in the DisplayFormat() function on pg. 15:
Code: |
lcd_gotoxy(1,2);
printf(lcd_putc, "Ubat = %f V", Voltage_bat);
|
He's got serious problems in the following code which reads the ADC
to get and calculate Voltage_bat. He reads the voltage on the AN2 input
but then it never gets saved after the math, because of a typo.
Then he over-writes it again in the ADC ch. 3 section by mistake.
This is crap code.
Quote: |
void Mesure(void)
{
set_adc_channel(2);
Delay_ms(10);
Voltage_bat = read_adc();
Delay_ms(10);
Vomtage_bat = (Voltage_bat/1023)*5*6; // *** Typo
set_adc_channel(0);
Delay_ms(10);
Voltage_pv = read_adc();
Delay_ms(10);
Voltage_pv = (Voltage_pv/1023)*5*4;
// The following block of code is wrong. He is re-reading the ADC and
// putting the result into Voltage_bat. He really meant to put it into
// Current_bat.
set_adc_channel(3);
Delay_ms(10);
Voltage_bat = read_adc(); // Over-writes Voltage_bat by mistake
Delay_ms(10);
Currentt_bat = (Currentt_bat/1023)*5; // *** Typos
Currentt_bat = 10*Currentt_bat-25; // *** Typos
set_adc_channel(1);
Delay_ms(10);
Current_pv = read_adc();
Delay_ms(10);
Currentt_pv = (Currentt_pv/1023)*5; // *** Typo
Currentt_pv = 10*Currentt_pv-25; // *** Typo
set_adc_channel(4);
Delay_ms(10);
Temperature = read_adc();
Delay_ms(10);
Temperature = (Temperature/1023)*5;
Temperature = Temperature*12.5;
Voltage_absorption = (14.5-0.03*(Temperature-25))*choice_bat;
Voltage_float = (13.6-0.03*(Temperature-25))*choice_bat;
Current_ch = Current_pv - Current_bat;
} |
My opinion is this is fake project designed to schmooze his instructor.
It can't work. I advise you don't try to use it. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19520
|
|
Posted: Tue Jul 05, 2022 6:13 am |
|
|
Ouch...
As a further comment on the input impedance. The data sheet also gives
the internal leakage current of the ADC as +/-500nA. So can be anywhere
over this range. The impedance of the divider is 'only' 5MR (the pull down
resistor is effectively in parallel with the ones feeding this), but still at
500nA, this gives a voltage from the leakage of 2.5v!...
So the result is never going to be even remotely accurate. Almost wonder
(assuming the circuit ever was built), if the resistors were actually in Kohms,
rather the Mohms, and the circuit was a misprint. |
|
|
avaumbn
Joined: 02 Jul 2022 Posts: 4
|
solved |
Posted: Tue Jul 05, 2022 11:41 am |
|
|
But after some tweaking the software section is working properly,
let's see if the hardware switching section will work. Like you said
it looks like a project made to exploit someone.
But the concept is good.
Thanks for your valuable reply. |
|
|
avaumbn
Joined: 02 Jul 2022 Posts: 4
|
|
Posted: Thu Jul 07, 2022 9:03 am |
|
|
Ttelmah wrote: | Ouch...
As a further comment on the input impedance. The data sheet also gives
the internal leakage current of the ADC as +/-500nA. So can be anywhere
over this range. The impedance of the divider is 'only' 5MR (the pull down
resistor is effectively in parallel with the ones feeding this), but still at
500nA, this gives a voltage from the leakage of 2.5v!...
So the result is never going to be even remotely accurate. Almost wonder
(assuming the circuit ever was built), if the resistors were actually in Kohms,
rather the Mohms, and the circuit was a misprint. |
"The main difference between Resistance and Impedance is that resistance opposes the flow of DC & AC current whereas Impedance only opposes the flow of AC current. Impedance is having meaning only in AC circuit. It does not have any meaning in DC circuit." |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19520
|
|
Posted: Thu Jul 07, 2022 10:32 am |
|
|
\yes, which is why in terms of impeance the resistors forming the upper
part of the potential divider are in parallel with the one forming the lower
part. So the source impedance is not the 50MR that PCM quotes.
Still hundreds of times what is required, but not quite as bad.
Now the data sheet calla s the leakage DC, but in fact it is modulated DC,
so for the AC part of this signal you have to use the impedance as opposed
to the DC resiatance. It modulates through the ADC sampling cycle and
as the processor performs other operations. |
|
|
|