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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Линк в моем профиле - страница 5 "Си для МК"
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

Сообщение Negor »

Ваш курс у меня скачанный - прочитал страницы 5.htm и 5a.htm - нашёл про violitale но про указатели там ничего нет...а так всё понял...

Хотя неважно - работает - и хорошо(щас в дебри лесть тоже не охота) я наверно просто названия битов забью в библиотеку КодВижна и на этом мои проблемы, надеюсь , закончатся
There is only 10 kind of people: those who understands binary code and those who dont!!!
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

ТРЕНЕРУЙТЕ ВНИМАНИЕ !!!

на странице 5a есть:

1.2.4. Указатели

Обчитаешься.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

Сообщение Negor »

Прошу прощения - неузрел... чтож последую вашему совету - буде тренироватся юзать поиск... в любом случае спасибо
There is only 10 kind of people: those who understands binary code and those who dont!!!
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

tych писал(а):ТРЕНЕРУЙТЕ ВНИМАНИЕ !!!

на странице 5a есть:

1.2.4. Указатели

Обчитаешься.


И снова здравствуйте, возвращаемся к нашим баранам...
Просили же уже 1024 раза: есть что рассказать - расскажи на Форуме или напиши статью. Хочешь послать в свой курс - пиши в личку. :evil:
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

Сообщение Negor »

Продолжаю изучать таймеры:чего не хватает в этом коде чтобы по переполнению таймера состояние на PORTB.0 изменилось на противоположное?

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

#include <tiny2313>
#include <delay>

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
        PORTB.0=~PORTB.0;
}

void main(void)
{
       
        DDRB=0xFF;
        TCCR0B|=(1<<CS00);//|(1<<CS02);
        #asm("SEI");
        while(1);
}
There is only 10 kind of people: those who understands binary code and those who dont!!!
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Negor писал(а):Продолжаю изучать таймеры:чего не хватает в этом коде чтобы по переполнению таймера состояние на PORTB.0 изменилось на противоположное?


Курс почитайте - задачи о тайцере и мастером CVAVR воспользуйтесь. Нужно включить прервание от таймера.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

Сообщение Negor »

tych писал(а):Нужно включить прервание от таймера.

Да что вы говорите, не может такого быть :) .
Извините за иронию, но у меня прерывание по переполнению таймера включено

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

interrupt [TIM0_OVF] void timer0_ovf_isr(void) 
{
        PORTB.0=~PORTB.0;
}


и разрешение прерываний есть

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

#asm("SEI")


Вы же код мой читали....
Просто подскажите что может помешать выполнятся обработчику
There is only 10 kind of people: those who understands binary code and those who dont!!!
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Страницу 3 курса почитайте "прерывания в AVR" - что нужно сделать кроме "СЕЙ".

Я ж написал "... ПРЕРЫВАНИЯ ОТ ТАЙМЕРА" а не только "вообще прерывания".
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

Сообщение Negor »

Слушай, ну хватит меня мучить.... :cry: открой секрет - чего нехватает? Я глазами проел 3-ю страницу курса, но кроме того что надо установить 7 бит статус регистра ничего не увидел... :cry:
There is only 10 kind of people: those who understands binary code and those who dont!!!
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Negor писал(а):Я глазами проел 3-ю страницу курса, но кроме того что надо установить 7 бит статус регистра ничего не увидел... :cry:


Дак читать надо ...

Вот там есть:

в CodeVision:

interrupt [прерывание] void adc_isr(void)
{
код выполняемый при возникновении
разрешенного локально и глобально прерывания
}


Глобально вы разрешили прерывания,

но В ТРЕТИЙ РАЗ говорю вам, нужно разрешить нужное вам прерывание локально - т.е. именно его, ТО которое вам нужно.

"таймер оверфло"

Проще всего это сделать мастером компилятора - пример в задаче 3,

либо прочитать ДШ про таймеры и прерывания и
сделать то что там написано.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Вот галочка прерывания в мастере. Настройте как вам надо и затем помотрите код.
Вложения
cvavr.png
(9.95 КБ) 1494 скачивания
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

Сообщение Negor »

А-а-а-а-а вот оно что.... с третьего раза въехал... извините что я "Ты"кнул... эмоции+паника...
There is only 10 kind of people: those who understands binary code and those who dont!!!
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

Сообщение Negor »

Ур-р-р-р-аа - зработало!!!
Для новичков сообщаю - не наступайте на грабли - читайте даташит(не знаю почему, но с даташитом мне веселее чем с Визардом)
Есть регистр в кот-ом разрешаются прерывания для таймера!!! Будте внимательны :roll:
There is only 10 kind of people: those who understands binary code and those who dont!!!
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

Сообщение Negor »

Итак: требуется критика(код глаза намозолил, скорее всего чегото очевидного не вижу, но в симуляторе вроде работает). Цели:
-антидребезг;
-реакция на нажатие один раз с момента нажатия до момента отпускания;
-должно быть реализованно в виде отдельной функции, кот-ая фозвращает состояние порта.
Собственно код

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

#include <tiny2313>
#include <delay>
unsigned char FrstState,ScndState,RealState,Flag;
unsigned char KeyState(void)
{
       
        FrstState=PIND;                         //Запоминаем состояние кнопок
        delay_ms(10);                           //Задержка на антидребезг
        ScndState=FrstState & PIND;             //Контрольная проверка на нажатие
        RealState=(ScndState) & ~(Flag);        //Состояние изменилось?
        Flag=ScndState;                         //Флаг для контроля состояния при след проверке
     return RealState;   
}

void main(void)
{
       
        unsigned char i=0;
        DDRB=0xFF;
        DDRD=0x00;
        while(1)
        {       
                   if (KeyState()!=0)  i++;
        }
}
There is only 10 kind of people: those who understands binary code and those who dont!!!
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Negor писал(а):Для новичков сообщаю - не наступайте на грабли - читайте даташит(не знаю почему, но с даташитом мне веселее чем с Визардом)

Голос не мальчика, но мужа: растешь, Negor! Поздравляю.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Кашпо
Опытный кот
Сообщения: 764
Зарегистрирован: Пт фев 02, 2007 10:19:58
Откуда: Железногорск

Сообщение Кашпо »

Negor писал(а):Итак: требуется критика...

есть ещё один вариант. проверяем состояние кнопок по переполнению таймера (например 100 раз в секунду)
если в предыдущий раз и в текущий раз состояние кнопки не изменилось, значит пишем это состояние в какую-либо глобальную переменную.

в основном цикле программы (да и вообще из любого места) для того чтобы узнать нажата ли кнопка или нет - достаточно заглянуть в эту переменную.
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

Сообщение Negor »

Кашпо писал(а):
Negor писал(а):Итак: требуется критика...

есть ещё один вариант. проверяем состояние кнопок по переполнению таймера (например 100 раз в секунду)
если в предыдущий раз и в текущий раз состояние кнопки не изменилось, значит пишем это состояние в какую-либо глобальную переменную.

в основном цикле программы (да и вообще из любого места) для того чтобы узнать нажата ли кнопка или нет - достаточно заглянуть в эту переменную.


дело в том что главное во всей этой функции(по крайней мере я ставил приоритет именно на это) - что бы если кнопка нажата длительное время - реакции на нажатие не поступало. т.е. допустим кнопка нажата в течении десяти циклов, но реакция на нажатие была только в первом и больше не произойдёт, пока кнопку не отпустят... примерно так... а вот делать это всё по переполнению таймера - мысль хорошая...
There is only 10 kind of people: those who understands binary code and those who dont!!!
Кашпо
Опытный кот
Сообщения: 764
Зарегистрирован: Пт фев 02, 2007 10:19:58
Откуда: Железногорск

Сообщение Кашпо »

Negor писал(а):если кнопка нажата длительное время - реакции на нажатие не поступало. т.е. допустим кнопка нажата в течении десяти циклов, но реакция на нажатие была только в первом и больше не произойдёт, пока кнопку не отпустят...

т.е. типа буфера клавиатуры? я нечто подобное недавно делал. в каждом переполнении таймера, если кнопка нажата то наращивается некая глобальная переменная "счётчик". если кнопка отпущена переменная сбрасывается в ноль. При достижении счётчиком определённого значения (например 10) будет означать, что в течении последних 10 срабатываний таймера кнопка была нажата. В этом случае номер нажатой кнопки заносится в другую переменную.
Состояние этой переменной читается какой-либо функцией и после прочтения - обнуляется. таким образом одно нажатие кнопки попадёт в переменную лищь единожды и прочитается лишь единожды.

Правда оно может прочитаться даже тогда, когда кнопка уже будет отпущена. Но по крайней мере факт нажатия не прозевается процом ;-)
Аватара пользователя
Negor
Вымогатель припоя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина
Контактная информация:

Сообщение Negor »

Имхо уж очень легко ты разкидываешся таймерами... я понимаю, если бы их было штук восемь... а так два таймера(я изучаю тини2313) и, как правильно заметил ARV один просто будет молотить и энергия расходуется в никуда...
There is only 10 kind of people: those who understands binary code and those who dont!!!
Ответить

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