Перейти к содержанию

crazz

Рекомендуемые сообщения

Да, тупанул что-то... нахрапом не получилось, вот и огорчился :)

Вчера немного подумал и справился. По крайней мере в протеусе все работает. Думаю и в железе должно заработать.

Но появился другой вопрос.

Можно ли "собрать" любые линии в любой последовательности любых портов в один "виртуальный порт"?

Например в массив. Или только битовые маски?

Я конечно догадываюсь что нельзя, но хочется уточнить

Ссылка на комментарий
Поделиться на другие сайты

57 минут назад, vksam сказал:

Можно ли "собрать" любые линии в любой последовательности любых портов в один "виртуальный порт"?

можно написать функцию которая будет принимать байт-значение и номер(букву) виртуального порта в который выводится это значение, это если порт только для вывода,

также можно написать функцию для управления направлением(ввод-вывод) этого виртуального порта и т.д.

Можно даже сделать что бы эти виртуальные порты можно было программно конфигурировать-мапить на произвольные биты произвольных-действительных портов, НО:

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

Изменено пользователем ruhi
очепятка

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, vksam сказал:

Можно ли "собрать" любые линии в любой последовательности любых портов в один "виртуальный порт"?

можно, используя C++

http://easyelectronics.ru/rabota-s-portami-vvoda-vyvoda-mikrokontrollerov-na-si.html

Ссылка на комментарий
Поделиться на другие сайты

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

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

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

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

1 час назад, vksam сказал:

Можно ли "собрать" любые линии в любой последовательности любых портов в один "виртуальный порт"?

Например в массив. Или только битовые маски?

Но правильный способ (если получится понять и применить), вот такие дефайны (кто то от Атмела придумал - я проверил - работает!):

#define TPASTE2( a, b )                            a##b
#define ATPASTE2( a, b )                           TPASTE2( a, b )

#define MacroPuLineClear(portN, pinN)            TPASTE2(PORT, portN) &= ~_BV(pinN);
#define MacroPuLineSet(portN, pinN)                TPASTE2(PORT, portN) |= _BV(pinN);
#define MacroPuLineInput(portN, pinN)            TPASTE2(DDR, portN) &= ~_BV(pinN);
#define MacroPuLineOutput(portN, pinN)            TPASTE2(DDR, portN) |= _BV(pinN);
#define MacroPuLineValue(portN, pinN)            TPASTE2(PIN, portN) & _BV(pinN)
#define MacroPuLineBitVal(portN, pinN)            _BV(pinN)

#define MacroUnroll(macro, x, y)    macro(x, y)
#define MacroPuLineClear2(portPinN)                    MacroUnroll(MacroPuLineClear, portPinN)
#define MacroPuLineSet2(portPinN)                    MacroUnroll(MacroPuLineSet, portPinN)
#define MacroPuLineInput2(portPinN)                    MacroUnroll(MacroPuLineInput, portPinN)
#define MacroPuLineOutput2(portPinN)                MacroUnroll(MacroPuLineOutput, portPinN)
#define MacroPuLineValue2(portPinN)                    MacroUnroll(MacroPuLineValue, portPinN)
#define MacroPuLineBitVal2(portPinN)                MacroUnroll(MacroPuLineBitVal, portPinN)

-------------------------------------------------------------------------------

тогда можно вот так объявить отдельные ноги:

#define PuPShLine                    B, 6
#define PuAmFmLine                    B, 7
//#define Pu833_25Line                 D, 4
#define PuIn833_25Line                 C, 6

#define PuTakt1Line                 E, 2

#define        PurZuPort D, 1

------------------------------------------------------------------------

и вот так вот их использовать:

                        if(tmp)
                        {
                            MacroPuLineClear2(PuDataLine)
                            MacroPuLineOutput2(PuDataLine)
                            ModePU = MacroPuLineBitVal2(RSCntrlPin);//_BV(3);//
//                            FreqToCodes();
                        }
                        else
                        {
                            MacroPuLineClear2(Band833_25Pin)
//                            MacroPuLineSet2(PuDataLine)
                            MacroPuLineInput2(PuDataLine)
                            ModePU = 0;
                        }

Изменено пользователем ruhi

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

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

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

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

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

1 час назад, vksam сказал:

Можно ли "собрать" любые линии в любой последовательности любых портов в один "виртуальный порт"?

Вообще, этот вопрос из области возможностей языка программирования и "Писателя" ("Собирателя").
Вот есть у вас две байтовые переменные. Что Вы с ними сможете сделать ? То и с регистрами портов. А как Вы ими уже будете управлять - дело тридесятое.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, vksam сказал:

Можно ли "собрать" любые линии в любой последовательности любых портов в один "виртуальный порт"?

маленький оффтоп (сам придумал):

можно все! Но чем больше можно, тем больше нельзя! :)

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

МК нестабильно работает (внутреннее тактирование). Когда питаю от БП на 7805, то для запуска требуется приблизить руку. При питании от кроны через 7805 МК запускается, но реагирует на приближение руки глюками. Вероятно, наводки? Статическое напряжение? Как бороться?

Ссылка на комментарий
Поделиться на другие сайты

Схему, программу.... как это реализовано на конкретной плате. Без этого можно называть наугад миллион причин.

Вывод сброса подтянут?

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Вывод сброса подтягивал на +5 В, ставил замедляющую цепочку, ставил _MCLRE_OFF.

Что касается схемы:  просто МК с керамическим конденсатором 0,1 мкФ у ног питания. Не запускается банальный ЖКИ 1602А. Народ вангует на неправильную инициализацию. Пробовал написать свою по алгоритму из паспорта или взять готовую и перекроить на свои порты. Не заработало. Потом взял и просто подключил светодиод через резистор проверить, не угробил ли микруху экспериментами. И он не запускается, как ни странно.Ни на бредборде, ни на макетке с пайкой.

Ссылка на комментарий
Поделиться на другие сайты

Ну так с этого и надо начинать. Не тупо выполнять магический ритуал, а на каждом шагу проверять есть ли ожидаемый результат. Я пока за всю жизнь ни одного контроллера не угробил, разве что фигачить в него 5-миллиметровыми искрами. Проверь монтаж, посмотри осциллографом что за фигня творится по питанию, есть ли генерация тактового сигнала, пусти тестовую передачу управляющего слова на индикатор, со счетчиком в качестве аргумента например...

Отдельно касаемо программатора - не выдаёт ли он ошибок, проходит ли сверка только что прошитого, сверь с даташитом по слову конфигурации правильно ли ты выставил биты конфигурации и т.д.

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

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Всем привет!

Делаю простейший термометр на МК Pic16f628a и DS18b20. Программу пишу в MikroC, но решил написать собственные функции для сброса, передачи комманд и приема данных с датчика. Пока смотрю только в Протеусе, что получается. И вот не получается сброс. Когда в МК заливаю откомпилированный файл из прилагаемой библиотеки, датчик отвечает на сброс. По моей программе - он просто не отвечает, на линии высокий уровень, как будто датчика вообще нет,смотрел осциллографом в том же Протеусе, хотя схема та же самая. Хотел бы спросить - правильно ли я перенастраиваю вывод порта с выхода на вход и обратно?

Функция сброса:

 #define pin_dir TRISA.F0
 ...

void ds_init() 
 {  //функция инициализации датчика ds18
  pin_dir = 0; //вывод на выход
  pin_ds = 1;
  Delay_us(100);
  pin_ds = 0;
  Delay_us(600);
  
  pin_dir = 1;
  Delay_us(600);
 }

По имеющейся в mikroC библиотеке сброс равен 480 мкс, датчик, как и положено, ждет 30-50 мкс, затем сам отвечает. У меня же никак не получается...:(

Изменено пользователем Aleksandr1111
Ссылка на комментарий
Поделиться на другие сайты

//********************************************//
//* Эта подпрограмма устанавливает линию ДАЛЛАССа
//*  на  вывод и устанавливает на ней "лог0" 
//********************************************//
void Dout_Low (void)
{
	PORTDAL&=~(1<<DALLAS);
	TRISDAL&=~(1<<DALLAS);
	DelayUs(1);

}	
//********************************************//
//*Эта подпрограмма устанавливает линию ДАЛЛАССа
//*на  ввод, продавливает высоким уровнем щину
//*и затем переводит линию на прием.
//*внешний резистор установливает на линии "лог1"
//*********************************************//
void Dout_High (void)
{
   PORTDAL|=(1<<DALLAS);
    DelayUs(4);
	TRISDAL|=(1<<DALLAS);


//*************************************************//
//*
//*
//*************************************************//
void Reset_1ware (void)
{   
	GIE=0;
    Dout_Low ();
    DelayUs(480);
    Dout_High ();
    DelayUs(100);
    if(PINDAL&(1<<DALLAS))
    {
	  erorWare.reset=1;  
    }
     else
     {
	   erorWare.reset=0;
     }
     GIE=1;
     DelayUs(300);    
    
}

 

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, IMXO сказал:

1<<DALLAS

Прошу прощения за дилетантский вопрос, что означает это выражение? PORTDAL, TRISDAL - это вы переобозначали соответствующую линию порта, к которому подключен DS ? А под DALLAS что вы подразумеваете?

Изменено пользователем Aleksandr1111
Ссылка на комментарий
Поделиться на другие сайты

#define	DALLAS 0
#define	PORTDAL  PORTA
#define TRISDAL  TRISA
#define	PINDAL   PORTA

номер бита порта , куда подключен датчик,

PORTDAL&=~(1<<DALLAS);  - означает сбросить бит0 портаА

PORTDAL|=(1<<DALLAS) - установить бит0 портаА

PINDAL&(1<<DALLAS) - прочитать бит0 портаА

Ссылка на комментарий
Поделиться на другие сайты

Ребят, есть у кого готовая библиотека для работы с SD картой через SPI?

Под готовой я понимаю следующее: 

Вкинуть библиотеку в проект и указать выводы, наличие функций инициализации, записи в файл и создания файла;

Изменено пользователем Tulen

Flashback!

Ссылка на комментарий
Поделиться на другие сайты

presented by ChaN  Там под любой "камень" можно подобрать (включая авр и тд)

Можно работать по библиотекам Джасио. У него тож все разобрано.

 

В поисках работы..

Looking for job

Ссылка на комментарий
Поделиться на другие сайты

Наконец, заработал мой простейший термометр на DS18b20. Дело было в следующем. Сначала вывод работает на вход, и там присутствует "1" за счет подтягивающего резистора. Затем его надо перевести на выход, и чтобы там непрерывно присутствовал высокий уровень. Когда же я писал TRISA.F0 = 0 //настройка на выход,

 на выводе сначала устанавливается "0", затем уже  писал PORTA.F0 = 1, и, по осциллографу получались ненужные врезки " нулей", и датчик не понимал команды.

Потом решил попробовать сначала PORTA.F0 = 1, затем TRISA.F0 = 0 , тогда всё получилось, как надо, и датчик заработал. Но вопрос, насколько правильно так делать? Хочется все-таки, чтоб все было грамотно сделано.

 

Изменено пользователем Aleksandr1111
Ссылка на комментарий
Поделиться на другие сайты

7 минут назад, Aleksandr1111 сказал:

Но вопрос, насколько правильно так делать?

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

в ДШ про это есть....

Ссылка на комментарий
Поделиться на другие сайты

В 21.04.2018 в 10:46, Aleksandr1111 сказал:

Потом решил попробовать сначала PORTA.F0 = 1, затем TRISA.F0 = 0 , тогда всё получилось, как надо, и датчик заработал. Но вопрос, насколько правильно так делать?

1. Совершенно не понятно, зачем писать в порт единицу, при настройке порта на выход, если эта самая единица осуществляется за счёт внешнего сопротивления ? Не проще, для установки лог. 1, просто настроить порт на вход, а лог. 1 осуществится "сам по себе", за счёт pull-up сопротивления ?
2. Запись значения (любого) в порт не гарантирует вывод этого значения после изменения направления порта. В порт выведется то значение, которое реально было внешне на входе до изменения направления. Это касается только МК, не имеющих спец. защёлки (LATx).

Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, Alex сказал:

1. Совершенно не понятно, зачем писать в порт единицу

Для обмена не требуется. Рекомендуется для паразитного питания.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...