| Автор |
Съобщение |
|
tiger
Ранг: Минаващ
Регистриран на: Нед Мар 04, 2007 10:21 pm Мнения: 70
|
 ADC при ATMEGA16
Опитван се да пусна АЦП-то на атмега16, но без успех. Намерих тази схема в нета. Крачета 30, 31 и 32 така ли трябва да се свършат. AGND съм го вързал както е на схемата, AVCC - дирекно на + (без бобината и кондензатора), а AREF го забравих и по-късно с една жичка го дадох на късо с AVCC, но пак не работеше. Та както е на схемата ли да ги свърша или AVCC и AREF да ги вържа на + без нищо друго?
А как трябва да настроя REFS1:0?
|
| Сря Мар 26, 2008 10:48 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Примерно
AVCC -> VCC
AGND -> GND
AREF -> със 100n към маса
1 1 Internal 2.56V Voltage Reference with external capacitor at AREF
|
| Чет Мар 27, 2008 12:06 am |
|
 |
|
vankata
Ранг: Минаващ
Регистриран на: Пет Юли 13, 2007 10:19 am Мнения: 52 Местоположение: Хасково
|
На схемата, която си дал, в три от вариантите на регистъра ще имаш резултати от АЦП-то. Верно различни показания, но ще има поне някакъв резултат.Ако не ти тръгва АЦП-то вероятно имаш проблем в останалият софтуер.Регистъра ти указва само сорса от който ще се задава опорното напрежение.В твоя случай имаш външен делител за първия случай, а с другите варианти все ще се получава пак някакво напрежение сумирано с това на делителя. С примера дето ти дава Никола, твърдо можеш да провериш дали ти е там проблема. Ако пак нямаш показания при неговите входни данни значи проблема ти е другаде.
|
| Чет Мар 27, 2008 12:36 am |
|
 |
|
tiger
Ранг: Минаващ
Регистриран на: Нед Мар 04, 2007 10:21 pm Мнения: 70
|
За AREF така ли трябва да се свърже?
vankata, резултат ми изкарва от АЦП-то, но когато променям напрежението, което трябва да отчита резултата не се променя, а влиза в прекъсването за това, че е готово. Резултата се променя при рестартиране на микроконтролера
|
| Чет Мар 27, 2008 7:21 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
А ти колко варианта може да измислиш като ти се каже "със 100n към маса"?
|
| Чет Мар 27, 2008 7:49 pm |
|
 |
|
tiger
Ранг: Минаващ
Регистриран на: Нед Мар 04, 2007 10:21 pm Мнения: 70
|
Малко съм скаран с хардуера. Пък както казват "от питане глава не боли"
|
| Чет Мар 27, 2008 8:10 pm |
|
 |
|
tiger
Ранг: Минаващ
Регистриран на: Нед Мар 04, 2007 10:21 pm Мнения: 70
|
Свързах го така, но:
1. Ако на входа на ADC0 има 0 V диодите не светят (диодите ми показват двоичната стойност на ADCL)
2. Ако има от около 2 до 5 V - всички светят
3. Ако има между 0 и 2 V светят някои, след като рестартирам контролера светват по друг начин, това става без да променям напрежението ADC0!
4. Ако променям напрежението на ADC0, светенето на диодите не се променя. А влиза в прекъсване за завършено преобразуване
Ето кода:
|
| Пет Мар 28, 2008 12:28 pm |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
0 0 AREF, Internal Vref turned off
Това е правилната комбинация, ако ползваш AREF (дето си го дал на късо към AVCC)
|
| Вто Апр 01, 2008 12:31 am |
|
 |
|
tiger
Ранг: Минаващ
Регистриран на: Нед Мар 04, 2007 10:21 pm Мнения: 70
|
Всичко комбинации пробвах и когато AREF е към +5V, и когато е през кондензатор към масата и все това прави, което написах в горния пост.
А колко трябва да ми е потенциометъра, с който променям напрежението на входа на АЦП-то? Казаха ми да сложа голям и аз сложих 5М ома и се чудя дали не е прекалено голям
|
| Вто Апр 01, 2008 9:43 am |
|
 |
|
VSU
Ранг: Напреднал
Регистриран на: Нед Авг 14, 2005 1:08 pm Мнения: 433 Местоположение: Казанлък
|
5-10k не 5M
|
| Вто Апр 01, 2008 9:51 am |
|
 |
|
tiger
Ранг: Минаващ
Регистриран на: Нед Мар 04, 2007 10:21 pm Мнения: 70
|
Може ли от там да идва проблема? Ще го сменя, но в края на седмицата, че сега нямам време
|
| Вто Апр 01, 2008 10:04 am |
|
 |
|
VSU
Ранг: Напреднал
Регистриран на: Нед Авг 14, 2005 1:08 pm Мнения: 433 Местоположение: Казанлък
|
напиши си програмата така че половината функции не ти работят нито инит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();
}
|
| Вто Апр 01, 2008 10:19 am |
|
 |
|
stanleyhacker
Ранг: Новодошъл
Регистриран на: Чет Дек 02, 2004 7:22 pm Мнения: 140
|
Без истински референс източник, резултатът рядко ще е един и същ, да не говорим че АЦП на контролер е съвсем непретенциозна машинка. Сещам се че иамше един режим за power saving дето спираше някакъв клок , за да може измерването да се влияе по-малко от цифровите схеми в контролера. Пробвай него, когато тръгне всичко останало.
|
| Вто Апр 01, 2008 12:00 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Я не бъркай човека с глупости. Той и без това си е замотан
tiger с гадаене няма да стане работатата. Направи си Jtag и дебъгвай. Можеш да си променяш и стойноста на регистрите докато си откриеш грешката.
А и изобщо развой без хардуерен дебъгер правят вече 2 категории хора,мазохисти и глупаци.  :):):)
|
| Вто Апр 01, 2008 12:40 pm |
|
 |
|
tiger
Ранг: Минаващ
Регистриран на: Нед Мар 04, 2007 10:21 pm Мнения: 70
|
Сложих 1К (такъв намерих) и сега колкото и рестарт да давам резултата е 1 и същ, но когато въртя потенциометъра диодите не променят светенето си  , а ако врътна потенциометъра и рестартирам се променя
VSU, благодаря за опита да ми помогнеш, но като начало когато някоя функция е дефинирана като int тя трябва да връща променлива от тип int, а в кода, който предложи не се връща. Все пак го пуснах и даде 22 грешки.
Nikola Kirov, много приличаш на един колега - и по снимка и по начин на писане. А ако се захвана да правя JTAG може би след 9 месеца ще проработи... Иначе знам, че е по лесно
|
| Чет Апр 03, 2008 9:57 pm |
|
|