Замедление работы вектора внутреннего прерывания Atmega8

Обсуждаем контроллеры компании Atmel.
beoro
Родился
Сообщения: 14
Зарегистрирован: Ср дек 12, 2018 21:53:38

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение beoro »

[uquote="Dimon456",url="/forum/viewtopic.php?p=3994552#p3994552"]При чем тут шим, архив свой выложите.[/uquote]

выложил
Вложения
AVRGCC7.rar
(45.2 КБ) 220 скачиваний
Реклама
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение Dimon456 »

Архив поврежден.
Реклама
beoro
Родился
Сообщения: 14
Зарегистрирован: Ср дек 12, 2018 21:53:38

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение beoro »

[uquote="Dimon456",url="/forum/viewtopic.php?p=3994563#p3994563"]Архив поврежден.[/uquote]

у меня все открывается :shock:

https://file1.uafile.com/189670
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение Dimon456 »

Ваш архи мне удалось открыть только онлайн архиватором.
atmega8.pdsprj не запускается, но это не важно, может у вас протеус новее.
AVRGCC7_pwm.hex имеет 0 размер, как в папке AVRGCC7 так и в папке Debug.
Итог архив поврежден.

zip выложите.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение BOB51 »

[uquote="Dimon456",url="/forum/viewtopic.php?p=3994563#p3994563"]Архив поврежден.[/uquote]
Запаковано в 7-zip (версии 18.05 или выше).
Частенько встречается при просмотре архивов необходимость следить за последними версиями архиваторов...
:(
там уже 19-я версия имеется...
(https://www.7-zip.org)
:cry:
Реклама
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение Dimon456 »

Ну знаете ли, если бы за всем следил.... онлайн архиватор наверное за всем следит.

Ладно х с ним, его elf работает.

Где я должен увидеть 10 секунд?

На кнопку раз нажал - появился шим, частота шим 33мкс ~30кГц
Нажал кнопку и держу, точка входа case 1: примерное время 1,3 секунды,
сообщение в терминал

Код: Выделить всё

LONG COUT: 0001
SHORT COUT: 000
Последний раз редактировалось Dimon456 Вт мар 09, 2021 20:58:21, всего редактировалось 1 раз.
Реклама
beoro
Родился
Сообщения: 14
Зарегистрирован: Ср дек 12, 2018 21:53:38

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение beoro »

[uquote="Dimon456",url="/forum/viewtopic.php?p=3994596#p3994596"]Ваш архи мне удалось открыть только онлайн архиватором.
atmega8.pdsprj не запускается, но это не важно, может у вас протеус новее.
AVRGCC7_pwm.hex имеет 0 размер, как в папке AVRGCC7 так и в папке Debug.
Итог архив поврежден.

zip выложите.[/uquote]
Вложения
AVRGCC7_.7z
(37.18 КБ) 207 скачиваний
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение NStorm »

beoro, 7z - это не zip.
А вообще фига там выкладывать, всё прекрасно открывается. Но народ с доисторическими winrar'ами видимо сидит до сих пор.
Спойлер

Код: Выделить всё

/*
 * AVRGCC7.c
 *
 * Created: 08.03.2021 22:03:58
 *  Author: shevc
 */ 

#define F_CPU       8000000UL

// PWM Mode
#define PHASE       0x11 // PWM, Phase Correct, 15kHz
#define FAST        0x19 // PWM, Fast 31kHz
#define PWM_MODE    FAST
#define PWM_PIN     PB2
#define PWM     OCR1B

//  нопка
#define SWITCH_PIN  PD2

// UART 
#define BAUD 9600
#define MYUBRR F_CPU / 16 / BAUD - 1

// DELAY 
#define OWN_DELAY 
#ifdef OWN_DELAY
#include <util/delay_basic.h>
static void _delay_ms(uint16_t n)
{
    while(n-- > 0)
        _delay_loop_2(950);
}
#else
#include <util/delay.h>
#endif

#include <avr/io.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>
#include <avr/power.h>

volatile uint8_t conterTimer = 0;
volatile uint8_t securityTimer = 0;
volatile uint8_t long_counter = 0;
volatile uint8_t short_counter = 0;
volatile uint8_t press_long = 0;
volatile uint8_t press_short = 0;

int button_pressed () {
    static uint8_t buffer = 0x00;
    buffer = (buffer << 1) | ((PIND & (1 << SWITCH_PIN)) == 0);
    return (buffer & 0b00000011);
}

void uart_init (void) {
    UBRRH = MYUBRR >> 8;
    UBRRL = MYUBRR;
	UCSRA = (1 << URSEL);
    UCSRB = (1 << RXEN) | (1 << TXEN);
	UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);
}
 
unsigned char uart_getc (void) {
   //ждем приема байта
   while((UCSRA & (1 << RXC)) == 0);
   //считываем принІтый байт
   return UDR;
}
 
void send_putc (char c) {
    //ждем окончаниІ передачи предыдущего байта
    while((UCSRA & ( 1 << UDRE)) == 0);
    UDR = c;
}
 
void send_str (char *str) {
    unsigned char c;
    while((c = *str++) != 0) {
      send_putc(c);
    }
}

void send_int (unsigned int c) { // Ётправка числа от 0000 до 9999
	unsigned char temp;
	c = c%10000;
	temp = c/100;
	send_putc(temp/10+'0');
	send_putc(temp%10+'0');
	temp = c%100;
	send_putc(temp/10+'0');
	send_putc(temp%10+'0');
}

void pwm_on () {
	// пределитель на 1
    TCCR1A = (1 << COM1B1) | (1 << WGM11);
	TCCR1B = (1 << CS10) | PWM_MODE;
    ICR1 = 256; // frequency = 8000000/256 = 31.129 kHz,
	TCNT1 = 0x00;
	//OCR1A = 0x00;
    PWM = 255;
}	

void pwm_off () {
    TCCR1A = 0x00;
}

void sleep_switch_press () { 
	
	 conterTimer = 0;
	 long_counter = 0;
	 short_counter = 0;	
	 
	 // защелка
     while (button_pressed ()) {
         _delay_ms(32);
     }
	
	 // включаем внешнее прерывание
	 MCUCR &= ~ (1 << ISC01 | 1 << ISC00);
	 GICR = (1 << INT0);
	 GIFR = (1 << 6);
	 
	 // включаем сп¤щий режим
	 sleep_mode();
	 
	 // отключаем сп¤щий режим
     sleep_disable();	 
	 
	 // пределитель на 1024, (1024*256)/8000000 = 0.032768 мкс
	 // 1000ms/32,768 = 30тиков = за 1 сек
	 TCCR0 = (1 << CS02) | (1 << CS00); 
	 TIMSK = (1 << TOIE0);  // timer0 enable
	 TCNT0 = 256; 
	 
	 pwm_on ();	 
	 
	 // отключаем внешнее прерывание
	 GICR &= ~(1 << INT0);
	 GIFR &= ~(1 << 6); 
}


ISR (INT0_vect) {} 

ISR (TIMER0_OVF_vect) {

	if (button_pressed ()) {
		
	   if (conterTimer < 255) conterTimer++;
	   
	   if (conterTimer == 40) {
		   long_counter++;
		   if (press_long == 0) {
              press_long = 1;
		   }
		   		   
		   conterTimer = 0;
	   } 	      	   	   
	   		   			   
	} else {
		if ((conterTimer > 0) && (conterTimer < 22)) {
			short_counter++;
		    if (press_short == 0) {
                press_short = 1;
		    }		   					   				   
			conterTimer = 0;
			press_long = 0;        
		 }
		 
    }		
	
	if (short_counter == 5) short_counter = 0;
	if (long_counter == 3) long_counter = 0;
	
	TCNT0 = 256;
}

int main (void) {
	
	// UART
	uart_init();
	
	// пины - на выход
	DDRB = (1 << PWM_PIN) | (1 << PB5) | (1 << PB7);
	
	// пины - на вход
	DDRD = (0 << PD2);
	
	// включаем подт¤гивающий (Pull-UP)
	PORTD = (1 << SWITCH_PIN);	
	
	// тут спим перед вкл, также - 
	// спим после подачи напруги на ћ 
	set_sleep_mode(SLEEP_MODE_PWR_DOWN);
	 
	 sei();
	
	// сп¤щий режим
	sleep_switch_press();

    while (1) {		
		
		switch (long_counter) {
			
			case 0:				
			break;
			
	        case 1:
			     
				// индикатор активности вкл
			    PORTB = (1 << PB5);
				
	
	                 send_putc(13);
	                 send_str("LONG COUT: ");
	                 send_int(long_counter);					  
	                 send_putc(13);	
					 send_str("SHORT COUT: ");
					 send_int(short_counter);
					 send_putc(13);			 	
				 
			break;					
			
	        case 2:
			
				// индикатор активности выкл
				PORTB &= ~ (1 << PB5);
				
				pwm_off();				 					 					 	
				 
				// сп¤щий режим
			    sleep_switch_press();
				 
				long_counter = 0;
				conterTimer = 0;
			break;
		}     	    			
	}							 	
	return 0;
}
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение Dimon456 »

Второй архив работает.
Те же 1,3 секунды подтверждается как и на AVRGCC7_pwm.hex так и на AVRGCC7_not_pwm.hex. Частота CPU Меги 8МГц.
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение NStorm »

TCNT0 = 256;
Вам тут уже намекали в другом месте на этот явный косяк. Ткну прямо - не помещается 256 в 8 битный регистр, потому что счет начинается с 0, а не с 1!
beoro
Родился
Сообщения: 14
Зарегистрирован: Ср дек 12, 2018 21:53:38

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение beoro »

[uquote="Dimon456",url="/forum/viewtopic.php?p=3994624#p3994624"]Второй архив работает.
Те же 1,3 секунды подтверждается как и на AVRGCC7_pwm.hex так и на AVRGCC7_not_pwm.hex. Частота CPU Меги 8МГц.[/uquote]

вы проверяете в железе или в протеусе?
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение Dimon456 »

TCNT0 это счетчик, плевать на него.
Тем более

Код: Выделить всё

 warning: unsigned conversion from 'int' to 'uint8_t' {aka 'volatile unsigned char'} changes value from '256' to '0' [-Woverflow]
[uquote="beoro",url="/forum/viewtopic.php?p=3994627#p3994627"]вы проверяете в железе или в протеусе?[/uquote]в протеусе.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение Аlex »

Мдя.... пакаление праграмистаф растёт... Не могут даже понять, что проблема банально в симуляторе :facepalm:
beoro, Вы как программы пишите ? :facepalm:
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение Dimon456 »

ТС поди системными часами пользовался, а не часами протеуса.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение BOB51 »

Сегодня подавляющее большинство КОТЯТ (и поматерее) на симуляторах отладку базируют...
И не только ядра, но и внешней периферии.
С одной стороны неплохо (ежли к тому еще и мозги включаются)...
С другой - тесты придумывать для проверки проблемных алгоритмов и ситуаций - это также учиться надо...
:roll:
beoro
Родился
Сообщения: 14
Зарегистрирован: Ср дек 12, 2018 21:53:38

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение beoro »

[uquote="BOB51",url="/forum/viewtopic.php?p=3994803#p3994803"]Сегодня подавляющее большинство КОТЯТ (и поматерее) на симуляторах отладку базируют...
И не только ядра, но и внешней периферии.
С одной стороны неплохо (ежли к тому еще и мозги включаются)...
С другой - тесты придумывать для проверки проблемных алгоритмов и ситуаций - это также учиться надо...
:roll:[/uquote]

Все это связано иза нашествия китайского фальшивого барахла на рынке и не хочется оригинальные камни купленные десять лет назад бить зубилом :wink:
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение BOB51 »

Обычная практика - используется один кристалл (или несколько но разных по семействам/раскладке лапок) для тренировок/отладки конструкций определенное время (под пару сотен перепрошивок), а затем ставим подопытного в какую-нить прикладную поделку на все оставшееся время, заменяя его новым подопытным. Зачем те МК в засолке держать?
8)
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение Dimon456 »

beoro писал(а):китайского фальшивого барахла
А что не так с этим барахлом? Своего барахла то нет.
Ну подумаешь выводы гнилые, и флеш на 1к записи всего.
Другое дело когда вы спорите о каких нибудь мощных импульсных транзисторах или ШИМ контроллере, к примеру, CQ0765.
А это обычное арифметическое устройство, что в нем может быть не так? Платки Ардуино на ура расходится.
А что вы ихние телефоны Redmi и подобные берете? Это барахло, и тем более фальшивое.
А телевизоры? То же фальшиво барахло.
А компьютеры? То же фальшивое барахло.
А медицинское оборудование? Пульсоксиметры? Что там говорить о обычном медицинском ртутном градуснике?
Обыкновенные очки? И эти берете.

Я могу дальше перечислять, страниц так на 5 растяну.

Что скажите? Или вы можете только по тестировать? Сравнительные таблицы сделать?
NStorm
Поставщик валерьянки для Кота
Сообщения: 1978
Зарегистрирован: Ср июл 17, 2013 13:55:57

Re: Замедление работы вектора внутреннего прерывания Atmega8

Сообщение NStorm »

Dimon456, что-то у вас всё в кучу смешалось. Никто не говорил, что _всё китайское_ - фальшивое барахло. Redmi - отличные телефоны, как и многие другие. Оригинальные китайские GigaDevice, MediaTek и прочие - неплохие ИС за отличную цену. И т.д. Но на Али и иже с ним полно откровенных подделок и говна в т.ч. Просто совсем чуть-чуть примеров:
http://easyelectronics.ru/mikrosxemy-iz-kitaya.html
http://easyelectronics.ru/ostorozhno-govno.html
Ну а всяких транзисторов, с перекорпусировкой, где внутри корпуса стоил маленький фуфлыжный кристалл дешевого аналога - тоже полно можно найти примеров.
Ответить

Вернуться в «AVR»