Перейти к содержанию

RC522 и прерывания


DrobyshevAlex

Рекомендуемые сообщения

Здравствуйте! Кто нибудь заставил работать эту штуку с прерываниями? Не могу заставить отправить хоть какое то прерывание на мк avr.

Перечитал кучу форумов, я так и не увидел что бы хоть кто то написал, да, работает! :)

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

У меня есть несколько вариантов:

1) я что то делаю не так.

2) прерывание не генерируется как я думаю, то есть после прочтения метки, я бы хотел что бы мк просыпался.

3) китайский чип не работает.

4) когда есть прерывание на ноге высокий уровень вместо низкого :)

Код определяет версию чипа 2. Но и в первой версии я так понимаю прерывания есть, значит это не важно какая версия.

Вот список прерываний из даташита

Скрытый текст

IRq (timer unit) the timer counts from 1 to 0
TxIRq (transmitter) a transmitted data stream ends
CRCIRq (CRC coprocessor) all data from the FIFO buffer has been processed
RxIRq (receiver) a received data stream ends
IdleIRq (ComIrqReg register) command execution finishes
HiAlertIRq (FIFO buffer) the FIFO buffer is almost full
LoAlertIRq (FIFO buffer) the FIFO buffer is almost empty
ErrIRq (contactless UART) an error is detected

Я не уверен есть ли тут прерывание по прочтению метки :)

Я включил все прерывания, но на ноге всегда 3+ вольт. Я конечно мультиметром могу не заметить быстрого изменения, но я в прерывании INT1 установил включение светодиода при срабатывании, но он не загорелся ни разу)

Пробовал писать в ComIEnReg 0x7f и 0xff

Не понял за что отвечают бит IRqInv регистра ComIEnReg и все биты регистра DivIEnReg, пробовал комбинировать по разному, ни одного прерывания не получил)

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Я так понимаю, что Status1Reg устанавливается бит IRq, когда наступает какое либо событие из разрешений прерываний.

IRqInv - если установлен в 1 значит на ноге IRQ будет:

0 - если бит IRq установлен
1 - если бит IRq сброшен

То есть меня это устраивает, значит я включаю все прерывания

ComIEnReg = 0xff;

После обработки прерываний я сбрасываю так

ComIrqReg = 0x7f;

Вот это не совсем понятно

Цитата

IRQPushPull 
1 - pin IRQ is a standard CMOS output pin
0 - pin IRQ is an open-drain output pin

Какой нужно выбрать? мне нужно что бы на мк пришел 0, подтяжку могу включить на МК, могу не включать.

И вот это вообще не понимаю что делает

Цитата

MfinActIEn - allows the MFIN active interrupt request to be propagated to pin IRQ

Это говорит о том нужно ли статус IRq отправлять на ногу? То есть если будет 0 то нога выключена, если 1 то включена?

Если я правильно все понял, то все равно оно не работает :)

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, DrobyshevAlex сказал:

Я не уверен есть ли тут прерывание по прочтению метки :)

Нет, такого прерывания нет, т.к. процесс определения, аутентификации и чтения содержимого очень сложный и многоступенчатый.

Вы можете привязаться к прерыванию RxIRq (receiver) как к признаку наличия ответа метки, попавшей в активное поле считывателя. Однако это не освобождает ваш МК от необходимости периодически посылать запрос REQA(REQB), получив который карта даст ответ ATQA(ATQB). После которого и начинается вся "круговерть" с протоколом MIFARE. Ваш MC522 получив ответ, сформирует указанное выше прерывание по приему.

Но, т.к. вы являетесь заложником ЯВУ (как и большинство программистов в Нете), то можете довольствоваться только библой, которая гуляет по Сети. А она не заточена для использования прерываний. Увы.

Чтобы решить задуманное Вам необходимо пересесть на Ассм. Но, боюсь, увязнете, как швед под Полтавой.

Ссылка на комментарий
Поделиться на другие сайты

Я кодил на АСМ года 4 назад) я так то программированием увлекаюсь с 1991 примерно, с бейсика и фокала начинал :)

Либу преепистаь вообще не проблема, для нрф24л01+ я переписал сразу ибо я не люблю не знать как работает.

Но там все просто, нога прерываний сразу ложилась на землю и все работало. За исключением проблем с битым мк, пока не заменил не работало))

А вот тут я не могу вообще ни какое прерывание получить, мне любое, говорящее что метка в зоне чтения нужно.  Дальше я разбужу мк главное, и уже в цикле буду читать пока не прочту или не пройдет какое то время и опять усыплю если не прочел ну или если прочел.

А собственно какая разница какой язык ?) Мне нужно всего лишь разбудить мк, я так понимаю по  SPI должно все настроиться что бы мк просыпался.

Ссылка на комментарий
Поделиться на другие сайты

Вообщем я немного обманул, видимо я не все варианты проверил. Или плохо проверял, сейчас еще раз тестирую.

С вашими параметрами не работает, хотя по моей логике они верные :)

Но вот если я включаю 0xff все прерывания и пишу их в еепром, тогда я наблюдаю такую картину

0x14 0x04  0x04  0x04  0x04  0x05  0x04  0x04  0x04 0x05 0x04 ...

Я поставил задержку в прерывании пол секунды, что б слишком быстро не писало, выходит что всегда висит LoAlertIRq и иногда проскакивает бит таймера.

То есть прерывания все таки работают, но они не помогают определить когда поднесли метку... 

Ссылка на комментарий
Поделиться на другие сайты

У меня не только работает, но и является индикатором метки в поле.

Как Вы работаете со считывателем? Пошагово.

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

https://github.com/miguelbalboa/rfid/issues/92

Цитата

As mentioned in the README there is an example how you can use/enable irq. The library it self do not use irq. The irq can be used to interact with the rfid send/receive queue (and some other events), but nothing really useful. The lib just use a easy pull mechanism for send and receive.

Судя по этому - невозможно сделать то что я хочу))

Пошагово примерно так

//включаю прерывания
GICR |= _BV(INT1);
sei();

...
// настрйоки с которыми работает если не использовтаь ногу IRQ
mfrc522_write(TModeReg, 0x8D);
mfrc522_write(TPrescalerReg, 0x3E);
mfrc522_write(TReloadReg_H, 30);
mfrc522_write(TReloadReg_L, 0);
mfrc522_write(TxASKReg, 0x40);
mfrc522_write(ModeReg, 0x3D);
mfrc522_write(TxModeReg, 0x00);
mfrc522_write(RxModeReg, 0x00);

// включение антены
byte = mfrc522_read(TxControlReg);
if(!(byte&0x03))
{
mfrc522_write(TxControlReg,byte|0x03);
}

настройка прерываний
mfrc522_write(ComIEnReg, 0xff);
mfrc522_write(DivIEnReg, 0b10000000);

// тестовое прерывание
ISR(INT1_vect) { 
status(HI); 
access(HI); 
eeprom_write_byte(addr++, mfrc522_read(ComIrqReg)); 
mfrc522_write(ComIrqReg, 0x7f); 
_delay_ms(100); 
}

В результате получаю 0x04 и иногда 0x05 

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

PICC_REQALL 

Сейчас пытаюсь понять что она делает, ибо в этой либе https://github.com/miguelbalboa/rfid вроде бы не шлется ничего подобного

 

Ссылка на комментарий
Поделиться на другие сайты

Ну прерывания срабатывают. Вход МК на без подтяжки ( пробовал и с подтяжкой не важно) прерывания по низкому уровню, вывод рс522 с подтяжкой, прерывания срабатывают, но только idle и timer.

У меня подозрение, что искать метку надо заставлять командой от мк, следовательно усыпить его не получиться. Я еще не до конца понял что за таймер внутри рс522, может нужно с ним поиграться и она по таймеру станет искать метки

Ссылка на комментарий
Поделиться на другие сайты

Не надейтесь, что настроив прерывания Вы можете уводить МК в сон, а сам считыватель будет самостоятельно искать метку в поле. Так работать не будет.

Ссылка на комментарий
Поделиться на другие сайты

Тогда все мои усилия напрасны)) Просто nrf24 работает само по себе)) я ему говорю какой адрес слушать и какой порт, и увожу в сон, и оно спит, когда пакет пришел и подпись проверку прошла только тогда прерывание будет мк...

 

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, DrobyshevAlex сказал:

Я еще не до конца понял что за таймер внутри рс522, может нужно с ним поиграться и она по таймеру станет искать метки

Нет, считыватель не самостоятельное устройство и может выполнять только команды МК. Вы можете "дать поспать" МК только в паузах между посылками запроса присутствия, если по прерыванию не будет ответа от карты.

МС522 надо не слушать, а жонглировать ей, постоянно подпинывая к работе.

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...