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
-
Trả lời cho Hỏi về bơm màng bldcbởi nhathung1101Thì đây là 4r điên nặng điện mà, nên họ show phần điện thôi. Phần "cốt lõi" có cái tay biên chắc sang Văn Môn rồi....
-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 18:54 -
-
Trả lời cho Chọn dây dẫn cho điện DC?bởi nhathung1101Điện DC đương nhiên là khác với AC rồi. Chỉ cần biết mặt chữ là thấy khác như gà trống với gà mái mà.
Còn về bản chất, AC là dòng điện hoạt động theo tần số. Tần số càng cao thì dây dẫn càng mỏng, nhẹ, vì hiệu ứng...-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 18:46 -
-
Trả lời cho Công thức điện tửbởi nhathung1101Ăn ít => Nói nhiều.
Nói nhiều => Làm ít.
Làm ít => Vợ mắng.
Vợ mắng => Cáu nhiều.
Cáu nhiều => Ngủ ít.
Ngủ ít => Râu nhiều.
Râu nhiều =>...-
Channel: Tâm tình dân kỹ thuật
hôm nay, 18:39 -
-
Trả lời cho Chọn dây dẫn cho điện DC?bởi mèomướpDạ vài chục mét thì chú tính như vậy được ạ. Chứ chuẩn thì phải tính cả điện trở của toàn bộ chiều dài dây dẫn nhân với dòng điện xem sụt áp có trong khoảng chấp nhận đc hông ạ. Trong mạch điện tử khoảng cách ngắn và mạch...
-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 14:49 -
-
bởi vietroadTheo mình biết thì chọn dây dẫn dựa vào dòng tải. Thường thì tiết diện 1mm2 cho dòng 6A. Nhưng trong các mạch điện tử, như mạch nguồn tổ ong chẳng hạn, dòng đến vài chục Ampe mà đường mạch mỏng dính. Phải chăng điện DC nó khác với...
-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 14:19 -
-
Trả lời cho Hỏi về bơm màng bldcbởi vi van phamPhải xem cơ cấu bơm, chứ xem cơ cấu rotor, thì chỉ làm thầy bói xem voi.
-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 08:19 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11vg, cám ơn bác...........
-
Channel: Thiết bị điện tử cá nhân
28-11-2024, 14:37 -
-
bởi khoine9899
Em chào các anh và mọi người.
Hiện em đang có 1 con bơm màng trong thiết bị y tế đang gặp tình trạng yếu dần hoặc ngừng hoạt động sau thời gian sử dụng
Sau khi tìm hiểu về thông tin của bơm trên mạng thì em được biết...-
Channel: Điện tử dành cho người mới bắt đầu
28-11-2024, 11:22 -
-
Trả lời cho Cần mọi người giúp mạch tạo sóng siêu âm máy rửabởi bqviet
-
Channel: Điện tử công suất
27-11-2024, 20:26 -
-
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
27-11-2024, 11:37 -
Comment