Например TDA7294

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





Текущее время: Вт мар 19, 2024 09:57:58

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


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



Начать новую тему Ответить на тему  [ Сообщений: 8273 ]     ... , , , 411, , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс май 16, 2021 14:44:05 
Опытный кот
Аватар пользователя

Карма: 10
Рейтинг сообщений: 77
Зарегистрирован: Пт фев 27, 2015 12:00:53
Сообщений: 779
Откуда: Рязанская область
Рейтинг сообщения: 0
может про таймеры почитать надо?
http://www.count-zero.ru/2015/timer2/


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пн май 17, 2021 22:45:35 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 102
Рейтинг сообщения: 0
Добрый весенний вечер! Нашёл в просторах интернета урок по меню для 1602 LCD Keypad Shield For Arduino, где кнопки опрашиваются по средством ацп, напсиан в AVR Studio. Решим перемахнуть сей проект для ознакомления собственного в CodevisionAVR под atmega328p вместо atmega8.
Так вот у меня не получается нормальной работы таймера по совпадению канала А. Что не так делаю:
код проекта изначально:
Код:
//----------
ISR(ADC_vect)
{
   low_adc = ADCL;
   high_adc = ADCH;//Старшая часть регистра ADC должна быть считана последней, иначе не продолжится преобразование
   if(adc_counter<20) {adc_tmp+=high_adc;adc_counter++;}
   else {adc_value=adc_tmp/20;adc_counter=0;adc_tmp=0;}
}
//----------
void ADC_Init(void)
{
   ADCSRA |= (1<<ADEN) // Разрешение использования АЦП
   |(1<<ADSC)//Запуск преобразования
   |(1<<ADFR)//Непрерывный режим работы АЦП
   |(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)//Делитель 128 = 128 кГц
   |(1<<ADIE);//Разрешение прерывания от АЦП
   ADMUX |= (1<<ADLAR)|(0<<REFS1)|(1<<REFS0); //Внутренний Источник ОН 5в, вход ADC0
}

//----------
void init_button_timer(void)
{
   TIMSK |= (1<<TOIE0);   //устанавливаем бит разрешения прерывания 0-ого счетчика по переполнению
   TCCR0 |= (0<<CS02)|(1<<CS01)|(1<<CS00); // устанавливаем предделитель 64
   //тем самым получаем - частота тактирования / предделитель / 256 = 976,5625 (около милисекунды)
   //делим на 256, так как таймер нулевой всегда считает от 0x00 до 0xFF и это не регулируется никак
}
//----------
ISR (TIMER0_OVF_vect)
{
   Read_Button_State(Button_Right);
   Read_Button_State(Button_Up);
   Read_Button_State(Button_Down);
   Read_Button_State(Button_Left);
   Read_Button_State(Button_Select);
   tim_cnt++;
   if(tim_cnt>=1000) tim_cnt=0;
}
//----------


мой код перепевка, правда таймер немного не так настроил, мне так надо:
Код:
// Voltage Reference: AVCC pin
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
// Wait for the AD conversion to complete
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCW;
}

// Timer 0 output compare A interrupt service routine
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
Read_Button_State(Button_Right);             //читаем состояние кнопки вправо
Read_Button_State(Button_Up);                //читаем состояние кнопки вверх
Read_Button_State(Button_Down);              //читаем состояние кнопки вниз
Read_Button_State(Button_Left);              //читаем состояние кнопки влево
Read_Button_State(Button_Select);            //читаем состояние кнопки выбор 
tim_cnt++;
if(tim_cnt>=1000) {tim_cnt=0;}
}
......................
// Clock value: 125,000 kHz
// Mode: Fast PWM top=OCR0A
// OC0B output: Non-Inverted PWM
// Timer Period: 1 ms
// OC0B Period: 1 ms Width: 0 us
TCCR0A=(0<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (1<<COM0B0) | (1<<WGM01) | (1<<WGM00);
TCCR0B=(1<<WGM02) | (0<<CS02) | (1<<CS01) | (1<<CS00);
TCNT0=0x00;
OCR0A=0x7C;
OCR0B=0x00;

TIMSK0=(0<<OCIE0B) | (1<<OCIE0A) | (0<<TOIE0);

// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On, ADC4: On, ADC5: On
DIDR0=(0<<ADC5D) | (0<<ADC4D) | (0<<ADC3D) | (0<<ADC2D) | (0<<ADC1D) | (0<<ADC0D);
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (1<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0); //(1<<ADATE) - используется в режиме по событию
ADCSRB=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт май 18, 2021 10:08:02 
Мучитель микросхем

Зарегистрирован: Вс апр 18, 2021 15:43:55
Сообщений: 419
Рейтинг сообщения: 0
Почему так получается останавливать таймер:
Код:
TCCR2 = 0x00;

А так нет:
Код:
TCCR2=(1<<PWM2) | (1<<COM21) | (0<<COM20) | (1<<CTC2) | (0<<CS22) | (0<<CS21) | (0<<CS20);

?

Код под Atmega8. Таймер в ШИМ режиме.


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт май 18, 2021 11:44:59 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 835
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5564
Откуда: Minsk
Рейтинг сообщения: 0
Конкретно в битах я разбираться не стал, но чисто по логике разница очевидна. Первый оператор сбрасывает все биты, второй - формирует константу, устанавливающую единицы в PWM2, COM21, CTC2, остальные остаются нулями , потому что конструкция вида (0<<CS20) бессмыслена по своей сути, она ничего не добавляет в константу - нули остались на всех позициях, не "затронутых" единицей . Так что второй оператор мог выглядеть и так:
Код:
TCCR2=(1<<PWM2) | (1<<COM21)  | (1<<CTC2) ;

и он должен был остановить таймер ?

_________________
Изображение


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт май 18, 2021 14:38:08 
Мучитель микросхем

Зарегистрирован: Вс апр 18, 2021 15:43:55
Сообщений: 419
Рейтинг сообщения: 0
Вот табличка из даташита:
Изображение
Вроде написано что если эти биты "по-нулям", то таймер остановлен. Кстати... может таймер останавливается и высокий уровень на ноге зависает (т.е. импульсов нет, просто висит высокий уровень)? Это я думал, что если таймер остановлен, то должен быть низкий уровень. Атмега ведь может думать иначе :)


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт май 18, 2021 15:07:41 
Ум, честь и совесть. И скромность.
Аватар пользователя

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Ср май 19, 2021 09:51:21 
Мучитель микросхем

Зарегистрирован: Вс апр 18, 2021 15:43:55
Сообщений: 419
Рейтинг сообщения: 0
ARV, спасибо за разъяснение. :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Сб авг 21, 2021 22:34:13 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 102
Рейтинг сообщения: 0
Как правильно считать регистр TCNT1 для atmega328 в CodeVisionAVR. Не определенные целиком 16 битные регистры(((
Код:
TCNT1 = TCNT1H<<8;               //с начало старший
TCNT1 = TCNT1 + TCNT1L;        //потом младший

или может так?
Код:
TCNT1 = TCNT1H<<8 | TCNT1L;

Подскажите новичку))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс авг 22, 2021 10:34:58 
Ум, честь и совесть. И скромность.
Аватар пользователя

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс авг 22, 2021 11:11:17 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 63
Рейтинг сообщений: 536
Зарегистрирован: Чт июл 28, 2016 07:58:37
Сообщений: 1925
Откуда: Kyiv, UA
Рейтинг сообщения: 0
kote52, сначала читаем младший байт, потом старший. Пишем старший, потом младший.
Из даташита - Assembly Code Example:
Код:
; Set TCNT1 to 0x01FF
ldi r17,0x01
ldi r16,0xFF
out TCNT1H,r17
out TCNT1L,r16

; Read TCNT1 into r17:r16
in r16,TCNT1L
in r17,TCNT1H

Читаются данные из таймера в момент чтения младшего байта, пишутся - при записи младшего.

_________________
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс авг 22, 2021 11:26:40 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 102
Рейтинг сообщения: 0
разве в CVAVR нет предопределенной unsigned int переменной TCNT1?

нету(((
вот так возможно ли дописать в файле mega328p.h?
Код:
...
#define TCCR1A (*(unsigned char *) 0x80)
#define TCCR1B (*(unsigned char *) 0x81)
#define TCCR1C (*(unsigned char *) 0x82)
#define TCNT1L (*(unsigned char *) 0x84)
#define TCNT1H (*(unsigned char *) 0x85)
#define TCNT1 (*(unsigned char *) 0x84) // мое творчество
...


Добавлено after 4 minutes 27 seconds:
Читаются данные из таймера в момент чтения младшего байта, пишутся - при записи младшего.

т.е. на Си это будет
Код:
TCNT1 = TCNT1L;             //младший
TCNT1 |= (unsigned int) TCNT1H<<8;        //потом старший


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс авг 22, 2021 11:28:06 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2057
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18024
Откуда: Новочеркасск
Рейтинг сообщения: 2
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
правильно должно быть так:
Код:
#define TCNT1L (*(volatile unsigned char *) 0x84)
#define TCNT1H (*(volatile unsigned char *) 0x85)
#define TCNT1 (*(volatile unsigned int *) 0x84) // мое творчество

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс авг 22, 2021 12:16:11 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 63
Рейтинг сообщений: 536
Зарегистрирован: Чт июл 28, 2016 07:58:37
Сообщений: 1925
Откуда: Kyiv, UA
Рейтинг сообщения: 1
kote52 писал(а):
TCNT1 = TCNT1L;             //младший
TCNT1 |= (unsigned int) TCNT1H<<8;        //потом старший

Я бы приводил к uint не результат сдвига, а TCNT1H:
Код:
TCNT1 |= ( (unsigned int)TCNT1H ) << 8; 

_________________
ИзображениеИзображение
Изображение
 
Telegram               Лучшая благодарность ->
[+]


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс авг 22, 2021 12:24:59 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 102
Рейтинг сообщения: 0
правильно должно быть так:
Код:
#define TCNT1L (*(volatile unsigned char *) 0x84)
#define TCNT1H (*(volatile unsigned char *) 0x85)
#define TCNT1 (*(volatile unsigned int *) 0x84) // мое творчество

ну да unsigned char я дал маху)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Сб окт 30, 2021 18:21:53 
Родился
Аватар пользователя

Зарегистрирован: Пт окт 29, 2021 16:42:55
Сообщений: 1
Рейтинг сообщения: 0
Получается в CVAVR нет переменной TCNT1, а в Atmel Studio есть? Там можно напрямяю прочитать да? Без Hi и Low


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Сб окт 30, 2021 19:07:04 
Друг Кота
Аватар пользователя

Карма: 45
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6615
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
я у себя эту проблему решил так:
взял конфигурационный файл применённого в данный момент камня и дописал.
работает до меги328 = до тех пор, пока адресное пространство периферии на адресное пространство ОЗУ не начнёт налезать...
дописывать несложно - там уже есть регистры с 16 битовым доступом - делаешь по аналогии.

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пн ноя 08, 2021 22:24:59 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
как в данной среде указать исходную папку которая будет являться рабочим пространством чтобы в нее складывались все последующии новые проэкты автоматически при создании ?

_________________
Tell Me The Truth


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Сб дек 04, 2021 20:34:56 
Мучитель микросхем

Зарегистрирован: Вс апр 18, 2021 15:43:55
Сообщений: 419
Рейтинг сообщения: 0
Объявление переменной i в условии цикла for не поддерживается?

На такой код ругается...
Код:
for(int i=0;i<3;i++){

}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс дек 05, 2021 18:35:40 
Друг Кота
Аватар пользователя

Карма: 45
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6615
Откуда: Сердце Пармы
Рейтинг сообщения: 1
Медали: 1
Получил миской по аватаре (1)
и у меня ругается :dont_know:
если прям локальный счётчик нужен, то напиши примерно так
{чар и;
фор (и=0;и<3;и++)
{тело цикла};
};

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт дек 14, 2021 13:47:08 
Встал на лапы

Зарегистрирован: Пт мар 19, 2021 08:58:45
Сообщений: 102
Рейтинг сообщения: 0
Котаны и котики, как посредством CVAVR и стандартной библиотеки alcd.h вывести свой символ созданный к примеру в LCDVision на экран LCD1602?


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

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20


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

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


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