chào các Anh!Nhờ mấy Anh chỉ dùm : khi đẩy dữ liệu từ pic8f4550 thông qua việc đọc ADC lên mấy tính để vể đò thị bầng C#.Em xin hỏi mấy Anh là dữ liệu đó sau khi đẩy vào máy tính thì nằm ở đâu và lấy như thế nào để vẻ ?Anh nào có tài liệu xin gửi cho Em với qua gmail : letanminhqn@gmail.com Em cảm ơn các Anh nhiều.
Thông báo
Collapse
No announcement yet.
Các vấn đề ADC/DAC trong PIC
Collapse
X
-
cac bac ai co tai lieu noi ve con pic 18f4520 ko? cho e voi . e dang lam bao cao tot ngiep.ma khong co tai lieu ve no. tim mai chang dc. bac nao co cho em voi nha! tai lieu noi ve chac nang cac chan cua no ay.e dang can gap wa sap fai nop mat roi.
Comment
-
-
Nguyên văn bởi luckystart Xem bài viếtmấy bác cho em hỏi con pic của em cứ nạp là nó đơ,nghĩa là nó vẫn chạy chương trình cũ,vậy ko xóa được hả các bác?
Comment
-
Mọi người xem giúp em code ADC trên 12F683
Em viết code này cho con 12F683 nhưng hình như là nó ko đọc được giá trị ADC! Em đã thử mô phỏng trên máy tính nhưng nó vẫn vậy, kể cả nạp vào mạch chạy thử!
Code:#include <12F683.h> #device *=16 ADC = 10 #fuses NOMCLR, INTRC_IO,NOWDT,NOPROTECT, NOPUT, NOPROTECT, NOBROWNOUT, NOCPD #use delay (clock=8000000) int16 var1; void main() { setup_oscillator(OSC_8MHZ); SETUP_ADC(ADC_CLOCK_DIV_2); SETUP_ADC_PORTS(sAN1|VSS_VDD ); delay_us(10); var1 = 0; while (true) { SET_ADC_CHANNEL(sAN1); delay_us(10); var1 = READ_ADC(ADC_START_AND_READ); delay_us(10); if (var1 >= 500) { output_high(pin_a4); delay_ms(100); output_low(pin_a4); } else { output_high(pin_a2); delay_ms(200); output_low(pin_a2); } } }
Comment
-
sử dụng pic để điều rộng xung pwm
1, khởi tạo chân xuất pwm
set_pwm_1(pwm)
2, setting chu kỳ xung
setup_timer1(a,b,c) // chuky = (4/f)*(a)(b+1)
3, phat xung pwm
set_pwm_duty(value) // độ rộng xung = (1/f)*value*a , suy ra độ rộng xung (max) khi chu kỳ = độ rộng xung , suy ra value = 4*(b+1)
OK ---> VẬY LÀ BẠN ĐÃ TÌM ĐƯỢC VALUEMIN = 0 , VALUEMAX = 4*(B+1) NHÉ !!
TỪ ĐÓ ĐƯA VÀO VÒNG LẶP FOR(J = 0 ; J < VALUEMAX ; J++)
{
SET_PWM_DUTY(J) ;
DELAY_MS(10) ;
}
CHÚC THÀNH CÔNG ,
Comment
-
mọi người giúp phần adc hiển thị nhiệt độ ra led 7 seg hoặc lcd
e đang học con 18f4620,có làm mạch đo nhiệt độ dùng adc trong của pic hiển thị ra led 7 thanh hoặc lcd.Mọi người xem hộ xem lỗi ở đâu mà nó k hiển thị đc.E nghĩ là dữ liệu k truyền đc từ adc ra nhưng k hiểu vì sao.(E lập trình bằng C18)
phần code hiển thị ra led 7 thanh:
Code:#include "p18f4620.h" #include "delays.h" #include "adc.h" #pragma config OSC=HS, WDT=OFF const unsigned char dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int a,b,n,doC,dvi,chuc,tram; void convert(int a) { tram=a/100; a=a%100; chuc=a/10; dvi=a%10; } void hienthi() // quet led { for(n=0;n<10;n++) { PORTB=dig[dvi]; PORTD=0x01; //bat led 1 Delay100TCYx(20); // tre 100us PORTB=dig[chuc]; PORTD=0x02; // bat led 2 Delay100TCYx(20); PORTB=dig[tram]; PORTD=0x04; // bat led 3 Delay100TCYx(20); } } void main(void) { TRISB=0; // chon cong B la cong ra TRISD=0; // chon cong D la cong ra TRISAbits.TRISA0=1; // chon cong A la cong vao ADCON0=0x03; //bit0 cho phep chuyen doi,bit1 trang thai,bit2-5 chon kenh ADCON1=0x0E; //bit0-3 chon che do analog hay digital,bit4-5 chon Vref+ va Vref- ADCON2bits.ACQT2=1; // ADCON2bits.ACQT1=0; // ADCON2bits.ACQT0=0; //3 bits lua chon thoi gian thu thap du lieu TAD ADCON2bits.ADCS2=1; // ADCON2bits.ADCS1=0; // ADCON2bits.ADCS0=1; //3 bits lua chon tan so chuyen doi Delay10TCY(); b = ReadADC(); doC = (b-558.558)/2.048; //tùy ADC 8bit hay 10 bit tính toán giá tri a = doC; convert((int)a); Delay10TCY(); while(1) { b = ReadADC(); doC = (b-558.558)/2.048; convert((int)a); hienthi(); } }
Code:#include "p18f4620.h" #include "delays.h" #include "adc.h" #pragma config OSC=HS, WDT=OFF char b,doC; long s; unsigned char i,li,lj,s1[10]; #define rs LATDbits.LATD0 #define rw LATDbits.LATD1 #define en LATDbits.LATD2 void delay (unsigned char time ) // ham co tac dung delay thoi gian lon { for ( li=0 ; li<80; li++ ) for ( lj=0 ; lj<time; lj++) {} } void lenh_LCD (unsigned char s) // ham dua 1 lenh ra ngoai LCD { LATC=s; rs=0; // rs=0 thong bao rang gia tri truyen len ghi vao thanh ghi lenh rw=0; en=1; delay(1); en=0; delay(1); } void data_LCD (unsigned char s) // ham dua 1 lenh ra ngoai LCD { LATC=s; TRISD=0xF8 ; // cho 3 bit thap nhat duoc lam cong ra rs=1; // rs=0 thong bao rang gia tri truyen len ghi vao thanh ghi lenh rw=0; en=1; delay(1); en=0; } void main(void) { INTCON=0x00; TRISAbits.TRISA0=1; //cong A0 lam dau vao tu cam bien TRISC=0x00; //cong C lam cong ra du lieu TRISD=0xF8; //3 bit thap nhat lam cong ra dieu khien lenh_LCD(0x38); // dua ra LCD gia tri hang cot la 5*7 lenh_LCD(0x0E); // hien con tro // lenh_LCD(0x01); // xoa man hinh LCD ADCON0=0x03; //bit0 cho phep chuyen doi,bit1 trang thai,bit2-5 chon kenh ADCON1=0x0E; //bit0-3 chon che do analog hay digital,bit4-5 chon Vref+ va Vref- ADCON2bits.ACQT2=1; // ADCON2bits.ACQT1=0; // ADCON2bits.ACQT0=0; //3 bits lua chon thoi gian thu thap du lieu TAD ADCON2bits.ADCS2=1; // ADCON2bits.ADCS1=0; // ADCON2bits.ADCS0=1; //3 bits lua chon tan so chuyen doi Delay10TCY(); b = ReadADC(); doC == (b-558.558)/2.048; //tùy ADC 8bit hay 10 bit tính toán giá tri s1[i]==doC; while(1) { lenh_LCD(0x01); delay(500); data_LCD(s1[i]); data_LCD('d'); data_LCD('o'); data_LCD('C'); delay(500); } }
Attached Files
Comment
-
Nó không chạy được bởi vì tống cả một đống mã nguồn vào, thay vì thử từng mô-đun nhỏ một, lại cộng thêm việc chạy mô phỏng chứ không phải mạch thật. Kiểu làm như vậy thì không bao giờ (trừ trường hợp cực kỳ may mắn) thành công được.
Comment
-
Nguyên văn bởi eethn Xem bài viếte đang học con 18f4620,có làm mạch đo nhiệt độ dùng adc trong của pic hiển thị ra led 7 thanh hoặc lcd.Mọi người xem hộ xem lỗi ở đâu mà nó k hiển thị đc.E nghĩ là dữ liệu k truyền đc từ adc ra nhưng k hiểu vì sao.(E lập trình bằng C18)
phần code hiển thị ra led 7 thanh:
Code:#include "p18f4620.h" #include "delays.h" #include "adc.h" #pragma config OSC=HS, WDT=OFF const unsigned char dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; int a,b,n,doC,dvi,chuc,tram; void convert(int a) { tram=a/100; a=a%100; chuc=a/10; dvi=a%10; } void hienthi() // quet led { for(n=0;n<10;n++) { PORTB=dig[dvi]; PORTD=0x01; //bat led 1 Delay100TCYx(20); // tre 100us PORTB=dig[chuc]; PORTD=0x02; // bat led 2 Delay100TCYx(20); PORTB=dig[tram]; PORTD=0x04; // bat led 3 Delay100TCYx(20); } } void main(void) { TRISB=0; // chon cong B la cong ra TRISD=0; // chon cong D la cong ra TRISAbits.TRISA0=1; // chon cong A la cong vao ADCON0=0x03; //bit0 cho phep chuyen doi,bit1 trang thai,bit2-5 chon kenh ADCON1=0x0E; //bit0-3 chon che do analog hay digital,bit4-5 chon Vref+ va Vref- ADCON2bits.ACQT2=1; // ADCON2bits.ACQT1=0; // ADCON2bits.ACQT0=0; //3 bits lua chon thoi gian thu thap du lieu TAD ADCON2bits.ADCS2=1; // ADCON2bits.ADCS1=0; // ADCON2bits.ADCS0=1; //3 bits lua chon tan so chuyen doi Delay10TCY(); b = ReadADC(); doC = (b-558.558)/2.048; //tùy ADC 8bit hay 10 bit tính toán giá tri a = doC; convert((int)a); Delay10TCY(); while(1) { b = ReadADC(); doC = (b-558.558)/2.048; convert((int)a); hienthi(); } }
Code:#include "p18f4620.h" #include "delays.h" #include "adc.h" #pragma config OSC=HS, WDT=OFF char b,doC; long s; unsigned char i,li,lj,s1[10]; #define rs LATDbits.LATD0 #define rw LATDbits.LATD1 #define en LATDbits.LATD2 void delay (unsigned char time ) // ham co tac dung delay thoi gian lon { for ( li=0 ; li<80; li++ ) for ( lj=0 ; lj<time; lj++) {} } void lenh_LCD (unsigned char s) // ham dua 1 lenh ra ngoai LCD { LATC=s; rs=0; // rs=0 thong bao rang gia tri truyen len ghi vao thanh ghi lenh rw=0; en=1; delay(1); en=0; delay(1); } void data_LCD (unsigned char s) // ham dua 1 lenh ra ngoai LCD { LATC=s; TRISD=0xF8 ; // cho 3 bit thap nhat duoc lam cong ra rs=1; // rs=0 thong bao rang gia tri truyen len ghi vao thanh ghi lenh rw=0; en=1; delay(1); en=0; } void main(void) { INTCON=0x00; TRISAbits.TRISA0=1; //cong A0 lam dau vao tu cam bien TRISC=0x00; //cong C lam cong ra du lieu TRISD=0xF8; //3 bit thap nhat lam cong ra dieu khien lenh_LCD(0x38); // dua ra LCD gia tri hang cot la 5*7 lenh_LCD(0x0E); // hien con tro // lenh_LCD(0x01); // xoa man hinh LCD ADCON0=0x03; //bit0 cho phep chuyen doi,bit1 trang thai,bit2-5 chon kenh ADCON1=0x0E; //bit0-3 chon che do analog hay digital,bit4-5 chon Vref+ va Vref- ADCON2bits.ACQT2=1; // ADCON2bits.ACQT1=0; // ADCON2bits.ACQT0=0; //3 bits lua chon thoi gian thu thap du lieu TAD ADCON2bits.ADCS2=1; // ADCON2bits.ADCS1=0; // ADCON2bits.ADCS0=1; //3 bits lua chon tan so chuyen doi Delay10TCY(); b = ReadADC(); doC == (b-558.558)/2.048; //tùy ADC 8bit hay 10 bit tính toán giá tri s1[i]==doC; while(1) { lenh_LCD(0x01); delay(500); data_LCD(s1[i]); data_LCD('d'); data_LCD('o'); data_LCD('C'); delay(500); } }
- Hiển thị ra led7D hoặc LCD 1 con số nào đó bất kỳ , vd 1234 . Nếu ok thì có nghĩa hàm display_LCD() hoặc hàm hienthi() k sai . Còn nếu k hiển thị đc thì
1) Nếu LCD , chỉnh biến trở chỗ chân Vo để hiện thấy 1 dòng đen (Có khi chỉnh xong thấy đc số 1234 hiển thị mừng hết lớn ấy nhẩy) .
2) Ktra đc mạch các chân RS , RW , E , các đường mạch chân d0-d7 có dính chỗ nào k ?
3) Viết chương trình nhấp nháy 0-1 các chân RS , E ,RW , các chân d0-d7 xem VDK đã xuất dữ liệu đc k , đúng k ? Nếu k đúng thì xem lại khai báo set_tris_port hoặc khả năng lập trình HT_PIC có vấn đề
4) Nếu Led7d , kiểm tra việc dùng hàm quét led vậy đúng k ? tốt nhất dùng delay để kiểm tra , trước khi dùng timer để quét để đảm bảo việc bật tắt các chân và xuất dữ liệu là đồng bộ .
Sau khi khắc phục lỗi hàm hiển thị , thì chuyển sang kiểm tra hàm read_adc() , hoặc các khai báo khởi tạo ADC trứoc khi read_adc()
Làm như rứa còn chưa ăn tiền đc ai , quất đống code rầm rầm vô đó , biết sai chỗ nào mà lần . đúng là điếc k sợ súng
Comment
Bài viết mới nhất
Collapse
-
bởi Minhdai95Em chào mọi người, e đang sửa mạch tạo sóng siêu âm cho máy rửa mà chưa có tài liệu để tham khảo sửa, mọi người cho e xin tài liệu ạ...
-
Channel: Điện tử công suất
hôm nay, 11:37 -
-
bởi pia2k1Cùng câu hỏi và cần được giải đáp thêm ạ...
-
Channel: Hướng dẫn sử dụng diễn đàn
hôm nay, 11:28 -
-
bởi trun9Chào các bạn,
Tôi vừa làm 1 video Youtube đăng lên vào tối hôm qua, hiện tại có 4 lượt xem đều là của tôi vào xem có ai xem không
https://www.youtube.com/watch?v=_oFIBAcvoSY
Vào xem và chửi tôi để tôi bớt làm lại đi.-
Channel: Quảng cáo
hôm nay, 08:55 -
-
Trả lời cho Công thức điện tửbởi mèomướpDạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 21:21 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 20:31 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11Ok , thanks bác đã chỉ...
-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 15:06 -
-
bởi nguyendinhvanSau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !
Chập thì thay. Cháy thì tháo
Làm thì láo. Báo thì hay
May thì khoe. Rủi thì bỏ
Thành tích nhỏ. Báo thành to
Làm cho có. Báo chi li
Sai cả li. Báo...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 00:35 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11có chắc ko b, màn lcd phải có cao áp mới sáng, màn led thì ko có, ko có cáp chuyển đổi thì lắp thế nào đc ??...
-
Channel: Thiết bị điện tử cá nhân
25-11-2024, 22:31 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ ý chú là màn oled ấy ạ. Cùng chuẩn lvds cùng độ phân giải thì cắm được ạ. Còn nó mà khác thì hơi khó vì oled các điểm ảnh nó tự phát sáng chứ ko dùng đèn nền như lcd. Cháu chỉ biết đến vậy thôi ạ. Chú muốn nghịch phải tự tìm hiểu kỹ trước khi mua thôi, khó mà ông thợ nào tư vấn vụ này...
-
Channel: Thiết bị điện tử cá nhân
25-11-2024, 22:14 -
-
Trả lời cho Tự làm máy đo Cuộn cảmbởi bacthoHay đấy bạn ạ. Đây có thể hiểu là máy đo cuộn dây. Tiện đây xin cho hỏi bạn có hiểu rõ về máy nạp rôm pcb 45 của hãng thiên minh không giúp mình cách cài fw của nó với vì mình vừa được anh bạn cho nhưng lại không biết cài fw nên chưa dùng được. Nếu có thể thì bạn giúp mình với...
-
Channel: Điện tử dành cho người mới bắt đầu
25-11-2024, 21:48 -
Comment