CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение AI_Disable »

Можно, почему бы нет...
Делаем массив указателей на функции:

Код: Выделить всё

void fun0()
{...}

void fun1()
{...}

void fun2()
{...}

void main(void)
{
void (*OLOLO[6])();
OLOLO[0]=fun0;
OLOLO[1]=fun1;
OLOLO[2]=fun2;


Вызываем fun1:

Код: Выделить всё

OLOLO[1]();
Аватара пользователя
Dj_Alex
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн окт 12, 2009 18:16:50
Откуда: Саранск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Dj_Alex »

слышал, что можно использовать опорное напряжение 2,56 В с вывода aref, но там 0. ацп не использую, каким регистром включить?
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение AI_Disable »

Включается битами REFS* регистра ADMUX. Использовать, конечно, можно, но лучше - не надо.
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

Dj_Alex писал(а):слышал, что можно использовать опорное напряжение 2,56 В с вывода aref, но там 0. ацп не использую, каким регистром включить?
ADMUX|=(1<<REFS1)|(1<<REFS0);
Аватара пользователя
Dj_Alex
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн окт 12, 2009 18:16:50
Откуда: Саранск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Dj_Alex »

пробовал так
ADMUX=0b11000000;
но все равно на выводе 0, кондер вешал, толку нет
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение AI_Disable »

А вы на AVCC не забыли питание подать?
Аватара пользователя
Dj_Alex
Открыл глаза
Сообщения: 50
Зарегистрирован: Пн окт 12, 2009 18:16:50
Откуда: Саранск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Dj_Alex »

конешно не забыл, контроллер пашет, прост хотел с ИОНа напругу на контраст ЖК подать, т.к. питание плавает и контраст вместе с ним.
кстати нагрузочная способность у ИОНа какая?
ps мерил без нагрузки
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

Dj_Alex писал(а):пробовал так
ADMUX=0b11000000;
но все равно на выводе 0, кондер вешал, толку нет
Так вы хотели использовать внутренний ИОН 2,56 В, и это значение разрядов REFSx ADMUX для такого случая. При этом на выводах AVCC и AREF не должно быть внешних напряжений. А если хотите с вывода AVCC, то REFS1=0; REFS0=1;
Да, есть еще один момент. По датшиту: "Работа АЦП разрешается путем установки бита ADEN (разрешение АЦП) в ADCSRA. Выбор опорного источника и канала преобразования невозможно выполнить до установки ADEN".
Затем только выбор источника. Преобразование в АЦП можете не запускать, если оно не нужно, т. е. бит ADSC=0; Результатом разрешения АЦП, будет немного большее потребление тока МК.
Аватара пользователя
AI_Disable
Сверлит текстолит когтями
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение AI_Disable »

ValBag писал(а):При этом на выводах AVCC и AREF не должно быть внешних напряжений.

На AVCC всегда должно быть напряжение питания:
Даташит писал(а):The ADC has a separate analog supply voltage pin, AVCC.

И раз уж обратились к ДШ, продолжаем.
2 Dj_Alex,
Даташит писал(а):In either case, the external AREF pin is directly connected to the ADC, and the reference voltage can be made more immune to noise by connecting a capacitor between the AREF pin and ground. VREF can also be measured at the AREF pin with a high impedant voltmeter. Note that VREF is a high impedant source, and only a capacitive load should be connected in a system.
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

AI_Disable писал(а):
ValBag писал(а):При этом на выводах AVCC и AREF не должно быть внешних напряжений.
На AVCC всегда должно быть напряжение питания:
Согласен - в отношении AVCC дал "маху". Оно должно быть, если АЦП используется или, как в данном конкретном случае, питание служит только для получения напряжения опорного источника, которое Dj_Alex собирается использовать по другому назначению.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение ARV »

ValBag писал(а):Согласен - в отношении AVCC дал "маху". Оно должно быть, если АЦП используется или, как в данном конкретном случае, питание служит только для получения напряжения опорного источника, которое Dj_Alex собирается использовать по другому назначению.
никакого ИЛИ - AVCC должно подаваться ВСЕГДА! во многих микроконтроллерах от этого вывода запитаны выходные буферы портов ввода-вывода, так что без него не будут работать даже цифровые линии.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

ARV писал(а):никакого ИЛИ - AVCC должно подаваться ВСЕГДА! во многих микроконтроллерах от этого вывода запитаны выходные буферы портов ввода-вывода, так что без него не будут работать даже цифровые линии.
Не все, - отдельные линии портов, питающиеся от AVCC и не использующиеся в конкретном случае. ...Встречается практика такого использования.
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Re: CodeVision AVR в вопросах и ответах

Сообщение Барсик »

Написал офигительно простую программку:

Код: Выделить всё

//Chip type           : ATtiny13
// CodeWizardAVR V1.25.9 Professional
#include <tiny13.h>
#include <delay.h>

interrupt [EXT_INT0] void ext_int0_isr(void)
{
PORTB.2 = 1;
delay_us(100); // имитируем операторы в обработчике
PORTB.2 = 0;
}

void main(void)
{
 
DDRB=0x1E; // PB0 на ввод, PB1-PB4 на вывод

MCUCR=0x03; // прерывание по нарастающему фронту
GIMSK=0x40; // разрешаем INT0

#asm("sei")

while (1)
{
//PORTB.1 = PINB.0; // повторяем на PB1 то, что на PB0 (он же INT0)
}
}

На вход INT0 подаю импульсы от внешнего генератора - меандр частотой 100 - 200 Гц. В обработчике прерывания на выходе PB2 формируется импульс, совпадающий с передним фронтом импульса на входе PB0 (он же INT0).
Если в теле цикла while (1) нет ничего, т.е. строка PORTB.1 = PINB.0 закомментирована, то нифига не работает. Т.е. на выходе PB2 ничего нет - строгий 0.
Первая мысль - надо пить поменьше валерьянки - простые вещи делать разучился. А потом решил в основном цикле повторить на PB1 то, что на входе PB0. И произошло чудо, прерывания заработали!
Что это за нах? Кто-нибудь встречался с подобным?
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Re: CodeVision AVR в вопросах и ответах

Сообщение Барсик »

А по подробнее можно? Что это за мастер такой? И как лечить?
Аватара пользователя
Пухич
Модератор
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Re: CodeVision AVR в вопросах и ответах

Сообщение Пухич »

Хм, а вы не могли бы соответствующий ассемблерный код выслать? Подозреваю, что там что-то не то накручено в коде цикла.
Знание - сила!
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Re: CodeVision AVR в вопросах и ответах

Сообщение Барсик »

Вот ассемблерные файлы, которые родил кодевизион. Если бы я изучил этот дурацкий ассемблер, то сам бы разобрался :)
Вложения
работает.asm
(15.78 КБ) 379 скачиваний
НЕработает.asm
(15.7 КБ) 294 скачивания
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

Барсик, вероятно ошибка в компиляторе. Он генерирует код, предполагая, что INT0 на PB0. У меня 2.04.4а, получается то же самое. Но, дело в том, что INT0 на PB1, а не на PB0. Если завести сигнал на "нужное" место - то все в порядке.
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Re: CodeVision AVR в вопросах и ответах

Сообщение Барсик »

Как Вы меня напугали... Сказали бы сразу, что имели в виду "CodeVizardAVR". Я как раз в нём код и генерил. Лишнее выкинул. Остальное 10 раз перепроверил по даташиту...
Аватара пользователя
ValBag
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Re: CodeVision AVR в вопросах и ответах

Сообщение ValBag »

Барсик писал(а):... Сказали бы сразу, что имели в виду "CodeVizardAVR".
Неудачно выразился, конечно он. ...А что, не помогает?
Аватара пользователя
Барсик
Друг Кота
Сообщения: 3459
Зарегистрирован: Ср сен 27, 2006 16:18:57

Re: CodeVision AVR в вопросах и ответах

Сообщение Барсик »

ValBag писал(а):...Но, дело в том, что INT0 на PB1, а не на PB0. Если завести сигнал на "нужное" место - то все в порядке.
Хуясе :shock: :shock: :shock: :shock: Я уже все седые волосы из собственной задницы выдрал! Я же по даташиту смотрел. Там английским по белому написано, что PCINT0 это нога номер 5, она же PB0 !!! Это же первое, что стал проверять! Правильно ли подаю сигнал. Из-за этого и родилась эта идиотская идея повторить на PB1 то, что подаётся на PB0.
Всё... пойду приму 300 капель валерьянки. Надо стресс снять...

Так... После снятия стресса подал сигнал на ногу номер 6 (где PB1) И всё заработало. ValBag, я навеки Ваш должник. Вы спасли меня от дурдома. Я уже подумывал вызывать санитаров - думал, что сошёл с ума от жары...

Т.е. дело не в компиляторе, а в даташите! :shock: :shock: :shock:

Так... Оказалось, что я сам дурак. В даташите всё правильно. Около 6 ноги английским по белому написано: PB1 (MISO/AIN1/OC0B/INT0/PCINT2)
Блин, ну какое коварство !!!
Последний раз редактировалось Барсик Вс июл 11, 2010 22:18:56, всего редактировалось 1 раз.
Ответить

Вернуться в «AVR»