| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| ADC при ATMEGA16 http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=5640 |
Страница 1 от 2 |
| Автор: | tiger [ Сря Мар 26, 2008 10:48 pm ] | |||||||||
| Заглавие: | ADC при ATMEGA16 | |||||||||
Опитван се да пусна АЦП-то на атмега16, но без успех. Намерих тази схема в нета. Крачета 30, 31 и 32 така ли трябва да се свършат. AGND съм го вързал както е на схемата, AVCC - дирекно на + (без бобината и кондензатора), а AREF го забравих и по-късно с една жичка го дадох на късо с AVCC, но пак не работеше. Та както е на схемата ли да ги свърша или AVCC и AREF да ги вържа на + без нищо друго? А как трябва да настроя REFS1:0?
|
||||||||||
| Автор: | Nikola Kirov [ Чет Мар 27, 2008 12:06 am ] |
| Заглавие: | |
Примерно AVCC -> VCC AGND -> GND AREF -> със 100n към маса 1 1 Internal 2.56V Voltage Reference with external capacitor at AREF |
|
| Автор: | vankata [ Чет Мар 27, 2008 12:36 am ] |
| Заглавие: | |
На схемата, която си дал, в три от вариантите на регистъра ще имаш резултати от АЦП-то. Верно различни показания, но ще има поне някакъв резултат.Ако не ти тръгва АЦП-то вероятно имаш проблем в останалият софтуер.Регистъра ти указва само сорса от който ще се задава опорното напрежение.В твоя случай имаш външен делител за първия случай, а с другите варианти все ще се получава пак някакво напрежение сумирано с това на делителя. С примера дето ти дава Никола, твърдо можеш да провериш дали ти е там проблема. Ако пак нямаш показания при неговите входни данни значи проблема ти е другаде. |
|
| Автор: | tiger [ Чет Мар 27, 2008 7:21 pm ] | |||||||||||
| Заглавие: | ||||||||||||
За AREF така ли трябва да се свърже? vankata, резултат ми изкарва от АЦП-то, но когато променям напрежението, което трябва да отчита резултата не се променя, а влиза в прекъсването за това, че е готово. Резултата се променя при рестартиране на микроконтролера
|
||||||||||||
| Автор: | Nikola Kirov [ Чет Мар 27, 2008 7:49 pm ] |
| Заглавие: | |
А ти колко варианта може да измислиш като ти се каже "със 100n към маса"? |
|
| Автор: | tiger [ Чет Мар 27, 2008 8:10 pm ] | |||||||||
| Заглавие: | ||||||||||
Малко съм скаран с хардуера. Пък както казват "от питане глава не боли" |
||||||||||
| Автор: | tiger [ Пет Мар 28, 2008 12:28 pm ] | |||||||||
| Заглавие: | ||||||||||
Свързах го така, но: 1. Ако на входа на ADC0 има 0 V диодите не светят (диодите ми показват двоичната стойност на ADCL) 2. Ако има от около 2 до 5 V - всички светят 3. Ако има между 0 и 2 V светят някои, след като рестартирам контролера светват по друг начин, това става без да променям напрежението ADC0! 4. Ако променям напрежението на ADC0, светенето на диодите не се променя. А влиза в прекъсване за завършено преобразуване Ето кода:
|
||||||||||
| Автор: | Реконструктор [ Вто Апр 01, 2008 12:31 am ] |
| Заглавие: | |
0 0 AREF, Internal Vref turned off Това е правилната комбинация, ако ползваш AREF (дето си го дал на късо към AVCC) |
|
| Автор: | tiger [ Вто Апр 01, 2008 9:43 am ] | |||||||||
| Заглавие: | ||||||||||
Всичко комбинации пробвах и когато AREF е към +5V, и когато е през кондензатор към масата и все това прави, което написах в горния пост. А колко трябва да ми е потенциометъра, с който променям напрежението на входа на АЦП-то? Казаха ми да сложа голям и аз сложих 5М ома и се чудя дали не е прекалено голям |
||||||||||
| Автор: | VSU [ Вто Апр 01, 2008 9:51 am ] |
| Заглавие: | |
5-10k не 5M |
|
| Автор: | tiger [ Вто Апр 01, 2008 10:04 am ] | |||||||||
| Заглавие: | ||||||||||
Може ли от там да идва проблема? Ще го сменя, но в края на седмицата, че сега нямам време |
||||||||||
| Автор: | VSU [ Вто Апр 01, 2008 10:19 am ] |
| Заглавие: | |
напиши си програмата така че половината функции не ти работят нито инитADC нито делай има дебъгер в AVR Studio ползвай го !!! #include <avr/io.h> #include <avr/interrupt.h> int my_delay(); int init_ADC(); ISR(ADC_vect) { unsigned char c; static char bin = 0; c = ADCL; PORTD = c; bin = ~bin; PORTD = (PORTD & 0b11111110) | (bin & 00000001); <--- каква е идеята на този ред ??? my_delay(); ADCSRA = ADCSRA | 0b01000000; } int main(void) { init_ADC(); DDRD = 0xff; ADCSRA = ADCSRA | 0b01000000; while(1); } int my_delay() { unsigned int i; for(i=0;i<1000;i++); } int init_ADC() { ADMUX = 0b11000000; ADCSRA = 0b10011000; SFIOR = 0x00; sei(); } |
|
| Автор: | stanleyhacker [ Вто Апр 01, 2008 12:00 pm ] |
| Заглавие: | |
Без истински референс източник, резултатът рядко ще е един и същ, да не говорим че АЦП на контролер е съвсем непретенциозна машинка. Сещам се че иамше един режим за power saving дето спираше някакъв клок , за да може измерването да се влияе по-малко от цифровите схеми в контролера. Пробвай него, когато тръгне всичко останало. |
|
| Автор: | Nikola Kirov [ Вто Апр 01, 2008 12:40 pm ] |
| Заглавие: | |
Я не бъркай човека с глупости. Той и без това си е замотан tiger с гадаене няма да стане работатата. Направи си Jtag и дебъгвай. Можеш да си променяш и стойноста на регистрите докато си откриеш грешката. А и изобщо развой без хардуерен дебъгер правят вече 2 категории хора,мазохисти и глупаци. |
|
| Автор: | tiger [ Чет Апр 03, 2008 9:57 pm ] | |||||||||
| Заглавие: | ||||||||||
Сложих 1К (такъв намерих) и сега колкото и рестарт да давам резултата е 1 и същ, но когато въртя потенциометъра диодите не променят светенето си VSU, благодаря за опита да ми помогнеш, но като начало когато някоя функция е дефинирана като int тя трябва да връща променлива от тип int, а в кода, който предложи не се връща. Все пак го пуснах и даде 22 грешки. Nikola Kirov, много приличаш на един колега - и по снимка и по начин на писане. А ако се захвана да правя JTAG може би след 9 месеца ще проработи... Иначе знам, че е по лесно |
||||||||||
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|