PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Giao tiếp cổng COM và LPT (http://www.picvietnam.com/forum/forumdisplay.php?f=44)
-   -   RS232 và PIC16f877a (http://www.picvietnam.com/forum/showthread.php?t=9276)

stupid11 31-05-2011 01:42 AM

Thay đổi cường độ sáng không hề đơn giản chút nào (theo mình nghĩ) cái này dùng PWM để điều chỉnh độ sáng..với việc điều chỉnh được độ sáng thì người ta làm ra bảng led ma trận đa sắc...vì tất cả các màu đều được phối từ 3 màu cơ bản (R-G-B) mà...bạn lên google với từ khoá bảng led ma trận đa sắc ,có nhiều cho bạn tham khảo lắm...

phatcddt08a 31-05-2011 08:56 AM

ok !!! .
 
mình củng đã từng làm bằng xung nhưng chưa thấy kết quả gì hết .mình thấy có một số phần mềm có thể quet led thay đổi cường độ sáng luôn như ledimm pro nhưng dành cho 89. nạp trực tiếp vào mạch không cần mạch nạp .

hein_ts 17-07-2011 03:07 AM

Pantovi: Máy hiểu đúng nhưng chương trình của bạn thì có vấn đề.
Ví dụ nhé, khi máy vừa thực hiện xong cái lệnh so sánh thứ nhất mà ngắt RDA xuất hiện, lúc đó data bị thay đổi thì hai câu so sánh đó chẳng có ý nghĩa lắm. -> chương trình xử lý nên nằm luôn trong hàm ngắt thì hơn.
Trong vòng while bạn nên sử dụng cấu trúc switch --case, và thực tế là nên làm vừa tắt vừa mowe, ví dụ như A là tắt, a là mở. Nễu như bạn viết thì role =0 được lần đầu, lần sau có so sánh đi nữa thì giá trị nó vẫn bằng 0 mà.

hoanglangtu 21-08-2011 10:09 PM

Chào các bạn, minh đang làm giao tiếp PC và PIC sử dụng com ảo, nhưng giá trị gửi từ máy tính 4 số 0, 1, 2, 3, 4 chỉ nhận đúng 0 và 1, còn 3 thì nhận được 1, 4 thì nhận được 0, nói chung số chẫn nhân 0, số lẻ nhận được 1. Nhờ các bạn giải thích và sửa dúp dùm mình.
Chương trình VB
Dim i As Byte
Private Sub CmdSend_Click()
i = 0
MSComm1.Output = Chr(i)
End Sub

Private Sub Command1_Click()
i = 1
MSComm1.Output = Chr(i)
End Sub

Private Sub Command2_Click()
End
End Sub

Private Sub Command3_Click()
i = 2
MSComm1.Output = Chr(i)
End Sub

Private Sub Command4_Click()
i = 3
MSComm1.Output = Chr(i)
End Sub

Private Sub Form_Load()
MSComm1.CommPort = 5
MSComm1.PortOpen = True
'i = 0
Text1.Text = "DKM"
Text1.Enabled = False
End Sub

Chương trình CSS
#include <16F877A.h>
#FUSES NOWDT, HS, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock=20000000)
#use rs232(baud=9600,parity=n,xmit=pin_C6,rcv=pin_C7)
#include <DEFS_16F877A.h>
char value;
#int_RDA
void RDA_isr(void)
{
value = getc();
switch(value)
{
case 0:
{
PORTB = 0x0f;
break;
}
case 1:
{
PORTB = 0x07;
break;
}
case 2:
{
PORTB = 0x08;
}
case 3:
{
PORTB = 0x09;
break;
}
}
}

void main()
{
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
set_tris_B(0);
PORTB = 0;
while(true)
{
;
}
}

student_dtvt 12-10-2011 09:35 PM

Mấy bác cho em hỏi cái này. Em truyền nhận dữ liệu giữa 16f877 và VB6 đã nhận đc nhưng chỉ với thạch anh 4000000Hz, khi thay đổi cái này thì lại không nhận được. Em làm với kit thạch anh 24Mhz ko thể nhận dữ liệu được. Mong các bác chỉ giáo giùm em với.

VB:

Private Sub Command1_Click()
On Error GoTo OpenFalse
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
Exit Sub
OpenFalse:
MsgBox Err.Description & vbLf + vbCr + "Loi, khong the mo cong. Hay dong cac ung dung dang su dung cong COM"

End Sub

Private Sub Command2_Click()
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
End
End Sub

Private Sub Command3_Click()
On Error GoTo sendfalse
MSComm1.Output = Text1.Text
Exit Sub
sendfalse:
MsgBox Err.Description & vbLf + vbCr + "Loi, Cong COM chua duoc mo, nhan Connect"
End Sub

Private Sub Form_Load()
With MSComm1
.Settings = cmbBaudRate.Text + "N,8,1"
.RThreshold = 1
.SThreshold = 0
.InBufferSize = 1024
.OutBufferSize = 1024
.InputMode = comInputModeText
.ParityReplace = ""
.CommPort = Switch(cmbComPort.Text = "COM 1", 1, cmbComPort.Text = "COM 2", 2, cmbComPort.Text = "COM 3", 3, cmbComPort.Text = "COM 4", 4)
End With
End Sub

Private Sub MSComm1_OnComm()
Dim StringIn As String
If MSComm1.CommEvent = comEvReceive Then
StringIn = MSComm1.Input 'Nhan chuoi du lieu to VCOM
Text2.Text = StringIn
End If
End Sub




PIC:
#include <16f877a.h>
#FUSES NOWDT, HS, NOPUT,NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#use rs232(baud=9600, parity=N, xmit=pin_C6, rcv=pin_C7)
#include <stdlib.h>
#byte porta = 0x05
#byte portb = 0x06
#byte portc = 0x07
#byte porte = 0x09
int8 y,i,a,b,c,d,e;
int16 x;
char string[5];
BYTE CONST maled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};

void nhan_rs232()
{

for(i=0;i<=4;i++)
{
string[i]=getc();
}
printf("%s",string);
y=0;
x=atol(string);
a=x/10000;
x=x%10000;
b=x/1000;
x=x%1000;
c=x/100;
x=x%100;
d=x/10;
x=x%10;
e=x;

a=maled[a];
b=maled[b];
c=maled[c];
d=maled[d];
e=maled[e];

for(i=0;i<=200;i++)
{
output_A(0b01111);
output_D(a);
delay_ms(1);
output_A(0b11111);

output_A(0b10111);
output_D(b);
delay_ms(1);
output_A(0b11111);

output_A(0b11011);
output_D(c);
delay_ms(1);
output_A(0b11111);

output_A(0b11101);
output_D(d);
delay_ms(1);
output_A(0b11111);

output_A(0b11110);
output_D(e);
delay_ms(1);
output_A(0b11111);
}


}
/*void xoa()
{
for(i=0;i<=4;i++)
{
string[i]=0;
}
}*/
void main()
{
set_tris_b(0);
set_tris_e(0);
while(true)
{
if(y==0)
{
nhan_rs232();
delay_ms(100);

}
}
}


Em làm nhận một số 5 chữ số hiển thị led 7 đoạn

đây là file mô phỏng: http://www.mediafire.com/?d4g26cwn4bx4g8y

hangocminh1989 14-10-2011 01:21 AM

Trích:

Nguyên văn bởi student_dtvt (Post 50587)
Mấy bác cho em hỏi cái này. Em truyền nhận dữ liệu giữa 16f877 và VB6 đã nhận đc nhưng chỉ với thạch anh 4000000Hz, khi thay đổi cái này thì lại không nhận được. Em làm với kit thạch anh 24Mhz ko thể nhận dữ liệu được. Mong các bác chỉ giáo giùm em với.

VB:

Private Sub Command1_Click()
On Error GoTo OpenFalse
If MSComm1.PortOpen = False Then
MSComm1.PortOpen = True
End If
Exit Sub
OpenFalse:
MsgBox Err.Description & vbLf + vbCr + "Loi, khong the mo cong. Hay dong cac ung dung dang su dung cong COM"

End Sub

Private Sub Command2_Click()
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
End
End Sub

Private Sub Command3_Click()
On Error GoTo sendfalse
MSComm1.Output = Text1.Text
Exit Sub
sendfalse:
MsgBox Err.Description & vbLf + vbCr + "Loi, Cong COM chua duoc mo, nhan Connect"
End Sub

Private Sub Form_Load()
With MSComm1
.Settings = cmbBaudRate.Text + "N,8,1"
.RThreshold = 1
.SThreshold = 0
.InBufferSize = 1024
.OutBufferSize = 1024
.InputMode = comInputModeText
.ParityReplace = ""
.CommPort = Switch(cmbComPort.Text = "COM 1", 1, cmbComPort.Text = "COM 2", 2, cmbComPort.Text = "COM 3", 3, cmbComPort.Text = "COM 4", 4)
End With
End Sub

Private Sub MSComm1_OnComm()
Dim StringIn As String
If MSComm1.CommEvent = comEvReceive Then
StringIn = MSComm1.Input 'Nhan chuoi du lieu to VCOM
Text2.Text = StringIn
End If
End Sub




PIC:
#include <16f877a.h>
#FUSES NOWDT, HS, NOPUT,NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#use rs232(baud=9600, parity=N, xmit=pin_C6, rcv=pin_C7)
#include <stdlib.h>
#byte porta = 0x05
#byte portb = 0x06
#byte portc = 0x07
#byte porte = 0x09
int8 y,i,a,b,c,d,e;
int16 x;
char string[5];
BYTE CONST maled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};

void nhan_rs232()
{

for(i=0;i<=4;i++)
{
string[i]=getc();
}
printf("%s",string);
y=0;
x=atol(string);
a=x/10000;
x=x%10000;
b=x/1000;
x=x%1000;
c=x/100;
x=x%100;
d=x/10;
x=x%10;
e=x;

a=maled[a];
b=maled[b];
c=maled[c];
d=maled[d];
e=maled[e];

for(i=0;i<=200;i++)
{
output_A(0b01111);
output_D(a);
delay_ms(1);
output_A(0b11111);

output_A(0b10111);
output_D(b);
delay_ms(1);
output_A(0b11111);

output_A(0b11011);
output_D(c);
delay_ms(1);
output_A(0b11111);

output_A(0b11101);
output_D(d);
delay_ms(1);
output_A(0b11111);

output_A(0b11110);
output_D(e);
delay_ms(1);
output_A(0b11111);
}


}
/*void xoa()
{
for(i=0;i<=4;i++)
{
string[i]=0;
}
}*/
void main()
{
set_tris_b(0);
set_tris_e(0);
while(true)
{
if(y==0)
{
nhan_rs232();
delay_ms(100);

}
}
}


Em làm nhận một số 5 chữ số hiển thị led 7 đoạn

đây là file mô phỏng: http://www.mediafire.com/?d4g26cwn4bx4g8y

bạn quả nhiên lợi hại, cho mình hỏi 1 câu hơi ngớ ngẩn là bạn đã đọc datasheet của con 16f877a chưa vậy? nếu đọc rồi thì cho mình hỏi tần số thạch anh cao nhất con pic này có thể chạy là bao nhiêu thê? bạn bắt nó chạy ở 24mhz có mà nó chạy bằng niềm tin à?

cho87 14-10-2011 07:56 PM

đây là đồ án giao tiếp máy tính mình làm vừa xong , mình chia sẽ cho cac bạn cùng tham khảo
http://www.mediafire.com/?xz5d77h57x9bkql

cho87 14-10-2011 08:02 PM

thao khảo nè
http://www.mediafire.com/?xz5d77h57x9bkql

vudiepdh1 11-12-2011 01:27 PM

Trích:

Nguyên văn bởi cho87 (Post 50637)

Mình vẫn chưa rõ đề tài của bạn về cái gì ? vs lại chạy bằng proteus ko thấy xi nhê gì cả ! Thân

acestartn 01-01-2012 11:59 PM

mong các bạn giúp mình với
 
1 Attachment(s)
mình đang làm đề tài giao tiếp máy tính,điều khiển thiết bị và đo nhiệt độ.
mình có tham khảo chương trình của Stupid11.Mình làm theo,kết nói được nhưng đèn trên vb ko sáng.các bạn có thể giúp mình gửi nhiệt độ lên vb được ko?

hoangson_200529 20-03-2012 12:54 PM

lập trình Vb 6.0 tren laptop thì làm sao giao tiếp được qua cổng Com. các anh giúp em cho này.
theo em bit thì VB không hổ trợ giao tiếp cổng USB

hoangson_200529 20-03-2012 01:04 PM

Vb 6.0 không hổ trợ giao tiếp quan cổng USB, nhưng Laptop không có cổng Com, Z phải làm thế nào các anh


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam