Замедление работы вектора внутреннего прерывания Atmega8
Re: Замедление работы вектора внутреннего прерывания Atmega8
[uquote="Dimon456",url="/forum/viewtopic.php?p=3994552#p3994552"]При чем тут шим, архив свой выложите.[/uquote]
выложил
выложил
- Вложения
-
- AVRGCC7.rar
- (45.2 КБ) 220 скачиваний
- Реклама
Re: Замедление работы вектора внутреннего прерывания Atmega8
Архив поврежден.
Re: Замедление работы вектора внутреннего прерывания Atmega8
[uquote="Dimon456",url="/forum/viewtopic.php?p=3994563#p3994563"]Архив поврежден.[/uquote]
у меня все открывается
https://file1.uafile.com/189670
у меня все открывается
https://file1.uafile.com/189670
Re: Замедление работы вектора внутреннего прерывания Atmega8
Ваш архи мне удалось открыть только онлайн архиватором.
atmega8.pdsprj не запускается, но это не важно, может у вас протеус новее.
AVRGCC7_pwm.hex имеет 0 размер, как в папке AVRGCC7 так и в папке Debug.
Итог архив поврежден.
zip выложите.
atmega8.pdsprj не запускается, но это не важно, может у вас протеус новее.
AVRGCC7_pwm.hex имеет 0 размер, как в папке AVRGCC7 так и в папке Debug.
Итог архив поврежден.
zip выложите.
Re: Замедление работы вектора внутреннего прерывания Atmega8
[uquote="Dimon456",url="/forum/viewtopic.php?p=3994563#p3994563"]Архив поврежден.[/uquote]
Запаковано в 7-zip (версии 18.05 или выше).
Частенько встречается при просмотре архивов необходимость следить за последними версиями архиваторов...

там уже 19-я версия имеется...
(https://www.7-zip.org)

Запаковано в 7-zip (версии 18.05 или выше).
Частенько встречается при просмотре архивов необходимость следить за последними версиями архиваторов...
там уже 19-я версия имеется...
(https://www.7-zip.org)
- Реклама
Re: Замедление работы вектора внутреннего прерывания Atmega8
Ну знаете ли, если бы за всем следил.... онлайн архиватор наверное за всем следит.
Ладно х с ним, его elf работает.
Где я должен увидеть 10 секунд?
На кнопку раз нажал - появился шим, частота шим 33мкс ~30кГц
Нажал кнопку и держу, точка входа case 1: примерное время 1,3 секунды,
сообщение в терминал
Ладно х с ним, его elf работает.
Где я должен увидеть 10 секунд?
На кнопку раз нажал - появился шим, частота шим 33мкс ~30кГц
Нажал кнопку и держу, точка входа case 1: примерное время 1,3 секунды,
сообщение в терминал
Код: Выделить всё
LONG COUT: 0001
SHORT COUT: 000
Последний раз редактировалось Dimon456 Вт мар 09, 2021 20:58:21, всего редактировалось 1 раз.
Re: Замедление работы вектора внутреннего прерывания Atmega8
[uquote="Dimon456",url="/forum/viewtopic.php?p=3994596#p3994596"]Ваш архи мне удалось открыть только онлайн архиватором.
atmega8.pdsprj не запускается, но это не важно, может у вас протеус новее.
AVRGCC7_pwm.hex имеет 0 размер, как в папке AVRGCC7 так и в папке Debug.
Итог архив поврежден.
zip выложите.[/uquote]
atmega8.pdsprj не запускается, но это не важно, может у вас протеус новее.
AVRGCC7_pwm.hex имеет 0 размер, как в папке AVRGCC7 так и в папке Debug.
Итог архив поврежден.
zip выложите.[/uquote]
- Вложения
-
- AVRGCC7_.7z
- (37.18 КБ) 207 скачиваний
Re: Замедление работы вектора внутреннего прерывания Atmega8
beoro, 7z - это не zip.
А вообще фига там выкладывать, всё прекрасно открывается. Но народ с доисторическими winrar'ами видимо сидит до сих пор.
А вообще фига там выкладывать, всё прекрасно открывается. Но народ с доисторическими 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;
}Re: Замедление работы вектора внутреннего прерывания Atmega8
Второй архив работает.
Те же 1,3 секунды подтверждается как и на AVRGCC7_pwm.hex так и на AVRGCC7_not_pwm.hex. Частота CPU Меги 8МГц.
Те же 1,3 секунды подтверждается как и на AVRGCC7_pwm.hex так и на AVRGCC7_not_pwm.hex. Частота CPU Меги 8МГц.
Re: Замедление работы вектора внутреннего прерывания Atmega8
Вам тут уже намекали в другом месте на этот явный косяк. Ткну прямо - не помещается 256 в 8 битный регистр, потому что счет начинается с 0, а не с 1!TCNT0 = 256;
Re: Замедление работы вектора внутреннего прерывания Atmega8
[uquote="Dimon456",url="/forum/viewtopic.php?p=3994624#p3994624"]Второй архив работает.
Те же 1,3 секунды подтверждается как и на AVRGCC7_pwm.hex так и на AVRGCC7_not_pwm.hex. Частота CPU Меги 8МГц.[/uquote]
вы проверяете в железе или в протеусе?
Те же 1,3 секунды подтверждается как и на AVRGCC7_pwm.hex так и на AVRGCC7_not_pwm.hex. Частота CPU Меги 8МГц.[/uquote]
вы проверяете в железе или в протеусе?
Re: Замедление работы вектора внутреннего прерывания Atmega8
TCNT0 это счетчик, плевать на него.
Тем более[uquote="beoro",url="/forum/viewtopic.php?p=3994627#p3994627"]вы проверяете в железе или в протеусе?[/uquote]в протеусе.
Тем более
Код: Выделить всё
warning: unsigned conversion from 'int' to 'uint8_t' {aka 'volatile unsigned char'} changes value from '256' to '0' [-Woverflow]- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Замедление работы вектора внутреннего прерывания Atmega8
Мдя.... пакаление праграмистаф растёт... Не могут даже понять, что проблема банально в симуляторе 
beoro, Вы как программы пишите ?
beoro, Вы как программы пишите ?
Re: Замедление работы вектора внутреннего прерывания Atmega8
ТС поди системными часами пользовался, а не часами протеуса.
Re: Замедление работы вектора внутреннего прерывания Atmega8
Сегодня подавляющее большинство КОТЯТ (и поматерее) на симуляторах отладку базируют...
И не только ядра, но и внешней периферии.
С одной стороны неплохо (ежли к тому еще и мозги включаются)...
С другой - тесты придумывать для проверки проблемных алгоритмов и ситуаций - это также учиться надо...

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

Re: Замедление работы вектора внутреннего прерывания Atmega8
А что не так с этим барахлом? Своего барахла то нет.beoro писал(а):китайского фальшивого барахла
Ну подумаешь выводы гнилые, и флеш на 1к записи всего.
Другое дело когда вы спорите о каких нибудь мощных импульсных транзисторах или ШИМ контроллере, к примеру, CQ0765.
А это обычное арифметическое устройство, что в нем может быть не так? Платки Ардуино на ура расходится.
А что вы ихние телефоны Redmi и подобные берете? Это барахло, и тем более фальшивое.
А телевизоры? То же фальшиво барахло.
А компьютеры? То же фальшивое барахло.
А медицинское оборудование? Пульсоксиметры? Что там говорить о обычном медицинском ртутном градуснике?
Обыкновенные очки? И эти берете.
Я могу дальше перечислять, страниц так на 5 растяну.
Что скажите? Или вы можете только по тестировать? Сравнительные таблицы сделать?
Re: Замедление работы вектора внутреннего прерывания Atmega8
Dimon456, что-то у вас всё в кучу смешалось. Никто не говорил, что _всё китайское_ - фальшивое барахло. Redmi - отличные телефоны, как и многие другие. Оригинальные китайские GigaDevice, MediaTek и прочие - неплохие ИС за отличную цену. И т.д. Но на Али и иже с ним полно откровенных подделок и говна в т.ч. Просто совсем чуть-чуть примеров:
http://easyelectronics.ru/mikrosxemy-iz-kitaya.html
http://easyelectronics.ru/ostorozhno-govno.html
Ну а всяких транзисторов, с перекорпусировкой, где внутри корпуса стоил маленький фуфлыжный кристалл дешевого аналога - тоже полно можно найти примеров.
http://easyelectronics.ru/mikrosxemy-iz-kitaya.html
http://easyelectronics.ru/ostorozhno-govno.html
Ну а всяких транзисторов, с перекорпусировкой, где внутри корпуса стоил маленький фуфлыжный кристалл дешевого аналога - тоже полно можно найти примеров.


