Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

Re: Програмирование pic на СИ.

Чт янв 20, 2022 13:28:56

Вам UART что-ли нужен ? Или что ?

PS: По 3 дня отвечаете. Классный диалог получается. :)))

Re: Програмирование pic на СИ.

Сб янв 22, 2022 10:44:03

Нужен K-Line, он похож на UART, только там напряжение от 0 до 12 вольт


Вот получилось отправить байт 01010101 через ножку 21
Спойлер
Код:
/* Main.c file generated by New Project wizard
 *
 * Created:   Вт янв 18 2022
 * Processor: PIC18F25K80
 * Compiler:  MPLAB XC8
 */

#include <xc.h>
#define _XTAL_FREQ 4000000
#define Bit_out LATBbits.LATB0            //  Bit_out = 21-нога
void main(void)
 {   
   TRISBbits.TRISB0 = 0;   //  21-нога  out
 
    int i;                                        // переменная      i
   char byte =  0x55;      // переменная     byte

      while (1)
      {
                Delay10TCYx(1000);        //  Пауза    
    Bit_out   = 0;                                      //  СТАРТ
                Delay10TCYx(3);        //  СТАРТ  пауза 9600 бод
              for(char i = 0;  i  <  8; i ++)              // увеличить переменную i на 1 
   {
                  Delay10TCYx(12);         //   пауза 9600 бод
     Bit_out = (byte  >>  i) & 1;               // вытолкнуть биты на ножку 21 (RB0)     
        }
               Delay10TCYx(18);        //  СТОП   пауза 9600 бод    
    Bit_out  = 1;                                    //  СТОП

     }
 }
Вложения
21_out_01010101.png
(22.11 KiB) Скачиваний: 88

Re: Програмирование pic на СИ.

Сб янв 22, 2022 17:52:22

Пфффф. Обычный UART. Зачем ногодрыг, если есть аппаратный ?

Re: Програмирование pic на СИ.

Сб янв 22, 2022 21:45:00

K-Line однопроводная, в основном применяется в автомобильной промышленности.
Вложения
UART_ЭБУ.GIF
(52.94 KiB) Скачиваний: 108

Re: Програмирование pic на СИ.

Вс янв 23, 2022 12:57:51

В это проце есть 2 аппаратных UART'а. Зачем извращение с ногодрыгом ?

Re: Програмирование pic на СИ.

Вс янв 23, 2022 21:06:42

адаптер-ELM327 - что имеем, то имеем (500 рублей у китайцев)

Re: Програмирование pic на СИ.

Пн янв 24, 2022 00:03:09

Повесить светодиоды на ноги аппаратного UART и вывести UART на левые ноги - это верх мазохизма :facepalm:

Re: Програмирование pic на СИ.

Пн янв 24, 2022 05:03:31

Нее, Алекс... Тут очень глубоко зарытая идея защиты от копирования. Ибо всякий обнаруживший такой мазохизм немедля бросит затею реверса. Быть мазохистом - это крайне обидно для настоящего посона. )))

Re: Програмирование pic на СИ.

Пн янв 24, 2022 16:49:20

В CCS для "слабых" PICs uint64_t нет. Есть проверенный метод работы с uint64_t? (Метод может быть не быстрым).

Мне примерно нужно "масштабировать" дроби - целочисленный делитель INT, числитель FRAC и знаменатель MOD. Числа большие и достигают "вершины" uint32_t. Число 4095 может быть для другой случай и 1048575. Разделить напр. 1000/1000 в данном случае быть не должно - теряю точность "внизу" [Hz].

В Arduino для FRAC/MOD использую это, но в CCS нет uint64_t:
Код:
uint32_t scaling_fraction(uint32_t num, uint32_t denum) {
  uint64_t u64 = (uint64_t)num;

  u64 = u64 * 4095 / denum;
  num = (uint32_t)u64;
  return num;

float по нескольким причинам я избегаю использовать :).
А float работает (если не заменю с чем-то другим методом).

Пример:
uint32_t a = 49999374;
uint32_t b = 99998750;
=> a / b = 2047 / 4095
Последний раз редактировалось veso74 Пн янв 24, 2022 17:13:47, всего редактировалось 2 раз(а).

Re: Програмирование pic на СИ.

Пн янв 24, 2022 17:09:28

Есть проверенный метод работы с uint64_t?.

А в чем может быть проблема? Обычная арифметика и извлечение квадратного корня не имеют вообще никаких ограничений по стандартной "школьной" методике.
Вы столбиком арифметику + - и * делать умеете? Это оно и есть. Можете посмотреть как делается 32-разрядная арифметика и воспроизвести ее в 64 разрядах. Деление и извлечение корня я предпочитаю делать итерационным последовательным приближением. Хотя нужно бы посчитать, возможно Ньютон-Рафсон и побыстрее будет для 8 разрядов.

Re: Програмирование pic на СИ.

Сб янв 29, 2022 13:32:20

https://yandex.ru/video/preview/?text=% ... 5369862835
Помогите кто сможет
Делаю все полностью одинаково , без ошибок , там часы идут у меня
00:00:01`и все ! Не получается что то
Спасибо !

Re: Програмирование pic на СИ.

Вс янв 30, 2022 13:42:26

Всем спасибо , вопрос закрыт !

Re: Програмирование pic на СИ.

Ср фев 02, 2022 10:12:36

Вот сигнал от UART и от "ногадрыга"
Видно, что "ногадрыга" не точно делает паузы в бите
Придётся изучать таймер TMR2, чтобы получить стандарт 104мкс
Спойлер
Код:
//----------
#include <p18F25K80.h>                             // для настройки под выбранный контроллер

void init(void)
{
// настройка генератора
// в регистре конфигурации выбран внешний тактовый генератор XT,  умножитель выключен
// в OSCCON выбираем 4 мГц  основной генератор
OSCTUNE = 0b00000000;
         //               ||++++++---TUN<5:0>: 000000 = Центральная частота; Быстрый Осциллятор RC работает на калиброванной частоте
       //               |+---------PLLEN: Frequency Multiplier 4xPLL     0 = PLL выключен
    //               +----------: Internal Oscillator Low-Frequency

 OSCCON = 0b01010000;             // 101 = HF-INTOSC/4 output frequency is used (4 MHz)
           //           ||||||++---SCS<1:0>: тактовая частота берется с основного модуля. основной генератор (работа через PLL  должен быть 00)
         //              |||||+-----HFIOFS: бит - Частота стабильна
       //              ||||+------OSTS: бит статуса (какой выбран генератор)
      //              |+++-------IRCF<2:0>: выбор частоты тактового генератора
     //              +----------: функция генератора в режиме сна. SPLLEN умножитель 1-включен
OSCCON2 = 0b00000000;
         //               |||||||+---LFIOFS:бит стабильной частоты LFINTOSC режима
        //               ||||||+----MFIOFS:бит стабильной частоты MFINTOSC режима
       //               |||||+-----PRISD:бит отключения главного (внешнего) генератора
      //               ||||+------SOSCGO: бит контроля запуска вторичного (внешнего) генератора
      //               |||+-------MFIOSEL: бит переключения источника чатоты для MFINTOSC режима
     //               ||+--------Unimplemented: Read as ‘0’.
    //                |+---------SOSCRUN: бит статуса источника частоты от вторичного генератора
    //                +----------: бит статуса получения частоты от умножителя тактовой чатоты

//----------
                   // настройка портов
     ADCON1=1;                                                    //  Отключаем все аналоговые буфера
     ADCON1=0b01111111;                                 //  Отключаем все аналоговые буфера 
   TRISBbits.TRISB0 = 0;                   // 21-нога  out
 //   LATBbits.LATB0 = 1;                  // установить на B0 плюс
                  // UART
      TRISCbits.TRISC6 = 0;   // TX output
      TRISCbits.TRISC7 = 1;   // RX input

                                    // настройка Open1USART
  Open1USART ( USART_TX_INT_OFF &               // Прерывание передачи OFF
                     USART_RX_INT_ON &                // Получать прерывание ON
                     USART_ASYNCH_MODE &        // Асинхронный режим
                     USART_EIGHT_BIT &                 // 8-bit Передача / прием
                     USART_CONT_RX &                 // Непрерывный прием
                     USART_BRGH_HIGH,               // Высокая скорость передачи бода
                                         SPBRG = 25 );           //  ((4000000 : 16) : 9600)  - 1 = 25,04 Погрешность скорости обмена  9600

}


#define Bit_out LATBbits.LATB0             // Bit_out = 21-нога
void main(void)
 {
    init();         //  Инициализировать функцию  void init(void)
   TRISBbits.TRISB0 = 0;                   // 21-нога  out
   int i;                                               // переменная      i
   char byte =   0x55;                      // переменная     byte    0b01010101; 
   char    txbyte = 0x55;

   
   while (1)
   
  if (TXSTAbits.TRMT == 1)           //  проверит UART занят передачей или нет
    {
     
 
       while(Busy1USART());          //  Ждем пока освободится модуль иначе будут прострелы
 
       {
       Write1USART(txbyte);            //  Пишем наш байт
       }
       Delay10TCYx(10);
    }
  else
    {
                Delay10TCYx(50);                //  Пауза   
    Bit_out   = 0;                                      //  СТАРТ
               Delay10TCYx(4);                   //  СТАРТ  пауза 9600 бод
              for(char i = 0;  i  <  8; i ++)              // увеличить переменную i на 1
   {
                 Delay10TCYx(4);                        // пауза 9600 бод
     Bit_out = (byte  >>  i) & 1;                       // вытолкнуть биты на ножку 21 (RB0)     
        }
               Delay10TCYx(10);                         //  СТОП   пауза 9600 бод   
    Bit_out  = 1;                                               //  СТОП

     }
   
 }
Вложения
bit_UART-out_21pin-out_.png
(46.58 KiB) Скачиваний: 87

Re: Програмирование pic на СИ.

Ср фев 02, 2022 11:30:19

cxem писал(а):Придётся изучать таймер TMR2
Он в этих процах элементарнейший. Там изучать то нечего.
Стоит только взглянуть на картинку :
СпойлерИзображение
2022-02-02_11-27-03.png
(20.73 KiB) Скачиваний: 31
и всё станет понятно.
Вся его настройка сводится к конфигурировании одного регистра T2CON.

Re: Програмирование pic на СИ.

Ср фев 02, 2022 13:46:55

я, конечно, не знаток PIC-ов, но сдается мне, софтовый UART не стоит того, чтобы мусолить его столько времени... более того, таймер для временных интервалов битов там не нужен, т.е. не требуется какая-то "особая" точность. проблема явно где-то в другой области кроется...

Re: Програмирование pic на СИ.

Ср фев 02, 2022 14:03:23

В интернете нахожу только примеры заточенные на курсовые: арифметика и алгебра.
Примеров по K-Line нет.
Почему на 2 транзисторах работает, как автомат Калашников
А на PIC18F25K80 не хочет.
Вложения
K-Line_Rx_Tx__1.GIF
(48.84 KiB) Скачиваний: 85

Re: Програмирование pic на СИ.

Ср фев 02, 2022 14:50:06

cxem писал(а):Почему на 2 транзисторах работает, как автомат Калашников
А на PIC18F25K80 не хочет.
может, потому, что на 2 транзисторах сигнал RX инвертируется транзистором, а в варианте "пик" - вопрос? возможно, я что-то упустил из предыдущего, но верно ли я понял, что вы хотите один аппаратный USART использовать для связи с компьютером, а софтовый - для К-линии, причем с возможностью трансляции в К-линию как "своих" данных из МК, так и тех, что присылает комп? ну и в обратную сторону тоже? типа аппаратного сниффера К-линии изобретаете что-то?

Re: Програмирование pic на СИ.

Ср фев 02, 2022 21:31:41

Изучаю K-Line:
1.Протокол связи с ЭБУ
2.Протокол данных
Обидно за PIC18F25K80, который проигрывает 2 транзисторам
1.Скорость связи с ЭБУ слабая: Если даже UART поднять до 115200 бод
2.Почему-то говорят, что он не умеет отправлять в ЭБУ байты длиннее 8 байт
один аппаратный USART использовать для связи с компьютером, а софтовый - для К-линии, причем с возможностью трансляции в К-линию как "своих" данных из МК, так и тех, что присылает комп?

- Да
Специфика работы с ЭБУ:
1. Скорость связи своя(обычно 10400 бод)
2. Пробуждение ЭБУ(обычно импульс 25/25мс)

Re: Програмирование pic на СИ.

Ср фев 02, 2022 23:20:00

:facepalm:
Спойлер

Re: Програмирование pic на СИ.

Ср фев 02, 2022 23:43:32

cxem писал(а):1. Скорость связи своя(обычно 10400 бод)
2. Пробуждение ЭБУ(обычно импульс 25/25мс)
формировать программно сигналы K-Line на скорости чуть больше, чем 9600 - имхо, это не может быть проблемой. похуже с приёмом, но, предполагаю, и тут не принципиально. я в PIC-ах вообще ни ухом ни рылом, не могу утверждать, что все получится... только предполагаю по аналогии с AVR, что проблем быть не должно никаких серьёзных.

но на вашем месте я не стал бы заморачиваться с PIC-ом вообще, а просто сниффил бы на компьютере обмен через СОМ-порт, и видел бы то же самое.
Ответить