2 378 сообщений в этой теме

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    224
6 часов назад, Alex сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
10 часов назад, Alex сказал:

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

1. Да, вообще-то верно, спасибо за подсказку, надо попробовать так.

2.А здесь у меня (МК PIC16f628a) получается почему-то наоборот: сначала, когда вывод настроен на вход, на линии "1" за счет подтягивающего, затем перевожу на выход, и тут появляется "0".

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    561
46 минут назад, Aleksandr1111 сказал:

сначала, когда вывод настроен на вход, на линии "1" за счет подтягивающего, затем перевожу на выход, и тут появляется "0".

Странно... Не должно быт такого...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Tulen    0

Ребят, а есть прямо для чайников настройка аппаратного SPI пиков и использование его для работы с FatFS?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    561

У Чена библиотека идёт с примерами. Там есть и под PIC пример.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
fuckir    6
43 минуты назад, Alex сказал:

У Чена библиотека идёт с примерами. Там есть и под PIC пример.

На прошлой странице уже обсуждалось  ..

  • Одобряю 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    561

Точно, не обратил внимания... :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
StationX    3

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    561

Да, мультивекторность, имеется в виду - на каждое событие свой вектор.

Поделиться сообщением


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

Подскажите, пожалуйста, по такому вопросу: для термометра на Pic12f675 и 2-х датчиках DS18B20 сначала я хочу узнать с помощью другой программы ROM-коды датчиков, а затем можно ли вручную занести их в EEPROM контроллера в окне программы Pickit2 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    224

А разве контроллер не залочен? Обычно лочат без разбора все виды памяти.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, my504 сказал:

разве контроллер не залочен? Обычно лочат без разбора все виды памяти.

Так я сам этот термометр конструирую, на чистом контроллере. В программе Pickit2 EEPROM вроде редактируется. Поэтому и спрашиваю, как тут можно сделать, если датчики подключены к одному выводу порта. Мне не обязательно, чтобы датчики можно было менять без перепрошивки контроллера.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alexeyslav    628

Обычно, для этого делают автоопределение датчиков на шине, процедура даёт серийники всех обнаруженных датчиков. А дальше уже назначай какой датчик от чего.

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Tulen    0

Ребят, мб кто-нибудь объяснит, где я косячу?

Нужно настроить аппаратный SPI (PIC18F2550) для работы с FatFS от ChaN'а.

Проинициализировал по даташиту:
 

void SPI_Initialization(void)
{
    // SSPSTAT: 
    SSPSTATbits.SMP = 1; // Input data sampled at the end of data output time
    SSPSTATbits.CKE = 0; // Transmit occurs on transition from Idle to active clock state
    
    // SSPCON1:
    SSPCON1bits.WCOL = 0;   // No collision
    SSPCON1bits.SSPEN = 1;  // Enables the serial port and configures SCK, SDO, SDI and SS as serial port pins
    SSPCON1bits.CKP = 0;    // Idle state for clock is a low level
    SSPCON1bits.SSPM = 0b0001; // SPI Master mode: clock = FOSC/16   
}

А как начать передачу - я хз...

Если сделать так (ВНЕ цикла while(1)):

    char test = 4;
    SSPBUF = test;

То SPI-debugger в Proteus (нет у меня железа под рукой) выдает мне эту четверку так, будто бы я её в цикле передаю.

И да, вот такой результат, увы, получается, если добавить пустой цикл после передачи:

Скрытый текст

image.png.fb67b354abf0fe6d355057082cb0d167.png

 

Есть ли где-то статья/статьи для совсем отбитых по работе с аппаратным SPI на пиках? Ну и настройка SPI под FatFS.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    224

А пины отконфигурированы?

RB0 (SCK)  и  RC7 (SDO) должны быть выходами (соответствующий разряд TRIS=0), а  RB1 (SDI) -  входом (TRISBbits.RB1=1).

ЗЫ. Не понимаю, какая может быть проблема с обменом со стороны мастера? Засунули байт в буфер и ждете прерывания по флагу SPI (PIR1<SSPIF>). Ну или кружитесь в пустом ожидании этого флага. Только не забывайте сбросить флаг до передачи и в прерывании, а так же установить всю цепочку разрешений прерываний (PIE1<SSPIE>, INTCON <PEIE>, INTCON<GIE>) и написать ветку обработчика для SSP.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Tulen    0

@my504 это я, конечно, сделал.)

Вот это работает на самом деле: 

void write8bit(char v)
{
   SSPBUF = v;
   while(!SSPIF);
}

Только я одного не могу понять, какой стрелочкой вход, а какой выход обозначен тут:

Скрытый текст

image.png.04ce4d68a03186d911efb6fb909e892a.png

И как адаптировать функцию void write8bit(char v) под работу с FatFS? В примерах его вообще нет такого, там UART какой-то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
my504    224

Сверху выход, а снизу вход дебаггера (то есть фиктивного слейва), я полагаю. А у МК все наоборот. Передаете осмысленную величину, а дебаггер отвечает нулями.

Что касается FatFS, то сам обмен тут сбоку. Какая разница чем передавать? Логика (абстракции) протокола не зависят от интерфейса обмена.

И не забывайте, что обмен в SPI одновременно в обе стороны, значит для чистого приема потребуется фиктивная передача. Мастер обязан сам определять момент фиктивной передачи, ибо слейв не в состоянии ничего ответить без клоков мастера.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    561
2 часа назад, Tulen сказал:

И как адаптировать функцию void write8bit(char v) под работу с FatFS?

Ещё раз повторимся. У Чена есть архив с примерами, посмотрите. Можете взять готовый для PIC24 и переделать его под себя. Вся работа с SPI находится в файле mmc_pic24f.c

Поделиться сообщением


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

Добрый день, имеется вопрос по работе предделителя для WDT, мк Pic12f683. Насколько я понял по блок-схеме в даташите, WDT работает от 31 khz и имеет свой предделитель, а после своего идет еще один предделитель, общий с таймером. Проблема в том, что предделитель WDT не работает вообще. То есть при изменении битов PS2-PS0 время переполнения WDT изменяется, однако при изменении битов в WDTCON время не меняется никак. Симулировал в proteus.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IMXO    1 250

бит SWDTEN ?

бит WDTE ?

PS протез как мне помницо берет тайминги для собаки из дополнительных настроек модели , предделитель игнорируется

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
9 hours ago, IMXO said:

бит SWDTEN ?

бит WDTE ?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Tulen    0

@Alex не нашел я примера. 

Скачивал два архива - один с сайта автора, другой по ссылке из описания видео на ютубе (там пик 18 был). Нигде не нашел описания функций:

disk_initialize

disk_readp

disk_writep 

Мне вообще в идеале две опции нужно:

1) Создать .txt 

2) Запихнуть туда данные

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
fuckir    6
5 часов назад, Tulen сказал:

@Alex не нашел я примера. 

Скачивал два архива - один с сайта автора, другой по ссылке из описания видео на ютубе (там пик 18 был). Нигде не нашел описания функций:

 

Все там есть.

Так же все разжевано у Джасио в книге по PIC24. Но это уже чисто микрочиповская библиотека 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Tulen    0

Переделал чужой пример (FatFs) с PIC18F45K22 на свой МК (PIC18F2550). Получил вот такую бяку:

error: (1098) conflicting declarations for variable "DIR" (ff.h:162)

Пробовал в файлах менять все DIR и DIR* на DIR1 и DIR1* - компилируется, но дает кучу варнингов (почему-то становятся неиспользованными функции чтения, записи и т.п.).

 

 

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

Поделиться сообщением


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

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: Михаил Савин
      Добрый день. Подскажите есть устройство на плате для регулирования дроссельной заслонки от Калины. Довольно специфическое, индивидуальная разработка, аналогов не купить. Основывается на микроконтроллере ATXMEGA128A3U AU 1651. Возможно ли скопировать залитый в него код что бы изготовить данное устройство ? Или это невозможно в принципе ?
    • Автор: Дмитрий Дмитрий
      Здравствуй, добрый Алл.
      Задумал сделать сенсорный выключатель (блокировщик) двери. Задача: при двойном прикосновении к поверхности пластикового выключателя подать на управляющий контакт +5В.
      Реализация:  Использовать контроллер емкостного сенсора AT42Q1010, микроконтроллер PIC10F200.
      Логика: при полном закрытии двери,  срабатывает геркон, подается +5В на схему. На схеме расположены емкостной контроллер AT42Q1010 и микроконтроллер PIC10F200. Емкостной контроллер при прикосновении пальца дает сигнал на цифровой выход. Этот выход соединен со входом PIC10F200. В PIC10F200 крутится программа, определяющая двойное прикосновение, с заданными промежутками времени (ориентируюсь на обычный двойной клик мыши). Как только определяет двойной клик - подает на три GPIO выхода +5В, и уходит в пустой цикл, до снятия питания.
      С одного GPIO питаются светодиоды: 2 шт, 1.8 В, 1 мА, удалены на 3 метра, подключены кабелем 3х2.5 мм2.
      Со второго GPIO активируется герконовое реле 5В, 10мА, размыкающее наружную клавишу открытия двери.
      С третьего GPIO питаются светодиоды: 2 шт, 1.8 В, 1 мА, удалены на 3 см. Они находятся в том же выключателе, где будет смонтирована схема.
      Для повторного запуска нужно открыть - закрыть дверь. Питание будет отключено-включено, программа запустится с нуля.
      Вопросы:
      1. Нормально ли цеплять светодиоды прямо к PIC контроллеру, на такую дистанцию? Потери посчитал, выходит в районе 1%. Думаю проблем быть не должно, но чувствую кощунственность решения.
      2. Нормально ли PIC контроллер отнесется к многократному хард ресету? Дверью пользуюсь 50 раз в день. Это каждый раз снятие питания, включение обратно.
      3. Какое время на загрузку ожидать от схемы? Т.е. через какое время после полного закрытия двери я смогу заблокировать дверь. Судя по документации на емкостной контроллер , оно меньше 100 мс. Микроконтроллер PIC около 30 мс (reset time). Я нигде не ошибся?  
      4. Нужно ли вставлять резистор между герконовым реле блокировки двери и микроконтроллером? Расстояние от микроконтроллера до реле около 2 метров. Насколько я понимаю, желательно использовать токоограничительный резистор около 1 кОм, но методика точного расчета номинала мне не известна.
      5. Нужно ли вставлять резистор между дальними свтодиодами и контроллером? Ближним и контроллером? Для понижения напряжения я планирую в обоих случаях использовать резисторы 1.5кОм и последовательно подключать два диода 1.8 В,  1 ма. Этого достаточно? Диоды и резистор располагаются на крышке выключателя.
      6. Для подбора конденсатора нужной емкости для сенсора прикосновения хочу использовать макетную плату (такая пластиковая, с много рядов отверстий), и кучку кондеров из чип и дипа, около рекомендованной емкости.  К ним припаять проводки и по очереди проверять, каждый раз скидывая питания. Это верная методика или есть способ лучше?
      7. Имел ли кто дело с таким емкостным контроллером? Насколько plug and play решение? На внутреннюю часть выключателя планирую наклеить медную фольгу, номиналы конденсаторов и резистора подобрать на столе. Потом все собрать на печатной плате, смонтировать в корпус выключателя. Не уплывет ли со временем точность такого сенсора? Может быть на плате предусмотреть какие-то элементы для подстройки в будущем?
      8. Я выбрал самый младший из PIC  контроллеров. Могу ли я столкнуться с нехваткой памяти в своей задаче? Портов хватает. Может быть я не учел какой-то еще ресурс, которого не хватит для выполнения этой задачи?
      Даташит на емкостной контроллер  https://ru.mouser.com/datasheet/2/268/40001946A-1145216.pdf
      Даташит на PIC  контроллер http://ww1.microchip.com/downloads/en/DeviceDoc/40001239F.pdf
      С уважением,
      Дмитрий.
    • Автор: ficus216
      Здравствуйте всем. Такая проблема. Дорожка работала, при беге в максим. 10км/ч резко прибавила скорость до 12 наверное ( хотя только до 10 максимум она разгоняется)
      попытался убавить скорость но ничего не срабатывало, можно только переключать между табло "каллории" "скорость" "расстояние""время" ничего убавить нельзя. Дальше вытаскиваю магнит (обычно дорожка автоматически выключается после этого) в этом случае нет, она дальше работала на полной скорости.
      Снизу находится общий включатель, раньше если его вкл то пока старт не нажмешь ничего не будет. а сейчас нажимаю этот вкл снизу и сразу на 12шке херачит.
      Тестором все прозвонил, сгорел микропроцессор я так понимаю. В магзиине мне сказали. что только если на али заказать. Название сгоревшего sonyx sn8p2624kb на али нет в точности с таким названием. прилагаю ссылку
      можно ли заказать этот или любой другой с другим названием ? что делать дальше ? не нужно потом это все прошивать ? и как ?https://clck.ru/DQhDh



    • Автор: Сибирский кот
      Здравствуйте! Мой знакомый отдал мне по ненадобности пульты для заправочной станции модели "Сапсан". В одном пульте стоял микроконтроллер ATMEL AT89S51-24PU и в другом-AT89C51-24PU. Искал схемы в интернете,но ничего не нашел,кроме даташиты. Не знаю,что делать с этими микроконтроллерами-пустить в дело или в утиль. Сможете подсказать?
    • Автор: Oleg Borisov
      Добрый день. Для исследование мне необходимо разработать и собрать прибор который анализирует температуру и влажности среды.
       
      Прибор состоит из следующих блоков:
      1. Выносной датчик температуры
      2. Выносной датчик влажности
      3. Передатчик Bluetooth
      4. Батарея с возможностью подзарядки
      5. Корпус
      6. Мобильное программное обеспечение (Андройд)

      Устройство небольшого размера закрепляется на объекте и передает показания датчиков по средствам Bluetooth на мобильное устройство с предустановленным программным обеспечением.
      В приложении примерная визуализация прибора.
      Оплата договорная!