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

Динамическая Индикация+прерывание На Пине.


l-e-o-n-a-r-d-o

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

Здравствуйте. Я не могу абсолютно понять повеение тини 2313. У мен схемка такая: к порту Б подключены катоды 3-разряжного семиэлементного индикатора, к D6 D5 D4- общие аноды. прерывание по ножке инт 0 и инт1 (пока что не использовано).

так вот. Динамическая индикация работает отлично, если в мейне оставить

#include <tiny2313.h>
#include<delay.h>

const flash char digit[10]={0b11000000,0b11111001,0b10100100,0b10110000,0b10011001,0b10010010,0b10000010,0b11111000,0b10000000,0b10010000};
const flash char pos[3]={0b01000000,0b00100000,0b00010000};
volatile char i[7];
volatile int n=0;

void wr(int x)
{

char h=0,d=0; 

while (x>= 100)
{ x-=100;
 h++;
}
while (x>= 10)
{ x-=10;
 d++;
}
i[0]=x;
i[1]=d;
i[2]=h;



}



// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{  
static char j;
TIMSK=0x00;
PORTD=0;  
PORTB=0;

PORTB=digit[i[j]];
PORTD=pos[j];
j++;

// Reinitialize Timer 0 value
 TCNT0=254;
// Place your code here

if (j>2) j=0;  
TIMSK=0x02;
}


// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
n++;
delay_ms(2);
wr(n);
if (n>999) n=0; 
}

// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here

}

void main(void)
{
int f;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 65,625 kHz
// Mode: Normal top=FFh
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x03;
TCNT0=0xFE;
OCR0A=0x00;
OCR0B=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x02;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Low level
// INT1: On
// INT1 Mode: Low level
// Interrupt on any change on pins PCINT0-7: Off
GIMSK=0xC0;
MCUCR=0x00;
EIFR=0xC0;


DDRD.4=1;
DDRD.5=1;
DDRD.6=1;

DDRD.3=0;
DDRD.2=0;


DDRB=255;
PORTD=0;
PORTB=0;
// Global enable interrupts
#asm("sei") 
f=0;
while (1)
  {

//f++;

 //  if (f>999)  {f=0;}
  //  wr(f);
  //   delay_ms(100);

  };
}

чем шире кругозор, тем тупее угол обозрения

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

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

>MCUCR=0x00;

я на этом тоже один раз прокололся, нада правильно настроить MCUCR. у тя прерывание вызываеться постоянно когда на ножке 0. скорость выполнения прерыванния 1/4 от тактовой частоты, соответственно у тя МК виснет. выставь прерывание по ниспадающему и будет всё ОК! :)

кстате, в протеусе и правда в таком случае МК не всинет

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

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

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

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

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

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

И сразу учитесь НЕ ИСПОЛЬЗОВАТЬ в прерываниях delay !!!! Меняйте глобальную переменную и уже в маину решайте что с ней делать. Иначе потом будете искать ошибки которые будут появляться иногда и которые очень тяжело ищются..

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

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

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

Br.Misha

спасибо, действительно помогло!

MCUCR=0x0A; заработало. :)

wowa

я знаю, просто вчера я уже все что угодно пробовал...

чем шире кругозор, тем тупее угол обозрения

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

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

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

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

потому что за это время можно пропустить другие прерывания, или сработает какое то другое, или даже это же самое, а процедуры которые были в теле прерывания еще не выполнились, как вновь с начала оно начинается. Ну как то так :unsure:

чем шире кругозор, тем тупее угол обозрения

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

но ведь без задержек тоже может быть

повторное прерывание во время оброботки

если оброботчик большой и занимает много времени

что будет тогда ?

или если вовремя выполнения одного прерывания

произойдет другое прерывание

что тогда будет ?

если тебя ударили по левой щеке — подставь правую... руку и с разворота бей ногой в челюсть

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

произойдет другое прерывание

что тогда будет ?

каша тогда будет :) мк зависнет, или вы долго не будете понимать что с ним происходит.. вот кстати как у меня это было (эта тема)

если оброботчик большой и занимает много времени

обычно рекомендация такая : в прерываниях установить лишь какие то флаги (например а=1), которые анализировать в мейне (if (а==1) {}...)

чем шире кругозор, тем тупее угол обозрения

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

>или если вовремя выполнения одного прерывания

>произойдет другое прерывание

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

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

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

тоесть например пришел какойто важный импульс на вход прерывания

а контроллеру пофиг он в это времья озабочен другим важным импульсом

тогда мы потеряем сигнал

и это не гуд <_<

если тебя ударили по левой щеке — подставь правую... руку и с разворота бей ногой в челюсть

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

увы......

когда вызываеться прерывание то сбрасываеться бит I в регистре SREG и никакое другое прерывание не произойдет пока не закончиться выполнение вызваного. сработает тока прерывание по адресу $000

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

Когда работает обработчик прерывания , никакое другое прерывание непроизойдет , это верно, НО флаг события установиться !!! . И при окончании обработчика МК выполнит ОДНУ команду и завалиться выполнять следующий обработчик , и нефакт что тот о котором ВЫ мечтали . Приоритет выполнения прерывание отнють не однозначен.

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

тоесть в любом случае сигнал неупустим да ?

насчет приоритета несовсем понял :(

можно ли устанавливать приоритет для прерываний посвоему или нет ?

допустим одновременно приходят два прерывания какой из них должен выполняться первым

если тебя ударили по левой щеке — подставь правую... руку и с разворота бей ногой в челюсть

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

...Приоритет выполнения прерывание отнють не однозначен.

Вполне себе однозначен. Определяется адресом вектора прерывания...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

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

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

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

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

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

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

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

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

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

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

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