24 февраля 2022 года в 5 утра, без объявления войны, россия напала на Украину.

Они пришли "освобождать народ от нацистов и националистов".
С этого момента наша жизнь изменилась на "до" и "после".
Нас освобождают от наших домов, от наших любимых, от наших родителей и от наших детей....
Тут я не буду никого агитировать или переубеждать, разумный человек найдёт всю информацию
в интернете, а для зомби никакие доводы и факты не послужат аргументом.

Я не умею много писать, да и без мата тут сложно что-то написать.
Поэтому выражу все мои чувства одним фото.

«Спасибо дедушка путин за счастливое детство и мое освобождение». ©

Дополню словами уважаемого человека, широко известного в узких кругах:
тут путин не виноват, не он нажал на кнопку сброса,
- виноват пилот, который нажал на кнопку сброса, мог промахнуться. виноваты жена/мать/брат/друг пилота, которые не позвонили ему, и не сказали "нет войне",
- виноват тот, кто отдал приказ, и виноваты его жена/мать/брат/друг,
- виноват тот, кто цеплял бомбу, потому что он мог её обезвредить, "ну бывает, не сработала",
- виноват кладовщик, виноват водитель, который перевозил эту бомбу. виноваты жена...и т.д., потому что не позвонили и не сказали "нет войне, не вези бомбы",
- виноваты все журналисты оркостана, потому что они врут,
- виноваты недограждане, потому что не сказали журналистам "не врите",
- виноваты все... все 160 миллионов,
- а те 2, 3, 5 тысяч, которые вышли, и которых запаковали, это даже не десятая процента, это погрешность... случайно оказавшиеся в мордоре люди. ©

PS: За несколько часов до вторжения был атакован и взломан крупный интернет хостинг в Киеве, где и размещался мой сайт. Только 16 марта отважным админам удалось частично восстановить работу хостинга. Далеко не все сайты выжили, т.к. были повреждены даже бэкапы.
Нет, нет, я не жалуюсь, нет. В цифровом мире нет ничего ценного, материального...


Due to periodic DDoS attacks, the forum may not be available.

ATTiny2313 не реагирует на изм частоты

Здесь только проекты на ATtiny
Post Reply
belazov
Пробегал мимо
Posts: 1
Joined: 18 Nov 2010 22:04

ATTiny2313 не реагирует на изм частоты

Post by belazov »

вот такая прога: контроль срабатывания прерывания по совпадению А таймера Т1 вывел на "#define buzer PORTD.4".
регистр OCR1A менял от 0 до FFFF. внутренний генератор проца менял 1 МГц и 8 МГц. но на контрольном выводе PORTD.4 длительность импульса не меняется от этих манипуляций. меняется только при изменении делителя частоты таймера Т1.
программирую USBASP_AVRDUDE программатором в варианте DIHALTа.
Работает все кроме изменения частоты прерываний по совпадению А от Т1.
Что не так делаю?

This program was produced by the
CodeWizardAVR V2.04.9a Evaluation
Automatic Program Generator

Chip type : ATtiny2313
AVR Core Clock frequency: 8,000000 MHz
Memory model : Tiny
External RAM size : 0
Data Stack size : 32
*****************************************************/

#include <stdio.h>
#include <TINY4313_BITS.h>
#include <tiny2313.h> // объявляем библиотека ввода/вывода
#include <delay.h> // объявляем библиотеку для задержки

#define digit1 PORTD.6 //катод первой цифры - единицы
#define digit2 PORTD.5 //катод второй цифры - десятки
#define digit3 PORTA.0
#define buzer PORTD.4 //пищалка
#define out0volt PORTD.3 //отключения напряжения от электродов
#define rele_napravlen PORTD.1 //реле направления напряжения на электродах

flash char digits[] = { //создаём массив с цифрами
0x60, //0
0xF9, //1
0xA4, //2
0xB0, //3
0x39, //4
0x32, //5
0x22, //6
0xF8, //7
0x20, //8
0x30, //9
0b11111101, //знак минуса
0b11111111 //пустота
};
char digit_out[3], cur_dig; //переменные для работы с LED
unsigned int indication; //переменная для хранения выводимого числа
unsigned char tmp=0; //переменная для счета минут
bit flag1=0; //переменные для контроля счета событий таймера Т1


void recoding(void)
{ //функция для перекодировки из hex в dec

if (indication<1000)
{ //начинаем преобразование если число < 1000 так как 3-х
//разрядный LED
digit_out[0]=indication%10; //Делим на 10 остаток в масив 1-разряд
indication=indication/10; //Оставляем 2 разряда
digit_out[1]=indication%10; //Делим на 10 остаток в масив 2-разряд
digit_out[2]=indication/10; //Делим на 10 целое число в масив 3-разряд
}
}


//описываю ф-цию start
void start(void)
{
indication=0; //число минут в индикаторе обнулить
TCCR1B=0x00; //остановка таймера Т1
TCCR1B=0x02; //запуск Т1 делитель 7813Гц
}

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
start(); //при 0 на кнопке Старт выполн эту функцию
}

//таймер 0
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
PORTB=0xFF; //чтобы предотвратить эффект “тени” на соседних индикаторах
switch (cur_dig){
case 0:{digit3=1; digit1=0; break;}; //подаём питание на разряд 3
case 1:{digit1=1; digit2=0; break;}; //подаём питание на разряд 2
case 2:{digit2=1; digit3=0; break;}; //подаём питание на разряд 1
} //ОА на digit->0, OK->1
PORTB=digits[digit_out[cur_dig]]; //выводим с каждым срабатыванием таймера число с
//мaссива в порт В, но не для всех разрядов сразу

cur_dig++; //с каждым срабатыванием таймера, увеличиваем
//переменную cur_dig на 1
if(cur_dig==3) cur_dig=0; //если cur_dig = 3 обнуляем
}


// Timer1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
tmp=tmp+1;
indication=tmp;
recoding();
flag1=~flag1; //инвертирую каждое прерывание флаг
buzer=flag1; //вывожу на вывод бузера для контроля срабатывания прерывания
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port A initialization
// Func2=In Func1=In Func0=In
// State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
PORTB=0xFF;
DDRB=0xFF;

// Port D initialization
// Func6=Out Func5=Out Func4=Out Func3=Out Func2=In Func1=Out Func0=In
// State6=1 State5=1 State4=1 State3=1 State2=T State1=1 State0=P
PORTD=0x7B;
DDRD=0x7A;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
TCCR0A=0x00;
TCCR0B=0x03;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x07;
OCR1AL=0xA1;
OCR1BH=0x00;
OCR1BL=0x00;

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

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x42;

// Universal Serial Interface initialization
// Mode: Disabled
// Clock source: Register & Counter=no clk.
// USI Counter Overflow Interrupt: Off
USICR=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

// Global enable interrupts
#asm("sei")

while (1)
{}
}
Post Reply