реклама на сайте
подробности

 
 
> Не срабатывает INT2, не пойму в чем дело
Vasily Hohlov
сообщение Sep 26 2008, 16:42
Сообщение #1





Группа: Участник
Сообщений: 8
Регистрация: 26-09-08
Пользователь №: 40 508



Привет всем!
пишу обработчик клавиатуры для Atmega16

никак не могу понять в чем дело, когда посылаю данные на клавиатуру
делаю так
Код
//включаем прерывание INT2 (GICR) по спаду фронта (MCUCSR)
    MCUCSR &= 0b10111111;
    GICR|= (1<<5);

.....
.....
//disable INT2
        GICR&=0b11011111;
    
    PORTB |= 0b101;
    DDRB |= 0b101;
// make CLOCK  LOW    
    PORTB&=0b11111011;
    _delay_us(64);

//   make KB_data LOW
    PORTB&=0b11111010;

    keyb_char0=data;
    status=1;

// release CLOCK line set HIGH
    PORTB |=0b00000100;
    DDRB &= 0b11111011;

// enable INT2
    GIFR|=(1<<5);
    GICR|=(1<<5);


далее идет посылка битов по синхроимпульсу CLOCK, прерывание вызывается по спадающему фронту

но при этом первый пик от CLOCK пропускается, и обработчик вызывается только начиная со второго импульса.

если делаю не по прерыванию , а вот так
Код
edge=0;
while (bitcounter0<11)
{    
    i=PINB;
    i>>=2;
    i&=1;    
    if (i) {
            edge=0;
            if (bitcounter0==10) DDRB &= 0b11111110;
            }
    else
        if (!(edge))
          {          
               if     ((bitcounter0<8) )
                {
                 if ( (keyb_char0>>bitcounter0)&1 )  { PORTB|=1; par_bit^=1; }
                    else                 PORTB&=0b11111110;
                }


то всё посылается нормально.

что может быть такого, из-за чего пропускается первый спадающий фронт?

Сообщение отредактировал Vasily Hohlov - Sep 26 2008, 16:48
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
_Pasha
сообщение Sep 26 2008, 23:18
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Vasily Hohlov @ Sep 26 2008, 19:42) *
что может быть такого, из-за чего пропускается первый спадающий фронт?

Насколько я увидел, Вы то и дело настраиваете на вывод линию порта, по которой осуществляется ввод. Так можно еще и что-то нагнуть походу.
Go to the top of the page
 
+Quote Post
Ruslan Konovalov
сообщение Sep 26 2008, 23:51
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 54
Регистрация: 25-07-07
Пользователь №: 29 364



Не пробовали подсмотреть у Atmel AVR313 ?
Может поможет Вам.
Прикрепленный файл  avr313.zip ( 8.06 килобайт ) Кол-во скачиваний: 111
Go to the top of the page
 
+Quote Post
Vasily Hohlov
сообщение Sep 27 2008, 12:27
Сообщение #4





Группа: Участник
Сообщений: 8
Регистрация: 26-09-08
Пользователь №: 40 508



_Pasha, по этой линии идет ввод-вывод, почему что-то тут может нагнуться?

Ruslan Konovalov, спасибо, но к сожалению там только приём данных с клавиатуры, а у меня запарка была с посылкой на неё.


поднял частоту с 1Мгц до 8Мгц, всё заработало как следует....

Pulses on INT2 wider than the minimum pulse width given in Table 36 will generate an interrupt.
Shorter pulses are not guaranteed to generate an interrupt.


Minimum pulse width for asynchronous external interrupt 50ns

эта ширина зависит от частоты мк?

Сообщение отредактировал Vasily Hohlov - Sep 27 2008, 12:32
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Sep 27 2008, 13:10
Сообщение #5


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Vasily Hohlov @ Sep 27 2008, 16:27) *
поднял частоту с 1Мгц до 8Мгц, всё заработало как следует....
эта ширина зависит от частоты мк?

Ширина не зависит, зато время реакции на прерывание получалось большое.
Листинг выложите - там все видно будет.
Кстати, в который раз возникает стратегическая ошибка: GIFR |= 1<<INTF2 нельзя, надо GIFR = 1<<INTF2, чтобы не сбрасывать ненароком все остальные флаги.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 08:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01424 секунд с 7
ELECTRONIX ©2004-2016