roboforum.ru

Технический форум по робототехнике.

МикроКонтроллер AVR начинающим - общие вопросы

Re: МикроКонтроллеры начинающим - общие вопросы

avr123.nm.ru » 04 авг 2008, 11:12

Имхо лучше работать с целыми числами и гитерезис добавить - т.е. разность между включением и выключением.

Re: МикроКонтроллеры начинающим - общие вопросы

Pavel.d.a » 04 авг 2008, 18:53

Rig, не помогло. Получается так что при выносе из прерываний даже если напряжение больше 2.88 светодиод все равно горит, если в прерываний работает.
Аvr123.nm.ru с целыми числами это как? Это на делителе мерить только 1,2,3,4 и 5 вольт? Если так то не пойдет.(мне не только 9 вольт нужно, мне весь диапазон от 8 до 15 вольт)
Гестирезис это так:
if(voltage < 2.88f)
PORTB.0=1;
if(voltage > 2.9f)
PORTB.0=0;
спасибо.

Re: МикроКонтроллеры начинающим - общие вопросы

EdGull » 04 авг 2008, 19:02

город-то заполни, а то у нас тут так принято... :wink:

Re: МикроКонтроллеры начинающим - общие вопросы

rig » 04 авг 2008, 19:17

яб какой нибудь индикатор подцепил, переменные смотреть, непонятно что там в голове делается. Или в симуляторе посмотреть.
Pavel.d.a писал(а): с целыми числами это как?

это значит один раз посчитать или замерить какое число АЦПшка выдает на 9 вольт и сравнивать уже с ним. делить умножать уже не надо.

Re: МикроКонтроллеры начинающим - общие вопросы

Pavel.d.a » 04 авг 2008, 20:24

Пробовал я так, тоже не получается. 2.88 соответствует 589 с ацп
Код: Выделить всёРазвернуть
if(adc_data < 589)
PORTB.0=1;
результат такой же...
P/s город казань. Мне он очень не нравиться. Не хочу что бы его название мне глаза мазолило. Если без этого никак, то конечно заполню..

Добавлено спустя 20 минут 58 секунд:
А индикатор какой?
Через UАRT выводить значения adc_data?
Я в протеус симулирую, как там эти переменные посмотреть не знаю. Покапаюсь, может чего найду.
Сделал так:
Код: Выделить всёРазвернуть
interrupt [ADC_INT] void adc_isr(void)
{
PORTВ.1^=1; // добавил
adc_data=ADCH;
}
светодиод моргает, значит АЦП работает.

Добавлено спустя 26 минут 6 секунд:
Посмотрел в протеусе АDCL = 785 при 12 вольтах и 589 при 9в и 523 при 8в
Все измеряется все правильно, а при 8 вольтах светодиод все равно горит. Может все же нельзя из прерывания выносить? Пробовал и задержку делать между запусками ацп, чтоб время обработать было, все равно не помогает.

Добавлено спустя 9 минут 31 секунду:
Ой описался при 12 вольтах светодиод все равно горит.

Re: МикроКонтроллеры начинающим - общие вопросы

EdGull » 04 авг 2008, 20:51

P/s город казань. Мне он очень не нравиться. Не хочу что бы его название мне глаза мазолило. Если без этого никак, то конечно заполню..

ну напиши например Kazan-city чтоб не мозолило, дело не в этом.
Просто нас робототехников и так мало... А так глядишь кто из твоего города и подтянется... В живую-то намного лучше общаться... :wink:
А возможность проводить соревнования с массовыми заезадми ваще улёт!

Re: МикроКонтроллеры начинающим - общие вопросы

avr123.nm.ru » 04 авг 2008, 21:15

Pavel.d.a писал(а): Аvr123.nm.ru с целыми числами это как ? Это на делителе мерить только 1,2,3,4 и 5 вольт ? Если так то не пойдет. (мне не только 9 вольт нужно, мне весь диапазон от 8 до 15 вольт)


Диапазон напряжений любой, просто представляется он как число от 0 до 1023 или от 0 до 255.

Pavel.d.a писал(а):Аvr123.nm.ru Гестирезис это так ?
if(voltage < 2.88f)
PORTB.0=1;
if(voltage > 2.9f)
PORTB.0=0;
спасибо.


Да. Учти что при включении напряжение может скакнуть и гистерезис защищает от бесконечных переключений в этом случае.

и f можно не писать так как ТОЧКА показывает что число с плав. точкой.

Re: МикроКонтроллеры начинающим - общие вопросы

Pavel.d.a » 04 авг 2008, 21:50

AVR123.nm.ru спасибо, но rip уже про целые числа объяснил.
А про f не знал.
Как написать что бы все работало в теле главной функции, а не в прерывании? Второй вечер сижу над тремя строчками кода, бесить уже начинает ей богу.

Re: МикроКонтроллеры начинающим - общие вопросы

avr123.nm.ru » 04 авг 2008, 22:35

Приложи свой проект архивом и желательно в PROTEUS схемку сделать или в VMLAB.

Re: МикроКонтроллеры начинающим - общие вопросы

rig » 05 авг 2008, 09:00

вот еще непонятка
Pavel.d.a писал(а):
Код: Выделить всёРазвернуть
if(adc_data < 589)

выше

Pavel.d.a писал(а):
Код: Выделить всёРазвернуть
unsigned char adc_data;


то есть adc_data по определению более 255 не может быть, попробуй
Код: Выделить всёРазвернуть
int adc_data;

Re: МикроКонтроллеры начинающим - общие вопросы

Pavel.d.a » 05 авг 2008, 18:32

Вот архив там есть все, сильно не пинайте, я в первый раз.

Добавлено спустя 37 минут 19 секунд:
Все заработало.
ADMUX=0x00;
ADCSRA=0b11101101;

#asm("sei")

while (1)
{
if(adc_data<589)
PORTB.0=1;
else PORTB.0=0;
};
}
rip, когда вы советовали вставить эту строчку else PORTB.0=0; я пробовал так, но вчера это не помогло, а сегодня заработало.
Всем спасибо.

Re: МикроКонтроллеры начинающим - общие вопросы

rig » 05 авг 2008, 19:28

Pavel.d.a писал(а): сильно не пинайте, я в первый раз.

это уже все поняли по rip

Re: МикроКонтроллеры начинающим - общие вопросы

Pavel.d.a » 05 авг 2008, 19:55

Rig извините пожалуйста, описался. я со смартфона на форуме, а p и g это соседнии кнопки 4 и 7 просто не туда нажал. Прошу прощения еще раз.

Re: МикроКонтроллеры начинающим - общие вопросы

rig » 05 авг 2008, 23:03

нее, нетъ тебе прощенья, забанен во веки веков, подлец :o

Re: МикроКонтроллеры начинающим - общие вопросы

Pavel.d.a » 09 авг 2008, 10:52

Здравствуйте. Подскажите пожалуйста. У меня Fast PWM top=00FFh. Что будет если я захочу записать в OCR1АL отрицательное число? Или число больше 256?


Rambler\'s Top100 Mail.ru counter