CodeVision AVR в вопросах и ответах
Линк в моем профиле - страница 5 "Си для МК"
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- Реклама
Ваш курс у меня скачанный - прочитал страницы 5.htm и 5a.htm - нашёл про violitale но про указатели там ничего нет...а так всё понял...
Хотя неважно - работает - и хорошо(щас в дебри лесть тоже не охота) я наверно просто названия битов забью в библиотеку КодВижна и на этом мои проблемы, надеюсь , закончатся
Хотя неважно - работает - и хорошо(щас в дебри лесть тоже не охота) я наверно просто названия битов забью в библиотеку КодВижна и на этом мои проблемы, надеюсь , закончатся
There is only 10 kind of people: those who understands binary code and those who dont!!!
ТРЕНЕРУЙТЕ ВНИМАНИЕ !!!
на странице 5a есть:
1.2.4. Указатели
Обчитаешься.
на странице 5a есть:
1.2.4. Указатели
Обчитаешься.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Прошу прощения - неузрел... чтож последую вашему совету - буде тренироватся юзать поиск... в любом случае спасибо
There is only 10 kind of people: those who understands binary code and those who dont!!!
И снова здравствуйте, возвращаемся к нашим баранам...tych писал(а):ТРЕНЕРУЙТЕ ВНИМАНИЕ !!!
на странице 5a есть:
1.2.4. Указатели
Обчитаешься.
Просили же уже 1024 раза: есть что рассказать - расскажи на Форуме или напиши статью. Хочешь послать в свой курс - пиши в личку.
Оптимизм х (Опыт + Знания) = const
- Реклама
Продолжаю изучать таймеры:чего не хватает в этом коде чтобы по переполнению таймера состояние на 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!!!
Курс почитайте - задачи о тайцере и мастером CVAVR воспользуйтесь. Нужно включить прервание от таймера.Negor писал(а):Продолжаю изучать таймеры:чего не хватает в этом коде чтобы по переполнению таймера состояние на PORTB.0 изменилось на противоположное?
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Да что вы говорите, не может такого быть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!!!
Страницу 3 курса почитайте "прерывания в AVR" - что нужно сделать кроме "СЕЙ".
Я ж написал "... ПРЕРЫВАНИЯ ОТ ТАЙМЕРА" а не только "вообще прерывания".
Я ж написал "... ПРЕРЫВАНИЯ ОТ ТАЙМЕРА" а не только "вообще прерывания".
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Слушай, ну хватит меня мучить....
открой секрет - чего нехватает? Я глазами проел 3-ю страницу курса, но кроме того что надо установить 7 бит статус регистра ничего не увидел... 
There is only 10 kind of people: those who understands binary code and those who dont!!!
Дак читать надо ...Negor писал(а):Я глазами проел 3-ю страницу курса, но кроме того что надо установить 7 бит статус регистра ничего не увидел...
Вот там есть:
Глобально вы разрешили прерывания,в CodeVision:
interrupt [прерывание] void adc_isr(void)
{
код выполняемый при возникновении
разрешенного локально и глобально прерывания
}
но В ТРЕТИЙ РАЗ говорю вам, нужно разрешить нужное вам прерывание локально - т.е. именно его, ТО которое вам нужно.
"таймер оверфло"
Проще всего это сделать мастером компилятора - пример в задаче 3,
либо прочитать ДШ про таймеры и прерывания и
сделать то что там написано.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Вот галочка прерывания в мастере. Настройте как вам надо и затем помотрите код.
- Вложения
-
- cvavr.png
- (9.95 КБ) 1499 скачиваний
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
А-а-а-а-а вот оно что.... с третьего раза въехал... извините что я "Ты"кнул... эмоции+паника...
There is only 10 kind of people: those who understands binary code and those who dont!!!
Ур-р-р-р-аа - зработало!!!
Для новичков сообщаю - не наступайте на грабли - читайте даташит(не знаю почему, но с даташитом мне веселее чем с Визардом)
Есть регистр в кот-ом разрешаются прерывания для таймера!!! Будте внимательны
Для новичков сообщаю - не наступайте на грабли - читайте даташит(не знаю почему, но с даташитом мне веселее чем с Визардом)
Есть регистр в кот-ом разрешаются прерывания для таймера!!! Будте внимательны
There is only 10 kind of people: those who understands binary code and those who dont!!!
Итак: требуется критика(код глаза намозолил, скорее всего чегото очевидного не вижу, но в симуляторе вроде работает). Цели:
-антидребезг;
-реакция на нажатие один раз с момента нажатия до момента отпускания;
-должно быть реализованно в виде отдельной функции, кот-ая фозвращает состояние порта.
Собственно код
-антидребезг;
-реакция на нажатие один раз с момента нажатия до момента отпускания;
-должно быть реализованно в виде отдельной функции, кот-ая фозвращает состояние порта.
Собственно код
Код: Выделить всё
#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!!!
Голос не мальчика, но мужа: растешь, Negor! Поздравляю.Negor писал(а):Для новичков сообщаю - не наступайте на грабли - читайте даташит(не знаю почему, но с даташитом мне веселее чем с Визардом)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
есть ещё один вариант. проверяем состояние кнопок по переполнению таймера (например 100 раз в секунду)Negor писал(а):Итак: требуется критика...
если в предыдущий раз и в текущий раз состояние кнопки не изменилось, значит пишем это состояние в какую-либо глобальную переменную.
в основном цикле программы (да и вообще из любого места) для того чтобы узнать нажата ли кнопка или нет - достаточно заглянуть в эту переменную.
дело в том что главное во всей этой функции(по крайней мере я ставил приоритет именно на это) - что бы если кнопка нажата длительное время - реакции на нажатие не поступало. т.е. допустим кнопка нажата в течении десяти циклов, но реакция на нажатие была только в первом и больше не произойдёт, пока кнопку не отпустят... примерно так... а вот делать это всё по переполнению таймера - мысль хорошая...Кашпо писал(а):есть ещё один вариант. проверяем состояние кнопок по переполнению таймера (например 100 раз в секунду)Negor писал(а):Итак: требуется критика...
если в предыдущий раз и в текущий раз состояние кнопки не изменилось, значит пишем это состояние в какую-либо глобальную переменную.
в основном цикле программы (да и вообще из любого места) для того чтобы узнать нажата ли кнопка или нет - достаточно заглянуть в эту переменную.
There is only 10 kind of people: those who understands binary code and those who dont!!!
т.е. типа буфера клавиатуры? я нечто подобное недавно делал. в каждом переполнении таймера, если кнопка нажата то наращивается некая глобальная переменная "счётчик". если кнопка отпущена переменная сбрасывается в ноль. При достижении счётчиком определённого значения (например 10) будет означать, что в течении последних 10 срабатываний таймера кнопка была нажата. В этом случае номер нажатой кнопки заносится в другую переменную.Negor писал(а):если кнопка нажата длительное время - реакции на нажатие не поступало. т.е. допустим кнопка нажата в течении десяти циклов, но реакция на нажатие была только в первом и больше не произойдёт, пока кнопку не отпустят...
Состояние этой переменной читается какой-либо функцией и после прочтения - обнуляется. таким образом одно нажатие кнопки попадёт в переменную лищь единожды и прочитается лишь единожды.
Правда оно может прочитаться даже тогда, когда кнопка уже будет отпущена. Но по крайней мере факт нажатия не прозевается процом
Имхо уж очень легко ты разкидываешся таймерами... я понимаю, если бы их было штук восемь... а так два таймера(я изучаю тини2313) и, как правильно заметил ARV один просто будет молотить и энергия расходуется в никуда...
There is only 10 kind of people: those who understands binary code and those who dont!!!


