Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 06.01.2020, 20:39   #1
oleg-star
Junior Member
 
Регистрация: 28.11.2014
Сообщений: 16
Вес репутации: 100/20
oleg-star will become famous soon enougholeg-star will become famous soon enough
Question PIC16f1825 UART посылает, но не принимает

Здравствуйте!

не могу понять, в чём я ошибся: при нажатии на кнопку контроллер посылает данные компьютеру, но не принимает их; пробовал через переходники USB-UART, USB-RS485 + SP485EC-PIC


не работает конкретно вот это

Код:
if (RCIF) //если что-то приняли
   {
       asm ("CLRWDT"); 

      USART_SEND_BAIT (RCREG); //отсылаем обратно
      } //если что-то приняли
может кто сталкивался с таким? и на всяк пожарный полный текст программы

Код:
#include <xc.h>
#include <pic16f1825.h>
#include <stdbool.h>
#include <stdint.h>
#include <math.h>

// CONFIG1
#pragma config FOSC = INTOSC  // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = ON    // Watchdog Timer Enable (WDT disabled)
#pragma config PWRTE = ON    // Power-up Timer Enable (PWRT enabled)
#pragma config MCLRE = OFF   // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF     // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config CPD = OFF    // Data Memory Code Protection (Data memory code protection is disabled)
#pragma config BOREN = ON    // Brown-out Reset Enable (Brown-out Reset enabled)
#pragma config CLKOUTEN = OFF  // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
#pragma config IESO = ON    // Internal/External Switchover (Internal/External Switchover mode is enabled)
#pragma config FCMEN = OFF   // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)

// CONFIG2
#pragma config WRT = OFF    // Flash Memory Self-Write Protection (Write protection off)
#pragma config PLLEN = OFF   // PLL Enable (4x PLL disabled)
#pragma config STVREN = ON   // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
#pragma config BORV = LO    // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
#pragma config LVP = OFF    // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)

#define _XTAL_FREQ    16000000
#define on 1
#define off 0

#define tx_control RC0
#define reset_button RA3

void INIT(void)
{
  // TUN 0; 
  OSCTUNE = 0x00;
  // SBOREN disabled; 
  BORCON = 0x00;
  
  // WDT_Initialize();
  // WDTPS 1:65536; SWDTEN OFF; 
  WDTCON = 0x16; 
  
  //REGISTER 5-1: OSCCON: OSCILLATOR CONTROL REGISTER
  SPLLEN = 0; // 4xPLL is disabled
  
        // IRCF 3 2 1 0  Internal Oscillator Frequency Select bits 1111 = 16 MHz HF
  IRCF3 = 1; //   1 0 1 1 = 1 MHz HF
  IRCF2 = 1; //   1 1 0 0 = 2 MHz HF
  IRCF1 = 1; //   1 1 0 1 = 4 MHz HF
  IRCF0 = 1; //   1 1 1 0 = 8 MHz 
        //   1 1 1 1 = 16 MHz HF

  SCS1 = 0;  // Internal oscillator
  SCS0 = 0;

GIE = 0;// Global Interrupt Enable bit
PEIE = 1;// Peripheral Interrupt Enable bit
TMR0IE = 1; // Timer0 Overflow Interrupt Enable bit
INTE = 1; //: INT External Interrupt Enable bit
IOCIE = 1;//: Interrupt-on-Change Enable bit


TMR1GIE = 0;//: Timer1 Gate Interrupt Enable bit
ADIE = 0; //: A/D Converter (ADC) Interrupt Enable bit
RCIE = 0; //: USART Receive Interrupt Enable bit
TXIE = 0;//: USART Transmit Interrupt Enable bit
SSP1IE = 0;//: Synchronous Serial Port (MSSP) Interrupt Enable bit
CCP1IE = 0;//: CCP1 Interrupt Enable bit
TMR2IE = 0;//: TMR2 to PR2 Match Interrupt Enable bit
TMR1IE = 0;//: Timer1 Overflow Interrupt Enable bit

OSFIE = 0;//: Oscillator Fail Interrupt Enable bit
C2IE = 0;//: Comparator C2 Interrupt Enable bit
C1IE = 0;//: Comparator C1 Interrupt Enable bit
EEIE = 0;//: EEPROM Write Completion Interrupt Enable bit
BCL1IE = 0;//: MSSP Bus Collision Interrupt Enable bit
CCP2IE = 0;//: CCP2 Interrupt Enable bit

CCP4IE = 0;//: CCP4 Interrupt Enable bit
CCP3IE = 0;//: CCP3 Interrupt Enable bit
TMR6IE = 0;//: TMR6 to PR6 Match Interrupt Enable bit
TMR4IE = 0;//: TMR4 to PR4 Match Interrupt Enable bit

RXDTSEL = 1;//: Pin Selection bit 
TXCKSEL = 1; //: Pin Selection bit
  
  TRISA0 = 0; // TX
  TRISA1 = 1; // RX
  TRISA2 = 0; // pwm 
  TRISA3 = 1; // VSEGDA
  TRISA4 = 1; // 
  TRISA5 = 0; // pwm  CCP2
  
  ANSA4 = 0; //DIGITAL I/O
  ANSA2 = 0;
  ANSA1 = 0;
  ANSA0 = 0;

  WPUA = 0; // подтягивающие резисторы? выключены

  INLVLA = 0; //TTL уровни на входе (могут быть CMOS)
  
 TRISC5 = 0; //pwm 
 TRISC4 = 1; // 
 TRISC3 = 1; //
 TRISC2 = 0; //
 TRISC1 = 0; //
 TRISC0 = 0; //output TX control

 ANSC3 = 0; //Digital I/O. Pin is assigned to port or digital special function.
 ANSC2 = 0; 
 ANSC1 = 0; 
 ANSC0 = 0; 

 WPUC = 0;// disabled Weak Pull-up 

 INLVLC = 0; //TTL input LEVEL used for PORT reads and interrupt-on-change
 
 FVREN = 0; //: Fixed Voltage Reference Enable bit
//0 = Fixed Voltage Reference is disabled
//1 = Fixed Voltage Reference is enabled
//FVRRDY: Fixed Voltage Reference Ready Flag bit(1)
//0 = Fixed Voltage Reference output is not ready or not enabled
//1 = Fixed Voltage Reference output is ready for use
TSEN = 0;// Temperature Indicator Enable bit
//0 = Temperature indicator is disabled
//1 = Temperature indicator is enabled
TSRNG= 1;//: Temperature Indicator Range Selection bit(3)
//0 = V OUT = VDD - 2VT (Low Range)
//1 = V OUT = VDD - 4VT (High Range)
CDAFVR1 = 0; // Comparator and DAC Fixed Voltage Reference Selection bit
CDAFVR0 = 0; //00 = Comparator and DAC Fixed Voltage Reference Peripheral output is off
       //01 = Comparator and DAC Fixed Voltage Reference Peripheral output is 1x (1.024V)
       //10 = Comparator and DAC Fixed Voltage Reference Peripheral output is 2x (2.048V)(2)
       //11 = Comparator and DAC Fixed Voltage Reference Peripheral output is 4x (4.096V)(2)
ADFVR1 = 0; //ADC Fixed Voltage Reference Selection bit
ADFVR0 = 0; //00 = ADC Fixed Voltage Reference Peripheral output is off
      //01 = ADC Fixed Voltage Reference Peripheral output is 1x (1.024V)
      //10 = ADC Fixed Voltage Reference Peripheral output is 2x (2.048V)(2)
      //11 = ADC Fixed Voltage Reference Peripheral output is 4x (4.096V)(2)

DACEN = 0;//: DAC Enable bit, 0 = DAC is disabled

SRLEN = 0;//: SR Latch Enable bit, 0 = SR latch is disabled

C1ON = 0; //: Comparator Enable bit, 0 = Comparator is disabled and consumes no active power
C2ON = 0;

nWPUEN = 1;//: Weak Pull-up Enable bit
//1 = All weak pull-ups are disabled (except MCLR, if it is enabled)
//0 = Weak pull-ups are enabled by individual WPUx latch values
INTEDG = 0;//: Interrupt Edge Select bit
//1 = Interrupt on rising edge of INT pin
//0 = Interrupt on falling edge of INT pin
TMR0CS = 0;//: Timer0 Clock Source Select bit
//1 = Transition on T0CKI pin
//0 = Internal instruction cycle clock (FOSC/4)
TMR0SE = 0;//: Timer0 Source Edge Select bit
//1 = Increment on high-to-low transition on T0CKI pin
//0 = Increment on low-to-high transition on T0CKI pin
PSA = 1;//: Prescaler Assignment bit
//1 = Prescaler is not assigned to the Timer0 module
//0 = Prescaler is assigned to the Timer0 module
PS2 = 1; //: Prescaler Rate Select bits
PS1 = 1; //111 - 256
PS0 = 1;

TMR1CS1 = 0;//Timer1 Clock Source Select bits
TMR1CS0 = 0;//11 = Timer1 clock source is Capacitive Sensing Oscillator (CAPOSC)
//11 = Timer1 clock source is Capacitive Sensing Oscillator (CAPOSC)
//10 = Timer1 clock source is pin or oscillator:
//If T1OSCEN = 0:
//External clock from T1CKI pin (on the rising edge)
//If T1OSCEN = 1:
//Crystal oscillator on T1OSI/T1OSO pins
//01 = Timer1 clock source is system clock (FOSC)
//00 = Timer1 clock source is instruction clock (F OSC/4)
T1CKPS1 = 0;//Timer1 Input Clock Prescale Select bits
T1CKPS0 = 0;
//11 = 1:8 Prescale value
//10 = 1:4 Prescale value
//01 = 1:2 Prescale value
//00 = 1:1 Prescale value
T1OSCEN = 0;//: LP Oscillator Enable Control bit
//1 = Dedicated Timer1 oscillator circuit enabled
//0 = Dedicated Timer1 oscillator circuit disabled
TMR1ON = 0;//: Timer1 On bit
//1 = Enables Timer1
//0 = Stops Timer1, Clears Timer1 gate flip-flop

MDEN = 0;//: Modulator Module Enable bit
//1 = Modulator module is enabled and mixing input signals
//0 = Modulator module is disabled and has no output

  CCP1M3 = 1; //CCP1 MODULE PWM
  CCP1M2 = 1;
  CCP1M1 = 0;
  CCP1M0 = 0;
  PR2 = 255; //период импульса
  DC1B1 = 0;
  DC1B0 = 0;
  C1TSEL1 = 0; //CCP1 is based on Timer 2 in PWM Mode
  C1TSEL0 = 0;
  P1M1 = 0;  // Enhanced PWM Output Configuration bits  
  P1M0 = 0;  //00 = Single output; PxA modulated;

  CCP2M3 = 1; //CCP2 MODULE PWM
  CCP2M2 = 1;
  CCP2M1 = 0;
  CCP2M0 = 0;
  PR4 = 255; //период импульса
  DC2B1 = 0;
  DC2B0 = 0;
  C2TSEL1 = 0; //CCP2 is based on Timer 4 in PWM Mode
  C2TSEL0 = 1;
  P2M1 = 0;  // Enhanced PWM Output Configuration bits
  P2M0 = 0;  //00 = Single output; PxA modulated;
  CCP2SEL = 1; //CCP2/P2A function is on RA5

  CCP3M3 = 1; //CCP3 MODULE PWM
  CCP3M2 = 1;
  CCP3M1 = 0;
  CCP3M0 = 0;
  PR6 = 255; //период импульса
  DC3B1 = 0;
  DC3B0 = 0;
  C3TSEL1 = 1; //CCP3 is based on Timer 6 in PWM Mode
  C3TSEL0 = 0;

  CCP4M3 = 0; //CCP4 MODULE OFF
  CCP4M2 = 0;
  CCP4M1 = 0;
  CCP4M0 = 0;
  
  T2CKPS1 = 1; //Prescaler is 64
  T2CKPS0 = 1; //Prescaler is 64  
  
  T4CKPS1 = 1; //Prescaler is 64
  T4CKPS0 = 1; //Prescaler is 64  
  
  T6CKPS1 = 1; //Prescaler is 64
  T6CKPS0 = 1; //Prescaler is 64  
  
  TMR2ON = 0;
  TMR4ON = 0;
  TMR6ON = 0;
  
  CCPR1L = 0;
  CCPR2L = 0;
  CCPR3L = 0;
      
 SSPEN = 0; // SSP PORT MODE OFF

  SPEN = 1;  //SERIAL PORT (EUSART) On
  TX9 = 0;  //8-bit transmission
  SYNC = 0;  //asynchronous mode
  SENDB = 0;  //Sync Break transmission completed
  BRGH = 1;  //1-high / 0-low speed
  BRG16 = 1;  //1-16 / 0-8 - bit generator in use
  SCKP = 0;  //non-inverted data sending
  ABDEN = 0;  //Auto-baud detect mode = off
  SPBRG = 34; //calibration const 35
}

void USART_SEND_BAIT (unsigned char byte)
{
  while (!TRMT);
  while (!TXIF);
  tx_control = on; __delay_ms(1);
  TXREG = byte; asm ("CLRWDT");
  while (!TRMT);
  while (!TXIF);
  __delay_ms(1); tx_control = off;
}

void USART_SEND_STRING(const unsigned char*st)
{while(*st)
  {USART_SEND_BAIT (*st++); asm ("CLRWDT");
  }
  USART_SEND_BAIT(13);
}

void main(void) {
    NOP(); 
    asm ("CLRWDT"); 
    INIT(); 
    unsigned char dig1 = 0, dig2 = 0, dig3 = 0, counter = 0;
    
    while (!RA3) //пока не нажали кнопку - ждём
    {  NOP(); }
        
    CREN = 1; // enable receiver USART
    TXEN = 0; TXEN = 1;
       
    USART_SEND_STRING("started"); USART_SEND_BAIT(13); 

    while(1)
    {     asm ("CLRWDT");
    
          dig1 = counter/100 + 48;
          dig2 = (counter%100)/10 + 48;
          dig3 = (counter%100)%10 + 48;
    
    if (RA3)
        { counter++;
         USART_SEND_BAIT (dig1); 
         USART_SEND_BAIT (dig2); 
         USART_SEND_BAIT (dig3);
         USART_SEND_STRING("  knopka"); USART_SEND_BAIT(13); 
        }
       
       if (OERR) //если приняли с ошибками,
       {CREN = 0; CREN = 1; asm ("CLRWDT");
       } //перезапускаем приемник

       if (FERR) //если с ошибками,
       {SPEN = 0; SPEN = 1; asm ("CLRWDT");
       } //перезапускаем USART


if (RCIF) //если что-то приняли
   {
       asm ("CLRWDT"); 

      USART_SEND_BAIT (RCREG); //отсылаем обратно
      } //если что-то приняли
           
} //WHILE (1) 
     return;
} //main
oleg-star вне форума   Ответить с цитированием
Старый 07.01.2020, 00:20   #2
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 844
Вес репутации: 1630/60
DmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant future
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

вопрос может не по теме, но все же... зачем использование ассемблерных вставок
asm ("CLRWDT"), это вроде отключает оптимизацию, чем не устроила стандартная функция компилятора CLRWDT(); ?
DmitrijVDN вне форума   Ответить с цитированием
Старый 07.01.2020, 11:07   #3
oleg-star
Junior Member
 
Регистрация: 28.11.2014
Сообщений: 16
Вес репутации: 100/20
oleg-star will become famous soon enougholeg-star will become famous soon enough
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Так сложилось исторически - когда я первый раз попытался использовать функцию компилятора - он ругался, зато ассемблерную вставку скушал; про оптимизацию сам компилятор говорит, что он может быстрее и меньше по объёму, но от жадности не вылечен ибо особо незачем, да и все таблетки обычно под винду идут, а у меня линукс. И если чуть залезть вглубь файлика pic.h - то там есть такая строчка
Код:
 #define    CLRWDT()    asm("clrwdt")
т.е. однофигственно
oleg-star вне форума   Ответить с цитированием
Старый 07.01.2020, 11:38   #4
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,740
Вес репутации: 3796/110
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Контроллер имеет дебаг. В чем проблема? Легко определить причину отсутствия приема. Только уберите совершенно ненужный вачдог и его сбросы. Это крайне топорный метод поддержания работоспособности.
Марк вне форума   Ответить с цитированием
Старый 07.01.2020, 12:07   #5
oleg-star
Junior Member
 
Регистрация: 28.11.2014
Сообщений: 16
Вес репутации: 100/20
oleg-star will become famous soon enougholeg-star will become famous soon enough
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Спасибо за подсказку, буду учиться пользоваться дебаггером, и сразу вопрос: а не топорный метод - это как? можно пример
oleg-star вне форума   Ответить с цитированием
Старый 07.01.2020, 12:27   #6
HJV
Senior Member
 
Регистрация: 25.02.2007
Адрес: Чита
Возраст: 39
Сообщений: 403
Вес репутации: 811/60
HJV is a splendid one to beholdHJV is a splendid one to beholdHJV is a splendid one to beholdHJV is a splendid one to beholdHJV is a splendid one to beholdHJV is a splendid one to beholdHJV is a splendid one to behold
Отправить сообщение для HJV с помощью ICQ
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Цитата:
Сообщение от Марк Посмотреть сообщение
уберите совершенно ненужный вачдог и его сбросы. Это крайне топорный метод поддержания работоспособности.
При всем моем уважении, а какие еще есть методы?
HJV вне форума   Ответить с цитированием
Старый 07.01.2020, 14:07   #7
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,925
Вес репутации: 5709/174
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Цитата:
Сообщение от HJV Посмотреть сообщение
При всем моем уважении, а какие еще есть методы?
безотносительно к "методам", совершенно некорректно её (собаки) использование при неотлаженной программе.
в том числе, может потому и нет приема, что пересбрасывается все время...
Greg вне форума   Ответить с цитированием
Старый 07.01.2020, 14:10   #8
oleg-star
Junior Member
 
Регистрация: 28.11.2014
Сообщений: 16
Вес репутации: 100/20
oleg-star will become famous soon enougholeg-star will become famous soon enough
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Дело всё в том, что код вместе с инициализацией выдернут из другой программы, которая работает - вот я и в непонятках, и если бы сбрасывался контроллер - то счётчик не увеличивался бы при нажатии на кнопку, а так на экране компьютера получаю несколько строчек типа "001 knopka 002 knopka..." при нажатии на оную

Последний раз редактировалось oleg-star; 07.01.2020 в 14:16.
oleg-star вне форума   Ответить с цитированием
Старый 07.01.2020, 14:32   #9
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,925
Вес репутации: 5709/174
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Цитата:
Сообщение от oleg-star Посмотреть сообщение
Спасибо за подсказку, буду учиться пользоваться дебаггером
да и "дебаггер" не нужен, там может быть что угодно - коротыш, непропай и т.д.
самое простое - подать выход передатчика на вход приемника, начать на самой микросхеме, потом после макса и т.д. (это если нет осциллографа). только по приему надо просто мигнуть светодиодом, без этого пафоса с передачей.

да, слово "bait" немного режет глаз (по-английски означает наживка, приманка), первый раз в жизни такое встречаю...
Greg вне форума   Ответить с цитированием
Старый 07.01.2020, 14:50   #10
oleg-star
Junior Member
 
Регистрация: 28.11.2014
Сообщений: 16
Вес репутации: 100/20
oleg-star will become famous soon enougholeg-star will become famous soon enough
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

я попробую закоротить TX/RX на контроллере, только есть еще дополнение - всё тоже самое на PIC16F1829 тоже не работает, инициализация чуть другая (учитывая количество ног), и стоят эти две микрухи почти рядом на одной макетной плате
Ну и английский я не так хорошо знаю
oleg-star вне форума   Ответить с цитированием
Старый 07.01.2020, 15:27   #11
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,925
Вес репутации: 5709/174
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Цитата:
Сообщение от oleg-star Посмотреть сообщение
я попробую закоротить TX/RX на контроллере, только есть еще дополнение - всё тоже самое на PIC16F1829 тоже не работает, инициализация чуть другая (учитывая количество ног), и стоят эти две микрухи почти рядом на одной макетной плате
там очень большая программа, надо убавить до минимума. в целом все написано правильно - один большой цикл, без всяких прерываний. скорее всего дурит какая-то мелочь. Обычно с компилятором идут примеры работы с ком-портом, надо взять такой пример и поработать с ним.
Greg вне форума   Ответить с цитированием
Старый 07.01.2020, 16:34   #12
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 844
Вес репутации: 1630/60
DmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant futureDmitrijVDN has a brilliant future
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

может ошибаюсь, но КМК справочник молодого сурка утверждает что для включения модуля выводы преемника/передатчика устанавливаются на вход TRISA<1:0>=11 , на выход вывод передатчика переключается автоматически при включении модуля или нет?
DmitrijVDN вне форума   Ответить с цитированием
Старый 07.01.2020, 18:22   #13
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,925
Вес репутации: 5709/174
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Цитата:
Сообщение от DmitrijVDN Посмотреть сообщение
может ошибаюсь, но КМК справочник молодого сурка утверждает что для включения модуля выводы преемника/передатчика устанавливаются на вход TRISA<1:0>=11 , на выход вывод передатчика переключается автоматически при включении модуля или нет?
у него выход как раз работает
Greg вне форума   Ответить с цитированием
Старый 07.01.2020, 22:04   #14
oleg-star
Junior Member
 
Регистрация: 28.11.2014
Сообщений: 16
Вес репутации: 100/20
oleg-star will become famous soon enougholeg-star will become famous soon enough
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

ну... автоматически ничего не переключается, всё делается ручками
Код:
 

  TRISA0 = 0; // TX
  TRISA1 = 1; // RX
TXCKSEL = 1; //: Pin Selection bit TX=RA0
RXDTSEL = 1;//: Pin Selection bit  RX=RA1
скажу больше - из программы управления светом и вентиляцией в ванне/туалете/коридоре была выброшена часть, отвечающая за это, и контроллер с программой работает, принимает, отправляет, включает/выключает, регулирует яркость, т.е. вот это урезано до безобразия - и не работает. Может у меня уже "глаз замылен" и я чего-то не вижу
oleg-star вне форума   Ответить с цитированием
Старый 07.01.2020, 22:08   #15
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,740
Вес репутации: 3796/110
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Цитата:
Сообщение от HJV Посмотреть сообщение
При всем моем уважении, а какие еще есть методы?
Методы чего? Приема с УАРТа? Вы всерьез полагаете, что для работы с УАРТом нужно при отсутствии приема постоянно ресетить МК?
Обычно приемник делают в прерывании и там же проверяют FERR. Взводят флаг, если FERR=0, иначе игнорируют принятое, а в суперлупе обрабатывают принятый байт (по флагу) и циклически проверяют OERR. По OERR=1 перезапускают приемник установленной даташитом процедурой. В некоторых МК нужно передернуть CREN, а в некоторых просто сбрасывают OERR.
Причем тут вачдог?
А вообще, про вачдог я заговорил, имея ввиду дебаг. Дебажить с вачдогом нельзя.
Марк вне форума   Ответить с цитированием
Старый 07.01.2020, 22:15   #16
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,740
Вес репутации: 3796/110
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Цитата:
Сообщение от Greg Посмотреть сообщение
скорее всего дурит какая-то мелочь
Вот дебагом он эту мелочь и найдет. Я не понимаю почему не нужно пользоваться штатным инструментом, особенно если этот инструмент уже есть...
И прерывания тут полезны не потому, что без них нельзя, а потому что помогают отделить "мух от котлет". И сделать программу легко масштабируемой, если что...
ЗЫ. Немного оффтопа. Я тут намедни любопытствовал про хедер для PIC12F629. Так вот как раз он был использован для переделки приемника с радиобрелока. Это я к тому, что первоначально код был написан без прерываний. В нем НИЧЕГО НЕЛЬЗЯ БЫЛО ПЕРЕДЕЛАТЬ. Абсолютно немасштабируемое сооружение. Пришлось переделывать вообще все. А нужно было все лишь адаптировать его под две временных диаграммы. То есть вместо двух временных ворот сделать четыре....

Последний раз редактировалось Марк; 07.01.2020 в 22:22.
Марк вне форума   Ответить с цитированием
Старый 07.01.2020, 23:13   #17
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,925
Вес репутации: 5709/174
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

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

Цитата:
Сообщение от Марк Посмотреть сообщение
И прерывания тут полезны не потому, что без них нельзя, а потому что помогают отделить "мух от котлет". И сделать программу легко масштабируемой, если что...
ЗЫ. Немного оффтопа. Я тут намедни любопытствовал про хедер для PIC12F629. Так вот как раз он был использован для переделки приемника с радиобрелока. Это я к тому, что первоначально код был написан без прерываний. В нем НИЧЕГО НЕЛЬЗЯ БЫЛО ПЕРЕДЕЛАТЬ. Абсолютно немасштабируемое сооружение. Пришлось переделывать вообще все. А нужно было все лишь адаптировать его под две временных диаграммы. То есть вместо двух временных ворот сделать четыре....
это всё понятно, но прерывания обычно настолько усложняют картину (для начинающего), что вообще беда. Здесь хоть гарантированно в проверку флага заходит. Ещё там задержки какие-то на передачу. Вот они славно в этих прерываниях отработают...
Greg вне форума   Ответить с цитированием
Старый 07.01.2020, 23:18   #18
oleg-star
Junior Member
 
Регистрация: 28.11.2014
Сообщений: 16
Вес репутации: 100/20
oleg-star will become famous soon enougholeg-star will become famous soon enough
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Цитата:
Только уберите совершенно ненужный вачдог и его сбросы. Это крайне топорный метод поддержания работоспособности.
Цитата:
Сообщение от Марк Посмотреть сообщение
Методы чего? Приема с УАРТа? Вы всерьез полагаете, что для работы с УАРТом нужно при отсутствии приема постоянно ресетить МК?

мне думается что всех нас заинтересовал метод поддержания работоспособности контроллера без использования вачдога


и давайте договоримся, что asm ("CLRWDT") - это сброс вачдога при нормальной работе контроллера, а asm ("reset") - это всё-таки ресет микроконтроллера
oleg-star вне форума   Ответить с цитированием
Старый 07.01.2020, 23:20   #19
oleg-star
Junior Member
 
Регистрация: 28.11.2014
Сообщений: 16
Вес репутации: 100/20
oleg-star will become famous soon enougholeg-star will become famous soon enough
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Цитата:
Сообщение от Greg Посмотреть сообщение
Ещё там задержки какие-то на передачу. Вот они славно в этих прерываниях отработают...
задержки - это для драйвера RS-485, он гарантированно с приема переключится на передачу
oleg-star вне форума   Ответить с цитированием
Старый 07.01.2020, 23:35   #20
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,740
Вес репутации: 3796/110
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Цитата:
Сообщение от oleg-star Посмотреть сообщение
мне думается что всех нас заинтересовал метод поддержания работоспособности контроллера без использования вачдога
Вы не поверите, милейший, но я вообще не использую вачдог. И ничего - работают устройства. Сложные устройства.
Вачдог, уважаемый, это для тех, кто не может найти проблему и желает ее залатать таким вот примитивным способом.
Есть всего пара-тройка случаев, когда WDT является принципиальной частью алгоритма, выполняя роль таймаута. Но это вне обсуждаемого тут вопроса.

Цитата:
Сообщение от oleg-star Посмотреть сообщение
и давайте договоримся, что asm ("CLRWDT") - это сброс вачдога при нормальной работе контроллера, а asm ("reset") - это всё-таки ресет микроконтроллера
Я не очень понял о чем Вы и с кем договариваетесь. У Вас в коде вачдог ресетит контроллер, если приема в установленное время не случилось. Это зачем?
Ресет МК в результате переполнения вачдога (я имел ввиду именно этот ресет, а не сброс WD-таймера) ничем от обычного программного ресета не отличается, кроме иного состояния регистра RCON (или аналогичного по функционалу) после этого самого ресета.
Марк вне форума   Ответить с цитированием
Старый 07.01.2020, 23:40   #21
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,925
Вес репутации: 5709/174
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Цитата:
Сообщение от oleg-star Посмотреть сообщение
ну... автоматически ничего не переключается, всё делается ручками
Код:
 

  TRISA0 = 0; // TX
   TRISA1 = 1; // RX
для передатчика это не так, да оно и не мудрено, там даташит на 436 страниц мелкого текста, и ещё надо знать где смотреть

Setting the SPEN bit of theRCSTA register enables the EUSART and automatically configures the TX/CK I/O pin as an output. If the TX/CK pin is shared with an analog peripheral, the analog I/O function must be disabled by clearing the corresponding ANSEL bit.
Цитата:
Сообщение от oleg-star Посмотреть сообщение
TXCKSEL = 1; //: Pin Selection bit TX=RA0
RXDTSEL = 1;//: Pin Selection bit RX=RA1
[/code]скажу больше - из программы управления светом и вентиляцией в ванне/туалете/коридоре была выброшена часть, отвечающая за это, и контроллер с программой работает, принимает, отправляет, включает/выключает, регулирует яркость, т.е. вот это урезано до безобразия - и не работает. Может у меня уже "глаз замылен" и я чего-то не вижу
а вот с приемником надо смотреть

Setting the CREN bit of the RCSTA register enables the receiver circuitry of the EUSART. Clearing the SYNC bit of the TXSTA register configures the EUSART for asynchronous operation. Setting the SPEN bit of the RCSTA register enables the EUSART. The programmer must set the corresponding TRIS bit to configure the RX/DT I/O pin as an input.

с виду все нормально, хз...
Greg вне форума   Ответить с цитированием
Старый 07.01.2020, 23:49   #22
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,925
Вес репутации: 5709/174
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Цитата:
Сообщение от oleg-star Посмотреть сообщение
задержки - это для драйвера RS-485, он гарантированно с приема переключится на передачу
может что-то спаяно не так на этой макетке, в смысле приемник на трансивере все время отключен?
отдиагностировать такое можно, как говорилось, подключением выхода уарта на вход (замкнуть RA0 и RA1).
Greg вне форума   Ответить с цитированием
Старый 07.01.2020, 23:50   #23
oleg-star
Junior Member
 
Регистрация: 28.11.2014
Сообщений: 16
Вес репутации: 100/20
oleg-star will become famous soon enougholeg-star will become famous soon enough
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Цитата:
Сообщение от Марк Посмотреть сообщение
У Вас в коде вачдог ресетит контроллер, если приема в установленное время не случилось. Это зачем?
там не получается ресета контроллера из-за вачдога, там в цикле стоит его сброс

Код:
   while(1)
    {         asm ("CLRWDT");
.... и дальше всё тут крутится}
и это моё хобби, я могу чего-то не знать, что знают профи
oleg-star вне форума   Ответить с цитированием
Старый 07.01.2020, 23:55   #24
oleg-star
Junior Member
 
Регистрация: 28.11.2014
Сообщений: 16
Вес репутации: 100/20
oleg-star will become famous soon enougholeg-star will become famous soon enough
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Цитата:
Сообщение от Greg Посмотреть сообщение
может что-то спаяно не так на этой макетке, в смысле приемник на трансивере все время отключен?
отдиагностировать такое можно, как говорилось, подключением выхода уарта на вход (замкнуть RA0 и RA1).

макетка- это пластмассина со множеством дырдочек, сейчас там стоят два контроллера 1825 и 1829, два переходника USB-UART и поочередно подключаются к компу, уже завтра утром буду замыкать RA0 RA1
oleg-star вне форума   Ответить с цитированием
Старый 07.01.2020, 23:55   #25
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 60
Сообщений: 2,740
Вес репутации: 3796/110
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: PIC16f1825 UART посылает, но не принимает

Цитата:
Сообщение от oleg-star Посмотреть сообщение
Код:
void main(void) {
    
    while (!RA3) //пока не нажали кнопку - ждём
    {  NOP(); }
Плохое решение. Даже если алгоритм не предполагает ничего делать до нажатия на кнопку, то и тогда нужно поддерживать УАРТ в работоспособном состоянии. Для этого должен быть обеспечен непрерывный контроль приема, включая флаги ошибок фрейма и переполнения. Иначе я вам гарантирую проблемы с переходными режимами. Собственно их Вы и имеете.
Марк вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PIC vs AVR - быстродействие на математике tem-ya Микроконтроллеры других производителей 121 11.04.2011 13:32
Графические среды Vidoc Общетехнические вопросы 47 10.02.2010 06:18


Часовой пояс GMT +3, время: 06:34.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot