• AVR Freaks

Helpful ReplyHot!PIC24FJ64GB002 as USB Host and UART

Page: < 123 > Showing page 2 of 3
Author
NIMIT VACHHANI
Starting Member
  • Total Posts : 83
  • Reward points : 0
  • Joined: 2015/02/19 21:52:01
  • Location: 0
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/10 03:07:51 (permalink)
0
Hello Everybody,
Up till now all is going the way it should. Thanks for your valuable guidance. I have configured 2 UART and configured RTCC. The RTCC values are written but the values are lost as soon as i power off the micro controller i.e.PIC24FJ64GB002. Yes Susan i am using 28 pin dip package. I have used FRC for the controller and also for RTCC. I now want to connect 12Mhz (I have 12Mhz crystal available with me, where as other is 4.597Mhz which is not recommended for PIC24) crystal on pin 9 and 10 so that i can use it as the primary oscillator and other 32.768KHz oscillator on pin 11 and 12 to use it as secondary oscillator for RTCC. Can anyone please guide me why i am loosing the RTCC value on power off ?
#21
jack@kksound
code tags!
  • Total Posts : 3227
  • Reward points : 0
  • Joined: 2014/05/14 10:03:19
  • Location: 0
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/10 13:30:30 (permalink)
0
I believe the RTCC uses volatile registers which are not preserved without power applied to the MCU. They are preserved (indeed the RTCC operates) in sleep modes (even "Deep Sleep").
#22
Aussie Susan
Super Member
  • Total Posts : 3807
  • Reward points : 0
  • Joined: 2008/08/18 22:20:40
  • Location: Melbourne, Australia
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/10 19:48:00 (permalink)
3 (1)
There is nothing in that PIC24 that retains anything over a power cycle except the program memory, and you really don;t want ot go playing with that for these purposes.
If, when you power up, you try to read some previously saved time value, then it will reset the RTCC to the time of the last power down- which is probably not what you want at all. (If it were, then you are not needing to know the wall clock time but rather some time interval and there are better ways of doing that.)
You can use an externally powered RTC chip but in that case you might as well use that all of the time (assuming it can give you the interrupts or whatever else you need).
For my device, I have a network (WiFi) link and once the network is up, I use the NTP protocol to get the current date/time (which I adjust for my timezone and daylight saving setting) and set the RTCC from that.
You can keep the RTCC running in some of the low power modes as Jack has suggested. However this requires that you always have some power available to the MCU which generally means that it has to be designed into your device form the start.
It all comes down to your specific circumstances and design considerations.
Susan
#23
NIMIT VACHHANI
Starting Member
  • Total Posts : 83
  • Reward points : 0
  • Joined: 2015/02/19 21:52:01
  • Location: 0
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/11 04:02:38 (permalink)
0
Thanks for the info. After reading through it i have decided to go with DS1307 interfaced with my PIC24FJ64GB002. I have now used external 12Mhz crystal on pin 9 and pin 10. My config2 section is as below. I am using xc16 compiler and mplabx ---

#pragma config POSCMOD = HS // Primary Oscillator Select (HS Oscillator mode selected)
#pragma config I2C1SEL = PRI // I2C1 Pin Select bit (Use default SCL1/SDA1 pins for I2C1 )
#pragma config IOL1WAY = OFF // IOLOCK One-Way Set Enable (The IOLOCK bit can be set and cleared using the unlock sequence)
#pragma config OSCIOFNC = ON // OSCO Pin Configuration (OSCO pin functions as port I/O (RA3))
#pragma config FCKSM = CSDCMD // Clock Switching and Fail-Safe Clock Monitor (Sw Disabled, Mon Disabled)
#pragma config FNOSC = PRI // Initial Oscillator Select (Primary Oscillator (XT, HS, EC))
#pragma config PLL96MHZ = ON // 96MHz PLL Startup Select (96 MHz PLL Startup is enabled automatically on start-up)
#pragma config PLLDIV = DIV3 // USB 96 MHz PLL Prescaler Select (Oscillator input divided by 3 (12 MHz input))
#pragma config IESO = ON // Internal External Switchover (IESO mode (Two-Speed Start-up) enabled)

 
I have used
UxBRG = 25;
for 9600 Baud. I think i have given wrong value or may be i am doing something wrong in my config2 section. Please guide me. My uart communication is not working properly.
#24
Aussie Susan
Super Member
  • Total Posts : 3807
  • Reward points : 0
  • Joined: 2008/08/18 22:20:40
  • Location: Melbourne, Australia
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/11 20:55:23 (permalink) ☄ Helpfulby NIMIT VACHHANI 2015/03/11 21:28:26
3 (1)
Are you sure about the spelling of POSCMOD - I think it should be POSCMD.
Also, with POSCMD set to HS (or 0b10) then the OSCIOFNC setting is ignored. HOWEVER, if you are using a crystal then you should NOT be setting the OSCO pin as a data pin; it must be used for the crystal oscillator.
Look at Figure 8-1 in the data sheet and you will see that your setting of "FNOSC=PRI", and assuming that you are not altering this in your code (which you have not shown) then the other PLL settings are irrelevant as far as the CPU clock is concerned (also assuming that the DOZEN = 0 as a power on default).
If you look at the notes in Equation 17-1, you will see that the Fcy figure you need to use is Fosc/2. Therefore you are dealing with 12MHz/2 = 6MHz as Fcy.
Now, also assuming that BRGH = 0 (again the power on default and you have not shown any code that would alter this) then you need to apply Equation 17-1.
Doing that I come up with 38.06 which means UxBRG should be 38.
(Note that I have used UxBRG because I don't know which UART peripheral you are using. However I hope that you are NOT using the code you quoted last in your post as  doubt if the compiler would accept that.
Susan
 
#25
govind_mukundan
Super Member
  • Total Posts : 188
  • Reward points : 0
  • Joined: 2009/05/12 23:50:07
  • Location: singapore/india
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/11 21:09:50 (permalink)
0
Just an FYI the newer XLP PIC24 parts do have an internal RTC that can retain time across MCU power cycles. They have an additional pin called VBAT onto which you need to connect your RTC backup power source.
#26
NIMIT VACHHANI
Starting Member
  • Total Posts : 83
  • Reward points : 0
  • Joined: 2015/02/19 21:52:01
  • Location: 0
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/11 21:39:32 (permalink)
0
Greetings to all.
Well Susan ur correct i should be using 38 for 9600 baud which i have tried out and is working now. Well its is POSCMOD when i am configuring the bits in MPLABX configuration bits window. Neways i was setting the wrong value for UxBRG. 
 
Govind my PIC24FJ64GB002 dosen't have Vbatt pin so i am dropping the plan to use internal RTCC and working to connect DS1307 to my micro controller. I have used DS1307 with raspberry pi but the problem is i have used python to communicate with DS1307. I also need to setup I2C bus first before i can use it.
 
I have used
#pragma config PLLDIV = DIV3  
so what will be my Fcy ? According to me i assume it to be 12Mhz / 2 = 6Mhz, so it becomes difficult for me to set clock rates for I2C bus. As per equation 16-1 I2C1BRG comes out to be 13. Is it the valid value or i am going wrong somewhere else ?
#27
govind_mukundan
Super Member
  • Total Posts : 188
  • Reward points : 0
  • Joined: 2009/05/12 23:50:07
  • Location: singapore/india
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/12 01:24:53 (permalink)
4 (1)
Oh my apologies, I just noticed that you have an XLP part too and no Vbat. I had assumed that all XLP's probably had the Vbat option since the part I'm using has it (PIC24FJ128GC006). Anyway the external RTCs are always a good choice.
Your I2C calculation looks OK to me for 400k operation and a system clock of 12MHz (i.e. not using the PLL). But if you plan to use the PLL then you can get the system clock to go up to 32M Hz via the following configuration -
 
12M Crystal -----> PLLDIV = 3 ----> 4M Hz ---> (*24x) PLL ----> 96 MHz ---> CPDIV<1:0> = 00b ---> 32 MHz system clock ----> 16M Hz peripheral clock (Fcy)
 
If you are not generating the system clock via the PLL branch (as you are doing now) PLLDIV does not affect FCY. It will only be used to generate the clock for the USB module.
post edited by govind_mukundan - 2015/03/12 01:39:58
#28
NIMIT VACHHANI
Starting Member
  • Total Posts : 83
  • Reward points : 0
  • Joined: 2015/02/19 21:52:01
  • Location: 0
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/12 03:51:53 (permalink)
0
Hey Govind,
Thanks for the info. I am totally screwed up on I2C communication. My UART part is working perfectly. My intention for now is to communicate with DS1307 via I2C1 and put date and time value on UART2. Well i am screwed up in I2C part. I am attaching my C code. It has all the configuration bits. 
 
Please somebody have a look at it and guide me :(.
#29
govind_mukundan
Super Member
  • Total Posts : 188
  • Reward points : 0
  • Joined: 2009/05/12 23:50:07
  • Location: singapore/india
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/12 19:46:18 (permalink)
4 (1)
You should keep the PLLDIV as 3, that's the correct value for your 12MHz crystal to generate the proper USB clock. For the I2C code, I have an open source driver here and a short article on how to use it here. Have a look at it, the code on GitHub is the latest, haven't had the time to update the article to reflect the changes yet.
#30
NIMIT VACHHANI
Starting Member
  • Total Posts : 83
  • Reward points : 0
  • Joined: 2015/02/19 21:52:01
  • Location: 0
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/12 21:31:09 (permalink)
0
Hey Govind,
As per your above advice my Fcy is 16MHz, so for my baud rate of 9600 UxBRG should be (16Mhz/(16*9600))-1 = 103. This creates problem in UART communication where as if i take my Fcy as 6Mhz, i get Uxbrg value of 38 and in this condition my uart communication works properly. My BRGH = 0. I think i am not able to understand Instruction clock cycle and peripheral clock.
#31
govind_mukundan
Super Member
  • Total Posts : 188
  • Reward points : 0
  • Joined: 2009/05/12 23:50:07
  • Location: singapore/india
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/12 22:39:20 (permalink)
0
Sorry I think I have confused you. Your Fcy of 6MHz is correct as per your configuration in the "Greetings to all" post. What I mentioned is that, if you want, you can change this to 16Mhz by using the PLL. But to use the PLL you need to do some other settings. So maybe you can ignore that for now, just use the current settings with Fcy of 6M and get the I2C to work. Later you can play around with the clock settings if you want.
 
The relation between the Instruction Clock (Fcy) and System clock on PIC24 is that Fcy = System Clock / 2 always. But you have a lot of flexibility in selecting the System Clock source and frequency. Currently your setting is such that the System Clock is the same frequency as your external crystal (12MHz), but there are other options possible too.
post edited by govind_mukundan - 2015/03/12 22:42:27
#32
NIMIT VACHHANI
Starting Member
  • Total Posts : 83
  • Reward points : 0
  • Joined: 2015/02/19 21:52:01
  • Location: 0
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/12 23:38:04 (permalink)
0
I have done following code for i2c communication with DS-1307

// CONFIG4
#pragma config DSWDTPS = DSWDTPS3 // DSWDT Postscale Select (1:128 (132 ms))
#pragma config DSWDTOSC = LPRC // Deep Sleep Watchdog Timer Oscillator Select (DSWDT uses Low Power RC Oscillator (LPRC))
#pragma config RTCOSC = LPRC // RTCC Reference Oscillator Select (RTCC uses Low Power RC Oscillator (LPRC))
#pragma config DSBOREN = OFF // Deep Sleep BOR Enable bit (BOR disabled in Deep Sleep)
#pragma config DSWDTEN = OFF // Deep Sleep Watchdog Timer (DSWDT disabled)
// CONFIG3
#pragma config WPFP = WPFP0 // Write Protection Flash Page Segment Boundary (Page 0 (0x0))
#pragma config SOSCSEL = SOSC // Secondary Oscillator Pin Mode Select (SOSC pins in Default (high drive-strength) Oscillator Mode)
#pragma config WUTSEL = LEG // Voltage Regulator Wake-up Time Select (Default regulator start-up time used)
#pragma config WPDIS = WPDIS // Segment Write Protection Disable (Segmented code protection disabled)
#pragma config WPCFG = WPCFGDIS // Write Protect Configuration Page Select (Last page and Flash Configuration words are unprotected)
#pragma config WPEND = WPENDMEM // Segment Write Protection End Page Select (Write Protect from WPFP to the last page of memory)
// CONFIG2
#pragma config POSCMOD = HS // Primary Oscillator Select (HS Oscillator mode selected)
#pragma config I2C1SEL = PRI // I2C1 Pin Select bit (Use default SCL1/SDA1 pins for I2C1 )
#pragma config IOL1WAY = OFF // IOLOCK One-Way Set Enable (The IOLOCK bit can be set and cleared using the unlock sequence)
#pragma config OSCIOFNC = OFF // OSCO Pin Configuration (OSCO pin functions as port I/O (RA3))
#pragma config FCKSM = CSDCMD // Clock Switching and Fail-Safe Clock Monitor (Sw Disabled, Mon Disabled)
#pragma config FNOSC = PRI // Initial Oscillator Select (Primary Oscillator (XT, HS, EC))
#pragma config PLL96MHZ = ON // 96MHz PLL Startup Select (96 MHz PLL Startup is enabled automatically on start-up)
#pragma config PLLDIV = DIV3 // USB 96 MHz PLL Prescaler Select (Oscillator input divided by 3 (12 MHz input))
#pragma config IESO = OFF // Internal External Switchover (IESO mode (Two-Speed Start-up) not enabled)
// CONFIG1
#pragma config WDTPS = PS32768 // Watchdog Timer Postscaler (1:32,768)
#pragma config FWPSA = PR128 // WDT Prescaler (Prescaler ratio of 1:128)
#pragma config WINDIS = OFF // Windowed WDT (Standard Watchdog Timer enabled,(Windowed-mode is disabled))
#pragma config FWDTEN = OFF // Watchdog Timer (Watchdog Timer is disabled)
#pragma config ICS = PGx2 // Emulator Pin Placement Select bits (Emulator functions are shared with PGEC2/PGED2)
#pragma config GWRP = OFF // General Segment Write Protect (Writes to program memory are allowed)
#pragma config GCP = OFF // General Segment Code Protect (Code protection is disabled)
#pragma config JTAGEN = OFF
#define GetSystemClock() (120000000ul) // Hz
#define GetInstructionClock() (GetSystemClock()/2)
#define GetPeripheralClock() GetInstructionClock()
#define Fosc (GetSystemClock())
#define Fcy (Fosc/2)
#define Fsck 100000
#define I2C_BRG ((GetPeripheralClock()/(2*Fsck))-1)
int main()
{
unsigned int i = 0;

IOInit();
UART1Init();
UART2Init();
get_seconds();
while(1)
{
if (uart1_rx_complete == 1)
{
for(i=0;i < send_index + 1 ;i++)
{
U2TXREG = buf[i];
while ( !U2STAbits.TRMT );
}
buff_index = 0;
uart1_rx_complete =0;
}
else if (uart2_rx_complete == 1)
{
if((buf2[0]=='D' || buf2[0]=='d') && buf2[1] =='?')
{
put_char_on_uart2('[');
get_seconds();
put_char_on_uart2(i2c_read);
put_char_on_uart2(']');
}
else if((buf2[0]=='W' || buf2[0]=='w') && buf2[1]=='=')
{
//Routine to write date & time to DS1307
put_char_on_uart2('0');
}

buff_index2 = 0;
uart2_rx_complete = 0;
}
};
return 0;
}
void get_seconds()
{
config1 = (I2C_ON | I2C_7BIT_ADD );
OpenI2C1(config1,I2C_BRG);
IdleI2C1();
StartI2C1();
while(I2C1CONbits.SEN ); //Wait till Start sequence is completed
MI2C1_Clear_Intr_Status_Bit; //Clear interrupt flag
MasterWriteI2C1(DS13070); //Write Slave address and set master for transmission. DS13070 = 0xD0.
while(I2C1STATbits.TBF); //Wait till address is transmitted
while(!IFS1bits.MI2C1IF); //Wait for ninth clock cycle
while(I2C1STATbits.ACKSTAT); //check for ACK from slave
MI2C1_Clear_Intr_Status_Bit;
MasterWriteI2C1(0x00);
while(I2C1STATbits.TBF); //Wait till address is transmitted
while(!IFS1bits.MI2C1IF); //Wait for ninth clock cycle
while(I2C1STATbits.ACKSTAT); //check for ACK from slave
MI2C1_Clear_Intr_Status_Bit;
IdleI2C1(); //wait for the I2C to be Idle
RestartI2C1();
MasterWriteI2C1(DS13071); //Write Slave address and set master for transmission. DS13071 = 0xD1.
while(I2C1STATbits.TBF); //Wait till address is transmitted
while(!IFS1bits.MI2C1IF); //Wait for ninth clock cycle
while(I2C1STATbits.ACKSTAT); //check for ACK from slave
MI2C1_Clear_Intr_Status_Bit;
i2c_read = MasterReadI2C1();
//MastergetsI2C1(1,&i2c_read,1000);
IdleI2C1(); //wait for the I2C to be Idle
StopI2C1(); //Terminate communication protocol with stop signal
while(I2C1CONbits.PEN); //Wait till stop sequence is completed
CloseI2C1(); //Disable I2C
}
My controller gets stuck at void get_seconds(), its not going further. Help Plz.
#33
NIMIT VACHHANI
Starting Member
  • Total Posts : 83
  • Reward points : 0
  • Joined: 2015/02/19 21:52:01
  • Location: 0
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/13 01:52:22 (permalink)
0
I have used 4.7k pull up resistors on SDA and SCL line and connected them to +5.0V.
#34
NIMIT VACHHANI
Starting Member
  • Total Posts : 83
  • Reward points : 0
  • Joined: 2015/02/19 21:52:01
  • Location: 0
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/13 03:21:46 (permalink)
0
Greetings Again,
Well after all the guidance, i have some progress in my I2C code.
My config2 bits are as

// CONFIG2
#pragma config POSCMOD = XT 
#pragma config I2C1SEL = PRI
#pragma config IOL1WAY = OFF 
#pragma config OSCIOFNC = OFF 
#pragma config FCKSM = CSDCMD 
#pragma config FNOSC = PRI 
#pragma config PLL96MHZ = ON 
#pragma config PLLDIV = DIV3 
#pragma config IESO = OFF 
Next is my i2c communication code with DS1307.

OpenI2C1( I2C_ON, I2C_BRG );
StartI2C1(); //Send the Start Bit
IdleI2C1(); //Wait to complete
MasterWriteI2C1(DS13070);
IdleI2C1(); //Wait to complete
if( I2C1STATbits.ACKSTAT );
MasterWriteI2C1(0x06);
IdleI2C1(); //Wait to complete
if( I2C1STATbits.ACKSTAT );
RestartI2C1();
i2c_wait(10);
IdleI2C1(); //Wait to complete
MasterWriteI2C1(DS13071);
IdleI2C1(); //Wait to complete
i2c_read = MasterReadI2C1();
StopI2C1();
IdleI2C1();
put_char_on_uart2(BCD2UpperCh(i2c_read));
put_char_on_uart2(BCD2LowerCh(i2c_read));
This code seems to work a little as it does not hang my system i.e. controller. Well for I2C_BRG i have done following calculation

#define Fosc (12000000)
#define Fcy (Fosc/2) // no PLL
#define Fsck 100000
#define I2C_BRG ((Fcy/2/Fsck)-1)
Previously i had put my 4.7k pullup resistors to +5.0V and now they are at +3.3V. All i seem to be getting is '?' char or in hex 0x3f. I am querying DS1307 with 0xd0 and sending address to read 0x06 i.e. i want to read year and then sending read command 0xd1 to read. I am always gettin 0x3f for all the address i am querrying  i.e. 0x00, 0x01,0x02,0x03,0x04,0x05,0x06. Any guidance will be helpful.
#35
govind_mukundan
Super Member
  • Total Posts : 188
  • Reward points : 0
  • Joined: 2009/05/12 23:50:07
  • Location: singapore/india
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/13 04:23:41 (permalink)
3 (1)
The DS1307 does not start counting time by itself, you need to clear the CH bit first. Maybe you can try to do that and then try to configure the control register to generate a square wave which you can monitor on a scope. This would give you an indication that the I2C Write routines are working for you. Then you can attempt the Read. Alternatively you can probe the I2C lines and see if the signals are as expected as per protocol, esp see if the slave is generating the ACK when you write it's address on the bus
#36
NIMIT VACHHANI
Starting Member
  • Total Posts : 83
  • Reward points : 0
  • Joined: 2015/02/19 21:52:01
  • Location: 0
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/13 04:56:26 (permalink)
0
Can you please guide me whether i am configuring I2C properly or not. If I2C baude is wrongly calculated then no use. Once the configurations are okay i can look using oscilloscope on SDA and SCL pins. I still have doubts in my configurations.
#37
NIMIT VACHHANI
Starting Member
  • Total Posts : 83
  • Reward points : 0
  • Joined: 2015/02/19 21:52:01
  • Location: 0
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/13 08:20:43 (permalink)
0
I think I am making some silly mistake. Well for now i am going out of office for few days... Will get back after few days. Thanks to all of you for the help.
#38
govind_mukundan
Super Member
  • Total Posts : 188
  • Reward points : 0
  • Joined: 2009/05/12 23:50:07
  • Location: singapore/india
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/15 19:57:55 (permalink)
0
The baud rate calculation is OK. One way to know if the configurations are OK is to check if there's a clock on the scope :) You can try using the code I linked to earlier, I've used it on a number of different slave chips without any problems.
#39
NIMIT VACHHANI
Starting Member
  • Total Posts : 83
  • Reward points : 0
  • Joined: 2015/02/19 21:52:01
  • Location: 0
  • Status: offline
Re: PIC24FJ64GB002 as USB Host and UART 2015/03/18 04:57:45 (permalink)
0
Hi all.
 
After a short vacation i got my I2C working in Proteus Simulation. But i am facing 1 problem. I am attaching the jpeg file and the sample code. The problem is i am reading date,month and year one after another and sending the value on the UART. I am getting 180303 for 18-03-2015. I should be getting 180315. If i read the year part alone then i am getting correct value for year ie.15, but the code is not working properly when i am doing as in the posted code.

I2CInit();
get_dt(0x04,dt);
get_dt(0x05,mnt);
get_dt(0x06,yr);
I2CClose();
The code to get the value from DS1307 is as

void get_dt(unsigned char address,unsigned char dt_variable)
{
//I2CInit();
StartI2C1(); //Send the Start Bit
IdleI2C1(); //Wait to complete
MasterWriteI2C1(DS13070);
IdleI2C1(); //Wait to complete
if( I2C1STATbits.ACKSTAT );
MasterWriteI2C1(address);
IdleI2C1(); //Wait to complete
if( I2C1STATbits.ACKSTAT );
RestartI2C1();
//i2c_wait(10);
IdleI2C1(); //Wait to complete
MasterWriteI2C1(DS13071);
IdleI2C1(); //Wait to complete
dt_variable = MasterReadI2C1();
StopI2C1();
IdleI2C1();
put_char_on_uart2(BCD2UpperCh(dt_variable));
put_char_on_uart2(BCD2LowerCh(dt_variable)); 
//I2CClose();
}
I2C init and close code is as

void I2CInit()
{
OpenI2C1(config1,I2C_BRG);
}
void I2CClose()
{
CloseI2C1();
}

Attached Image(s)

#40
Page: < 123 > Showing page 2 of 3
Jump to:
© 2021 APG vNext Commercial Version 4.5