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