Jump to content
Andrey_47

Указатели на отдельные выводы порта. Виртуальный порт

Recommended Posts

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

Решил для начала попробовать с помощью указателей создать переменную, и, чтобы с помощью этой переменной менять значение вывода одного из портов (PORTA0)

Вот как я это пытался делать:

#define F_CPU 8000000UL
#include <avr/io.h>

 int *a;

int main(void)
{
    DDRA |= (1<<0);
    a = &PA0;
    *a = 1;
       
    while (1) 
    {
    }
}


Разумеется ничего не компилируется, потому что вид записи типа  a = &PA0; является неправильным. 

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

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

 

Share this post


Link to post
Share on other sites

Задача абсолютно надуманная.

С++ с шаблонами позволяет реализовать "виртуальный порт", пины которого физически будут соответствовать пинам любого количества "физических" портов. Средствами обычного Си это сделать невозможно.

Но, с моей точки зрения, во всех случах это не стоит делать вообще: выгода сомнительная.

Указатель невозможно сделать на данные меньше байта размером.

Share this post


Link to post
Share on other sites

Технология Maxim Integrated nanoPower: когда малый IQ имеет преимущества

При разработке устройств с батарейным питанием важно выбирать компоненты не просто с малым потреблением, но и с предельно малым током покоя. При этом следует обратить внимание на линейку nanoPower производства компании Maxim Integrated. В статье рассмотрено их применение на примере системы датчиков беспроводной оконной сигнализации.

Подробнее

12.10.2019 в 20:18, Andrey_47 сказал:

Разумеется ничего не компилируется, потому что вид записи типа  a = &PA0; является неправильным. 

епстественно неправильный, потомушта PA0 это не переменная и не адрес , это тупая автозамена дефайном для препроцессора вида:

/* ***** PORTB ************************ */
/* PORTB - Data Register, Port B */
#define    PB0          0       // 
#define    PB1          1       // 
#define    PB2          2       // 
#define    PB3          3       // 
#define    PB4          4       // 

а рабочие регистры описываются через асм вставки в тех же командах препроцессора :

#pragma used+
sfrb PINB=0x16;
sfrb DDRB=0x17;
sfrb PORTB=0x18;
sfrb PINA=0x19;
sfrb DDRA=0x1a;
sfrb PORTA=0x1b;
#pragma used-

усе это живет в инклюдах. и вы можете обозвать любой регистр на свое усмотрение теме же командами. но компилятор кодевиженАВР и еже с ним не позволяют создавать/накладывать переменные/структуры/объединения по конкретному адресу RAM в отличии от компиляторов других МК

и полностью согласен с @ARV для работы виртуальный порт на не нать.

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Хорошая антенна излучает практически всю подводимую мощность, независимо от частоты. Но хорошая антенна должна иметь размеры, соизмеримые с длинной волны. Диполь на 2,45 ГГц будет иметь длину около 6 см. А вот чтобы эффективно излучить 50 Гц такая же по принципу действия антенна  должна быть длиной 3000 км... Может, автор это имел ввиду.
    • напряжение входа( 55вольт) минус напряжение выхода(допустим 12 вольт ) умножаем на ток ( допустим 2 А) итого 86 ватт - все на транзисторе - я про это говорю - ес нужен будет на постоянку - не айс такой лбп,имхо.
    • Это хорошо. Значит вы в  состоянии приобрести микроамперметр и два диода, чтобы выяснить для себя на каком же расстоянии от вашей микроволновки поле будет практически нулевым. А то в начале темы это было 5 см, а потом стало 10. ЗЫ: Хотя, если встав с дивана  вы идёте на работу, а не на форум, то вполне могли бы притащить оттуда анализатор спектра и продемонстрировать его возможности. Думаю такой прибор на вашей не бомжовой кухне очень красиво смотрелся бы на фотографиях и вписался бы в интерьер.
    • Где про закон Ома можно почитать?  Что-то новое...   На той схеме ПИДБП 17 указано как раз возможное входное 55 и выходное 50 Вольт. Мну устраивает. Интересно, повторял ли кто на такое напряжение... Ладно, сколхожу- посмотрю. Нагрев меня не волнует.
    • Всем доброго дня! Товарищи камрады,подскажите чем смыть с платы пасту флюс TR-RMA для пайки SMD,понимаю что на нём написано не требует смывки,но всё же не люблю "грязь", над газовой горелкой можно чуток подержать и всё равномерно растекается,-не устраивает. Пробовал раст. 646 и изопропиловый спирт, всё равно как положено не растворяет,остаются наплывы между ножками разъёмов.
    • У него выше было. Чем выше частота, тем лучше якобы излучает антенна или проводник контур. Я сам тогда задался вопросом, почему так происходит и даже записал где-то. Может кто-то из опытных подскажет что это было? В каком то учебном видео материале было.   
×
×
  • Create New...