Mình cũng gặp rắc rối với vấn đề này. Code cho Atmega16 mình dùng wizard của CodeVisionAVR, PC thì dùng C#. Atmega16 chỉ làm mỗi nhiệm vụ là nhận được byte nào thì forward nó ra TxD luôn. Mạch nối ghép dùng MAX-232, mình lắp theo datasheet của nó. Nhưng không hiểu sao PC gửi hàng chục ký tự thì VDK mới gửi lại một ký tự, và ký tự đó cũng không chính xác là ký tự mà PC đã gửi. Baudrate và format mình đã chọn giống hệt nhau rùi: 9600, 8, non-pairity , 1 bit stop . Có bạn nào giải thích cho mình lý do tại sao với.
Thông báo
Collapse
No announcement yet.
Giao tiep ATmega16 với PC bằng Max232
Collapse
X
-
Giúp em với!Em cũng đang gặp vấn đề rắc rối về việc chuyển dữ liệu từ ATmega16 lên máy tính
đồ án của em thì AVR chỉ làm nhiệm vụ chuyển dữ liệu lên máy tính, còn mọi việc tính toán là bọn em phải xử lý trên máy tính hết. Nhưng khó ở chỗ là tín hiệu đầu vào VĐK của bọn em là dữ liệu 16bit, theo em được biết thì dữ liệu đầu vào máy tính chỉ là 8bit. Máy tính chỉ truyền nhận dữ liệu 8bit.Vì thế mà bọn em ko biết phải xử lý tình huống này như thế nào. Mong các bác chỉ bảo giùm tụi em với.
Comment
-
Cảm ơn bác apple! bác có thể nói rõ hơn cho em được không ạ?:
- code viết cho AVR để "cắt 16bit ra làm đôi rồi truyền" như bác nói (em dùng C viết cho AVR) như thế nào ạ? Vì em cũng mới làm quen với AVR thôi nên còn hạn chế rất nhiều
- bác có thể nói rõ hơn về "Lập trình cho chương trình nhận trên PC trigger sau khi nhận 2byte" được không? em chưa hiểu lắm ý của bác
thanks!
Comment
-
Nguyên văn bởi miss_yen Xem bài viếtCảm ơn bác apple! bác có thể nói rõ hơn cho em được không ạ?:
- code viết cho AVR để "cắt 16bit ra làm đôi rồi truyền" như bác nói (em dùng C viết cho AVR) như thế nào ạ? Vì em cũng mới làm quen với AVR thôi nên còn hạn chế rất nhiều
- bác có thể nói rõ hơn về "Lập trình cho chương trình nhận trên PC trigger sau khi nhận 2byte" được không? em chưa hiểu lắm ý của bác
thanks!
-Phần lập trình trên PC, nếu bạn dùng VB thì trong điều khiển MSOCX sẽ có thuộc tính trigger. Thuộc tính này quy định sẽ xuất dữ liệu ra ngoài sau khi PC nhận được bao nhiêu byte. Bạn tham khảo bên phần lập trình giao tiếp PC bằng VB của bác Ngo Hai Bac sẽ rõ, mình nói lại sẽ thành ăn cắp bản quyền của các bậc tiền bối.Mấy ai định nghĩa được tình yêu.
Có gì đâu một buổi chiều.
Kề dao lên cổ yêu hay chết .
Gật đầu cái rụp thế là yêu.
--------
Apple
Comment
-
Nguyên văn bởi thangktvta Xem bài viếtTôi cũng đã thực hiện như bác. Nhưng viết bằng C trên Code Vision. Dùng Winzard trong Code vision thì đỡ phần UART_init. Bác chỉ cần viết hai hàm Truyền và Nhận, tương dữ liệu vào là Truyền lên PC được thôi. Tiếc là tôi không mang theo Code ở đây. Hẹn hôm sau nhé.
Bác có gì post bài lên em tham khảo với
nich của em conan8620042002@yahoo.com
Comment
-
Atmega16 - RS232
Doạn code sau tôi viết cho vi điều khiển Atmega16 để truyền dữ liệu lên máy tính theo chuẩn giao tiếp RS232 nhưng không chạy, không biết tại sao. Mong mọi người chỉ giùm!
Truyền dữ liệu 8 bit, 2 bit stop, 9200bps.
# include <iom16v.h>
void CPU_init(void)
{
asm("CLI");
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00;
asm("SEI");
}
void PORT_init(void)
{
DDRA=0x00;
DDRB=0xFF;
DDRC=0xFF;
DDRD=0x00;
}
void usart_init()
{
UCSRA=0x00;
UCSRB=0x00;
UBRRH=0x00;
UBRRL=0x33;
UCSRC=(1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
UCSRB=(1<<RXEN)|(1<<TXEN);
}
void USART_Transmit( unsigned char data )
{
while ( !( UCSRA & (1<<UDRE)))
{}
UDR = data;
}
void main(void)
{
CPU_init();
PORT_init();
usart_init();
while(1)
{
USART_Transmit(65);
}
}
Comment
-
Nguyên văn bởi P511 Xem bài viếtDoạn code sau tôi viết cho vi điều khiển Atmega16 để truyền dữ liệu lên máy tính theo chuẩn giao tiếp RS232 nhưng không chạy, không biết tại sao. Mong mọi người chỉ giùm!
Truyền dữ liệu 8 bit, 2 bit stop, 9200bps.
# include <iom16v.h>
void CPU_init(void)
{
asm("CLI");
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00;
asm("SEI");
}
void PORT_init(void)
{
DDRA=0x00;
DDRB=0xFF;
DDRC=0xFF;
//DDRD=0x00;
DDRD.0=0;
PORTD.0=1;
DDRD.1=1;
}
void usart_init()
{
UCSRA=0x00;
UCSRB=0x00;
UBRRH=0x00;
UBRRL=0x33;
UCSRC=(1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
UCSRB=(1<<RXEN)|(1<<TXEN);
}
void USART_Transmit( unsigned char data )
{
while ( !( UCSRA & (1<<UDRE)))
{}
UDR = data;
}
void main(void)
{
CPU_init();
PORT_init();
usart_init();
while(1)
{
USART_Transmit(65);
}
}
bạn thử truyền thử nha.
DDRD.0=0;
PORTD.0=1;
DDRD.1=1;Phone: 0909319477
Email:
Comment
-
Nguyên văn bởi viewerbk Xem bài viếtputchar("Hello");//kiem tra xem cong com co hoat dong khong
Code:putchar('Hello');//kiem tra xem cong com co hoat dong khong
Nói chung là thay dấu (") bằng (')
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Cần tăng tốc bộ đếmbởi nhathung1101Thì bản thân nó đã sai rồi mà. Lão tin nó mà lắp vào máy đếm tiền thì tôi thành thật chia buồn.
...-
Channel: Điện tử công nghiệp
Hôm qua, 02:54 -
-
Trả lời cho Hỏi thăm các cao nhân, các bác sống bằng gì?bởi nhathung1101AI chỉ là "trí tuệ nhân tạo" thôi. Có gì đáng lo chứ.
Em đang lo đàn bò nhân tạo nó lập trình ra "trí tuệ phân tạo" thì mới khó trả lương.
Vì chúng toàn đòi tính bằng "bít coi" hay "hít hôi"...
...-
Channel: Xu hướng, nhu cầu và thị trường
Hôm qua, 02:49 -
-
bởi nguyendinhvanĐại ý là nó như thế này
1/2 + 1/4 + 1/8 + 1/8 = 1w
100 omh = 0.5w
200 omh = 0,25w
360 omh = 1/8w
560 omh = 1/8w
Tính chi li thì cs của cá 360 omh phải lớn hơn cái 560 omh. Nhưng xét lại thì chả có cái hãng sx linh kiện dở...-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 02:10 -
-
Trả lời cho Hỏi thăm các cao nhân, các bác sống bằng gì?bởi nguyendinhvanThì mới hôm trước có chỗ nào đó đang tuyển Thày Cãi điện tử đấy !...
-
Channel: Xu hướng, nhu cầu và thị trường
Hôm qua, 01:34 -
-
Trả lời cho Cần tăng tốc bộ đếmbởi nguyendinhvanLàm như thế là không được. vì nó sẽ sai thành hàng chục đơn vị....
-
Channel: Điện tử công nghiệp
Hôm qua, 01:32 -
-
bởi trthnguyenVẫn thiếu dữ kiện
Gọi công suất của trở là P(R), điện áp 2 đầu trở là U, dòng điện qua trở là I thì trở an toàn khi P(R) < U x I hoặc P(R) < I x I x R...-
Channel: Điện tử dành cho người mới bắt đầu
28-09-2024, 14:21 -
-
bởi yeurap7em chưa biết chọn loại điện trở bao nhiêu W để khi cấp 1 W đầu vào,4 con trở dán ko bị hỏng .
trên web em tìm thì có nhiêu loại trở dán ví dụ 0805 1w ,1206 0.25 w, 1210 0.5w ..vv ....
(theo e biết là đầu vào 1 w mà chia làm 2, thì đầu...-
Channel: Điện tử dành cho người mới bắt đầu
27-09-2024, 14:53 -
-
bởi yeurap7em xin bổ sung:
R1: 100 ohm
R2: 200 ohm
R3: 360 ohm
R4:560 ohm
PCB: chất liệu RF 35,độ dày lớp đồng 0,04 mm,độ rộng đường đi min 0,5 mm ạ-
Channel: Điện tử dành cho người mới bắt đầu
27-09-2024, 14:52 -
Comment