mình đang làm đề tài hiển thị ảnh lên monitor thông qua VGA của kit DE2 mà ko biết làm thế nào. mình đọc tài liệu mà cũng chưa hiểu lắm. bạn nào đã làm rồi có thể hướng dẫn cho mình được không? thanks nhiều nhiều
Thông báo
Collapse
No announcement yet.
VGA trên DE2
Collapse
X
-
Nguyên văn bởi ruaconb52 Xem bài viếtmình đang làm đề tài hiển thị ảnh lên monitor thông qua VGA của kit DE2 mà ko biết làm thế nào. mình đọc tài liệu mà cũng chưa hiểu lắm. bạn nào đã làm rồi có thể hướng dẫn cho mình được không? thanks nhiều nhiều
Bạn có thể cho mình mail để tiện trao đổi không. Hoặc bạn liên lạc với mình qua email : a.nguyen.mh@gmail.com
Comment
-
mình có code này ko có lỗi nhưng gắn monitor thì ko chạy được. bạn nào phát hiện lỗi thì cho mình biết nha.
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
ENTITY vga IS
PORT (CLOCK_50 : IN std_logic; --50Mhz clock
KEY : IN std_logic_vector(3 downto 0); --RESET
VGA_B: OUT std_logic_vector(9 downto 0);
VGA_R: OUT std_logic_vector(9 downto 0);
VGA_G: OUT std_logic_vector(9 downto 0);
VGA_CLK : OUT std_logic;
VGA_BLANK :OUT std_logic; --active low
VGA_SYNC : OUT std_logic;
VGA_HS : OUT std_logic;
VGA_VS : OUT std_logic);
END vga;
ARCHITECTURE vg OF vga IS
SIGNAL line_fin : std_logic; --variable to determine if a line has finished drawing
SIGNAL line_count : integer; --variable for counting the amount of lines drawn
SIGNAL frame_fin : std_logic; --variable to determine if a frame had finished drawing
SIGNAL CLOCK_25 : std_logic; --25Mhz clock
CONSTANT P1 : integer := 24; --Front porch (horizontal)
CONSTANT P2 : integer := 48; --Back porch (horizontal)
CONSTANT HSYNC_TIME : integer := 95; -- H_Sync pulse lenght
CONSTANT V1 : integer := 11250; --Front porch (vertical)
CONSTANT V2 : integer := 25500; --Back porch (vertical)
CONSTANT VSYNC_TIME : integer := 1600; -- V_Sync pulse lenght
BEGIN
VGA_SYNC<= '0';
pixel_draw : PROCESS(CLOCK_25,KEY(0)) --for drawing pixels and generating blank pulses
VARIABLE hcount : INTEGER := 0;
VARIABLE vcount : INTEGER := 0;
BEGIN
IF KEY(0)= '0' THEN
hcount := 0;
vcount := 0;
line_fin <= '0';
frame_fin <= '0';
line_count <= 0;
VGA_BLANK <= '1';
ELSIF rising_edge(CLOCK_25) THEN
IF line_count < 480 THEN
IF hcount < 640 THEN
VGA_R <= "1111111111";--send pixel information each clock_cycle
VGA_B <= "0000000000";
VGA_G <= "0000000000";
VGA_BLANK <= '1';
hcount := hcount+1;
line_fin <= '0';
ELSIF hcount = 640 THEN
line_fin <= '1'; --line finished, pulse line_fin and start blank pulse
hcount := hcount+1;
VGA_BLANK <= '0';
ELSIF hcount >640 and hcount <= 640+P1+HSYNC_TIME+P2 THEN
hcount := hcount+1;--keep blank pulse low for a set amount of time
line_fin <= '0';
VGA_BLANK <= '0';
ELSE
hcount := 1; --reset counters and increment line_counter
line_count <= line_count+1;
END IF;
ELSIF line_count = 480 THEN
IF vcount < 1 THEN --frame is finished; pulse frame_fin and initiate vertical blank pulse
vcount := vcount+1;
VGA_BLANK <= '0';
frame_fin <= '1';
ELSIF vcount >= 1 and vcount < V1+V2+VSYNC_TIME THEN
vcount := vcount+1; --keep blank pulse low for a set amount of time
frame_fin <= '0';
VGA_BLANK <= '0';
ELSE
vcount := 0; -- reset counters and line_counter
VGA_BLANK <= '1';
line_count <= 0;
END IF;
END IF;
END IF;
END PROCESS;
horizontal_synchronisation : PROCESS(CLOCK_25,KEY(0))
VARIABLE hsync_counter : INTEGER := 0;
VARIABLE hsync_started : INTEGER := 0;
BEGIN
IF KEY(0)= '0' THEN
VGA_HS <= '1';
hsync_counter := 0;
hsync_started := 0;
ELSIF rising_edge(CLOCK_25) THEN
IF line_fin = '1' or hsync_started = 1 THEN
hsync_started:= 1;
IF hsync_counter <= P1 THEN
hsync_counter := hsync_counter+1;--hsync stays high during front porch
VGA_HS <= '1';
ELSIF hsync_counter >= P1-1 and hsync_counter <= HSYNC_TIME+P1 THEN
hsync_counter := hsync_counter+1;--hsync activated
VGA_HS <= '0';
ELSIF hsync_counter >= HSYNC_TIME+P1-1 and hsync_counter < HSYNC_TIME+P1+P2 THEN
hsync_counter := hsync_counter+1;--hsync stays high during back porch
VGA_HS <= '1';
ELSE
hsync_counter := 0;--reset variables and counters
VGA_HS <= '1';
hsync_started := 0;
END IF;
ELSE
VGA_HS <= '1';
END IF;
END IF;
END PROCESS;
vertical_synchronisation : PROCESS(CLOCK_25,KEY(0))
VARIABLE vsync_counter : INTEGER := 0;
VARIABLE vsync_started : INTEGER := 0;
BEGIN
IF KEY(0) = '0' THEN
VGA_VS <= '1';
vsync_counter := 0;
vsync_started := 0;
ELSIF rising_edge(CLOCK_25) THEN
IF frame_fin = '1' or vsync_started = 1 THEN
vsync_started := 1;
IF vsync_counter < V1-1 THEN
vsync_counter := vsync_counter+1;
VGA_VS <= '1';
ELSIF vsync_counter >= V1-1 and vsync_counter < VSYNC_TIME+V1-1 THEN
vsync_counter := vsync_counter+1;
VGA_VS <= '0';
ELSIF vsync_counter >= VSYNC_TIME+V1-1 and vsync_counter < VSYNC_TIME+V1+V2 THEN
vsync_counter := vsync_counter+1;
VGA_VS <= '1';
ELSE
vsync_counter := 0;
VGA_VS <= '1';
vsync_started := 0;
END IF;
ELSE
VGA_VS <= '1';
END IF;
END IF;
END PROCESS;
vga_clk_gen : PROCESS(CLOCK_50,KEY(0))--devides 50MHz clock in 2, making it a 25MHz clock
VARIABLE count : INTEGER := 0;
BEGIN
IF KEY(0)= '0' THEN
CLOCK_25 <= '0';
VGA_CLK <= '0';
count := 0;
ELSIF rising_edge(CLOCK_50) THEN
IF count = 0 THEN
CLOCK_25 <= '1'; --1 period of 50MHz high
VGA_CLK <= '1';
count := 1;
ELSIF count = 1 THEN
CLOCK_25 <= '0'; --1 period of 50MHz low
VGA_CLK <= '0';
count := 0;
END IF;
END IF;
END PROCESS;
END vg;
Comment
-
mình có code này ko có lỗi nhưng gắn monitor thì ko chạy được. bạn nào phát hiện lỗi thì cho mình biết nha.
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;
ENTITY vga IS
PORT (CLOCK_50 : IN std_logic; --50Mhz clock
KEY : IN std_logic_vector(3 downto 0); --RESET
VGA_B: OUT std_logic_vector(9 downto 0);
VGA_R: OUT std_logic_vector(9 downto 0);
VGA_G: OUT std_logic_vector(9 downto 0);
VGA_CLK : OUT std_logic;
VGA_BLANK :OUT std_logic; --active low
VGA_SYNC : OUT std_logic;
VGA_HS : OUT std_logic;
VGA_VS : OUT std_logic);
END vga;
ARCHITECTURE vg OF vga IS
SIGNAL line_fin : std_logic; --variable to determine if a line has finished drawing
SIGNAL line_count : integer; --variable for counting the amount of lines drawn
SIGNAL frame_fin : std_logic; --variable to determine if a frame had finished drawing
SIGNAL CLOCK_25 : std_logic; --25Mhz clock
CONSTANT P1 : integer := 24; --Front porch (horizontal)
CONSTANT P2 : integer := 48; --Back porch (horizontal)
CONSTANT HSYNC_TIME : integer := 95; -- H_Sync pulse lenght
CONSTANT V1 : integer := 11250; --Front porch (vertical)
CONSTANT V2 : integer := 25500; --Back porch (vertical)
CONSTANT VSYNC_TIME : integer := 1600; -- V_Sync pulse lenght
BEGIN
VGA_SYNC<= '0';
pixel_draw : PROCESS(CLOCK_25,KEY(0)) --for drawing pixels and generating blank pulses
VARIABLE hcount : INTEGER := 0;
VARIABLE vcount : INTEGER := 0;
BEGIN
IF KEY(0)= '0' THEN
hcount := 0;
vcount := 0;
line_fin <= '0';
frame_fin <= '0';
line_count <= 0;
VGA_BLANK <= '1';
ELSIF rising_edge(CLOCK_25) THEN
IF line_count < 480 THEN
IF hcount < 640 THEN
VGA_R <= "1111111111";--send pixel information each clock_cycle
VGA_B <= "0000000000";
VGA_G <= "0000000000";
VGA_BLANK <= '1';
hcount := hcount+1;
line_fin <= '0';
ELSIF hcount = 640 THEN
line_fin <= '1'; --line finished, pulse line_fin and start blank pulse
hcount := hcount+1;
VGA_BLANK <= '0';
ELSIF hcount >640 and hcount <= 640+P1+HSYNC_TIME+P2 THEN
hcount := hcount+1;--keep blank pulse low for a set amount of time
line_fin <= '0';
VGA_BLANK <= '0';
ELSE
hcount := 1; --reset counters and increment line_counter
line_count <= line_count+1;
END IF;
ELSIF line_count = 480 THEN
IF vcount < 1 THEN --frame is finished; pulse frame_fin and initiate vertical blank pulse
vcount := vcount+1;
VGA_BLANK <= '0';
frame_fin <= '1';
ELSIF vcount >= 1 and vcount < V1+V2+VSYNC_TIME THEN
vcount := vcount+1; --keep blank pulse low for a set amount of time
frame_fin <= '0';
VGA_BLANK <= '0';
ELSE
vcount := 0; -- reset counters and line_counter
VGA_BLANK <= '1';
line_count <= 0;
END IF;
END IF;
END IF;
END PROCESS;
horizontal_synchronisation : PROCESS(CLOCK_25,KEY(0))
VARIABLE hsync_counter : INTEGER := 0;
VARIABLE hsync_started : INTEGER := 0;
BEGIN
IF KEY(0)= '0' THEN
VGA_HS <= '1';
hsync_counter := 0;
hsync_started := 0;
ELSIF rising_edge(CLOCK_25) THEN
IF line_fin = '1' or hsync_started = 1 THEN
hsync_started:= 1;
IF hsync_counter <= P1 THEN
hsync_counter := hsync_counter+1;--hsync stays high during front porch
VGA_HS <= '1';
ELSIF hsync_counter >= P1-1 and hsync_counter <= HSYNC_TIME+P1 THEN
hsync_counter := hsync_counter+1;--hsync activated
VGA_HS <= '0';
ELSIF hsync_counter >= HSYNC_TIME+P1-1 and hsync_counter < HSYNC_TIME+P1+P2 THEN
hsync_counter := hsync_counter+1;--hsync stays high during back porch
VGA_HS <= '1';
ELSE
hsync_counter := 0;--reset variables and counters
VGA_HS <= '1';
hsync_started := 0;
END IF;
ELSE
VGA_HS <= '1';
END IF;
END IF;
END PROCESS;
vertical_synchronisation : PROCESS(CLOCK_25,KEY(0))
VARIABLE vsync_counter : INTEGER := 0;
VARIABLE vsync_started : INTEGER := 0;
BEGIN
IF KEY(0) = '0' THEN
VGA_VS <= '1';
vsync_counter := 0;
vsync_started := 0;
ELSIF rising_edge(CLOCK_25) THEN
IF frame_fin = '1' or vsync_started = 1 THEN
vsync_started := 1;
IF vsync_counter < V1-1 THEN
vsync_counter := vsync_counter+1;
VGA_VS <= '1';
ELSIF vsync_counter >= V1-1 and vsync_counter < VSYNC_TIME+V1-1 THEN
vsync_counter := vsync_counter+1;
VGA_VS <= '0';
ELSIF vsync_counter >= VSYNC_TIME+V1-1 and vsync_counter < VSYNC_TIME+V1+V2 THEN
vsync_counter := vsync_counter+1;
VGA_VS <= '1';
ELSE
vsync_counter := 0;
VGA_VS <= '1';
vsync_started := 0;
END IF;
ELSE
VGA_VS <= '1';
END IF;
END IF;
END PROCESS;
vga_clk_gen : PROCESS(CLOCK_50,KEY(0))--devides 50MHz clock in 2, making it a 25MHz clock
VARIABLE count : INTEGER := 0;
BEGIN
IF KEY(0)= '0' THEN
CLOCK_25 <= '0';
VGA_CLK <= '0';
count := 0;
ELSIF rising_edge(CLOCK_50) THEN
IF count = 0 THEN
CLOCK_25 <= '1'; --1 period of 50MHz high
VGA_CLK <= '1';
count := 1;
ELSIF count = 1 THEN
CLOCK_25 <= '0'; --1 period of 50MHz low
VGA_CLK <= '0';
count := 0;
END IF;
END IF;
END PROCESS;
END vg;
Comment
-
Hi ruacon52,
Khi bạn chạy trên KIT DE2, bạn có để ý đèn màng hình không? Thông thường nếu nó chớp tắt (Màng hình VGA, không phải LCD nha) thì phần đồng bộ có vấn đề. Trên đĩa DE2 system (đi kèm với KIT) có một số phần demo liên quan đến VGA (Không nhớ rõ là viết bằng VHDL hay Verilog HDL), bạn có thể tham khảo. Còn thông số để setup cho VGA thì bạn có thể tham khảo những trang web mà bạn ToanXT đã đưa ra trong http://dientuvietnam.net/forums/showthread.php?t=29283.
Chúc bạn thành công.
Comment
-
Mình cũng đang làm đề tài này nhưng chỉ dừng ở mức mới giao tiếp được với monitor.Hiện nay mình đang muốn hiển thị 1 ảnh RGB 256x256x24 từ SRAM lên VGA nhưng chưa được.Lúc hiển thị thì chỉ hiện ra được 1 khung hình 256x256 nhưng toàn nhiễu.Mình thực hiện theo cách sau,sai chỗ nào xin mọi người chỉ giúp.
-Một pixel được lưu bằng 2 words (16bit) của SRAM.words có địa chỉ chẵn sẽ lưu giá trị của R và G,byte có địa chỉ lẻ lưu giá trị của B dưới dạn 00B.
-Địa chỉ truy xuất Sram được cập nhật liên tục bằng xung clock 50mhz,dựa vào tọa độ của pixel cần hiển thị.Dùng thêm 1 clk 25mhz để xác định là địa chỉ lẻ hoặc địa chỉ chẵn.
Comment
-
Làm vậy hình bị nhiễu là đúng rồi. Vì yêu cầu bạn phải xuất đồng thời 24 bit màu. Chứ không phải xuất tùng màu như bạn. Mà SRAM thì chỉ có 16 bit. Vậy sao bây giờ???
Bạn dùng SRAM là đúng. Cái này sẽ hiển thị tốt cho ảnh 16 bit màu. Để hiển thị ảnh 24 bit màu bạn có thể kết hợp hai bộ RAM. Một bộ RAM có trong FPGA và một là SRAM.
SRAM chứa dữ liệu của RG.
FPGA RAM chứa dữ liệu B. (hoặc thay đổi khác đi chút cũng được). Vậy thì có thể xuất đồng thời cả ba màu rồi.
Cái này năm ngoái tôi làm rồi. Chạy good lắm. Nhưng hình như chỉ làm ở kích thước 100x100 thôi. Vì giớ hạn của bộ RAM trong FPGA.
Thân chào.
Comment
-
bạn phuongnhoc làm rồi có thể share chương trình cho mình được không? mình cũng đang làm về hiển thị ảnh chứa trong sdram ra màn hình. giờ vẫn chưa biết quy trình làm như thế nào? bạn có thể hướng dẫn kĩ hơn chút được không?
địa chỉ mail của mình là ngobaviet@gmail.com.
thanks bạn nhiều
Comment
-
Oh`. Bạn làm hiển thị ảnh tư` SDRAM à. Đã giao tiếp được với SDRAM chưa.
Sorry mình không thể cho bạn code được. Nếu bạn cần hướng dẫn làm đề tài LV này thì có thể liên hệ với mình. Mình đã làm thành công đề tài
+ Trình diễn ảnh từ SD_card,.
+ Xử lý ảnh (các phương pháp lọc ảnh)". Chuẩn ảnh 24 bit màu.
+ Game with DE2 KIT
Nếu bạn nào cần hướng dẫn lv có thể liên hệ mình qua email: nguyentrungkien31111@yahoo.com
or 090 707 1167
Comment
-
Hi,
Dùng SRAM 256x16bit trên DE2 thì bạn cho chạy 50MHz. Do 1 pixel phải được xác định trong 1 chu kỳ 25MHz tức là 2 lần chu kỳ 50MHz. Như vậy 1 xung clock 25MHz thì bạn phải có 24bit màu (đúng hơn là 10x3 = 30 bit) => 1pixel phải dùng 2words <=> 32 bits hay truy xuất SRAM 2 lần và sử dụng chế độ 16bits. Như vậy màng hình rộng nhất có thể là 256x512 (RGB) (Còn vời ảnh mức xám thì đơn giản hơn nhiều vì R=G=B, như thế bạn sẽ giảm dụng lượng ô nhớ xuống 3 lần hay bạn có thể lưu ảnh lớn hơn). (Thật ra có thể rộng hơn chút nữa nhưng không cần thiết phải làm như thế). Cái mình nói trên đây chỉ là ảnh tỉnh thôi nha! Còn với Video thì làm cách khác. Nếu bạn muốn màng hình có độ phân giải cao hơn thì bạn có thể dùng SDRAM nhưng như thế bạn phải làm SDRAM Controller để giao tiếp với SDRAM, cái này thì không khó nhưng sẽ làm bạn mất thời gian đó.
Hi vong những thông tin này giúp ích cho các bạn muốn hiển thị ảnh tỉnh trên VGA dùng kit De2.
Comment
-
Làm như Danbeo85 thì mình chưa thử. Vì sợ các lý do sau:
+ Cần chuẩn bị sẳn 24 bit màu trước khi có cạnh lên xung Clock để đưa vào VGA. Vì ngay cạnh lên của xung Clock 24bit dữ liệu sẽ được chuyển vào thanh ghi đệm của VGA chip.
+ 24 bit cần được cấp đồng thời. Do vậy bạn cần có cách thanh ghi để chốt dữ liệu cho 2 byte cao và hai byte thấp.
+ Tính toán timming và latency cẩn thận.
=> có vẻ dùng tần số 100Mhz sẽ dễ điều khiẻn hơn vì có dư thời gian cho việc xuất dữ liệu.
Chỉ là lý thuyết thôi. Mình chưa thực hiện nên không chắc.
P/s Danbeo85: Hồi xưa làm SDRAM controller chưa vậy. Chỉ cho mình hướng giải quyết với. Sắp tậu được cái kit DE2 rồi.
Comment
-
SDR SDRAM Controller (Mình không đề cập đến DDR nha!)là một đề tài khác bạn ơi! Nhưng thật ra nó không quá khó để làm.
1) Bạn tìm hiểu cấu tạo DRAM và SDRAM nói chung để biết được cái khác biệt với SRAM là gì!
2) Tham khảo chuẩn JDEC về SDRAM (nếu không thể tìm được thì bạn có thể xem datasheet của các hãng làm SDRAM như Micron, Samsung, ... Nếu bạn có tài datasheet của SDRAM trên KIT DE2 thì cũng OK) để biết:
a) Những chân dùng để giao tiếp với SDRAM
b) Sơ đồ máy trạng thái của SDRAM
c) Các độ trễ cần thiết giữa các lệnh
3) Khi mô phỏng bộ điều khiễn bạn nên dùng SDRAM model của MICRON để mô phỏng nha vì cái này miễn phí và không bị mã hóa (SAMSUNG bị mã hóa). Các model sẽ đi cùng datasheet của SDRAM. Một lưu ý nhỏ là các model này đã kèm độ trễ nên khi mô phỏng chức năng của bộ điều khiển, bạn nhớ bỏ qua các báo lỗi về vấn đề này, bạn chỉ nên để ý đến các báo lỗi về chức năng thôi.
4) Tổng hợp và mô phỏng timing (mô phỏng có độ trễ). Tại thời điểm này thì sẽ không còn bất cứ lỗi nào được phép xảy ra nha!
5) Lưu ý: Bạn nên dùng một chuẩn giao tiếp thông dụng để viết lớp vỏ ngoài cho bộ điều khiển (Avalon Memory Map, AMBA AHB, ...) như thế sẽ thuận tiện trong việc gắng bộ điều khiển vào hệ thống.
Hi vọng những điều trên sẽ có ích cho bạn. Chúc bạn thành công!
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho tìm mua đồng hồ vạn năngbởi minh_tri_bk
-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 09:30 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi nguyendinhvanHỏi chỗ anh này là biết cách xử lý ngay thôi.
https://www.google.com/search?sca_es...AQtKgLegQIDxAB
Một là cái mach quá bẩn, nên mọi số liệu, giá trị đo, hiện tượng, triệu chứng ... chỉ có giá trị chém gió, tám gẫu và tham khảo.
Hai là...-
Channel: Điện tử công suất
hôm nay, 01:07 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi tuyennhanBác tìm coi mấy cái clip về tai nạn hàng không sẻ sáng tỏ nhiều điều ......
-
Channel: Điện tử công suất
Hôm qua, 11:02 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi tuyennhanChính xác mua tại hãng và mua qua đại lý khác nhau rất nhiều về giá và chất lượng ....
-
Channel: Điện tử công suất
Hôm qua, 10:51 -
-
Trả lời cho Xin giúp đỡ mạch chuông trò chơi ạ !!bởi DessrtTôi đồng ý, điều này thực sự thú vị....
-
Channel: Hỗ trợ học tập
31-01-2025, 22:08 -
-
Trả lời cho Năm mới dientuvietnam.netbởi mèomướpDạ năm mới cháu xin kính chúc ông, bà, cô, dì, chú, bác, anh, chị, em, các bạn, các cháu... trong diễn đàn sức khỏe dồi dào, gặp nhìu may mắn và thành công...
-
Channel: Tâm tình dân kỹ thuật
30-01-2025, 05:42 -
-
Trả lời cho Năm mới dientuvietnam.netbởi nhathung1101Chúc cả nhà ăn no mặc ấm, quần lúc có lúc không.
-
Channel: Tâm tình dân kỹ thuật
30-01-2025, 00:02 -
-
Trả lời cho Năm mới dientuvietnam.netbởi vandong1111Năm mới 2025 cháu chúc các chú, các bác mạnh khỏe, vui vẻ, gặp nhiều may mắn.
-
Channel: Tâm tình dân kỹ thuật
29-01-2025, 20:59 -
-
Trả lời cho tìm mua đồng hồ vạn năngbởi bqvietNói một cách xây dựng thì kiểu đồng hồ kiêm kẹp dòng NJTY3266 mà bạn Mèo đề cập là đúng nhu cầu người hỏi rồi. Một số cửa hàng bán trên 200ng, vài sàn thương mại điện tử bán dưới - thế là đúng nhu cầu về giá. Nếu khéo săn...
-
Channel: Điện tử dành cho người mới bắt đầu
27-01-2025, 20:02 -
-
Trả lời cho tìm mua đồng hồ vạn năngbởi nhathung1101Đa năng còn chưa dùng hết, nếu không biết cách dùng.
200k thì hơi khó mua, nhưng 50k chắc là có. Cứ bảo bán cho tôi cái đồng hồ hỏng.-
Channel: Điện tử dành cho người mới bắt đầu
26-01-2025, 23:21 -
Comment