мега8 и энкодер
- Сообщения: 3784
- Зарегистрирован: Ср дек 24, 2008 09:58:58
Изнутри, если интересно, сфоткаю как-нибудь когда в 'девайс' полезу. А пока вот (генератор сигналов):
- Реклама
- Сообщения: 830
- Зарегистрирован: Пт ноя 16, 2007 11:21:37
Да я Вас прекрасно понял что лично Вы используете такие энкодеры, но речь идет о промышленной аппаратуре.
- Сообщения: 3784
- Зарегистрирован: Ср дек 24, 2008 09:58:58
Извините, я Вас с самого начала неверно понял. Про промышленную аппаратуру ничего сказать не могу.
- Сообщения: 56
- Зарегистрирован: Чт апр 08, 2010 14:27:26
нет тут обычный механический, кстати попробовал поставил в цикл добавлять звук крутило не останавливается так что можно и так сделать но лучше перестраховатся транзистор поставить и диоды на выводы мк,
- Сообщения: 3784
- Зарегистрирован: Ср дек 24, 2008 09:58:58
Поставьте просто пару резисторов как я советовал выше и это решит проблему замыканиа ног МК на землю или + через контакты энкодера.
- Реклама
- Сообщения: 56
- Зарегистрирован: Чт апр 08, 2010 14:27:26
можно и так, еще вопрос по этой же теме.
функция
VOLUME_P = 8
VOLUME_M = 7
когда отправляю 7 убавляет на один бывает иногда на 2 раза а когда, отправляю через usar команды, 8 команда добавить звук то оно до максимума добавляется как будто не очищается в чем может быть проблема?
функция
Код: Выделить всё
void com_to_sab_vol(char data)
{
DDRD |= (1<<DDD3)|(1<<DDD4); //
if (data == VOLUME_P) // добавляем звук
{
delay_ms(100);
PORTD &=~ (1<<PORTD4)|(1<<PORTD3); // 0b00000000
delay_ms(50);
PORTD |= (1<<PORTD4); // 0b00000010
delay_ms(50);
PORTD |= (1<<PORTD3); // 0b00000011
delay_ms(50);
PORTD &=~ (1<<PORTD4); // 0b00000001
delay_ms(50);
}
if (data == VOLUME_M) // убавляем звук
{
PORTD &=~ (1<<PORTD4)|(1<<PORTD3); // 0b00000000
delay_ms(50);
PORTD |= (1<<PORTD3); // 0b00000010
delay_ms(50);
PORTD |= (1<<PORTD4); // 0b00000011
delay_ms(50);
PORTD &=~ (1<<PORTD3); // 0b00000001
delay_ms(50);
}
delay_ms(100);
DDRD &=~ (1<<DDD3)|(1<<DDD4); //
}
///////////////////////////////////////////////////////////////////////////////
VOLUME_P = 8
VOLUME_M = 7
когда отправляю 7 убавляет на один бывает иногда на 2 раза а когда, отправляю через usar команды, 8 команда добавить звук то оно до максимума добавляется как будто не очищается в чем может быть проблема?
- Сообщения: 56
- Зарегистрирован: Чт апр 08, 2010 14:27:26
может что то есть в прерывании
Код: Выделить всё
/////////////////////////////////////////////////////////////////////////////// прерывание для считывания показаний с саба - звука
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
NewState=PIND & 0b00011000;
if(NewState!=OldState)
{
switch(OldState)
{
case 8: //01 2
{
if(NewState == 24) upState++;
if(NewState == 0) downState++;
break;
}
case 0: //00 0
{
if(NewState == 8) upState++;
if(NewState == 16) downState++;
break;
}
case 16: //01 1
{
if(NewState == 0) upState++;
if(NewState == 24) downState++;
break;
}
case 24: //11 3
{
if(NewState == 16) upState++;
if(NewState == 8) downState++;
break;
}
}
OldState=NewState;
}
TCNT1H=0x00;
TCNT1L=0x00;
}
///////////////////////////////////////////////////////////////////////////////
- Сообщения: 56
- Зарегистрирован: Чт апр 08, 2010 14:27:26
- Сообщения: 56
- Зарегистрирован: Чт апр 08, 2010 14:27:26
- Сообщения: 56
- Зарегистрирован: Чт апр 08, 2010 14:27:26
- Сообщения: 56
- Зарегистрирован: Чт апр 08, 2010 14:27:26
в студио не могу отладку сделать
ругается разбил проект на файлы и некоторые библиотеки не знает
ругается разбил проект на файлы и некоторые библиотеки не знает
Спойлер
Error 2 The "Message" task was not found. Check the following: 1.) The name of the task in the project file is the same as the name of the task class. 2.) The task class is "public" and implements the Microsoft.Build.Framework.ITask interface. 3.) The task is correctly declared with <UsingTask> in the project file, or in the *.tasks files located in the "c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" directory. C:\Program Files\Atmel\Atmel Studio 6.0\Vs\FakeObjProjects.targets 5 5 ObjProject2- Сообщения: 3784
- Зарегистрирован: Ср дек 24, 2008 09:58:58
В функции com_to_sab_vol() когда переключаете PORTD на вывод вначале, неясно содержимое порта D. В сочетании с состоянием кнопок энкодера это может сформировать нежелательную ступеньку. Аналогично в конце функции, когда переключаете PORTD на ввод, контакты энкодера начинают влиять на процесс и это может тоже сформировать ступеньку. Я думаю в этой функции следует сначала проверить состояние кнопок энкодера и начинать формировать последовательность импульсов начиная и заканчивая этим состоянием.
- Сообщения: 56
- Зарегистрирован: Чт апр 08, 2010 14:27:26


