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

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

Сб окт 30, 2021 12:12:09

Переключение светодиодов PIC18F25K80
Закоментируйте строки, а то Гугл не находит
Что эта программа делает ?
Спойлер
Код:
#include <p18cxxx.h>   // тип процессора
#include <delays.h>    // функции задержек
#include <usart.h>
#include <timers.h>
#pragma config FOSC=HS1     // Кварц заменить на 20МГц
#pragma config SOSCSEL=DIG  // Low Power SOSC circuit selected
#pragma config PLLCFG=ON    // умножитель включен
#pragma config FCMEN=OFF    // Отказоустойчивый Монитор Генератора отключен
#pragma config IESO=OFF     // режим переключения генераторов отключен
#pragma config PWRTEN=OFF   // таймер задержки влючения по подаче питания включен
#pragma config BOREN=OFF    // сброс по понижению питания влючен
#pragma config BORV=3       // уровень сброса 3 вольта
#pragma config WDTEN=OFF    // сторожевой таймер
#pragma config WDTPS=32768  // предделитель сторожевого таймера
#pragma config MCLRE=OFF    // MCLRE выключен
#pragma config STVREN=ON    // сброс по переполнению стека отключен
#pragma config XINST=OFF    // поддержка расширенных команд отключена
#pragma config CP0=OFF      // Block 0 (000640-003FFFh) запись разрешена
#pragma config CP1=OFF      // Block 1 (004000-007FFFh) запись разрешена
#pragma config CPB=OFF      // Boot block (000000-0007FFh) запись разрешена
#pragma config CPD=OFF      // Data EEPROM запись разрешена
#pragma config WRT0=OFF     // Block 0 (000640-003FFFh) запись разрешена
#pragma config WRT1=OFF     // Block 1 (004000-007FFFh) запись разрешена
#pragma config WRTC=OFF     // Регистр конфигурации - запись разрешена
#pragma config WRTB=OFF     // Блок загрузки (000000-0007FFh)- запись разрешена
#pragma config WRTD=OFF     // Запись в EEPROM - запись разрешена
#pragma config EBTR0=OFF    // Block 0 (000640-003FFFh) табличное чтение - разрешено
#pragma config EBTR1=OFF    // Block 1 (004000-007FFFh) табличное чтение - разрешено
//*********************************************************
#pragma udata
char inByte=0;
char flag=0;
#pragma code
void MyHighInt(void);
#pragma interrupt MyHighInt
#pragma code high_vector=0x08
void high_vector(void){
    _asm GOTO MyHighInt _endasm
}
//*********************************************************
#pragma code                // говорит компилятору что сделать
void Init_OSC_USART(void);
void SetInterrupt(void);
void main(void)            // функция, которая не ожидает аргументов
{
    ADCON1=0x0f;           // Настроить контакты как цифровые
    TRISB=0;               // 0b00010000 направление работы ножек порта В 1=Input,0=Output
    PORTB=0b01010000;      // на ножках TB4 и TB6 установить =1
    Init_OSC_USART();      // включить порт  USART
    SetInterrupt();        // прерывание
    while(1)               // просто бесконечный цикл, который ничего не делает
    {
    }
}
void MyHighInt(void)
{
    if(PIR1bits.RC1IF)
    {
        inByte=RCREG1;
        while(!TXSTA1bits.TRMT);
        putc1USART(inByte);
        if(inByte==0x0a)
        {
            if(!flag)
                LATBbits.LATB6^=1;   // led
            else
                LATBbits.LATB4^=1;  // led
            flag^=1;
        }
    }
}
void SetInterrupt(void)
{
    RCONbits.IPEN=0;    // Приоритет
    INTCONbits.GIE=1;   // включить прерывание
    PIE1bits.RC1IE=1;   // включить уровни приоритета
    INTCONbits.PEIE=1;
}
void Init_OSC_USART(void)
{
    Open1USART( USART_TX_INT_OFF&USART_RX_INT_ON&USART_ASYNCH_MODE
        &USART_EIGHT_BIT &USART_CONT_RX &USART_BRGH_HIGH,129);//9600
}

Вложения
PIC18F25K80_HEX.GIF
(26.03 KiB) Скачиваний: 140

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

Сб дек 04, 2021 14:07:26

Как правильно продублировать сигнал на RB0 с RC6 ?
Код:
void main(void)
{
   { 
      PORTBbits.RB0 = !PORTCbits.RC6;
      PORTCbits.RC7 = !PORTCbits.RC1;
   }
     
}

K-Line_1.GIF
(36.77 KiB) Скачиваний: 142

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

Вс дек 05, 2021 02:31:34

cxem,
1. согласно изображенной схеме светодиоды никогда не загораются :), поверните их электроды
2. пересчитайте делитель напряжения на входе RA0, U не более Vdd

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

Вс дек 05, 2021 18:18:56

в Протеусе сигнал показал минимальные погрешности:

Код:
while( 1 )                                    //  зацикливание функции
{
if(PORTCbits.RC7 == 0)             //  если на RC7 равно 0
PORTBbits.RB0 = 1;                  //  установить на RB0   1
else                                          //  иначе
PORTBbits.RB0 = 0;               //  установить на RB0   0
if(PORTCbits.RC1 == 0)        //  если на RC1 равно 0
PORTCbits.RC6 = 0;            //  установить на RB6  0
else                                         //  иначе
PORTCbits.RC6 = 1;        //  установить на RB6  1
}

Протеус.png
(6.77 KiB) Скачиваний: 91

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

Ср янв 12, 2022 21:59:56

натолкните на мысль - можно ли на pic10f202 реализовать сигнал на пассивный зуммер 2000гц пин (G0) с одновременным отслеживанием замыканий на пин(G3). Можно переиграть пины.

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

Ср янв 12, 2022 22:13:02

натолкните на мысль

Можно, конечно. Только что будет результатом "отслеживания"?

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

Ср янв 12, 2022 23:25:32

натолкните на мысль

Можно, конечно. Только что будет результатом "отслеживания"?

сон!
при замыкании на землю пинаG3 на землю -сон

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

Чт янв 13, 2022 00:44:43

А будить как?

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

Чт янв 13, 2022 00:51:55

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

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

Чт янв 13, 2022 01:49:55

oleg_g писал(а):остался вопрос только с зумером и отслеживанием пина в это же время
Вам же ответили :
Можно, конечно.

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

Чт янв 13, 2022 03:47:43

сон!
при замыкании на землю пина G3 на землю -сон

GPIO3 - это MCLR, поэтому его не надо отслеживать. Ноль на нем уведет МК в ресет и будет там удерживать. Это идентично сну по потреблению.
Таким образом, нужно только дергать ногой пьез.
Ну и чтобы пьез звучал громче и для упрощения схемотехники, нужно оный пьез включить между двух GPIO и дергать их противофазно.

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

Чт янв 13, 2022 11:43:46

сон!
при замыкании на землю пина G3 на землю -сон

GPIO3 - это MCLR, поэтому его не надо отслеживать. Ноль на нем уведет МК в ресет и будет там удерживать. Это идентично сну по потреблению.
Таким образом, нужно только дергать ногой пьез.
Ну и чтобы пьез звучал громче и для упрощения схемотехники, нужно оный пьез включить между двух GPIO и дергать их противофазно.

спасибо , попробую.

Добавлено after 1 hour 25 minutes 19 seconds:
еще вопрос - позволяет ли микроконтроллер реализовать такое типа
tone on
.......
выполнение других операций во время пищания
....
tone off
если да , то как?

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

Чт янв 13, 2022 11:54:15

Зачем? Кто будет это on/off реализовывать? Есть еще какие то точки управления?
Я так и не понял общий список задач.

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

Чт янв 13, 2022 15:51:11

В выбранном микроконтроллере есть один таймер (TMR0) без прерывания по переполнению.
Возможности генерации сигнала (в сл: 2 kHz) либо прямое управление пинах и удержание/пауза, либо RTOS (что в данном случае: одно и то же). Некоторые простые операции/действия типа проверки кнопок и т.д. можно выполнить (чуть "притормозит" -> снизит частоту), а посложнее - образно ожидаются нестыковки генерации и др.

Задача рядом с кнопкой выполнима: кнопка с включением/выключением генерации, без сна (для теста, пока алг. такой). См. симуляция ниже: PIC10F202, ROM used: 70/512 (14%), RAM used: 8/24 (33%). В памяти есть еще много места, и это на "языке высокого уровня".

Дайте подробный пример того, что вы подразумеваете под: "выполнение других операций во время пищания". По крайней мере, опишите, что это за устройство, что будет делать пользователь и что от микроконтролера ожидаете. Вообще без подробного задания, правильно не ответишь.
(частично пользуюсь переводчиком БГ-РУ).
Вложения
10f202_2_khz.jpg
(195.31 KiB) Скачиваний: 74

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

Чт янв 13, 2022 16:16:58

ТС желает локально изменить УЖЕ ИМЕЮЩИЙСЯ КОД, чтобы вставить озвученную тут задачу. Проблема в том, что имеющийся код работает на блокирующих задержках.
Учитывая, что эта архитектура не имеет прерываний и аппаратного выхода таймера, никакая простая модификация кода работать не будет. Нужно писать код заново. Все это я ему объяснил в личке.
ТС решил взять паузу на подумать и решить что с этим делать.
Надеюсь, что ТС не обидится за озвученное мной...

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

Сб янв 15, 2022 17:44:22

байт получил через UART, а как его вытолкнуть через ножку 21 (RB0) ?
Код:
#define KLINE_OUT LATBbits.LATB0
void gets1USART()
  {
    while(!DataRdy1USART());                // ждать, пока данные будут получены
   char byte_outKline = Read1USART();      // присвойть содержимое регистра  USART в однобайтовую переменную  byte_outKline
                                           // вытолкнуть биты на ножку 21 (RB0)
  }
Вложения
K-Line_UART.GIF
(7.92 KiB) Скачиваний: 81

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

Вс янв 16, 2022 19:10:59

А почему просто не соединить эти две ножки, или ты меняешь скорость?

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

Вс янв 16, 2022 22:38:22

17 и 18 ножки - это UART
21 ножка - вЫход K-Line
12 ножка - вход K-Line
какие тут ножки замкнуть?

пока только такой код на шёл, но на 21 ножке выскакивают одиночные импульсы не похожие на биты, что я посылаю на 18 ножку
Код:
int i;                        // переменная i
    for(i=0;i<7;i++)             // увеличить переменную i на 1
  {
     while(!DataRdy1USART());                // ждать, пока данные будут получены
    char byte_outKline = Read1USART();      // присвойть содержимое регистра  USART в однобайтовую переменную  byte_outKline
    KLINE_OUT = (byte_outKline  << i) & 1 ;       // вытолкнуть биты на ножку 21 (RB0)
  }

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

Вс янв 16, 2022 23:38:31

У вас в коде чепуха написана.
Трудно понять, что вы пытаетесь куда-то там послать, что получаете на ноге, и что значит "вытолкнуть биты".
Вы бы хоть описали подробнее задачу, что делаете, что пытаетесь получить, что конкретно в вашем результате не нравится и почему, и т.д... Какими-то отрывками разговариваете, как старый дедушка, бормочащий себе что-то под нос ...

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

Чт янв 20, 2022 11:54:56

отправляю байт 0b01010101 на 21-ножку
хочу увидеть в терминале, что нибудь из этого: 85 125 0x55 01010101 U
как это сделать?
Спойлер
Код:
/* 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 =  0b01010101;      // переменная     byte

      while (1)
      {
                Delay10TCYx(1000);        //  Пауза    
    Bit_out   = 0;                                      //  СТАРТ
                    Delay10TCYx(10);          //  пауза 9600 бод   
              for(char i = 0; i < 8; i++)              // увеличить переменную i на 1 
   {
                  Delay10TCYx(10);         // пауза 9600 бод
     Bit_out = (byte  >> i) & 1;               // вытолкнуть биты на ножку 21 (RB0)     
        }
               Delay10TCYx(10);        //  пауза 9600 бод    
    Bit_out  = 1;                                    //  СТОП
               Delay10TCYx(10);        //  пауза 9600 бод
     }
 }
 
Вложения
0b01010101.png
(27.86 KiB) Скачиваний: 67
Ответить