Например TDA7294

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



Текущее время: Ср фев 21, 2018 02:59:55



Часовой пояс: UTC + 3 часа [ Летнее время ]


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



Начать новую тему Ответить на тему  [ Сообщений: 7854 ]  На страницу Пред.  1 ... 389, 390, 391, 392, 393
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт окт 12, 2017 20:58:23 
Встал на лапы

Карма: 10
Зарегистрирован: Вс дек 25, 2016 09:34:54
Сообщений: 101
Рейтинг сообщения: 0
в железе работает
протеус на мыло
Прекрасно в протеусе работает.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вт окт 24, 2017 16:20:02 
Первый раз сказал Мяу!

Зарегистрирован: Пн янв 09, 2017 07:50:37
Сообщений: 33
Откуда: Приморье
Рейтинг сообщения: 0
Помогите новичку! АмперВольтметр, дисплей 1602, вывод данных АЦП на дисплей так
//Текущее напряжение
lcd_gotoxy(0,0);
result=(adc_data[0]*0.01955); //пересчитываем значение АЦП в вольты
sprintf(lcd_buffer,"%.1f V ",result); //помещаем во временную переменную результат
lcd_puts(lcd_buffer); //выводим на экран
Как то же самое вывести на дисплей Nokia 5110 (PCD8544)?

_________________
Мир не без добрых людей!


Вернуться наверх
 Профиль  
 
JLCPCB Prototype, Бесплатная доставка первого заказа + $2 на прототип ПП!

Крупнейший производитель печатных плат в Китае, 290,000+ заказчиков, 8,000+ он-лайн заказов в день.

Цена за 10 плат: $2 за 2-х слойную, $15 за 4-х слойную, $74 за 6-ти слойную.

LCSC Parts: Экономия до 50%, большой выбор компонентов в наличии, отправка заказа в день оплаты.

Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт ноя 09, 2017 10:39:22 
Грызет канифоль

Карма: 1
Зарегистрирован: Чт авг 08, 2013 02:06:54
Сообщений: 283
Рейтинг сообщения: 0
Доброго времени суток. Поделитесь пожалуйста ссылкой для скачивания версии 2.50 с crack, нигде не могу найти.


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Сб фев 10, 2018 22:46:54 
Открыл глаза

Зарегистрирован: Пт окт 16, 2009 23:32:58
Сообщений: 65
Рейтинг сообщения: 0
Немного непонятно как в массиве с помощью указателя вытащить элемент c индексом -0. Просто имя массива ссылается на его первый элемент?
В общем нужен совет
int *p; -указатель на целочисл число
p= masiv; или так p=&masiv[0]
int masiv[8]={1,2,3, ... } 0-й элемент массива 1 , 1-й элемент массива 2 и т д
Если записать так PORTD = masiv[*p] то запишется 1 в PD.1
А чтобы зажечь PD.0 надо изголиться - PORTD = masiv[*p-1]
Вот это [*p-1] не очень нравиться


Вернуться наверх
 Профиль  
 

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

Карма: 126
Зарегистрирован: Чт апр 11, 2013 12:19:59
Сообщений: 3054
Откуда: Минск
Рейтинг сообщения: 0
sergejjj123 писал(а):
Если записать так PORTD = masiv[*p] то запишется 1 в PD.1
А чтобы зажечь PD.0 надо изголиться - PORTD = masiv[*p-1]
Я не специалист в CVAVR, но это не похоже на правду.
PORTD = masiv[*p] запишет не в PD.1 единицу, а в PORTD число 2. И хотя это выглядит похоже, но это совсем разные вещи.


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс фев 11, 2018 03:36:31 
Открыл глаза

Зарегистрирован: Пт окт 16, 2009 23:32:58
Сообщений: 65
Рейтинг сообщения: 0
Ну это понятно что запишеться весь порт а не только в конкретный бит.
Видно и так что под нулевым индексом в дес формате цифра 1 (1; в бинарном остальные слева заполнятся нулями)
Как не крути единичка должна появиться только на нулевом разряде порта .
Может как-то неправильно я поставил вопрос .
Вы смотрите синтаксис языка а сути вопроса не поняли.
Как в массиве с помощью указателя вытащить с 0-го индекса значение?
У меня получается только с 1-го индекса это цифра десятичн 2 а номер бита в порте -1 (10; в бинарном тоже слева куча нулей)
Почему-то когда пишу так [0] работает правильно
А если так [*p] -то берет значение массива 1-го индекса


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Вс фев 11, 2018 08:26:02 
Друг Кота
Аватар пользователя

Карма: 126
Зарегистрирован: Чт апр 11, 2013 12:19:59
Сообщений: 3054
Откуда: Минск
Рейтинг сообщения: 0
Ну так естественно. Ведь *p = 1, поэтому и берётся masiv[1].
Если нужно вытянуть с нулевого индекса значение, то это (выбирайте на вкус):
masiv[0] = *masiv = *(masiv + 0) = *p = *(p + 0) = p[0]
Абсолютно так же и для других индесов, например 3:
masiv[3] = *(masiv + 3) = *(p + 3) = p[3].
Вы же по какой-то причине пытаетесь разыменовать указатель дважды. Делая
masiv[*p], по сути делаете masiv[masiv[0]].
sergejjj123 писал(а):
Как в массиве с помощью указателя вытащить с 0-го индекса значение?
Ещё раз,резюмируя. Проще всего это сделать так:
masiv[0].
И не вводить ещё один лишний указатель p, фактически являющийся полным дублем masiv.


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Ср фев 14, 2018 15:56:42 
Открыл глаза
Аватар пользователя

Зарегистрирован: Ср фев 01, 2017 15:20:58
Сообщений: 45
Рейтинг сообщения: 0
Привет всем и с праздником святого Валентина!
Прошу меня простить, возможно это уже где то описано.
Codevisionavr 3.12. В отдельном модуле описываю метод локальный:
=====================================
void set_port( volatile uint8_t *pReg, uint8_t bit ) {
*pReg |= ( 1 << bit );
}
А она выдает мне ошибку: "Error: C:\Users\1\Documents\AVR\Tester\macros.c(20): invalid combination of type specifiers".
Если этот метод сделать общедоступным, вынести название в хидер, то имеют место 3 ошибки:
==================================
Error: C:\Users\1\Documents\AVR\Tester\macros.h(7), #included from: main.c: invalid combination of type specifiers
Error: C:\Users\1\Documents\AVR\Tester\macros.h(7), #included from: macros.c: invalid combination of type specifiers
Error: C:\Users\1\Documents\AVR\Tester\macros.c(16): invalid combination of type specifiers
==================================
Мой модуль macros.c включает заглавие macros.h и главный модуль проэкта тоже включает macros.h.
И почему то codevisionavr мне это выдает за ошибку.
Подскажите мне, будте добры, где я здесь ошибся. я уже второй день над этим голову ламаю. мозги уже выносит.
В Atmel Studio это компилируется, но там почему то не так компилируется как нужно. Уже оптимизацию менял. В дебаговом режиме студия пропускает строки. Одним словом, что то у меня не совсем срослось :)
Буду очень признателел за обе подсказки. Потому что писать мне больше нравится в студии, но не могу толком настроить.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Ср фев 14, 2018 16:06:15 
Друг Кота
Аватар пользователя

Карма: 126
Зарегистрирован: Чт апр 11, 2013 12:19:59
Сообщений: 3054
Откуда: Минск
Рейтинг сообщения: 0
А volatile допустим в аргументах функции в CVAVR?


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Ср фев 14, 2018 17:12:13 
Открыл глаза
Аватар пользователя

Зарегистрирован: Ср фев 01, 2017 15:20:58
Сообщений: 45
Рейтинг сообщения: 0
sergejjj123 писал(а):
Если записать так PORTD = masiv[*p] то запишется 1 в PD.1
А чтобы зажечь PD.0 надо изголиться - PORTD = masiv[*p-1]
Я не специалист в CVAVR, но это не похоже на правду.
PORTD = masiv[*p] запишет не в PD.1 единицу, а в PORTD число 2. И хотя это выглядит похоже, но это совсем разные вещи.


А тут я так понял, что надо просто использовать не присвоение, а побитовое или с присвоением
PORTD |= *p;
Тогда и все биты останутся не тронутыми, кроме как того, какое число будет в *p

Добавлено after 54 minutes 2 seconds:
А volatile допустим в аргументах функции в CVAVR?


Я пробовал без volatile, ничего не меняется.
А как же тогда заставить codevision запихать переменную в регистр? Но это не вопрос.
Спасибо большое!

Добавлено after 6 minutes 1 second:
Может лучше сразу прицепить весь проект.


Вложения:
Tester.rar [105.04 KiB]
Скачиваний: 1
Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Ср фев 14, 2018 20:04:09 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 258
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 11326
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
rvk писал(а):
А как же тогда заставить codevision запихать переменную в регистр?
может быть, наоборот - регистр в переменную? я так вангую, вы хотите свою функцию set_port использовать как-то так
Код:
set_port(&PORTB, 3); // устанавливаем 3-й бит в PORTB
set_port(&PORTD, 2); // 2-й бит в PORTD
такое возможно на самом деле в AVR-GCC, но на сколько мне известно, не в CVAVR.

в большинстве случаев вместо подобной функции вполне неплохо проявляют себя макросы
Код:
#define set_port(p,b) do{ p |= (1 << (b));}while(0)

set_port(PORTB, 3);
set_port(PORTD, 2);

_________________
я свою работу за вас делать не буду!


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт фев 15, 2018 01:55:43 
Открыл глаза
Аватар пользователя

Зарегистрирован: Ср фев 01, 2017 15:20:58
Сообщений: 45
Рейтинг сообщения: 0
Цитата:
такое возможно на самом деле в AVR-GCC, но на сколько мне известно, не в CVAVR.

в большинстве случаев вместо подобной функции вполне неплохо проявляют себя макросы


Да. Спасибо!
Написал вот так:
Код:
#define SET_PORT ( *reg, bit ) ( ( *reg ) |= ( 1 << ( bit ) ) )
#define CLEAR_PORT ( *reg, bit ) ( ( *reg ) &= ~( 1 << ( bit ) ) )
#define CHECK_PIN ( *pin, bit ) ( ( *pin ) & ( 1 << ( bit ) ) )

:)) Помогло. :))
Пока не знаю, как будет работать в програме CHECK_PIN, но SET и CLEAR должны.
Можно ли будет создать условие: if ( CHECK_PIN( &PINA, 2 ) ) {}, буду пробовать.
Но я сегодня :shock: :shock: :shock: . А вчера компилятор от этого выражения был в :shock: :shock: :shock: .
Или я где то лажанул по полной.
Спасибо! Спасибо! Спасибо!
А еще вот не понял выражения
Цитата:
#define set_port(p,b) do{ p |= (1 << (b));}while(0)

Для чего и как это работает? Зачем здесь цикл?

Добавлено after 24 minutes 28 seconds:
У меня написано:

Код:
#define SET_PORT ( *reg, bit ) ( ( *reg ) |= ( 1 << ( bit ) ) )
#define CLEAR_PORT ( *reg, bit ) ( ( *reg ) &= ~( 1 << ( bit ) ) )
#define CHECK_PIN ( *pin, bit ) ( ( *pin ) & ( 1 << ( bit ) ) )

uint8_t BITS_CHIP_PANEL[]  = { 0, 1, 7, 6, 5, 4 };
uint8_t *PORTS_CHIP_PANEL[] = { &PORTA, &PORTA, &PORTD, &PORTD, &PORTC, &PORTC };
uint8_t *PINS_CHIP_PANEL[]  = { &PINA, &PINA, &PIND, &PIND, &PINC, &PINC };
uint8_t *DDRS_CHIP_PANEL[]  = { &DDRA, &DDRA, &DDRD, &DDRD, &DDRC, &DDRC };


А теперь, когда я это использую
Код:
CLEAR_PORT( PORTS_CHIP_PANEL[ i ], i );
, компилятор снова испуган: "Error: C:\Users\1\Documents\AVR\Tester\macros.c(42): undefined symbol 'reg'"
И не проходит ни PORTS_CHIP_PANEL[ i ], ни *PORTS_CHIP_PANEL[ i ], ни &PORTS_CHIP_PANEL[ i ].
Ошибка одинаковая. В студии это работает.
Похоже мне снова не повезло.
Надо спрыгивать на 4 студию.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт фев 15, 2018 04:42:16 
Друг Кота
Аватар пользователя

Карма: 126
Зарегистрирован: Чт апр 11, 2013 12:19:59
Сообщений: 3054
Откуда: Минск
Рейтинг сообщения: 0
define некорректные, а именно -звездочки в них.


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт фев 15, 2018 12:39:42 
Открыл глаза
Аватар пользователя

Зарегистрирован: Ср фев 01, 2017 15:20:58
Сообщений: 45
Рейтинг сообщения: 0
Цитата:
define некорректные, а именно -звездочки в них.

Этот код в студии работает. Значит точно ничего не выйдет в Codevision.
:idea: А подскажите, коты, пожалуйста, как можно переменную по ссылке передать? Ведь этой переменной должен быть порт ЦП.
Потому что у меня есть 20 портов, которые часто используются. Вот как выйти из положения не создавая массива портов?
Спасибо всем!

Сегодня праздник большой. Всех с праздником Сретения! :)) :)

Добавлено after 2 hours 39 minutes 2 seconds:
Вот, наконец то, результаты есть!
Этот код:
Код:
uint8_t BITS_CHIP_PANEL[]  = { 0, 1, 7, 6, 5, 4 };
uint8_t *PORTS_CHIP_PANEL[] = { &PORTA, &PORTA, &PORTD, &PORTD, &PORTC, &PORTC };

заданы переменные
А потом использование
Код:
*PORTS_CHIP_PANEL[ 3 ] |= ( 1 << BITS_CHIP_PANEL[ 3 ] );

РАБОТАЕТ!!!!!!
Не нужно придумывать в Codevision ниаких методов или define-ов - работать у меня отказалось, а вот самый обыкновенный код, работает.
И можно использовать в указателе на массив адреса портов !!!!!!!!!!!
УРРРРРРААААА!
:)) :)) :))) :music: :solder:
Всем удачи и спасибо!


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7854 ]  На страницу Пред.  1 ... 389, 390, 391, 392, 393



Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


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

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


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