idle1
-
Постов
38 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные idle1
-
-
Реально ли использовать EEPROM для памяти программ (исполняемого кода) в добавок к основным 0x03FF(2Kb)? В tiny2313?
-
Опубликовано · Изменено пользователем idle1 · Пожаловаться
Может покажусь старомодным, но..У вас идет счет на такты и Вы пытаетесь все это сделать на С?? Не проще ли на ассемблере? там такты легко выравнвать.
Да на С, через AVR Studio в качестве отладчика не сложней! И CAN я уже под 2313 дописал :)
-
Может кто знает какой МК с CAN где 2-3 - UART; 4-5 - Кварц; 10-20 - Питание; ???
-
Если бы была возможность, то я бы не задумываясь перешел на специализированный контроллер. Но задача заключается именно под 2313 :( . Сейчас иду по методу накопления данных и последующей небольшой обработки. Коррекцию времени делаю (пытаюсь делать :) ) через прерывание по нисходящему фронту (Вход CAN с MCP2551 подключил к PD3(INT1)). Большой обработки в МК не будет, нужно только передать данные и получить, обработкой занимается другое ус-во. Ветвления я так же выравнивал, но там есть засада, переход по TRUE или по ELSE отличается на 1 цикл (0,05мкс)
-
... сочувствую, мы сменили контроллер, нормально не получилось.
А на что сменили? Если формфактор такой же (питание(10-20), кварц(4-5), UART(2-3)), может и мне подойдет..
У меня идея родилась через прерывание сделать, может пройдет, завтра попробую.
-
Вот, возникла задача написать прием и передачу в CAN шину на контроллере тини2313. На первый взгляд ничего сложного, протокол документирован и понятен, НО есть но! Это времена, к примеру на 500кбит/с один бит передается за 2мкс, а на 250 за 4мкс, т.е имеем максимум 40 циклов на обработку одного бита, при этом еще нужно выкинуть мусор из сигнала. Я использовал контроллер на частоте 20Мгц.
Я пробывал уже следующие варианты: И чтение с задержкой в 2 и 4мкс соответственно -> вывод из-за длительности посылки, примерно в 100-150 бит, время уплывает, а так же ещё из-за ветвлений (1-2 цикла в один бит -> ~0.10мкс), провал!
Второй вариант со счетчиком при изменении с 1 на 0 и с 0 на 1 с последующей записью времени для анализа и расчета кол-ва бит, провал по непонятной мне причине, это загадочное отставание счетчика и непредсказуемость его показаний, при расчетной погрешности в 1.1мкс (цикл ожидания), наблюдаются отставания в две и даже 3мкс! Для связи с CAN шиной использую MCP2551 микрочипа.
Может кто писал что подобное? Если не трудно отзовитесь! Контроллер сменить немогу *TAUP*. Может у кого есть алгоритм?
-
Всем спасибо за участие :) Проблема решилась правкой опций компилятора IAR.
-
И чем же отличается, скажем, PA0 от PB0? :)
Возможно, эти определения и верны, но это явно не номера битов.
А вот это утверждение не верно!
Всякие там PB0 PD0 и т.п. заменяются комптлятором на номера в данном случае. И служат для визуального понимания написанного.
iotiny2313.h ~~~ /* PORTA */ #define PA2 2 #define PA1 1 #define PA0 0 /* PORTB */ #define PB7 7 #define PB6 6 #define PB5 5 #define PB4 4 #define PB3 3 #define PB2 2 #define PB1 1 #define PB0 0 ~~~
-
Что это за PB0 и PA2? Это явно что-то не из той оперы:)
Попробуйте просто
PORTB = (1<<0); PORTA = (1<<2);
Это IAR IAR Assembler for AVR 5.20, в заголовочном файле все определения верны.
-
Опубликовано · Изменено пользователем idle1 · Пожаловаться
Пробовал с RSTDISBL и без, нето ... Fuse = 0xE4FFFF
-
Да, программатор использую параллельный, при этом тактирование внутреннее 8МГц. По поводу испытаний на других ногах порта, А это пробывал с самого начала, эффект тотже :( Есть HEX код другой программы, там все работает при тех же значениях fuse bits, при этом прогнал её через дебагер в AVR Studio, различинй не усмотрел (при инициализации, а целиком не получается уж больно большая прога там). Проблема в том что нужно использовать именно пин PA2.
-
Подскажите пожалуйста, столкнулся с такой проблемой как неработает вывод портаА, хотя порт B работает безукаризненно. Порт не пробит, уверен. Контроллер ATiny2313. Вот листинг. Заренее благодарен.
#define ENABLE_BIT_DEFINITIONS 1 #include <iotiny2313.h> #include <intrinsics.h> void main (void) { DDRB = 0xFF; DDRA = 0xFF; while(1) { PORTB = (1<<PB0); PORTA = (1<<PA2); __delay_cycles (2000000); PORTB = (0<<PB0); PORTA = (0<<PA2); __delay_cycles (2000000); } }
Ошибки при прошивке ATmega128
в AVR
Опубликовано · Пожаловаться
Если используете COM-USB переходник, то рекомендую от него отказаться, или использовать FTDI'айный.