Например TDA7294

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





Текущее время: Чт апр 18, 2024 04:39:52

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


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



Начать новую тему Ответить на тему  [ Сообщений: 8273 ]     ... , , , 387, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 20, 2017 21:45:31 
Говорящий с текстолитом
Аватар пользователя

Карма: 10
Рейтинг сообщений: 16
Зарегистрирован: Сб фев 18, 2012 15:42:29
Сообщений: 1661
Откуда: Курск
Рейтинг сообщения: 0
блин как это понять. никак не переварю

как бы объяснить.

interrupt [бла бла бла] бла бла бла
{PORTB.0=~PORTB.0;}

void main (void)
бла бла бла
бла бла бла

while (1)
{
PORTB=digits[discharge[1]];
}

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


Последний раз редактировалось mixon46 Чт апр 20, 2017 22:00:29, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 20, 2017 22:00:24 
Это не хвост, это антенна
Аватар пользователя

Карма: 6
Рейтинг сообщений: 42
Зарегистрирован: Пт ноя 27, 2009 19:47:13
Сообщений: 1312
Откуда: Казань
Рейтинг сообщения: 0
Можно скопировать состояние вашего бита, который вы не хотите менять, и включить его в переменную, которую вы хотите в порт вывести. Так же у AVR есть ассемблерные команды работы с каждым битом порта в отдельности, но это будет дольше работать)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 20, 2017 22:02:40 
Говорящий с текстолитом
Аватар пользователя

Карма: 10
Рейтинг сообщений: 16
Зарегистрирован: Сб фев 18, 2012 15:42:29
Сообщений: 1661
Откуда: Курск
Рейтинг сообщения: 0
я понимаю что можно. только не понимаю как. давно не занимался с codevision


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 20, 2017 22:15:14 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 3
Медали: 1
Получил миской по аватаре (1)
4 буквы написать, остальное даже сам поисковик за тебя додумывает :
Изображение

Неужели проще сидеть и ждать, пока кто-нибудь догадается, что конкретно Вам нужно ?


Вложения:
2017-04-20_23-20-42.png [25.72 KiB]
Скачиваний: 751
Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 20, 2017 22:15:27 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 0
&= и |= в помощь


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 20, 2017 22:20:28 
Говорящий с текстолитом
Аватар пользователя

Карма: 10
Рейтинг сообщений: 16
Зарегистрирован: Сб фев 18, 2012 15:42:29
Сообщений: 1661
Откуда: Курск
Рейтинг сообщения: 0
Аlex писал(а):
4 буквы написать, остальное даже сам поисковик за тебя додумывает :

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


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

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 1
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
mixon46 писал(а):
надо взять значение порта и присвоить ему значение но с маской на младший бит. как блин это сделать
как говорите, так и записываете,
только не на русском языке, а на языке Си:
Код:
#define MASK 0x01
unsigned char data;

PORTB = (PORTB & MASK) | (data & ~MASK);
вот здесь о масках и т.п.: http://arv.radioliga.com/content/category/6/33/49/

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Чт апр 20, 2017 22:37:56 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Вам нужно сделать 2 операции.
1. Сброс всех битов, которые будут модифицироваться, с помощью "&" и маской.
2. Установка необходимых битов с помощью "|", маской будет являться само устанавливаемое значение.

Добавлено after 6 minutes 55 seconds:
ARV писал(а):
& ~MASK
Этого можно не делать, если исходные данные не затрут "ненужный" бит.
Получится 2 операции - & с маской и "|" с исходными данными.

PS: Это не для ARV'а, а для ТС'а :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 21, 2017 11:42:41 
Встал на лапы
Аватар пользователя

Карма: 7
Рейтинг сообщений: 11
Зарегистрирован: Сб янв 07, 2017 10:14:29
Сообщений: 104
Откуда: Н-Новгород
Рейтинг сообщения: 0
Что-то я совсем потерялся, как получить доступ к глобальной переменной из функции.

пример

Код:
volatile bit s1; //

char function (char a, char b) {
     if (a == b) return 0;
}


Допустим я хочу внутри функции иметь доступ к s1, как ее передать туда и изменить там ума не приложу.
объявления типа bit в теле функций не работает, на char ругается, что это не char.
Создавать промежуточные переменные я не хочу, ибо bit это 1 бит, и в один байт в регистре можно 8 переменных пихнуть, а любая переменная это минимум 8 бит минимум и вся экономия коту под хвост.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 21, 2017 12:09:54 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
jeka79 писал(а):
Допустим я хочу внутри функции иметь доступ к s1, как ее передать туда и изменить там ума не приложу
глобальные переменные доступны ни же по коду в теле любых функций напрямую:
Код:
volatile bit s1; //

char function (char a, char b) {
     s1 = 1; // вот так
     if (a == b) return 0;
}
однако, проблемы, с которыми вы сталкиваетесь
jeka79 писал(а):
объявления типа bit в теле функций не работает, на char ругается, что это не char
уже как бы намекают вам, что bit - это костыль, в стандарте Си нет такого типа. и зря вы им пользуетесь - уже сейчас у вас проблемы, а что потом будет? пользуйтесь только стандартными типами Си - будет вам счастье.

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 21, 2017 12:22:29 
Встал на лапы
Аватар пользователя

Карма: 7
Рейтинг сообщений: 11
Зарегистрирован: Сб янв 07, 2017 10:14:29
Сообщений: 104
Откуда: Н-Новгород
Рейтинг сообщения: 0
Прочитал в факе кодвижн bit это заюз младших регистров, если у меня булевые данные зачем мне использовать для их хранения обычные переменные, с каждой новой переменной код пухнет, а для меня крайне критична минимизация, поэтому в глобальной переменной типа bit удобно хранить такие данные, можно конечно и обычные переменные заюзать и побитно с ними работать, но это не очень удобно, с типом бит проще, с отдельным битом как с обычной переменной.
спс понял, что объявлять не надо, все заработало.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 21, 2017 12:30:25 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
jeka79 писал(а):
Допустим я хочу внутри функции иметь доступ к s1, как ее передать туда и изменить там ума не приложу
Глобальные переменные на то и глобальные, что их область видимости расширенная. Их не нужно никуда передавать, они видятся везде.

jeka79 писал(а):
объявления типа bit в теле функций не работает
Естественно. Под локальные переменные выделяется область в стеке, при входе в функцию, а как компилятору выделить 1 бит ?
По этому, если компиляторы поддерживают битовый тип, то они могут быть только глобальными или статическими, чтобы линкер на этапе компиляции, заранее, выделил под них место.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 21, 2017 12:34:27 
Говорящий с текстолитом
Аватар пользователя

Карма: 10
Рейтинг сообщений: 16
Зарегистрирован: Сб фев 18, 2012 15:42:29
Сообщений: 1661
Откуда: Курск
Рейтинг сообщения: 0
AVR, я подумал и ваше решение подошло. Только я упростил. Так как в data младший бит уже равен 0 то можно проще

PORTB=data|(PORTB&0b00000001)

Решение нашлось. Спасибо))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 21, 2017 12:35:53 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 0
jeka79 писал(а):
если у меня булевые данные зачем мне использовать для их хранения обычные переменные, с каждой новой переменной код пухнет, а для меня крайне критична минимизация
А тут не совсем верно. Побитное хранение нескольких (до восьми штук в одном байте) флагов требует большего количества (читай, размера)кода, чем для каждой своей переменной. Хотя ОЗУ экономится, это да.

По крайней мере, для AVR это так.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 21, 2017 12:40:56 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
mixon46 писал(а):
Только я упростил. Так как в data младший бит уже равен 0 то можно проще
PORTB=data|(PORTB&0b00000001)
Решение нашлось. Спасибо))
Решение давно уже было дано :
Аlex писал(а):
ARV писал(а):
& ~MASK
Этого можно не делать, если исходные данные не затрут "ненужный" бит.
Получится 2 операции - & с маской и "|" с исходными данными.
:)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 21, 2017 12:45:37 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1018
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4875
Откуда: Минск
Рейтинг сообщения: 0
WiseLord писал(а):
Побитное хранение нескольких (до восьми штук в одном байте) флагов требует большего количества (читай, размера)кода, чем для каждой своей переменной
Набросал и маленький простенький пример.

Это компилируется в 206 байтов:
Спойлер
Код:
#include <avr/io.h>
#include <util/delay.h>

#include "pins.h"

typedef struct
{
    uint8_t a:1;
    uint8_t b:1;
    uint8_t c:1;
    uint8_t d:1;
} MyFlags;

int main(void)
{
    volatile MyFlags flags;

    flags.a = 0;
    flags.b = 1;
    flags.c = 0;
    flags.d = 0;

    while (1) {
        uint8_t x = flags.a;
        flags.a = flags.b;
        flags.b = flags.c;
        flags.c = flags.d;
        flags.d = x;
    }

    return 0;
}
А это - в 154 байта:
Спойлер
Код:
#include <avr/io.h>
#include <util/delay.h>

#include "pins.h"

typedef struct
{
    uint8_t a;
    uint8_t b;
    uint8_t c;
    uint8_t d;
} MyFlags;

int main(void)
{
    volatile MyFlags flags;

    flags.a = 0;
    flags.b = 1;
    flags.c = 0;
    flags.d = 0;

    while (1) {
        uint8_t x = flags.a;
        flags.a = flags.b;
        flags.b = flags.c;
        flags.c = flags.d;
        flags.d = x;
    }

    return 0;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 21, 2017 12:55:20 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
WiseLord писал(а):
А это - в 154 байта:
так там у вас аж целых 4 байта ОЗУ израсходовано!!! :shock:

:))) :beer:

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 21, 2017 13:10:41 
Друг Кота
Аватар пользователя

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 21, 2017 14:32:38 
Встал на лапы
Аватар пользователя

Карма: 7
Рейтинг сообщений: 11
Зарегистрирован: Сб янв 07, 2017 10:14:29
Сообщений: 104
Откуда: Н-Новгород
Рейтинг сообщения: 0
В общем bit рулит, не знаю почему, но только что переписал код на хранение 8 битов в переменной и в типе бит.
разница в 200 байт, при компиляции, для кода из 1 функции и проверки, 6 переменных.

выделил в регистре переменную:

Код:
register unsigned char t_buf = 0x00;


либо просто

Код:
bit flag1 = 0;
bit flag2 = 1;
.........


в функции с флагами делаю все просто
Код:
if (flag) flag = 1;

c переменной:

Код:
if (((t_buf) & (1<<0))) t_buf |= (1<<0);


При чем в асме при работе с bit всегда простые команды SBIS, CBI, а с переменной генерит кучу переходов.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
СообщениеДобавлено: Пт апр 21, 2017 14:35:04 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Такую фигню :
Код:
if (flag) flag = 1;
даже самый глупый компилятор должен вырезать не глядя.
Ровно как и такую :
Код:
if (((t_buf) & (1<<0))) t_buf |= (1<<0);

:)


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

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


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

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


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

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


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