Например TDA7294

Форум РадиоКот :: Просмотр темы - Глюканул AVR Studio 4.19
Форум РадиоКот
https://radiokot.ru/forum/

Глюканул AVR Studio 4.19
https://radiokot.ru/forum/viewtopic.php?f=57&t=178471
Страница 1 из 1

Автор:  mehanik_all [ Пн авг 30, 2021 23:58:44 ]
Заголовок сообщения:  Глюканул AVR Studio 4.19

Приветствую. Ничего не предвещало беды, и до сегодняшнего дня _delay_ms (V) работало как часы и не вызывало проблем, но сегодня этот кусок дерьма потребовал от меня "целочисленную константу". В чём прикол? Как исправить? Можно ли сбросить как-то все настройки программы на первоначальные? Поможет ли установка Atmel Studio 5/6/7?

Добавлено after 51 second:
Переустановка программы не помогла.

Автор:  Alexeyslav [ Вт авг 31, 2021 01:45:04 ]
Заголовок сообщения:  Re: Глюканул AVR Studio 4.19

А вы какую ему скормили?

Автор:  Аlex [ Вт авг 31, 2021 02:00:11 ]
Заголовок сообщения:  Re: Глюканул AVR Studio 4.19

mehanik_all писал(а):
этот кусок дерьма
Хороший отзыв об инструменте :facepalm:
Зачем тогда пользуетесь ? Выкиньте на свалку его ...

Автор:  mehanik_all [ Вт авг 31, 2021 03:38:01 ]
Заголовок сообщения:  Re: Глюканул AVR Studio 4.19

А вы какую ему скормили?


Спойлер
Код:
#define F_CPU 8000000UL // Я использую внутренний генератор 8 МГц

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <math.h>

volatile uint8_t V=0;

volatile uint8_t int_adc=0;


ISR(ADC_vect)      //функция прерывания АЦП
{
V=ADCH;   //запись значения с вывода ADC старших 8-ми бит с учётом выравнивания ADCW влево (ADLAR=1)
}



int main(void){

   DDRD |= _BV (PD6)| _BV (PD5);      //установить как выход (установить 1)
   PORTD &=~ (_BV (PD6)| _BV (PD5));   //установить 0 на выводах

   DDRB |= _BV (PB5);      //установить как выход (установить 1)
   PORTB &=~ _BV (PB5);   //установить 0 на выводах

   

   //TIMSK0 |= _BV(TOIE0);   //разрешить прерывание по переполнению таймера Т0
   TCCR0A &=~ (_BV(WGM01)| _BV(WGM00));      //Режим работы
   TCCR0B &=~ _BV(WGM02);                  //таймера Normal
   TCCR0B |= _BV(CS02)| _BV(CS00);      //предделитель таймера
   TCCR0B &=~ _BV(CS01);            //Т0 clk/1024
   TCCR0A &=~ _BV(COM0A1);      //Управление выводами OCn
   TCCR0A |= _BV(COM0A0);      //меняется на противоположное

   ACSR |= _BV (ACD);   //выключить компаратор

   ADMUX |= _BV (REFS1)| _BV (REFS0);   //источник опорного напряжения - внутренний 1,1В
   //ADMUX |= _BV (MUX1)| _BV (MUX0);   //входной канал MUX3...0
   ADMUX |= _BV (ADLAR);   //выравнивание результата преобразования - влево (для удобства 8 бит в регистре ADCH)
   ADCSRA |= _BV (ADEN);   //включить АЦП
   ADCSRA |= _BV (ADATE);   //выбор режима работы АЦП - по ADTS2...0
   ADCSRA |= _BV (ADIE);   //разрешить прерывание
   ADCSRA |= _BV (ADPS2)| _BV(ADPS0);   //выбор частоты преобразования - 250 кГц
   ADCSRB |= _BV (ADTS2);   //выбор источника сигнала для запуска преобразования - переполнение таймера Т0
         
   sei ();

   while(1){

   
   if (int_adc<20) int_adc++;
   else int_adc=0;

   if (int_adc>=0 && int_adc<=5)
        {
        ADMUX &=~ (_BV (MUX1)| _BV (MUX0));   //ADC0
        }
   if (int_adc>=6 && int_adc<=10)
        {
        ADMUX |= _BV (MUX0);            //ADC1
      ADMUX &=~ _BV (MUX1);
        }
   if (int_adc>=11 && int_adc<=15)
        {
      ADMUX &=~ _BV (MUX0);            //ADC2
        ADMUX |= _BV (MUX1);
        }
   if (int_adc>=16 && int_adc<=20)
        {
      ADMUX |= _BV (MUX0);            //ADC3
        ADMUX |= _BV (MUX1);
        }

   ADCSRA |= _BV (ADSC);   //запуск АЦП (запускается один раз)

   PORTB &=~ _BV (PB5);
   _delay_ms (V);
   PORTB |= _BV (PB5);
   _delay_ms (V);

   }
}


mehanik_all писал(а):
этот кусок дерьма
Хороший отзыв об инструменте :facepalm:
Зачем тогда пользуетесь ? Выкиньте на свалку его ...


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

Добавлено after 1 hour 17 minutes 14 seconds:
Откатил программу до версии 4.18. Пока полёт нормальный. Совет "выкинуть на свалку" помог :)))

Автор:  Demiurg [ Вт авг 31, 2021 04:41:06 ]
Заголовок сообщения:  Re: Глюканул AVR Studio 4.19

Вообще то 4.19 самая устойчивая версия студии...

Автор:  BOB51 [ Вт авг 31, 2021 08:15:04 ]
Заголовок сообщения:  Re: Глюканул AVR Studio 4.19

А простая переустановка и не поможет.
Надо для начала и автоматическую деинсталяцию и удаление вручную остатков делать.
8)
Возможно на ПК еще какие-то варианты GCC были позднее установлены (из ардуинки к примеру или еще из чего) да прописались где-то... или диск... сбойнул...
:dont_know:

Автор:  Михаил_avr [ Вт авг 31, 2021 09:00:09 ]
Заголовок сообщения:  Re: Глюканул AVR Studio 4.19

_delay_ms принимает только константу, туда нельзя писать переменную, если раньше работало то не должно было лучше напишите так
Код:
void delay(int v)
{
while (v)
{
_delay_ms(1);
V--;
}
}


И используйте функцию delay.

P. S.
Хотя если переменная не менялась то могло бы и работать

Автор:  slav0n [ Вт авг 31, 2021 14:40:15 ]
Заголовок сообщения:  Re: Глюканул AVR Studio 4.19

опять сказки какие-то рассказываете...
вот же прототип:
Код:
static inline void _delay_ms(double __ms) __attribute__((always_inline));

Автор:  mehanik_all [ Вт авг 31, 2021 14:53:25 ]
Заголовок сообщения:  Re: Глюканул AVR Studio 4.19

В общем поковырялся ещё пару часов. Снёс всё начисто. ОС Win7 64. Установил 4.19, WinAVR. В чистом виде всё это дело не компилит, хз почему, нужен AVR Toolchain. Это у всех так или только у меня? Ставлю его. И вот тут и зарыта собака, delay.h компилятор берёт из тулчейна, я его переименовал и закинул delay.h из WinAVR. Теперь код _delay_ms (V) работает как на 4.18, на который кстати у меня AVR Toolchain не требовался и на WinXP не установлен с 4.18. В чём прикол с этим AVR Toolchain не знаю, разбираться пока лень, если кто в курсе пишите.

Автор:  slav0n [ Вт авг 31, 2021 14:55:11 ]
Заголовок сообщения:  Re: Глюканул AVR Studio 4.19

да и кодик ТС не айс.
вот примерная конструкция перебора входов АЦП:
Код:
int_adc++;

if (
int_adc == 20) {
    
int_adc 0;
    
ADMUX &= ~(_BV(MUX1) | _BV(MUX0)); //ADC0
}
else
if (
int_adc == || int_adc == 10 || int_adc == 15) {
    
ADMUX++;//next input

Автор:  ~Dimon~ [ Пн сен 06, 2021 21:45:44 ]
Заголовок сообщения:  Re: Глюканул AVR Studio 4.19

C:\Program Files (x86)\Atmel\AVR Tools\AVR Toolchain\avr\include\util\delay.h
Там есть описание поведения (у меня 4.18), судя по нему, использовать переменную можно, но...
Настоятельно рекомендуют передавать на вход константное выражение, которое может быть вычислено на этапе компиляции, и не отключать оптимизации.
В противном случае вы получите разжиревший бинарник и сильно (даже в разы) увеличенные задержки, из за арифметики с double в рантайме.

Автор:  slav0n [ Вт сен 07, 2021 03:29:31 ]
Заголовок сообщения:  Re: Глюканул AVR Studio 4.19

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

Вложения:
wait.rar [1.26 KiB]
Скачиваний: 125

Автор:  ~Dimon~ [ Вт сен 07, 2021 21:42:52 ]
Заголовок сообщения:  Re: Глюканул AVR Studio 4.19

Это да, но ТС спрашивал про софтовую.
Еще можно точно отмерять задержки через АЦП, USART, TWI, SPI, если все таймеры заняты какой то другой работой.

Автор:  mehanik_all [ Сб сен 11, 2021 16:50:52 ]
Заголовок сообщения:  Re: Глюканул AVR Studio 4.19

вы получите разжиревший бинарник и сильно (даже в разы) увеличенные задержки, из за арифметики с double в рантайме.

Для небольшого кода это не особо важно, мне просто нужно было по быстрому проверить железо. Я написал небольшой хидер со своими функциями delay, на будущее. А по сути, как оказалось, виновата не студия, а используемые библиотеки. В 4.19 используется по умолчанию библиотека Toolchain, в 4.18 WinAVR, и у них разные delay.h. Можно в 4.19 в настройках проекта указать пути к WinAVR, и всё будет как в старых версиях студии. Думаю тему можно закрывать на этом.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/