Например TDA7294

Форум РадиоКот • Просмотр темы - Нескольно простых вопросов о программировании AVR на Си.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт мар 28, 2024 11:41:23

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 1459 ]     ... , , , 54, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пт мар 19, 2021 11:55:56 
Родился

Зарегистрирован: Чт янв 14, 2021 10:25:57
Сообщений: 19
Рейтинг сообщения: 0
Спасибо, за комплименты и ценные советы по оформлению. Наглядность моего кода повысилась.

Но прерывание не появилось. Может все таки есть идеи в чем дело?


Насчет МК - эта крошка поражает своими возможностями, но я что-то устала, от отсутствия информации кроме даташита, что-то очень сложно найти.
Мне только славные рыцари с этого форума помогают.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пт мар 19, 2021 12:35:34 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
Lilia, попробуйте отсечь всё лишнее пока для теста. Для начала банально поставить кнопку на PA2, на какой-нибудь другой пин светодиод и попробовать по прерыванию включать-выключать светодиод. Так-то приведенный фрагмент вроде правильный. Судя по ДШ ничего более и не надо для работы прерывания включать вроде бы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пт мар 19, 2021 13:23:51 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1382
Рейтинг сообщения: 0
Что нужно поставить, чтобы хотя в симуляторе студии погонять attiny1607? У мну xp и семёрка. Какая студия или какое либо другое программное обеспечение от мелкочипов?
Заинтриговали вы меня этой тинькой...

Добавлено after 8 minutes 42 seconds:
Lilia, не спешите опускать руки. Я поглядел в даташит, и у меня уже моск вскипел... Прорвёмся, разберёмся...


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вс апр 04, 2021 17:15:01 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 225
Рейтинг сообщения: 0
Небольшой вопросик по AVR СИ.
Надо записать в порт А старшую тетраду, при этом не испортив младшую тетраду порта.
Придумал такое, не знаю правильно или нет:
Код:
temp = (data & 0xF0); 
PORTA = (temp | (PINA & 0x0F));

сэмулировать чтоб посмотреть не знаю как, сразу вставлять в программу - если это неправильно, то это вряд ли будет единственной ошибкой. В общем, межуюсь.


Вернуться наверх
 
Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вс апр 04, 2021 17:27:51 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 253
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2090
Рейтинг сообщения: 0
не знаю правильно или нет

Во-первых, не правильно, во-вторых, не помешало бы указать о каких AVR идет речь, потому что на новых для подобных целей есть специальные регистры. Если говорить про старые AVR, то там если пины сконфигурированы как входы, то PORTx включает подтяжки, т.е. если какой-то пин сконфирурирован именно так, то чтение PINx будет возвращать 1, но только до той поры пока ты на вход не повесишь какую-нибудь кнопку и не нажмешь ее, тогда прочитаешь 0, соответственно и запишешь тоже 0... Читать нужно не уровень на входе, а данные защелки, т.е. сам PORTx. Ну и не зря на новых AVR появились дополнительные регистры с атомарным доступом, по нормально на время подобных операций нужно отключать прерывания...


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вс апр 04, 2021 17:34:16 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 225
Рейтинг сообщения: 0
Авр старый (тини26), прерываний нет. То есть, если буду читать сам porta то нормально будет?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вс апр 04, 2021 17:37:20 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 141
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1382
Рейтинг сообщения: 0
Код:
PORTA = ((temp & 0xF0) | (PORTA & 0x0F));

Изображение


Последний раз редактировалось Demiurg Вс апр 04, 2021 18:14:28, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вс апр 04, 2021 18:01:00 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 253
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2090
Рейтинг сообщения: 0
Раз уж заговорили про порты, то подкинули мне на днях новую tiny1614 и вчера я набросал несколько простых классов для работы с портами на С++20, может кому-то будет интересно:

Работает это так:

Все операции атомарные, на макросах такое сделать довольно проблематично...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Чт июн 03, 2021 20:38:34 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 103
Рейтинг сообщения: 0
Ребята привет! Пытаюсь обуздать АЦП прерывание по переполнению на Тиньке13, что не правильно делаю, или не понимаю что делаю? в протусе PORTB.1 прыгает, выдает меандр, а не должен(( Остальные ведут себя нормально, пока только симуляция в Протусе, в железе не делал.
Код:
Chip type               : ATtiny13
AVR Core Clock frequency: 9,600000 MHz
Memory model            : Tiny
External RAM size       : 0
Data Stack size         : 16
*******************************************************/

#include <tiny13.h>
#include <delay.h>

unsigned int adc0,adc2;
bit flag1,flag2;

#define FIRST_ADC_INPUT 0
#define LAST_ADC_INPUT 2
unsigned int adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
// Bandgap Voltage Reference: Off
#define ADC_VREF_TYPE ((0<<REFS0) | (0<<ADLAR))

// ADC interrupt service routine
// with auto input scanning
interrupt [ADC_INT] void adc_isr(void)
{
static unsigned char input_index=0;
// Read the AD conversion result
adc_data[input_index]=ADCW;
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
   input_index=0;
ADMUX=(FIRST_ADC_INPUT | ADC_VREF_TYPE)+input_index;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
}

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0x6A;
adc0=adc_data[0];
adc2=adc_data[2];
}


void reley(void){
     if(adc2>220 && adc2<300) {PORTB.0=1;}
            else {PORTB.0=0;}

     if(adc2>310 && adc2<350) {PORTB.3=1;}
            else {PORTB.3=0;}
           
     if(flag2==0){
        if(adc2 > 400 && adc2 < 460) {flag1=1;PORTB.1=1;}
            else {PORTB.1=0;flag1=0;}
           

        if(adc2 > 490 && adc2 < 515) {flag1=1;PORTB.2=1;}
            else {PORTB.2=0;flag1=0;}
     }
     
     if(flag1==0){
        if(adc0 > 400 && adc0 < 460) {flag2=1;PORTB.1=1;}
            else {PORTB.1=0;flag2=0;}
         
        if(adc0 > 490 && adc0 < 515) {flag2=1;PORTB.2=1;}
            else {PORTB.2=0;flag2=0;}
     }
}
void main(void)
{
// Crystal Oscillator division factor: 8
#pragma optsize-
CLKPR=(1<<CLKPCE);
CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (1<<CLKPS1) | (1<<CLKPS0);
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization
// Port B initialization
// Function: Bit5=In Bit4=In Bit3=Out Bit2=Out Bit1=Out Bit0=Out
DDRB=(0<<DDB5) | (0<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
// State: Bit5=T Bit4=T Bit3=0 Bit2=0 Bit1=0 Bit0=0
PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 150,000 kHz
// Mode: Normal top=0xFF
// OC0A output: Disconnected
// OC0B output: Disconnected
// Timer Period: 1 ms
TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (0<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (0<<WGM00);
TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (1<<CS00);
TCNT0=0x6A;
OCR0A=0x00;
OCR0B=0x00;

// Timer/Counter 0 Interrupt(s) initialization
TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (1<<TOIE0);

// ADC initialization
// ADC Clock frequency: 150,000 kHz
// ADC Bandgap Voltage Reference: Off
// ADC Auto Trigger Source: Timer0 Overflow
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
DIDR0|=(0<<ADC0D) | (0<<ADC2D) | (0<<ADC3D) | (0<<ADC1D);
ADMUX=FIRST_ADC_INPUT | ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (1<<ADATE) | (0<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
ADCSRB=(1<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);


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

while (1){
   reley();     
   }
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Чт июн 03, 2021 20:52:33 
Поставщик валерьянки для Кота

Карма: 12
Рейтинг сообщений: 532
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1978
Рейтинг сообщения: 0
kote52, замысел опишите, гадать что должна делать ваша программа никто не будет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Чт июн 03, 2021 21:10:58 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 103
Рейтинг сообщения: 0
kote52, замысел опишите, гадать что должна делать ваша программа никто не будет.

Простое управление стеклоподъемниками, нажатие кнопок считывается при помощи АЦП, пассажирская дверь дублируется на водительской стороне. Два канала АЦП один для водительской двери - четыре кнопки (две водительское стекло две пассажирское), второй канал для пассажирской двери две кнопки. Сделал два канала ацп для того чтобы, если управляю водительским стеклом была возможность управлять пассажиру его стеклом в этот момент. Но если водитель управляет пассажирским стеклом, пассажир не может управлять его стеклом.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пт июн 04, 2021 10:03:17 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2057
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18024
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
а 2 канала АЦП зачем? одним нельзя, что-ли, все кнопки опросить? я ж так понимаю, у вас будет резисторный делитель напряжения, сигнал с которого будет поступать на АЦП?

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

скушно, бабоньки!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пт июн 04, 2021 10:51:56 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 103
Рейтинг сообщения: 0
а 2 канала АЦП зачем? одним нельзя, что-ли, все кнопки опросить? я ж так понимаю, у вас будет резисторный делитель напряжения, сигнал с которого будет поступать на АЦП?

Исходил из наличия резисторов и выше описал почему! Так это проблема два канала опросить? Да просто чисто для образования хочу понимать как это делать в первую очередь! Писать код под две нажатые кнопки на разных дверях(водительское стекло вверх пассажирское виз к примеру), чтоб понималось что и куда нажалось и что с этим делать че т сложно и муторно((


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вс июн 06, 2021 21:21:10 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 103
Рейтинг сообщения: 0
ARV, NStorm, ну так как парни поможете обуздать опрос 2х каналов АЦП или зря писал? :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пт июл 23, 2021 17:46:53 
Родился

Зарегистрирован: Чт янв 14, 2021 10:25:57
Сообщений: 19
Рейтинг сообщения: 0
У меня проблема с тем же Attiny1607.

Надо настроить тики от внешнего генератора (ecs-5032mv-100-cn-tr).
Регистры настройки тиков защищены. Снимаю защиту, изменить делитель получается, а переключить внешний генератор - никак.
Причем если в регистре MCLKCTRLA в режиме отладки натыкать нужные биты - то программа пойдет выполняться. Иначе подвиснет ожидая while.

Подскажите, где же тут собака порылась?

Код:
   CCP = CCP_IOREG_gc; // снять защиту от записи регистров   
   CLKCTRL.MCLKCTRLB = 0x00; //выключаем делитель
         
   CCP = CCP_IOREG_gc; // снять защиту от записи регистров   
   CLKCTRL.MCLKCTRLA = 0x03; //CLKCTRL_CLKSEL_gm; //включаем внешний осциллятор
   while((CLKCTRL.MCLKSTATUS & 0x80) == 0); //ждем включения осциллятора


Вложения:
io-gen.jpg [95.05 KiB]
Скачиваний: 109
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пт июл 23, 2021 20:41:06 
Мудрый кот

Карма: 11
Рейтинг сообщений: 114
Зарегистрирован: Пт июн 01, 2018 07:28:45
Сообщений: 1759
Рейтинг сообщения: 0
А бит FUSE.OSCCFG залочен или нет?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вт июл 27, 2021 15:58:11 
Родился

Зарегистрирован: Чт янв 14, 2021 10:25:57
Сообщений: 19
Рейтинг сообщения: 0
Нет, не залочен. Бит FUSE.OSCCFG.OSCLOCK в нуле.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Ср июл 28, 2021 08:36:56 
Мудрый кот

Карма: 11
Рейтинг сообщений: 114
Зарегистрирован: Пт июн 01, 2018 07:28:45
Сообщений: 1759
Рейтинг сообщения: 0
Так а если выкинуть этот while, МК переключится на внешний такт?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Ср июл 28, 2021 11:18:01 
Родился

Зарегистрирован: Чт янв 14, 2021 10:25:57
Сообщений: 19
Рейтинг сообщения: 0
Нет, не переключается.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Ср авг 18, 2021 19:37:27 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4871
Откуда: Минск
Рейтинг сообщения: 1
Может кому-то будет интересно.

Сегодня провёл сравнение по размеру кода, генерируемого разными версиями avr-gcc:

Проект ampcontrol:
Проект matrixclock:
Вывод такой - вплоть до 8 версии качество оптимизации улучшалось, а потом начало становиться хуже. Ну, или есть какие-то новые тайные опции у компилятора, которые могли бы вернуть размер кода на прежний уровень.

Да, разница между лучшим и худшим вариантом не более 3%, но иногда, когда прошивка уже впритирку подбирается к размеру flash, это может быть существенно.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 1459 ]     ... , , , 54, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: 240265 и гости: 35


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y