Снова Переход с Меги8 на Мегу88

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Открыл глаза
Сообщения: 66
Зарегистрирован: Вт фев 05, 2008 00:49:13
Откуда: Тамбов

Сообщение FedorChek »

Вобщем методом «тыка» с горем пополам выяснил на какой строчке меня выкидывает в ошибку
Прошу направить на путь «истинный»
1. строка while((time_out>0) and (ACSR & 0x20)==0))-- time_out; // Wait for first impulse
Было под Мегу 8 while((--time_out)&&(!ACSR.5)); // Wait for first impulse
Тут вроде работает…
Далее дошел до строк
2. time_imp=TCNT1H; // Здесь заведомо не правильно
time_imp=TCNT1L; // Здесь заведомо не правильно
//Под Мегу8 было time_imp=TCNT1 но такой вариант у меня не прокатывает в CodeAVR
// анализ длительности
if ((time_imp>T0_MIN)&&(time_imp<T0_MAX>3250)
// time_out=65000;
// else
// time_out=IR_TIME_OUT*20; // IR_TIME_OUT=1600 -> 10 сек таймаут ожидания первого импульса
time_out=65000;
Вот тут изменил
while((time_out>0) and (ACSR & 0x20)==0))-- time_out; // Wait for first impulse
TCCR1B=0x01; // запуск таймера f=32768/1 Гц
if (!time_out)
{
TCCR1B=0x00; // останов таймера
return 1; // ошибка - timeout
};
// ждем окончания импульса или таймаута
time_out=IR_TIME_OUT;
while((time_out>0) and (ACSR & 0x20)==0))-- time_out; // Wait for first impulse
TCCR1B=0x00; // останов таймера
if (!time_out)
return 1; // ошибка - timeout
1 с этого места начинаются Проблемы
time_imp=TCNT1H;
time_imp=TCNT1L;
// анализ длительности
if ((time_imp>T0_MIN)&&(time_imp<T0_MAX>T1_MIN)&&(time_imp<T1_MAX))
read_byte=1;
else
return 2; // ошибка - не соотв. длительность импульса
}
//7 bit 7 bit 7 bit 7 bit 7 bit 7 bit 7 bit 7 bit 7 bit 7 bit

for(i=0;i<7>0) and (ACSR & 0x20)==0))-- time_out; // Wait for first impulse
TCCR1B=0x00; // останов таймера
if (!time_out)
return 1; // ошибка - timeout
time_imp=TCNT1H;
time_imp=TCNT1L;
read_byte<<1>T0_MIN)&&(time_imp<T0_MAX>T1_MIN)&&(time_imp<T1_MAX))
{
read_byte+=1;
}
else
return 2; // ошибка - не соотв. длительность импульса
}
}
ByteIR = read_byte;
return 0; // успех
}
Реклама
Потрогал лапой паяльник
Сообщения: 327
Зарегистрирован: Пт фев 08, 2008 13:46:03
Откуда: Воронеж

Сообщение pirotehnick »

Не знаю что требуется от этой программы, но при чтении 16-разрядных регистров таймера первым должен быть прочитан младший байт, т.е. TCNT1L.
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Вт ноя 25, 2008 18:56:41

Сообщение OBIVAN »

Или в 16 разрядную переменную temp=TCNT1
Открыл глаза
Сообщения: 66
Зарегистрирован: Вт фев 05, 2008 00:49:13
Откуда: Тамбов

Сообщение FedorChek »

А как это реализовать ?
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Вт ноя 25, 2008 18:56:41

Сообщение OBIVAN »

У Вас скорее переход не с меги8 ,а с одного компилятора на другой, отсюда и проблемы , winavr если я не ошибаюсь умеет так делать, что касается cvavr то там надо как написал pirotehnick постом выше.
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»