мега8 и энкодер

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Изнутри, если интересно, сфоткаю как-нибудь когда в 'девайс' полезу. А пока вот (генератор сигналов):
СпойлерИзображение
Реклама
Опытный кот
Аватара пользователя
Сообщения: 830
Зарегистрирован: Пт ноя 16, 2007 11:21:37

Сообщение Pavel_1978 »

Да я Вас прекрасно понял что лично Вы используете такие энкодеры, но речь идет о промышленной аппаратуре.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Извините, я Вас с самого начала неверно понял. Про промышленную аппаратуру ничего сказать не могу.
Открыл глаза
Сообщения: 56
Зарегистрирован: Чт апр 08, 2010 14:27:26

Сообщение cargo29 »

нет тут обычный механический, кстати попробовал поставил в цикл добавлять звук крутило не останавливается так что можно и так сделать но лучше перестраховатся транзистор поставить и диоды на выводы мк,
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Сообщение Ser60 »

Поставьте просто пару резисторов как я советовал выше и это решит проблему замыканиа ног МК на землю или + через контакты энкодера.
Реклама
Открыл глаза
Сообщения: 56
Зарегистрирован: Чт апр 08, 2010 14:27:26

Сообщение cargo29 »

можно и так, еще вопрос по этой же теме.
функция

Код: Выделить всё

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

Сообщение cargo29 »

может что то есть в прерывании

Код: Выделить всё

///////////////////////////////////////////////////////////////////////////////     прерывание для считывания показаний с саба - звука
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

Сообщение cargo29 »

пересмотрел не могу найти ошибку
Открыл глаза
Сообщения: 56
Зарегистрирован: Чт апр 08, 2010 14:27:26

Сообщение cargo29 »

помогите найти ошибку
Открыл глаза
Сообщения: 56
Зарегистрирован: Чт апр 08, 2010 14:27:26

Сообщение cargo29 »

проект
Вложения
cv.rar
(268.64 КБ) 145 скачиваний
Открыл глаза
Сообщения: 56
Зарегистрирован: Чт апр 08, 2010 14:27:26

Сообщение cargo29 »

в студио не могу отладку сделать
ругается разбил проект на файлы и некоторые библиотеки не знает
Спойлер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

Сообщение Ser60 »

В функции com_to_sab_vol() когда переключаете PORTD на вывод вначале, неясно содержимое порта D. В сочетании с состоянием кнопок энкодера это может сформировать нежелательную ступеньку. Аналогично в конце функции, когда переключаете PORTD на ввод, контакты энкодера начинают влиять на процесс и это может тоже сформировать ступеньку. Я думаю в этой функции следует сначала проверить состояние кнопок энкодера и начинать формировать последовательность импульсов начиная и заканчивая этим состоянием.
Открыл глаза
Сообщения: 56
Зарегистрирован: Чт апр 08, 2010 14:27:26

Сообщение cargo29 »

решил вопрос да вначале нужно было установить порты на 1 оба
Ответить

Вернуться в «Разные вопросы по МК»