roboforum.ru

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

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

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

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

Сообщение ADonis » 02 окт 2010, 11:47

Да это проверено тоже, без прерывания работает все нормально, т.е. могу контролировать ногу, все работает, а как только делаю на прерывании, то вот такая ерунда. Плата тестовая тоже проверена не раз, но еще ни разу не работал с прерываниями в реальности, только виртуально :sorry:

Добавлено спустя 2 часа 25 минут 32 секунды:
Добился работы переделав на:
Код: Выделить всёРазвернуть
TIMSK=0x80;

и прерывание:
Код: Выделить всёРазвернуть
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
// Place your code here
        PORTD.0=~PORTD.0;
}


но есть одно но: прерывание генерируется с максмальной частотой 36-38 кГц. И никак я его не могу его увеличить при частоте ядра 1 МГц. неважно, OCR2=0x12 или 0x02, частота будет одинакова... почему?

Добавлено спустя 7 минут 5 секунд:
Изменил частоту кварца на 2МГц, соответственно увеличилась и частота получения прерывания. Выходит, есть некоторое "железное" ограничение, выше которого не прыгнешь?

Добавлено спустя 2 минуты 39 секунд:
Кстати, на картинке изображен не висящий провод, т.к. это горит ИК светодиод, а снимаю показания звуковухой через фотодиод. Светодиод не будет же гореть, если нога будет "висящей"
В гугле есть все! Даже то, чего еще нет!

Не спорь с холостяком о макаронах!
Аватара пользователя
ADonis
 
Сообщения: 106
Зарегистрирован: 30 дек 2009, 08:16
Откуда: Омск
Skype: hedgehoguse

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

Сообщение Grem » 02 окт 2010, 18:08

если скомпилировать пустой int main(), в хексе будет последний код - 76?
нет пк под рукой, чтоб глянуть
"There is nothing better than sliding down snow and flying through the air" (с) Shane McConkey.
Lieber ein Brett am Fuß als eins vorm Kopf, aber lieber ein Brett vorm Kopf als zwei am Fuß.
Аватара пользователя
Grem
 
Сообщения: 1530
Зарегистрирован: 16 май 2009, 12:50
Откуда: Россия
прог. языки: Java, C

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

Сообщение ADonis » 02 окт 2010, 21:39

скомпилировал вот это:
void main(void)
{
}

в cvavr, получилось аж 92 слова, в хексе аж 218 последний... если я правильно понял о чем речь :-X
В гугле есть все! Даже то, чего еще нет!

Не спорь с холостяком о макаронах!
Аватара пользователя
ADonis
 
Сообщения: 106
Зарегистрирован: 30 дек 2009, 08:16
Откуда: Омск
Skype: hedgehoguse

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

Сообщение Para_bellum » 06 окт 2010, 20:55

Доброго вечера.
Есть вот такой код:
Код: Выделить всёРазвернуть
void search (void) {
    stop(); 
    for (servo = 400; servo < 1600; servo += 100) {
        if (PIND.3 == 0) {
            i = servo;
            break;
            servo = 970; //центр
        }
        delay_ms(100);
    }

    s = abs(1000-i);
    s = s*1.75;

    if (i < 1000) {
        turn_left();
    }

    else if (i > 1000) {
        turn_right();
    }
   
    else if (i == 0) {
        move_backward();
        search();
    }
    #asm ("sei");
}


Прерывание:
Код: Выделить всёРазвернуть
interrupt [EXT_INT1] void ext_int1_isr(void) {
    #asm ("cli");
    search();
}

Срабатывает по сигналу с Sharp'а, вроде всё нормально, вот только есть подозрение, что эта подпрограмма выполняется три раза подряд, причём i всегда больше 1000 и выполняется turn_right() (или turn_left, в зависимости от знака < или >). Может #asm ("cli"); не срабатывать? Да и уместно ли использование этой операции в прерывании?
Аватара пользователя
Para_bellum
 
Сообщения: 27
Зарегистрирован: 23 янв 2010, 17:41
Откуда: Краснодар

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

Сообщение avr123.nm.ru » 06 окт 2010, 21:34

При выполнении прерывания они и так глобально запрещаются ! Механизм прерывания в AVR - http://proavr.narod.ru/03.htm

Я бы не советовал из прерывания вызвать функцию. Просто установите флаг ( переменная или бит ) - сделайте его "1" например - и в основном цикле проги вставьте условие
Код: Выделить всёРазвернуть
if( флаг ) { вызвать нужную функцию }
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

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

Сообщение Para_bellum » 06 окт 2010, 21:37

Поооооонял. Сейчас гляну. Благодарен.
Аватара пользователя
Para_bellum
 
Сообщения: 27
Зарегистрирован: 23 янв 2010, 17:41
Откуда: Краснодар

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

Сообщение osc » 08 окт 2010, 09:01

ADonis, замените
Код: Выделить всёРазвернуть
PORTD.0=~PORTD.0; 
на
Код: Выделить всёРазвернуть
PORTD.0=~PIND.0; 
Аватара пользователя
osc
 
Сообщения: 333
Зарегистрирован: 07 сен 2009, 20:06
прог. языки: c, c#
ФИО: Евгений

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

Сообщение Duhas » 08 окт 2010, 10:07

а зачем если не секрет ? )
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

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

Сообщение osc » 24 окт 2010, 16:56

Регистр PORT разве не Write only?
Аватара пользователя
osc
 
Сообщения: 333
Зарегистрирован: 07 сен 2009, 20:06
прог. языки: c, c#
ФИО: Евгений

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

Сообщение avr123.nm.ru » 24 окт 2010, 17:09

нет.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

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

Сообщение Webspider » 02 ноя 2010, 01:10

Доброго времени суток! Возникла проблема с подключением ЖКИ 16х2 DV-16236.
Собрал в соотвествии с даташитом. просимулировал в ISIS.всё тип-топ. в контроллер зашил всего одну строчку с putsf.
при подаче питания загорается подсветка и почему-то только все точки верхней строки ЖКИ. на этом всё кончается.
Исключил, что проблема может быть в контроллере, подвесив поморгать светодиод.

В чём может быть проблема? Нужно ли изначально в визарде подтягивать к VCC порт на котором висит ЖКИ( читал где-то)?
Webspider
 
Сообщения: 22
Зарегистрирован: 18 окт 2009, 12:36
Откуда: Самара

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

Сообщение galex1981 » 02 ноя 2010, 10:55

А в Протеус работаетпрограмма? Можете выложить схему и программу?
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

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

Сообщение Webspider » 02 ноя 2010, 13:56

Выкладывать собственно и нечего. в конечном итоге просто сделал всё как в http://avr123.nm.ru/z5.htm с той лишь разницей что вешал дисплей на порт С :(
Webspider
 
Сообщения: 22
Зарегистрирован: 18 окт 2009, 12:36
Откуда: Самара

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

Сообщение avr123.nm.ru » 02 ноя 2010, 14:54

Всё просто :ROFL:
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

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

Сообщение Webspider » 02 ноя 2010, 15:47

В предыдущем посте имел ввиду, что даже сделав по задаче 5 курса - всё равно не заработало.
Webspider
 
Сообщения: 22
Зарегистрирован: 18 окт 2009, 12:36
Откуда: Самара

Пред.След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4