![]() |
|
Tài trợ cho PIC Vietnam |
PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
PIC Bang chủ
|
Các tính chất của các chip ADC/DAC
Biến đổi ADC và DAC là vô cùng quan trọng trong các ứng dụng điện tử. F mở ra luồng này để các bạn viết về bộ biến đổi ADC và DAC.
1) Những khái niệm chung nhất về ADC/DAC? Những nguyên lý cơ bản? vd: tốc độ chuyển đổi, độ phân giải, nguyên lý chuyển đổi, giao tiếp với MCU, DSP,... 2) Vấn đề thiết kế ADC/DAC? vd: giao tiếp ADC, DAC; thiết kế Reference; thiết kế các mạch lọc; thiết kế mạch in 3) Các ứng dụng ADC/DAC? vd: ứng dụng nhiệt độ, ứng dụng điều khiển động cơ,... Các nội dung này các bạn cần đi vào thảo luận chi tiết, để có thể nắm rõ về ADC và DAC. Trong phần này sẽ có rất nhiều câu hỏi liên quan. Nó thiên nhiều về mặt ứng dụng ADC, hy vọng rằng các bạn sẽ thảo luận nhiều và nắm rõ ràng hơn ADC và DAC. Chúc vui
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
![]() |
![]() |
![]() |
#2 |
Đệ tử 1 túi
Tham gia ngày: Nov 2006
Bài gửi: 25
: |
ADC_18F877A tại sao ...
tôi thử viết đoạn chương trình sau với pic877a không hiểu sao khi đọc kết quả thi nhiệt độ nó tăng với mứt là 64 chẳng hạn:
32 96 160 224 288 chứ nó không tăng theo từng độ 32 33 34 35 36 ... sau đây là code: Code:
;*********************************************************************** ;CHUONG TRINH DO NHIET DO VOI PIC16F877a+LM35 ;*********************************************************************** ;Nguoi thuc hien : PHAM THANH KHUYEN ;Ngay thuc hien : 26/05/2007 ;FREQUENCY: 20MHz ;OSCILLATOR: XT ;PROCESSOR: PIC16F877A ;WACHTDOD : OFF ;DIVECE:LM35 ;----------------------------------------------------------------------- ;IC pocessor PIC16f877a voi 5 ngo vao ADC & Vref+ : ;AN0,AN1,AN2,Vref+,AN4,AN5 ung voi bo 3BIT <PCFG3:PCFG0><1010> ;RA0,RA1,RA2,RA3 ,RA5,RE0 la cac chan cua PORT tuong ung ;ADCON1: <ADFM>=1 lay ket qua 2bit cua ADRESH 8bit cua ADRESL ;CAM BIEN DUNG LM35 ;Ban phim thao tac gom 7 phim nhan ; PORTC : RC5 RC4 RC3 RC2 RC1 RC0 ; KEYPAD: COL1 COL0 ROW3 ROW2 ROW1 ROW0 ;ten , ma cong dung 7 phim nhan ; PRESET: 010001 vao che do chinh mac dinh chon nhom1(1 cua 5 nhom) ; SELECT_L: 010010 qua nhom ben trai ' 1 nhom co 3 led TRAM CHUC DONVI ' ; SELECT_R: 010100 qua nhom ben phai ; LEFT: 100001 qua con so ben trai trong nhom duoc chon ; RIGHT: 100010 qua con so ben phai trong nhom duoc chon ; INC: 100100 tang gia tri con so dang chon ; DEC 101000 giam gia tri con so dang chon ;khoi hien thi : ;hien thi 5 tri so do nhiet do ung voi 5 ngo vao cua ANx ;hien thi 5 tri so dat truoc ung voi 5 nhiet do tren ;khoi hien thi dung : 2 IC74247 cap 2 bo ma hinh | D0.2 D1.2 D2.2 D3.2 , D0.1 D1.1 D2.1 D3.1 | ;2 IC74LS138 mat noi tiep lam thanh bo dem 15 de SET 15 anot led 7 ; portD : MA HINH 1 MA HINH 2 ; RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 ; D3.2 D2.2 D1.2 D0.2 D3.1 D2.1 D1.1 D0.1 ; PORTB: MA CHON CON SO ; RB4 RB3 RB2 RB1 RB0 ; LED9_15 LED1_8 C B A ;---------------------------------------------------------------------------- LIST P=16F877A INCLUDE <P16F877A.INC> __CONFIG _XT_OSC &_WDT_OFF&_LVP_OFF ;............................................................................ CBLOCK 0X20 ;CAC BIEN CHO CAC CON SO CUA LED HIEN THI ;byte cao la con so cua led hien thi tri so dat truoc ;byte thap la con so cua led hien thi gia tri nhiet do hien thoi DIGI_1 ;TRAM_nhiet1 DIGI_2 ;CHUC_nhiet1 DIGI_3 ;DONVI_nhiet1 ; DIGI_4 ;TRAM_nhiet2 DIGI_5 ;CHUC_nhiet2 DIGI_6 ;DONVI_nhiet2 ; DIGI_7 ;TRAM_nhiet3 DIGI_8 ;CHUC_nhiet3 DIGI_9 ;DONVI_nhiet3 ; DIGI_10 ;TRAM_nhiet4 DIGI_11 ;CHUC_nhiet4 DIGI_12 ;DONVI_nhiet4 ; DIGI_13 ;TRAM_nhiet5 DIGI_14 ;CHUC_nhiet5 DIGI_15 ;DONVI_nhiet5 ; CHANEL ;BIEN LUU TRI SO CHANEL : .0 .1 .2 .3 .4 CHANEL_ACTION ;BIEN CHANEL HOAT DONG : .0 .1 .2 .4 .5 CHANEL_TEMP ACQUI_TIME ;BIEN VE THOI GIAN CHO A/D ;CAC BIEN LUU FSR_SAVE W_SAVE S_SAVE ;CAC BIEN CUA PHEP CHUYEN BCD R0 R1 R2 L_BYTE H_BYTE COUNT TEMP ;CAC BIEN CHO HIEN THI LED_SET MAHINH COUNT1 COUNT2 ;CAC BIEN KEYPAD ENDC ;................................................................ ;CAC HANG SO ; START_RAM0 EQU 0X20 ;dia chi ram bat dau tren BANK0 END_RAM0 EQU 0X50 ;dia chi ram ket thuc tren BANK0 LED1_8 EQU 3 ;RB3 LAY SO DEM TU 1 TO 8 LED9_15 EQU 4 ;RB4 LAY SO DEM TU 9 TO 15 ;................................................................. ;CHUONG TRINH BAT DAU TU DAY ORG 0 GOTO START ORG 4 ; GOTO ISR ;CHUONG TRINH CHINH TAI DAY START ;thiet lap ban dau CALL CLEAR_RAM CALL INI_PORT CALL INI_ANALOG ;chuong trinh chinh MAIN CALL READ_ANALOG CALL B2_BCD CALL SAVE_RESULT ; INCF CHANEL,F INCF CHANEL_ACTION,F MOVLW .5 SUBWF CHANEL,W BTFSC STATUS,Z CLRF CHANEL CLRF CHANEL_ACTION ; MOVLW .100 MOVWF COUNT2 HT_LAI CALL HIENTHI DECFSZ COUNT2,F GOTO HT_LAI GOTO MAIN ;CAC CHUONG TRINH CON ;---------------------------------------------------------------- CLEAR_RAM MOVLW START_RAM0 MOVWF FSR NEXT CLRF INDF INCF FSR,F MOVLW END_RAM0 SUBWF FSR,W BTFSS STATUS,Z GOTO NEXT RETURN ;---------------------------------------------------------------- INI_PORT BCF STATUS,RP1 BSF STATUS,RP0 MOVLW B'00101111' MOVWF TRISA MOVLW B'00000001' MOVWF TRISE CLRF TRISB CLRF TRISD MOVLW B'00001111' MOVWF TRISC BCF STATUS,RP0 CLRF PORTA CLRF PORTB CLRF PORTC CLRF PORTD CLRF PORTE RETURN ;------------------------------------------------------------------- INI_ANALOG MOVLW B'10001010' ;result Right justified PCFG<3:0>=<1010> MOVWF ADCON1 ;AN7:D AN6:D AN5:A AN4:A AN3:Vref+ AN2:A AN1:A AN0:A MOVLW B'10000000' ;a/d clock Fosc/32 <7:6> RA0 chanel selected <5:3> MOVWF ADCON0 ;a/d module still off RETURN ;---------------------------------------------------------------- READ_ANALOG MOVF CHANEL_ACTION,W MOVWF CHANEL_TEMP MOVLW .3 SUBWF CHANEL_ACTION,W BTFSS STATUS,Z GOTO KHAC3 MOVLW .4 MOVWF CHANEL_ACTION KHAC3 MOVF CHANEL_ACTION,W MOVWF CHANEL_TEMP BCF STATUS,C RLF CHANEL_TEMP,F RLF CHANEL_TEMP,F RLF CHANEL_TEMP,F MOVLW B'11000000' ANDWF ADCON0,F MOVF CHANEL_TEMP,W IORWF ADCON0,F BSF ADCON0,ADON MOVLW .70 MOVWF ACQUI_TIME ACQUILOOP DECFSZ ACQUI_TIME,F GOTO ACQUILOOP BSF ADCON0,GO CONVERTLOOP BTFSC ADCON0,GO GOTO CONVERTLOOP BSF STATUS,RP0 ;selected bank1 MOVF ADRESL,W BCF STATUS,RP0 MOVWF L_BYTE MOVF ADRESH,W MOVWF H_BYTE ; BCF ADCON0,ADON BCF ADCON0,GO RETURN ;---------------------------------------------------------------- SAVE_RESULT MOVFW FSR MOVWF FSR_SAVE MOVF CHANEL,W ADDWF CHANEL,W ADDWF CHANEL,W ADDWF CHANEL,W ADDLW 0X20 MOVWF FSR MOVFW R1 ANDLW B'00001111' MOVWF INDF INCF FSR,F MOVFW R2 ANDLW B'11110000' MOVWF INDF SWAPF INDF,F INCF FSR,F MOVFW R2 ANDLW B'00001111' MOVWF INDF MOVFW FSR_SAVE MOVWF FSR RETURN ;---------------------------------------------------------------- ;CHUONG TRINH HIEN THI HIENTHI CLRF LED_SET BSF LED_SET,LED1_8 ; DAT LED_SET=8 MOVFW FSR MOVWF FSR_SAVE MOVLW 0X20 MOVWF FSR ;FSR DANG LAY DIA CHI DIGI1 HT0 MOVF INDF,W MOVWF PORTD MOVF LED_SET,W MOVWF PORTB CALL DELAY CLRF PORTB CLRF PORTD INCF FSR,F INCF LED_SET,F MOVLW .23 ;LED_SET TANG TU 8 TOI 22 = 14 LAN SE DUNG LAI SUBWF LED_SET,W BTFSS STATUS,Z GOTO HT0 MOVFW FSR_SAVE MOVWF FSR RETLW 0 ;---------------------------------------------------------------- DELAY MOVLW .255 MOVWF COUNT1 LAPLAI DECFSZ COUNT1,F GOTO LAPLAI RETURN ;-------------------------------------------------------------------------- ; CHUONG TRINH : B2_BCD ;chuyen so nhi phan 2 byte sang nhi phan BCD ;so 2 byte : H_BYTE L_BYTE ;con so BCD : R0 R1 R2 ; LUU Y: sau qua trinh chuyen doi tri so cua L_BYTE va H_BYTE bi thay doi ;-------------------------------------------------------------------------- B2_BCD bcf STATUS,0 ; clear the carry bit movlw .16 movwf COUNT clrf R0 clrf R1 clrf R2 loop16 rlf L_BYTE, f rlf H_BYTE, f rlf R2, f rlf R1, f rlf R0, f ; decfsz COUNT, f ; routine for bcd conversion goto adjDEC retlw 0 ; adjDEC movlw R2 movwf FSR call adjBCD ; no bank switching, always ; ; indirect access for RAM movlw R1 movwf FSR call adjBCD ; movlw R0 movwf FSR call adjBCD ; goto loop16 ; adjBCD movlw 3 addwf INDF,W movwf TEMP btfsc TEMP,3 ; test if result > 7 movwf INDF movlw 30 addwf INDF,W movwf TEMP btfsc TEMP,7 ; test if result > 7 movwf INDF ; save as MSD retlw 0 END |
![]() |
![]() |
![]() |
#3 |
PIC Bang chủ
|
Cảm biến của bạn có độ phân giải như thế nào?
Chúc vui
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
![]() |
![]() |
![]() |
#4 | |
Trưởng lão PIC bang
|
Trích:
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 |
|
![]() |
![]() |
![]() |
#5 |
Đệ tử 1 túi
Tham gia ngày: Nov 2006
Bài gửi: 25
: |
cảm ơn bạn namqn rất nhiều đúng là đoạn INI_ANALOG bị lỗi nó được sửa lại như sau:
Code:
INI_ANALOG BSF STATUS,RP0 MOVLW B'10001010' ;result Right justified PCFG<3:0>=<1010> MOVWF ADCON1 ;AN7:D AN6:D AN5:A AN4:A AN3:Vref+ AN2:A AN1:A AN0:A BCF STATUS,RP0 MOVLW B'10000000' ;a/d clock Fosc/32 <7:6> RA0 chanel selected <5:3> MOVWF ADCON0 ;a/d module still off RETURN |
![]() |
![]() |
![]() |
#6 |
Đệ tử 4 túi
|
2) Vấn đề thiết kế ADC/DAC?
vd: giao tiếp ADC, DAC; thiết kế Reference; thiết kế các mạch lọc; thiết kế mạch in Cho em hỏi bác F chút về việc thiết kế ADC DAC nhé! Làm mạch lọc như thế nào để hạn chế được nhiễu?và đảm bảo tính ổn định?Em thử đo tín hiệu AD (Dùng 16f877) cùng một giá trị đầu vào em thay đổi Vref và đều nhận thấy giá trị nhận được luôn dao động từ 1-2 giá trị? Em nghĩ là nếu Vref cao thì sai số càng nhiều hơn chứ? Khi làm mạch in với ADC thì cần quan tâm đến điều j vậy? Đường tín hiệu của AD có phải đảm bảo tính chất nào ko? À còn điều này nữa.Vì giá trị sau khi chuyển đổi phụ thuộc vào Vref đúng ko?nhưng do các IC,thiết bị khác trên mạch sử dụng nguồn gây ra sụt áp làm thay đổi Vref => kết quả tính toán sai?vậy có cách nào giải quyết ko?hay là phải làm mạch ổn áp riêng cho Vref nếu dùng mạch ổn áp riêng thì nên dùng loại nào?để có thể đảm bảo được? Tôi có ý như thế này ta dùng một đầu AD đo giá trị Vref rồi tính toán để có thể đưa ra giá trị chính xác nhất của Vref rồi qua đó tính toán giá trị AD mình cần đo.Ko biết cách này đã có ai dùng chưa?Có thể chia xẻ đựơc ko? Dạo này tôi đang bận thi học kỳ nên chưa có thời gian test!
__________________
Today Not Tomorow .... YM: hoangcuong2k <= Ai rảnh thì chat nhé |
![]() |
![]() |
![]() |
#7 |
Đệ tử 4 túi
Tham gia ngày: Aug 2006
Bài gửi: 61
: |
Hồi trước em có thấy anh F nói về việc chống nhiễu bằng cách chạy mạch in hợp lý nhưng vẫn chưa thấy ai hướng dẫn cặn kẽ về vấn đề này. Xin mấy anh giúp đỡ. ADC lên đến 10 bit trở lên thì vấn đề nhiễu khá rắc rối rồi (1 mức ADC khoảng 2.048mV là đủ nhỏ để bị nhiễu).
@Zero: Theo mình nghĩ bạn nên dùng Vref riêng cho mạch ADC và chỉ dùng 1 đầu AD thôi vì nếu thêm 1 đầu AD hiệu chỉnh thì bạn cũng phải cung cấp nguồn cho nó và vấn đề của bạn vẫn không được giải quyết. THứ 2 nữa khi thêm 1 AD thì bạn bị sai số 2 lần (2 bộ AD) do đó rắc rối hơn. Và thứ 3 là mất thêm bộ nhớ cho tính toán. |
![]() |
![]() |
![]() |
#8 |
PIC Bang chủ
|
Có nhiều yêu cầu để chạy mạch in, F nói một thí dụ cho các bạn trong việc chạy mạch in chống nhiễu cho ADC, các phần khác các bạn phải đọc thêm các yêu cầu về chạy mạch in, và một số trường hợp rất phức tạp mà F không thể nói hết, cho nên không nói.
1) Đường Analog đi riêng, đường Digital đi riêng. Đường không được rẽ nhánh. Nếu bạn chạy mạch in cho con PIC chẳng hạn, và dùng 7805. Vậy thì ngay từ chân 7805, bạn phải chia ra 2 đường mạch in. Một đường mạch in chạy thẳng tới chân cấp nguồn của một con ADC nào đó, hoặc VREF (chạy thẳng một đường tới đó luôn, không rẽ nhánh). Đường còn lại, bạn chạy một đường Digital. Đường này thì bạn có thể rẽ nhánh trên đường mạch, nhưng tuyệt đối không được rẽ vào bất kỳ phần nào liên quan tới analog. Tốt hơn hết là các bạn phủ copper pour cho mạch. 2) Chạy mạch cho Opamp, có một số Opamp yêu cầu cụ thể việc chạy mạch in phải bao chân linh kiện không dùng. 3) Làm mạch lọc, các bạn tham khảo tài liệu đính kèm này. 4) Với một số loại cảm biến, vd như gyroscope, acc chẳng hạn (F ít làm việc với các loại công suất nên phần bên công suất các bạn thảo luận sau hoặc nhờ anh Nam hướng dẫn). Việc thực hiện một mạch lọc, phụ thuộc vào đặc tính nội của thiết bị. Nếu một số thiết bị cần mạch lọc tích cực, thì những cảm biến quán tính, bản thân bên trong nó đã có một mạch lọc. Khi thiết kế, chỉ cần thiết kế mạch lọc thông thấp RC thông dụng, và giá trị của nó bao nhiêu là phụ thuộc vào đặc tính cụ thể của mạch lọc đã có sẵn bên trong do nhà thiết kế làm. Sau đó, sự phối hợp với mạch lọc số sẽ cho một kết quả cực kỳ hiệu quả (thường dùng Kalman). Phương pháp thực hiện này cần các bạn phải hiểu về nó một cách chi tiết và hiểu biết rõ về nguyên lý của cảm biến mà các bạn sử dụng. Những vấn đề này đòi hỏi một kiến thức tổng hợp khá dài dòng, do vậy không tiện trình bày. Muốn chạy mạch in chuyên nghiệp, các bạn phải đi học những lớp thiết kế mạch (vd ở Đại học KHTN HCM có dạy buổi tối, chương trình của Sở khoa học công nghệ hay sao đó, hoặc một số bạn đang làm việc tại các công ty chuyên thiết kế mạch in của nước ngoài, sẽ được đào tạo chi tiết). Như vậy, tóm lược về việc chạy mạch in: - có một số vấn đề cơ bản, có thể dùng chung (vd 1) - có một số linh kiện đặc biệt, nó sẽ có yêu cầu cụ thể cho việc thiết kế mạch in (tham khảo một số tài liệu của TI về Opamp). - có thể thiết kế mạch lọc ADC tích cực hoặc thụ động (xem tài liệu tham khảo). - khi thiết kế bộ lọc, có thể có sự phối hợp giữa bộ lọc analog và bộ lọc số, khi đó cần hiểu rõ nguyên lý của đối tượng vì mạch lọc số nào (đa phần) đều dựa trên mô hình đối tượng. Chúc vui.
__________________
Công ty TNHH Thương mại và Giao nhận R&P store.hn@rpc.vn - store.hcm@rpc.vn Học PIC như thế nào? |
![]() |
![]() |
![]() |
#9 |
Nhập môn đệ tử
Tham gia ngày: Jul 2007
Bài gửi: 4
: |
Mình nghĩ là việc chọn loại mạch lọc nào phụ thuộc chủ yếu vào quán tính của đôi tượng cần đo. Với đối tượng đo là nhiệt độ có quán tính lớn, tốc độ thay đổi khoảng dưới 20 K/s , lại cộng thêm quán tính của bản thân senser nhiệt nữa,thì chỉ nên dùng mạch lọc RC. Không nên dùng mạch lọc tích cực nữa vì bản thân mạch lọc cũng sinh ra nhiễu. Nếu mạch lọc tích cực của bạn gép với ADC 8 bit như loại 0809 thì không co vấn đề gì. Tuy nhiên gép với loại 10 bit sẽ sinh ra nhiễu đáng kể. Để lắp loại mạch này cần có OPAM chất lượng cao. Lọc số thì quá phiền phức.
Vấn đề còn lại là chọn giá trị R,C như thế nào ?. Trong mạch RC, điện trở R là khâu tiêu tán. C đóng vai trò khâu tích phân. Có nghĩa là tín hiệu S sau khi đi qua mạch RC sẽ bằng phẳng hơn, đạo hàm theo thời gian: dS/dt giảm đi. Giả sử như bạn dùng senser nhiệt LM x35 chẳng hạn, đầu ra của nó thay đổi 10mV/K, tốc độ tôi đa của bạn chọn là 20K/s, thi đầu ra của senser có dV/dt<=200mV/s. Hằng sồ thời gian mạch RC là: T=RC phải nằm trong khoảng 1/5 đến 1/7 của giá trị dV/dt khi dùng ADC 8 bit. Và bằng 1/7 đến 1/9 khi dùng ADC 10 bit. Cơ sở của phép tính này tôi không tiện trình bày ra đây,tuy nhiên có thể trả lời các bạn bằng email. Giả dụ , chọn giá tri 1/7 : T=1/7*0.2=0.0286. Điện trở R không nên chọn nhỏ vì sẽ gây tổn hao công suất tác dụng mạch senser => sai số. Ta chon R=270k =>C=0.1uF. trong khi thử ngiêm, nếu thấy nhiệt độ hiển thị vấn quá nhạy thì có thể tăng giá trị tụ điện. Nếu diễn dải trên của mình quá ngây ngô thì cũng mong mọi người thông cảm. Địa chỉ email của mình: Tranktung14@yahoo.com. |
![]() |
![]() |
![]() |
#10 |
Đệ tử 2 túi
|
Tôi có quyển "Highspeed digital Design" có đề cập đến khá nhiều về nhiễu và cách xử lý nhiễu, ko biết cách nào post lên đây được.
Nói về phần thiết kế, một vấn đề không kém quan trọng về mạch in, đó chính là chất lượng của bản mạch in (hằng số điện môi, độ dày của lớp đồng, impedance...). Khi chạy dây còn tính đến độ rộng, khoảng cách giữa các dây sao cho đáp ứng đủ dòng với đường nguồn và trở kháng đối cũng như độ trễ của tín hiệu... Còn phần nguồn, IC họ 78XX được mọi người hay dùng, nhưng trong những yêu cầu cao nên tham khảo thêm các IC Voltage Reg của Linear, National, TI...Trong đó có phần recommend layout PCB khá đầy đủ. Như F đã nói, kỹ thuật thiết kế mạch in chuyên nghiệp không thể nói một vài bài ở đây được. Mong được cùng trao đổi với mọi người! Chúc vui. |
![]() |
![]() |
![]() |
#11 |
Nhập môn đệ tử
Tham gia ngày: Oct 2007
Bài gửi: 5
: |
Em mới nhận đề tài này:" Thiết kế bộ biến đổi A/D 8 bit trên vi mạch AD0809, tần số lấy mẫu 15KHz, lối ra trên thanh ghi 8 bit".
Có pác nào lĩnh hội qua cái này rồi thì share cho em ít tài liệu với or chỉ cho em trực tiếp luôn trên diễn đàn cũng được. Cảm ơn và hậu tạ! ![]() |
![]() |
![]() |
![]() |
#12 |
Nhập môn đệ tử
Tham gia ngày: Oct 2007
Bài gửi: 5
: |
mail của em là: anhlqcoltech@google.com
Thanks! |
![]() |
![]() |
![]() |
|
|