co ai lam adc cua avr khong
4 posters
Trang 1 trong tổng số 1 trang
co ai lam adc cua avr khong
ban nao biet thi up len nhe
khanhhuy4390- Moderators tập sự
- Tổng số bài gửi : 37
Join date : 05/11/2012
Age : 34
Đến từ : BINH DUONG
Re: co ai lam adc cua avr khong
thầy cũng đang nghiên cứu nó nè Huy ơi....phức tạp như PIC vậy đó. Bực cái là mô phỏng avr sao khó chịu thế k biết
bacviet- Moderators
- Tổng số bài gửi : 66
Join date : 07/11/2012
Re: co ai lam adc cua avr khong
em thử cái này nhé HUY
[You must be registered and logged in to see this link.]
[You must be registered and logged in to see this link.]
bacviet- Moderators
- Tổng số bài gửi : 66
Join date : 07/11/2012
Re: co ai lam adc cua avr khong
đang nghiên cứu dạy AVR mà vì có mấy bộ KIT....còn PIC chỉ mô phỏng. Nhưng mấy cái board này cũng ác quá, nó k cho mình tùy biến nhiều lắm. Vì nó thiết kế cứng rồi.
@HUY: nếu rảnh ghé p223 nghiên cứu mấy KIT AVR nhe....nhiều đồ chơi lắm
@HUY: nếu rảnh ghé p223 nghiên cứu mấy KIT AVR nhe....nhiều đồ chơi lắm
bacviet- Moderators
- Tổng số bài gửi : 66
Join date : 07/11/2012
Re: co ai lam adc cua avr khong
em tac mac cho nay ne thay
#define ADC_VREF_TYPE 0x00
sau co nhieu bai thi cho 0x20,co bai lai cho 0xe0 em khong hieu
#define ADC_VREF_TYPE 0x00
sau co nhieu bai thi cho 0x20,co bai lai cho 0xe0 em khong hieu
khanhhuy4390- Moderators tập sự
- Tổng số bài gửi : 37
Join date : 05/11/2012
Age : 34
Đến từ : BINH DUONG
Re: co ai lam adc cua avr khong
giá trị đó để chọn kiểu áp tham chiếu vref cho ADC....em phải nghiên cứu kỹ các thanh ghi cho ADC nhé
bacviet- Moderators
- Tổng số bài gửi : 66
Join date : 07/11/2012
Re: co ai lam adc cua avr khong
Định đọc thấy hay không biết mọi người đã đọc hay chưa nhưng cứ mạn phép đưa lên đây vậy
[You must be registered and logged in to see this link.]
[You must be registered and logged in to see this link.]
khanhhuy4390- Moderators tập sự
- Tổng số bài gửi : 37
Join date : 05/11/2012
Age : 34
Đến từ : BINH DUONG
Re: co ai lam adc cua avr khong
HUY xem lại cái ví dụ đầu tiên thầy gửi. Mở file mô phỏng, sao thấy cái config cho con mega32 đơn giản ghê. Không biết nó viết trong proteus nào, chứ cái proteus đang xài k thấy được như vậy
bacviet- Moderators
- Tổng số bài gửi : 66
Join date : 07/11/2012
Re: co ai lam adc cua avr khong
chạy ngon lành. cái này sao thấy giống led nháy theo điệu nhạc quá .
Được sửa bởi khanhhuy4390 ngày Sun Jan 13, 2013 8:37 pm; sửa lần 2.
khanhhuy4390- Moderators tập sự
- Tổng số bài gửi : 37
Join date : 05/11/2012
Age : 34
Đến từ : BINH DUONG
Re: co ai lam adc cua avr khong
phòng này thường mở cửa không thầybacviet đã viết:đang nghiên cứu dạy AVR mà vì có mấy bộ KIT....còn PIC chỉ mô phỏng. Nhưng mấy cái board này cũng ác quá, nó k cho mình tùy biến nhiều lắm. Vì nó thiết kế cứng rồi.
@HUY: nếu rảnh ghé p223 nghiên cứu mấy KIT AVR nhe....nhiều đồ chơi lắm
khanhhuy4390- Moderators tập sự
- Tổng số bài gửi : 37
Join date : 05/11/2012
Age : 34
Đến từ : BINH DUONG
Re: co ai lam adc cua avr khong
tuần sau thầy ở trên trường các buổi sáng.....khanhhuy4390 đã viết:phòng này thường mở cửa không thầybacviet đã viết:đang nghiên cứu dạy AVR mà vì có mấy bộ KIT....còn PIC chỉ mô phỏng. Nhưng mấy cái board này cũng ác quá, nó k cho mình tùy biến nhiều lắm. Vì nó thiết kế cứng rồi.
@HUY: nếu rảnh ghé p223 nghiên cứu mấy KIT AVR nhe....nhiều đồ chơi lắm
bacviet- Moderators
- Tổng số bài gửi : 66
Join date : 07/11/2012
ADC cho kỹ thuật số và vi điều khiển nói chung
Trước khi viết chương trình để cho AVR và PIC hay gì gì đi nửa..thì các bạn cần hiểu:
- Để chuyển đổi ADC cần quan tâm tới vấn đề gì?
+ Ngõ vào tương tự. Có bao nhiêu ngõ vào.
+ Chọn kênh ngõ vào nếu nhiều kênh
+ Tần số lầy mẫu (mạch tạo xung có sẵn ở bên trong hoặc tự tạo bên ngoài - thường dùng 74HC14- phải HC mới được)- Bạn nào muốn đọc tại sao cần CLK lấy mẫu thì đọc cuốn Vi Mạch Số của Trường Đại Học Thanh Hoa - Bắc Kinh. Cuốn đó đầy đủ đó.
+ Ngưỡng cho phép đầu vào Analog. Ngưỡng này được quyết định bởi vref+ và vref-
+ Xung đơn ổn để chuyển đổi (xung này từ mạch bên ngoài hoặc là đặt bên trong vi điều khiển)
//
Trong AVR, PIC và một số VĐK khác thì có thêm định dạng dữ liệu số bên phải hay bên trái...xem bit format ấy. Vidu: 1111000011 nếu định dạng bên phải thì dữ liệu sẽ là: Byte cao chứa - 00000011, Byte thấp chứa-11000011; và ngược lại định dạng bên trái: Byte cao chứa - 11110000, Byte thấp chứa - 11000000.
//--------------------------------------------------------------
Trên đây là các nguyên tắc chung, cơ bản cần phải nắm...từ đó bạn có thể dùng mạch số, 89xxx-ADC0808 hay AVR, PIC thì cũng bấy nhiêu vấn đề đó mà thôi.
//----------------------
Bạn đang có bộ kít hay đó nhưng không linh động. Nó giải mã địa chỉ. CÓ thể nó dùng IC chốt kết hợp 8255 không chừng?
Ai đó có gì gởi mình phần cứng để mình phân tích với...cái nào mình hiểu thì mình phụ cho. Cái nào mình không hiểu thì...
[You must be registered and logged in to see this link.]
(Xem mạch tôi dùng IC số để chuyển đổi:
[You must be registered and logged in to see this link.] vào [You must be registered and logged in to see this link.]
//==========================================
Ví dụ:
#include <mega16.h>
#include <delay.h>
// Standard Input/Output functions
#include <stdio.h>
#include <stdlib.h>
#define ADC_VREF_TYPE 0xE0
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
// Declare your global variables here
void main(void)
{
unsigned char value;
float Vin;
char mystr[11];
// Declare your local variables here
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x2F;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 115.200 kHz
// ADC Voltage Reference: Int., cap. on AREF
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x86;
while (1)
{
// Place your code here
value=read_adc(0);
if ((value!=0)&&(value!=255)) ++value;
printf("ADC0=%d\n\r",value);
Vin=(float)value*2.56*1000/256;
ftoa(Vin,0,mystr); //float to string
printf("Vin0=%smV\n\r",mystr);
printf("\n\r");
delay_ms(500);
};
}
Nhớ dùng terminal trong protues để xem khi mô phỏng.
- Để chuyển đổi ADC cần quan tâm tới vấn đề gì?
+ Ngõ vào tương tự. Có bao nhiêu ngõ vào.
+ Chọn kênh ngõ vào nếu nhiều kênh
+ Tần số lầy mẫu (mạch tạo xung có sẵn ở bên trong hoặc tự tạo bên ngoài - thường dùng 74HC14- phải HC mới được)- Bạn nào muốn đọc tại sao cần CLK lấy mẫu thì đọc cuốn Vi Mạch Số của Trường Đại Học Thanh Hoa - Bắc Kinh. Cuốn đó đầy đủ đó.
+ Ngưỡng cho phép đầu vào Analog. Ngưỡng này được quyết định bởi vref+ và vref-
+ Xung đơn ổn để chuyển đổi (xung này từ mạch bên ngoài hoặc là đặt bên trong vi điều khiển)
//
Trong AVR, PIC và một số VĐK khác thì có thêm định dạng dữ liệu số bên phải hay bên trái...xem bit format ấy. Vidu: 1111000011 nếu định dạng bên phải thì dữ liệu sẽ là: Byte cao chứa - 00000011, Byte thấp chứa-11000011; và ngược lại định dạng bên trái: Byte cao chứa - 11110000, Byte thấp chứa - 11000000.
//--------------------------------------------------------------
Trên đây là các nguyên tắc chung, cơ bản cần phải nắm...từ đó bạn có thể dùng mạch số, 89xxx-ADC0808 hay AVR, PIC thì cũng bấy nhiêu vấn đề đó mà thôi.
//----------------------
Bạn đang có bộ kít hay đó nhưng không linh động. Nó giải mã địa chỉ. CÓ thể nó dùng IC chốt kết hợp 8255 không chừng?
Ai đó có gì gởi mình phần cứng để mình phân tích với...cái nào mình hiểu thì mình phụ cho. Cái nào mình không hiểu thì...
[You must be registered and logged in to see this link.]
(Xem mạch tôi dùng IC số để chuyển đổi:
[You must be registered and logged in to see this link.] vào [You must be registered and logged in to see this link.]
//==========================================
Ví dụ:
#include <mega16.h>
#include <delay.h>
// Standard Input/Output functions
#include <stdio.h>
#include <stdlib.h>
#define ADC_VREF_TYPE 0xE0
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
// Declare your global variables here
void main(void)
{
unsigned char value;
float Vin;
char mystr[11];
// Declare your local variables here
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 9600
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x2F;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 115.200 kHz
// ADC Voltage Reference: Int., cap. on AREF
// ADC Auto Trigger Source: None
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x86;
while (1)
{
// Place your code here
value=read_adc(0);
if ((value!=0)&&(value!=255)) ++value;
printf("ADC0=%d\n\r",value);
Vin=(float)value*2.56*1000/256;
ftoa(Vin,0,mystr); //float to string
printf("Vin0=%smV\n\r",mystr);
printf("\n\r");
delay_ms(500);
};
}
Nhớ dùng terminal trong protues để xem khi mô phỏng.
Được sửa bởi thay Khai ngày Tue Jan 15, 2013 10:22 pm; sửa lần 2.
thay Khai- Tổng số bài gửi : 23
Join date : 14/11/2012
Dùng AVR hay PIC
Mình cũng thường xài PIC nhưng tội cho AVR. Thật không dể để hiểu về nhiễu.
Về phân cứng khắc phục nhiễu như thế nào?
Về phần mềm, Bạn hãy xem về watchdog để làm gì?
Về phân cứng khắc phục nhiễu như thế nào?
Về phần mềm, Bạn hãy xem về watchdog để làm gì?
thay Khai- Tổng số bài gửi : 23
Join date : 14/11/2012
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết
|
|
Wed Sep 24, 2014 8:46 am by vinagreensun
» Chia sẻ source code mạch đếm 0-99 sử dụng 8051 và LED hồng ngoại
Mon Mar 24, 2014 2:07 pm by xuantruong1911
» mình đang làm đồ án 1 cần làm mạch khó số điện tử dùng ic số và phải có thể thay đổi password
Fri Mar 21, 2014 8:01 pm by saobang
» Chế tạo máy dò kim loại help ?
Fri Nov 29, 2013 11:17 am by Thanhtra conan
» mấy bro vào giup em với
Wed Nov 27, 2013 9:01 pm by luongthanhvp
» giáo trình plc mitsubishi căn bản và nâng cao
Tue Apr 30, 2013 5:55 pm by Admin
» hoc led chay chu
Thu Apr 18, 2013 8:05 pm by vuphong
» QUÉT PHÍM MA TRẬN 4X4 HIỂN THỊ RA LED 7 ĐOẠN
Thu Apr 18, 2013 7:59 pm by thanhxuan
» cách vẽ mạch in bằng ocard 1 cách đơn giản?
Thu Apr 18, 2013 1:09 pm by Admin