PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp USB, CAN, I2C, SPI, USART...

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

Giao tiếp USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 02-04-2008, 03:54 PM   #1
quoc_nguyen
Nhập môn đệ tử
 
Tham gia ngày: Jan 2008
Bài gửi: 4
:
master - multi slave

Bạn nào đã làm giao tiếp i2c chế độ một master nhiều slave cho mình hỏi tí.
Mình dùng Css C, sử dụng 3 con pic 16f877a trong đó 1 master và 2 slave có một bàn phím ở master để điều khiển lấy dữ liệu từ slave. không hiểu sao chỉ chạy đúng được một trong 2 con, sau đó luôn gửi về giá trị 255.
quoc_nguyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-04-2008, 06:24 PM   #2
tam_pascal
Nhập môn đệ tử
 
Tham gia ngày: Sep 2007
Bài gửi: 8
:
Trích:
Nguyên văn bởi quoc_nguyen View Post
Bạn nào đã làm giao tiếp i2c chế độ một master nhiều slave cho mình hỏi tí.
Mình dùng Css C, sử dụng 3 con pic 16f877a trong đó 1 master và 2 slave có một bàn phím ở master để điều khiển lấy dữ liệu từ slave. không hiểu sao chỉ chạy đúng được một trong 2 con, sau đó luôn gửi về giá trị 255.
- Mình dùng thêm một dây nữa nối từ M-S, dây này do S điều khiển = 0 báo cho M biết là S muốn truyền dữ liệu đến M, khi S truyền xong thì cho dây này =1. Còn M cứ thấy dây này =0 là hỏi S và nhận data về. Chứ kết nối hai dây thì M cứ phải hỏi liên tục( mỏi miệng)..hihi. chúc vui
- Tiện thể cho mình hỏi một chút: mình dùng Master =18f4550 và slave=16f877a địa chỉ 0x10 thì tốt, khi chuyển sang dùng 2 con đều là 18f4550 khi lại không đc, (vẫn địa chỉ 0x10) Hay ở 18f4550 con slave phải có địa chỉ khác nhỉ. Ai biết chỉ giúp mình với....xin cảm ơn trước.

thay đổi nội dung bởi: tam_pascal, 22-04-2008 lúc 06:46 PM.
tam_pascal vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 24-04-2008, 12:46 PM   #3
electronicltv
Đệ tử 4 túi
 
electronicltv's Avatar
 
Tham gia ngày: Jul 2006
Nơi Cư Ngụ: Bốn biển là nhà
Bài gửi: 69
:
Cấu hình cho I2C của pic8F4431 dùng pin_D2 và pin_D3 như sau:
trường hợp 1:
Code:
#include <18F4431.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT,SSP_RD
#use delay(clock=20000000)
#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C5, address=0xa0,force_hw,slow)
trường hợp 2:
Code:
#include <18F4431.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT,SSP_RD
#use delay(clock=20000000)
#use i2c(SLAVE, SDA=PIN_D2, SCL=PIN_D3, address=0xa0,force_hw,slow)
Tìm hoài k thấy tài liệu hướng dẫn về dzụ này. Với trường hợp 1 thì chạy đúng mặc dù phần mềm chọn pin_c4 và C5 còn phần cứng dùng Pin_D2 và D3. Còn trường hợp 2 là pó chíu luôn, kô xảy ra ngắt SSP luôn. Tìm ra hai trường hợp này là phải ngồi "mò" cả ngày, hic
Vậy giải thích hai trường hợp này: do CCS "chuối" hay do người dùng "gà" quá?
__________________
YM: electronicltv

thay đổi nội dung bởi: electronicltv, 24-04-2008 lúc 05:28 PM. Lý do: bỏ code vào thẻ code
electronicltv vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-05-2008, 12:06 AM   #4
Table
Nhập môn đệ tử
 
Tham gia ngày: Nov 2006
Bài gửi: 2
:
Re:

Trích:
Nguyên văn bởi electronicltv View Post
Cấu hình cho I2C của pic8F4431 dùng pin_D2 và pin_D3 như sau:
trường hợp 1:
Code:
#include <18F4431.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT,SSP_RD
#use delay(clock=20000000)
#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C5, address=0xa0,force_hw,slow)
trường hợp 2:
Code:
#include <18F4431.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT,SSP_RD
#use delay(clock=20000000)
#use i2c(SLAVE, SDA=PIN_D2, SCL=PIN_D3, address=0xa0,force_hw,slow)
Tìm hoài k thấy tài liệu hướng dẫn về dzụ này. Với trường hợp 1 thì chạy đúng mặc dù phần mềm chọn pin_c4 và C5 còn phần cứng dùng Pin_D2 và D3. Còn trường hợp 2 là pó chíu luôn, kô xảy ra ngắt SSP luôn. Tìm ra hai trường hợp này là phải ngồi "mò" cả ngày, hic
Vậy giải thích hai trường hợp này: do CCS "chuối" hay do người dùng "gà" quá?
Cái này cũng có nghe rồi, mấy bồ đã bị thì kêu CCS chuối. còn tui đang làm trên C18 thấy tình hình còn...chuối hơn. huhu
Table vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-07-2008, 12:29 PM   #5
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
Smile

Trích:
Nguyên văn bởi electronicltv View Post
Cấu hình cho I2C của pic8F4431 dùng pin_D2 và pin_D3 như sau:
trường hợp 1:
Code:
#include <18F4431.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT,SSP_RD
#use delay(clock=20000000)
#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C5, address=0xa0,force_hw,slow)
trường hợp 2:
Code:
#include <18F4431.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT,SSP_RD
#use delay(clock=20000000)
#use i2c(SLAVE, SDA=PIN_D2, SCL=PIN_D3, address=0xa0,force_hw,slow)
Tìm hoài k thấy tài liệu hướng dẫn về dzụ này. Với trường hợp 1 thì chạy đúng mặc dù phần mềm chọn pin_c4 và C5 còn phần cứng dùng Pin_D2 và D3. Còn trường hợp 2 là pó chíu luôn, kô xảy ra ngắt SSP luôn. Tìm ra hai trường hợp này là phải ngồi "mò" cả ngày, hic
Vậy giải thích hai trường hợp này: do CCS "chuối" hay do người dùng "gà" quá?
mình cũng đã từng gặp trường hợp như bạn. theo mình nghĩ thì có thể là vì từ khóa "force_hw" tức là dùng phần cứng mặc định, vì vậy dù bạn khai là chân D2 và D3 nhưng tín hiệu vẫn ra chân C4 C5 ( con 4431 có 2 đường i2c mà ), bạn thử bỏ từ khóa này đi xem sao .

mấy hôm rồi mình bị mất đồng bộ gửi nhận suốt, các bạn nếu mới làm nhớ để ý bên con slaver trong quá trình nhận nhé
mình khuyến cáo nên dùng cấu trúc sau để nhận trong trình xử lý ngắt #INT_SSP ssp :
while(count_i2c!=4) {

while(!i2c_poll()) ;

buffer[count_i2c++]= i2c_read(); //Read Next

}
hy vọng ko ai phải mất thời gian về i2c nhiều như mình .hichic
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com
hopeman vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-04-2008, 02:28 AM   #6
pictd03
Nhập môn đệ tử
 
pictd03's Avatar
 
Tham gia ngày: Apr 2008
Bài gửi: 8
:
Wink PIC và RS_485

xin cho mình hỏi, có ai đã từng làm giao tiếp PIC16f877a với RS_485 chưa? vì mình đang thiết kế mạng dùng 485 kết nối với PIC, nếu có hướng dẫn dùm mình nha, thanks!
Anh Nam nếu biết chỉ giáo em với nha! thanks
pictd03 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-04-2008, 02:50 AM   #7
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi pictd03 View Post
xin cho mình hỏi, có ai đã từng làm giao tiếp PIC16f877a với RS_485 chưa? vì mình đang thiết kế mạng dùng 485 kết nối với PIC, nếu có hướng dẫn dùm mình nha, thanks!
Anh Nam nếu biết chỉ giáo em với nha! thanks
Tôi thử dùng các từ khóa "PIC" và "RS-485" thì thấy có nhiều project trên mạng, có sơ đồ nguyên lý và mã nguồn. Tôi chưa từng làm về vấn đề này, nên có lẽ không giúp gì cho bạn được.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-05-2008, 09:01 AM   #8
tungtot_vl
Đệ tử 6 túi
 
tungtot_vl's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 154
:
bác nào làm giao tiếp i2c giữa pic với eeprom 24XX rồi chỉ cho tôi với.
dùng protue có mô phỏng eeprom 24XX được không hả các bác.
khi tôi mô phỏng thì không thấy chạy gì cả. kích chuột vào eeprom thì thấy nó đòi có file binary ở phần initial contents ò memory không biết file này phải lấy từ đâu ra nhỉ mong các cao thủ chie giúp
tungtot_vl vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 20-05-2008, 11:44 PM   #9
toanck86
Đệ tử 1 túi
 
Tham gia ngày: Apr 2007
Bài gửi: 20
:
Chào mọi người!
Cho mình hỏi về ví dụ của bạn Hoanf (ví dụ có kèm hình sơ đồ nguyên lý), mình mô phỏng bằng protues thì chạy đúng như yêu cầu bài toán, nhưng lắp mạch thật thì không chạy được. Có cẩn phải chú ý gì từ sơ đồ đó không!
toanck86 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-06-2008, 05:10 PM   #10
cuong86vt
Đệ tử 1 túi
 
Tham gia ngày: Jul 2007
Bài gửi: 22
:
Trích:
Nguyên văn bởi toanck86 View Post
Chào mọi người!
Cho mình hỏi về ví dụ của bạn Hoanf (ví dụ có kèm hình sơ đồ nguyên lý), mình mô phỏng bằng protues thì chạy đúng như yêu cầu bài toán, nhưng lắp mạch thật thì không chạy được. Có cẩn phải chú ý gì từ sơ đồ đó không!
Thằng Toàn làm được mạch I2C chạy ngon lành luôn rồi cũng không thèm Post lên diễn đàn cho mọi người cùng học hỏi gì cả ! Đề nghị Admin tước level "1 túi" của nó !

PICVIETNAM tròn 1 tuổi !

Mình mới viết xong một chương trình I2C dùng 1 Master điều khiển mạng 4 Slave bằng 4 nút ngắt RB, tất cả đều dùng 16f877a, mình xin post lên đây mong các bạn góp ý.

Phần cứng: 4 nút nhấn ngắt ngoài rb4 -> rb7 dùng để điều khiển 4 Slave, nhấn nút nào thì Master gọi Slave đó chạy ct Master gửi xuống, còn các Slave khác "ngồi chơi". 2 chân SDA và SCL của các VDK nối nhau kéo lên 4k7, PORTD của 4 Slave quét 8 led...

Phần mềm: 4 Slave có địa chỉ lần lượt là 0x10, 0x20, 0x30, 0x40 nên chương trình của 4 Slave hoàn toàn như nhau, chỉ khác cái khai báo ban đầu address là 4 địa chỉ trên.


ct của Master:
Code:
#include <16f877a.h>
#include <def_877a.h>
#use delay(clock = 20000000)
#fuses HS, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOPROTECT
#use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C3, force_hw)

const unsigned int8 dulieu[]={1,2,4,8,16,32,64,128};
const unsigned int8 address_slave[]={0,0x10,0x20,0x30,0x40};
int8 a,i,kytu;

void ghi(int8 address,int8 data)
   {
      i2c_start();
      i2c_write(address);
      i2c_write(data);
      i2c_stop();
   }
   
#INT_RB
void ngat_RB()
   {
      if((RBIF)&&(RBIE))
         {
            if(RB4==0)
               {
                  a=1;
                  i=0;                
               }               
            else if(RB5==0)
               {
                  a=2;   
                  i=0;                 
               }               
            else if(RB6==0)
               {                  
                  a=3;   
                  i=0;                  
               }               
            else if(RB7==0)
               {                 
                  a=4;  
                  i=0;                  
               }
         }
      RBIF=0;
   }

void main()
   {
      enable_interrupts(GLOBAL);
      enable_interrupts(INT_RB);
      set_tris_d(0);
      portd=0;
                  
      while(TRUE)
         {          
            kytu=a;
            delay_ms(100);
            
            while(kytu==a)
               {
                  if(a!=0)
                     {
                        delay_ms(50);
                        ghi(address_slave[a],dulieu[i]);
                        i++;
                        if(i==8)
                           {
                              i=0;
                           }
                     }
               }            
           
         }
   }
ct của 4 Slave, chỉ khác nhau 4 address:
Code:
#include <16f877a.h>
#include <def_877a.h>
#use delay(clock = 20000000)
#fuses HS, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOPROTECT
#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0x10, force_hw)
   
int8 dulieu;
   
#INT_SSP
void ngat_i2c()
   {
      int8 state;
      state = i2c_isr_state();            
      if(state < 0x80)
         {
            dulieu = i2c_read();
            portd = dulieu;
            delay_ms(50);
         }
   }
   
void main()
   {
      enable_interrupts(GLOBAL);
      enable_interrupts(INT_SSP);
      set_tris_d(0);
            
      while(TRUE)
         {   
            portd = 0;
         }
   }
Mạch mình chạy mô phỏng bằng Proteus thấy có đặc điểm: nếu chỉ nối 1 M và 1 S thì quét led đúng thời gian delay 50ms, còn nối 4 S vào thì dường như led quét rất chậm không đúng 50 ms nữa, nhưng mình nghĩ Proteus chỉ mô phỏng thời gian thực, còn nếu là phần cứng thật thì sẽ chạy đúng yêu cầu như trong code...

Em muốn post sơ đồ mạch lên mà không biết chèn code như thế nào, mong Admin chỉ giùm em cách tải file từ máy...
Hình Kèm Theo
File Type: jpg MACH_I2C_PROTEUS.JPG (166.9 KB, 203 lần tải)

thay đổi nội dung bởi: namqn, 15-06-2008 lúc 07:11 PM. Lý do: xóa thông tin không cần thiết
cuong86vt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-12-2008, 09:33 PM   #11
minhminh17
Nhập môn đệ tử
 
Tham gia ngày: Apr 2008
Bài gửi: 4
:
chuong trinh ban lam minh co thu ma sao khi chi can nhan rb3 den rb7 deu xay ra ngat dong loat ma minh nho rb3 dau co ngat dau ma sao no cung thanh ngat luon la sao
va khi vao ngat no thuc hien tat ca cac ngat tu rb4 den rb7 khong chua cai nao roi thoat khoi ngat la sao vay??
mong ban giai thich dieu vo ly do.

ct của Master:
Code:
#include <16f877a.h>
#include <def_877a.h>
#use delay(clock = 20000000)
#fuses HS, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOPROTECT
#use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C3, force_hw)

const unsigned int8 dulieu[]={1,2,4,8,16,32,64,128};
const unsigned int8 address_slave[]={0,0x10,0x20,0x30,0x40};
int8 a,i,kytu;

void ghi(int8 address,int8 data)
   {
      i2c_start();
      i2c_write(address);
      i2c_write(data);
      i2c_stop();
   }
   
#INT_RB
void ngat_RB()
   {
      if((RBIF)&&(RBIE))
         {
            if(RB4==0)
               {
                  a=1;
                  i=0;                
               }               
            else if(RB5==0)
               {
                  a=2;   
                  i=0;                 
               }               
            else if(RB6==0)
               {                  
                  a=3;   
                  i=0;                  
               }               
            else if(RB7==0)
               {                 
                  a=4;  
                  i=0;                  
               }
         }
      RBIF=0;
   }

void main()
   {
      enable_interrupts(GLOBAL);
      enable_interrupts(INT_RB);
      set_tris_d(0);
      portd=0;
                  
      while(TRUE)
         {          
            kytu=a;
            delay_ms(100);
            
            while(kytu==a)
               {
                  if(a!=0)
                     {
                        delay_ms(50);
                        ghi(address_slave[a],dulieu[i]);
                        i++;
                        if(i==8)
                           {
                              i=0;
                           }
                     }
               }            
           
         }
   }
ct của 4 Slave, chỉ khác nhau 4 address:
Code:
#include <16f877a.h>
#include <def_877a.h>
#use delay(clock = 20000000)
#fuses HS, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOPROTECT
#use i2c(SLAVE, SDA=PIN_C4, SCL=PIN_C3, address=0x10, force_hw)
   
int8 dulieu;
   
#INT_SSP
void ngat_i2c()
   {
      int8 state;
      state = i2c_isr_state();            
      if(state < 0x80)
         {
            dulieu = i2c_read();
            portd = dulieu;
            delay_ms(50);
         }
   }
   
void main()
   {
      enable_interrupts(GLOBAL);
      enable_interrupts(INT_SSP);
      set_tris_d(0);
            
      while(TRUE)
         {   
            portd = 0;
         }
   }
Mạch mình chạy mô phỏng bằng Proteus thấy có đặc điểm: nếu chỉ nối 1 M và 1 S thì quét led đúng thời gian delay 50ms, còn nối 4 S vào thì dường như led quét rất chậm không đúng 50 ms nữa, nhưng mình nghĩ Proteus chỉ mô phỏng thời gian thực, còn nếu là phần cứng thật thì sẽ chạy đúng yêu cầu như trong code...

Em muốn post sơ đồ mạch lên mà không biết chèn code như thế nào, mong Admin chỉ giùm em cách tải file từ máy...[/QUOTE]
minhminh17 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 22-12-2008, 11:55 PM   #12
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi minhminh17 View Post
...
Em muốn post sơ đồ mạch lên mà không biết chèn code như thế nào, mong Admin chỉ giùm em cách tải file từ máy...
Bạn đọc hướng dẫn ở luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=3289

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-08-2008, 04:24 PM   #13
dientubk3
Đệ tử 1 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 14
:
Hi ! Có bạn nào nghiên cứu về I2CSB-I2C Slave Base không thươ1ng dẫn em nhé!Thanks.Có tài liệu chi tiết nào về sơ đồ khối hay gì đó thì send cho em nhé!Thiết kế I2CSB giống nhu thiết kế 1 khối IP phải ko ạh?Help me please!!!
dientubk3 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-08-2008, 12:16 AM   #14
dientubk3
Đệ tử 1 túi
 
Tham gia ngày: Aug 2008
Bài gửi: 14
:
so đồ khối i2CSB!Ai biết phân tích dùm nhé!!!

Đây là sơ đồ khối chi tiết cuả I2CSB!Bạn nào biết phân tích chi tiết nhiệm vụ và chức năng của từng khối cho mình nhé!mình cảm ơn nhiều.Và nếu mình thiết kế 1 khối IP-I2CSB như vậy thì cần phải bắt đầu như thế nào ,mong các bạn góp ý nhé!Thanks a lot!!!
Hình Kèm Theo
File Type: jpg sodokhoi.jpg (29.5 KB, 25 lần tải)
dientubk3 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-08-2008, 02:06 AM   #15
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi dientubk3 View Post
Đây là sơ đồ khối chi tiết cuả I2CSB!Bạn nào biết phân tích chi tiết nhiệm vụ và chức năng của từng khối cho mình nhé!mình cảm ơn nhiều.Và nếu mình thiết kế 1 khối IP-I2CSB như vậy thì cần phải bắt đầu như thế nào ,mong các bạn góp ý nhé!Thanks a lot!!!
Bạn đang tìm hiểu việc hiện thực module I2C ở chế độ slave trên logic khả trình (programmable logic) phải không? Nếu đúng thì bạn nên hỏi ở www.dientuvietnam.net, diễn đàn này chủ yếu dành cho PIC.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 07:37 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam