CodeVision AVR в вопросах и ответах
- Сериг
- Это не хвост, это антенна
- Сообщения: 1451
- Зарегистрирован: Пт фев 19, 2010 19:39:28
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
тоже не прокатывает 
Re: CodeVision AVR в вопросах и ответах
Сериг писал(а):тоже не прокатывает
вот специально по быстрому набросал, в протеусе проверил - работает
правда думаю нужно учитывать еще время на wake-up при расчете
Код: Выделить всё
#include <mega8.h>
#include <delay.h>
#define LED PORTB.3
#define ON 0
#define OFF 1
bit LE = 0;
// Timer1 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
TCNT2 = 64560 + 6; //выставляем начальное значение TCNT2 для 1 сек; 65536 - ( xtall/1024 = 977Hz)
//6 тиков на просыпание
if (LE == 0)
{
LED = ON;
LE = 1;
}
else
{
LED = OFF;
LE = 0;
}
}
void main(void)
{
DDRB=0b11111111;
PORTB=0b11111111;
TCCR2 = (1<<CS12)|(1<<CS11)|(1<<CS10); // преддделитель 1024 для таймера2
TCNT2 = 64560 + 6; //выставляем начальное значение TCNT2 для 1 сек; 65536 - ( xtall/1024 = 977Hz)
//6 тиков на просыпание
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK |= (1<<TOIE2); // разрешить прерывание по переполнению таймера2
MCUCR |= (1 << SE)|(0 << SM2)|(1 << SM1)|(1 << SM0); // Разрешить Power-save mode
ASSR |= (1 << AS2); // Установить в асинхронный режим
// Global enable interrupts
#asm("sei")
//LED = ON;
//LE = 1;
while (1)
{
#asm("Sleep")
}
}
- Пахнет котом, - подумал Штирлиц.
- Зачем он нюхает мою лапу? - подумал кот.
- Зачем он нюхает мою лапу? - подумал кот.
- Сериг
- Это не хвост, это антенна
- Сообщения: 1451
- Зарегистрирован: Пт фев 19, 2010 19:39:28
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
Спасибо, соберу еще одно устройство и буду пробовать! Еще раз спасибо 
Re: CodeVision AVR в вопросах и ответах
так ведь есть же возможность в протеусе просимулировать не собирая железо
- Пахнет котом, - подумал Штирлиц.
- Зачем он нюхает мою лапу? - подумал кот.
- Зачем он нюхает мою лапу? - подумал кот.
- Сериг
- Это не хвост, это антенна
- Сообщения: 1451
- Зарегистрирован: Пт фев 19, 2010 19:39:28
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
Таки у меня то проблемы возникли на реально устройстве 
- MVGudkov
- Первый раз сказал Мяу!
- Сообщения: 23
- Зарегистрирован: Пт фев 11, 2011 13:34:31
- Откуда: Москва - Жулебино
Re: CodeVision AVR в вопросах и ответах
Подскажите как реализовать функцию задержки на 1-2 секунды после нажатия на кнопку в ожидании повторного нажатия (при этом останавливается ШИМ). Если нажатие было то повторить ожидание, если нет продолжить выполнение программы (ШИМ). Если 0 таймер задействован в ШИМ, а 1 выводит мигание светодиодом на РВ3, МК тини2313. Можно ли для опроса использовать таймер 1 не снимая с него функции индикации?
П.С. Желательно ткнуть в пример
#include <delay.h>
#define starttime 1 // Время розжига
unsigned char GetData (void)
{
unsigned char i, j;
for(i=0;i<30;i++)
{
delay_us(1000);
j = (PINB & 0xE0); // 5.6.7>>1
delay_us(1000);
if(j != (PINB & 0xE0)) i=0;
}
return j;
}
eeprom int pwm_level;
int pwm_current = 0;
int pwm_step = 1;
unsigned char laststate = 0x00;
void main(void)
{
unsigned char dt = 0;
pwm_step = pwm_level / starttime + 1; // шаг розжига.
while (1)
{
#asm("wdr") // сброс WDT
dt = GetData(); // считали и отфильтровали ввод со входов
delay_ms(100);
if ((dt & 0x80) == 0x00) {
// режим настройки
if (laststate == 0x00) {
laststate = 0x01;
pwm_level += 16;
if (pwm_level > 239) {
pwm_level = 15;
pwm_current = 0;
}
pwm_step = pwm_level / starttime + 1; // шаг розжига.
}
} else {
laststate = 0x00;
if ((dt & 0x60) == 0x40) {
// разжигаем
if (pwm_current < pwm_level) {
pwm_current += pwm_step;
if (pwm_current > pwm_level) {
pwm_current = pwm_level;
}
}
} else {
// гасим
if (pwm_current > 0) {
pwm_current = 0 ;
// pwm_current -= pwm_step;
if (pwm_current < 0) {
pwm_current = 0 ;
}
}
}
}
if (pwm_current == 0x00) {
OCR0A = 0x00;
TCCR0A = 0x00;
PORTB.4 = 0x00;
} else {
OCR0A = pwm_current;
TCCR0A = 0x83;
PORTB.4 = 0x01;
}
}
}
П.С. Желательно ткнуть в пример
Спойлер
#include <tiny2313.h>#include <delay.h>
#define starttime 1 // Время розжига
unsigned char GetData (void)
{
unsigned char i, j;
for(i=0;i<30;i++)
{
delay_us(1000);
j = (PINB & 0xE0); // 5.6.7>>1
delay_us(1000);
if(j != (PINB & 0xE0)) i=0;
}
return j;
}
eeprom int pwm_level;
int pwm_current = 0;
int pwm_step = 1;
unsigned char laststate = 0x00;
void main(void)
{
unsigned char dt = 0;
pwm_step = pwm_level / starttime + 1; // шаг розжига.
while (1)
{
#asm("wdr") // сброс WDT
dt = GetData(); // считали и отфильтровали ввод со входов
delay_ms(100);
if ((dt & 0x80) == 0x00) {
// режим настройки
if (laststate == 0x00) {
laststate = 0x01;
pwm_level += 16;
if (pwm_level > 239) {
pwm_level = 15;
pwm_current = 0;
}
pwm_step = pwm_level / starttime + 1; // шаг розжига.
}
} else {
laststate = 0x00;
if ((dt & 0x60) == 0x40) {
// разжигаем
if (pwm_current < pwm_level) {
pwm_current += pwm_step;
if (pwm_current > pwm_level) {
pwm_current = pwm_level;
}
}
} else {
// гасим
if (pwm_current > 0) {
pwm_current = 0 ;
// pwm_current -= pwm_step;
if (pwm_current < 0) {
pwm_current = 0 ;
}
}
}
}
if (pwm_current == 0x00) {
OCR0A = 0x00;
TCCR0A = 0x00;
PORTB.4 = 0x00;
} else {
OCR0A = pwm_current;
TCCR0A = 0x83;
PORTB.4 = 0x01;
}
}
}
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Я, конечно, дико извиняюсь но зачем задержка в данном отрезке кода?
Что может произойти полезного за этот миг? Улягутся электроны в регистре для того, чтобы уверенно его считать?
Вообще можно и с помощью таймера сделать опрос клавиатуры с антидребезгом и при этом без ненужных задержек.
Код: Выделить всё
dt = GetData(); // считали и отфильтровали ввод со входов
delay_ms(100);
if ((dt & 0x80) == 0x00) { Вообще можно и с помощью таймера сделать опрос клавиатуры с антидребезгом и при этом без ненужных задержек.
- MVGudkov
- Первый раз сказал Мяу!
- Сообщения: 23
- Зарегистрирован: Пт фев 11, 2011 13:34:31
- Откуда: Москва - Жулебино
Re: CodeVision AVR в вопросах и ответах
Это было в исходнике программы, я и не трогал. Все что я переделал это перевел с тини13 на тини2313. И хочу добавить задержку после нажатия кнопки, но чтоб нажатия продолжали обрабатываться.
С МК знаком всего неделю, прочитал всего пару книги (пока), потихонечку вникаю.
С МК знаком всего неделю, прочитал всего пару книги (пока), потихонечку вникаю.
Re: CodeVision AVR в вопросах и ответах
Подскажите пожалуйста почему CODEVISION пошла в полный отказ. Полная переустановка программы любых версий из инета ничего не дает. Как ошибку определяет практически весь код начиная от обьявления библиотеки чипа и до самого конца. Заново сгенерированный код самой прогой еще пустой и то после компиляции определяет как сплошную ошибку. А поначалу отлично работала месяца два 1.25-я версия. 
Re: CodeVision AVR в вопросах и ответах
Триальная версия ? Время кончилось ?
Re: CodeVision AVR в вопросах и ответах
Jack_A писал(а):Триальная версия ? Время кончилось ?
Наверное так и есть, я пока не спец. Почему тогда не дает возможности работать другим версиям например 2.05. Там такие же ошибки "обовсем" дает. Может в первый раз немного поработав она в винде "личинки откладывает" и простое удаление программы ничего не дает? Такую фигню я наблюдал с антивирусами( время когда выйдет то сколько не переустанавливай она не пойдет). Винду из за этого переустанавливать не хочется. Подскажите где взять нормально-крякнутую версию, и как справиться с проблемой.
Re: CodeVision AVR в вопросах и ответах
Насчёт крякнутой версии не скажу, я кодевижн не пользую, да и не принято кряки обсуждать в открытом эфире
Могу поделитьтся своим случаем. Для устройств с USB на FTDI писал проги на Delphi 7. Несколько лет всё шло хорошо. Однажды сдуру врубил ноут, когда в его гнездо USB было воткнуто моё устройство
И кто бы мог подумать -- где Delphi и где FTDI -- но при загрузке Delphi она мне сказала : шёл бы ты, парень, лесом, а я тебя знать не знаю ! Снёс Дельфу на хрен, переустановил -- моно-пенисно. С горя хотел уже переходить на убогую free Delphi, но взял себя в руки, методично вычистил реестр, где хоть раз упоминалась Delphi, переустановил. Слава всевышнему -- до сих пор фурчит, как котёнок.
С тех пор регулярно при любых новациях делаю в Винде точки возврата и при необходимости откатываюсь.
Могу поделитьтся своим случаем. Для устройств с USB на FTDI писал проги на Delphi 7. Несколько лет всё шло хорошо. Однажды сдуру врубил ноут, когда в его гнездо USB было воткнуто моё устройство
С тех пор регулярно при любых новациях делаю в Винде точки возврата и при необходимости откатываюсь.
Re: CodeVision AVR в вопросах и ответах
Попробую почистить реестр !
Re: CodeVision AVR в вопросах и ответах
Чистка реестра таки и помогла. Спасибо за дельный совет. 

- levaclaus
- Потрогал лапой паяльник
- Сообщения: 302
- Зарегистрирован: Пн янв 07, 2008 16:56:28
- Откуда: Минск
Re: CodeVision AVR в вопросах и ответах
Помогите разобраться с LCD4X40.H
Собственно есть экран hd44780 4х40
#include <mega16.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd4x40.h>
*****
блаблабла
*****
lcd_init();
lcd_gotoxy(0,0);
lcd_putsf("1234567890");
lcd_gotoxy(0,1);
lcd_putsf("1234567890");
lcd_gotoxy(0,2);
lcd_putsf("1234567890");
lcd_gotoxy(0,3);
lcd_putsf("1234567890");
***
и ничего не происходит. Экран пуст либо на нем мусор. Подключено все правильно, экран рабочий.
Если подключить #include <LCD.H>
lcd_init(40);
то логично - работают 2 верхние строки
Как эту библиотеку LCD4X40.H привильно "окучить"?
Собственно есть экран hd44780 4х40
#include <mega16.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd4x40.h>
*****
блаблабла
*****
lcd_init();
lcd_gotoxy(0,0);
lcd_putsf("1234567890");
lcd_gotoxy(0,1);
lcd_putsf("1234567890");
lcd_gotoxy(0,2);
lcd_putsf("1234567890");
lcd_gotoxy(0,3);
lcd_putsf("1234567890");
***
и ничего не происходит. Экран пуст либо на нем мусор. Подключено все правильно, экран рабочий.
Если подключить #include <LCD.H>
lcd_init(40);
то логично - работают 2 верхние строки
Как эту библиотеку LCD4X40.H привильно "окучить"?
-
Александр 2677
- Встал на лапы
- Сообщения: 89
- Зарегистрирован: Пн фев 22, 2010 11:16:00
Re: CodeVision AVR в вопросах и ответах
Добрый вечер. Если есть у кого нибудь возможность, глянте мой проект (точнее это не мой а скаченный на одном из форумов).
Суть в том что дисплей Nokia 3310 неработает в железе, а в Proteus всё путём. Правильность схемы проверенна другими прошивками. Может быть чтото с настройками Codewision ?
Суть в том что дисплей Nokia 3310 неработает в железе, а в Proteus всё путём. Правильность схемы проверенна другими прошивками. Может быть чтото с настройками Codewision ?
- Вложения
-
- Дисплей нокиа.rar
- (816.28 КБ) 177 скачиваний
- Ghost in shell
- Держит паяльник хвостом
- Сообщения: 931
- Зарегистрирован: Пн июн 15, 2009 06:01:38
- Откуда: USSR
Re: CodeVision AVR в вопросах и ответах
Привет.
Какая версия CodeVision AVR работает с ExtraPIC? Это JDM-программматор, но его в менюшке нет...
Какая версия CodeVision AVR работает с ExtraPIC? Это JDM-программматор, но его в менюшке нет...
Кот гуляет сам по себе, но вблизи холодильника.
- Сериг
- Это не хвост, это антенна
- Сообщения: 1451
- Зарегистрирован: Пт фев 19, 2010 19:39:28
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
Добрый вечер! Подскажите пожалуйста, как выполнять условие на числа с плавающей точкой? Поясню:
Я измеряю напряжение аналоговым компаратором мк, далее его проеобразую в "выводимое напряжение", после чего и спрашиваю, если напряжение лежит в пределах 6,3-6,9 - то делаем что-то...
Пробовал делать так:
if (voltage < 6.3 || voltage > 6.9) {...}
Однако компилятор ругается на числа с плавающей точкой ( мол, не лежит в пределах переменной).
Так же пробовал домножить - if (voltage*10 < 63 || voltage*10 > 69){...}
Еще есть вариант просто вычислить значение ADC при этих напряжениях чему будет равно и подставить. Но это не очень приятный процесс... Можно ли как-то иначе производить "опрос"числа с плавающей точкой?
Большое спасибо за помощь!
Я измеряю напряжение аналоговым компаратором мк, далее его проеобразую в "выводимое напряжение", после чего и спрашиваю, если напряжение лежит в пределах 6,3-6,9 - то делаем что-то...
Пробовал делать так:
if (voltage < 6.3 || voltage > 6.9) {...}
Однако компилятор ругается на числа с плавающей точкой ( мол, не лежит в пределах переменной).
Так же пробовал домножить - if (voltage*10 < 63 || voltage*10 > 69){...}
Еще есть вариант просто вычислить значение ADC при этих напряжениях чему будет равно и подставить. Но это не очень приятный процесс... Можно ли как-то иначе производить "опрос"числа с плавающей точкой?
Большое спасибо за помощь!
Re: CodeVision AVR в вопросах и ответах
А вы определили его как float?
У меня были проблемы с точками. Решить удалось подставив сразу после значения(без пробела) букву "f" (и при объявлении переменной со значением тоже, везде вообщем где float). С тех пор так всегда делаю, всё норм пока
.
У меня были проблемы с точками. Решить удалось подставив сразу после значения(без пробела) букву "f" (и при объявлении переменной со значением тоже, везде вообщем где float). С тех пор так всегда делаю, всё норм пока