Jump to content

Main_18

Members
  • Content Count

    9
  • Joined

  • Last visited

Posts posted by Main_18


  1. 1 час назад, bigmanlav сказал:

    Нереально. Только у производителя.

    Спасибо за ответ. Буду обращаться туда, где покупал. Хотя уже надежды немного, т.к. сабж снят с производства 6 лет назад.


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

    Ну, ё-маё... Чего-чего, а такое не простительно ... :)

    согласен. там просто всякого дерьма висит... и дисплей и sd катра и юсб и внешняя eeprom. видимо я вчера ночью просто устал)


  3. 5 минут назад, IMXO сказал:

    попробуйте в регистре ANSELC переключить пины на цифровые

     

    Оно. как я мог про него забыть. Спасибо милый человек.


  4. пардон. только на передачу

    вот usart2 

    void USART_Init(long baud_rate)
    {
        float temp;
        TRISB6=0;		/* Make Tx pin as output*/
        TRISB7=1;  		/* Make Rx pin as input*/
    
        /* Baud rate=9600, SPBRG = (F_CPU /(64*9600))-1*/
        temp= (( (float) (F_CPU) / (float) baud_rate ) - 1);     
        SP2BRG = (int) temp;	
    
        TX2STA = 0x20;  	/* Enable Transmit(TX) */ 
        RC2STA = 0xB0;  	/* Enable Receive(RX) & Serial */
    }
    
    unsigned char USART_ReceiveChar()
    {
        while(PIR3bits.RC2IF==0);                           
        return RC2REG;
    }

    байт принимается

    вот usart1

    void USART_Init(long baud_rate)
    {
        float temp;
        TRISC6=0;		/* Make Tx pin as output*/
        TRISC7=1;  		/* Make Rx pin as input*/
    
        /* Baud rate=9600, SPBRG = (F_CPU /(64*9600))-1*/
        temp= (( (float) (F_CPU) / (float) baud_rate ) - 1);     
        SP1BRG = (int) temp;	
    
        TX1STA = 0x20;  	/* Enable Transmit(TX) */ 
        RC1STA = 0xB0;  	/* Enable Receive(RX) & Serial */
    }
    
    void USART_TransmitChar (unsigned char out)
    {                              
       while(PIR1bits.TX1IF==0); 
       TX1REG = out; 
    }
    
    
    unsigned char USART_ReceiveChar()
    {
        while(PIR1bits.RC1IF==0);                           
        return RC1REG;
    }

    байт передается, приема нет

    делал и так, разницы нет

    void USART_Init(long baud_rate)
    {
        float temp;
        TRISC6=0;		/* Make Tx pin as output*/
        TRISC7=1;  		/* Make Rx pin as input*/
    
        /* Baud rate=9600, SPBRG = (F_CPU /(64*9600))-1*/
        temp= (( (float) (F_CPU) / (float) baud_rate ) - 1);     
        SPBRG = (int) temp;	
    
        TXSTA = 0x20;  	/* Enable Transmit(TX) */ 
        RCSTA = 0xB0;  	/* Enable Receive(RX) & Serial */
    }
    
    unsigned char USART_ReceiveChar()
    {
        while(PIR1bits.RCIF==0);                           
        return RCREG;
    }

     

    скорости ставил от 9600 и выше, прогресса пока нет(


  5. 46 минут назад, Alex сказал:

    Ой, порты разные, точно :D

    @Main_18 , где остальной код, который принимает данные ?
    И опишите вкраце, что куда подключено, откуда и какие данные принимаете ...

    Мы на производстве используем эти процы, УАРТы (оба) работают безупречно.

    соединен 18F2550 с 18F25K22

    читал так 

    unsigned char USART_ReceiveChar()
    {
       // while(PIR1bits.RC1IF==0);                           
        return RC1REG;
    }
    
    и так
    
    unsigned char USART_ReceiveChar()
    {
        while(PIR1bits.RC1IF==0);      
        if(RC1STAbits.OERR)
        {           
            RC1STAbits.CREN = 0;
            NOP();
            RC1STAbits.CREN=1;
        }
        return(RC1REG);       
    }
     

     

    В том то и дело, что беру этот же код, меняю TRISC7, TRISC6 на TRISB7, TRISB6

    SP1BRG, TX1STA, RC1STA на соответственно SP2BRG, TX2STA и RC2STA перекидываю провода на uart2 все прекрасно читается в RC2REG есть принятый байт

    видел заметки по поводу проблем с уартом у этого чипа на максимальной частоте 64МГц, пойду почитаю что там пишут.


  6. читал. за вчера столько инициализаций на писал что всех не упомню. конкретно эта работает (проверено на многих пиках за все время) и на этом я выше писал, что usart 2 работает и на прием и на передачу, usart 1 работает на прием, в терминале байты целые. уверен, скорость здесь ни при чем


  7. 8 часов назад, IMXO сказал:

    а можете объяснить зачем вы пин  приемника 1юарта настраиваите на выход?

    TRISCbits.TRISC6 = 1;
    TRISCbits.TRISC7 = 0; ?????

    опечатка. в коде все хорошо. TRISC6 = 0, TRISC7 = 1.  В даташите написано вообще настраивать оба пина на вход, модуль сам при приеме и передаче настраивает пины. Результата это не дало естественно. ни один флаг RCxIF не выпадает при попытке приема первым уартом ( вчера уже проверил все, даже те, которые к uart1 не относятся 

    RCIF, RC1IF, RCIF1

    при приеме uart 2 RC2IF как положено становится 1

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

    Ещё и для разных UART'ов одни и те же пины пытается использовать :)

    вот это вот обидно было, как будто в оба глаза наплевали.


  8. Доброго времени суток всем. Выручайте, у меня уже едет крыша. Не могу прочитать uart 1 на pic18f25k22 работает только отправка данных. uart 2 работает нормально и на отправку данных и на чтение.

    Инициализация обычная

    void USART_Init(long baud_rate)
    {
        TRISCbits.TRISC6 = 1;
        TRISCbits.TRISC7 = 0;
        float temp;
        temp=(( (float) (F_CPU) / (float) baud_rate) - 1);     
        SP1BRG = (int) temp;	/* Baud rate=9600 SPBRG=(F_CPU /(64*9600))-1*/
        TX1STA = 0x20;	/* TX enable; */
        RC1STA = 0xB0;	/* RX enable and serial port enable*/
    }

    RC1REG всегда 0x00 если пытаюсь читать посылку. отправка работает нормально, если положить байт в TX1REG все отправляется.

    беру usart 2 на этом же чипе

    void USART_Init(long baud_rate)
    {
        TRISBbits.TRISB7 = 1;
        TRISBbits.TRISB6 = 0;
        float temp;
        temp=(( (float) (F_CPU) / (float) baud_rate) - 1);     
        SP2BRG = (int) temp;	/* Baud rate=9600 SPBRG=(F_CPU /(64*9600))-1*/
        TX2STA = 0x20;	/* TX enable; */
        RC2STA = 0xB0;	/* RX enable and serial port enable*/
    }

    все прекрасно работает и на чтение и на запись. Мистика. Пробовал через прерывания и без них, usart 2 работает без нареканий, usart 1 только на передачу. 

    соединил два 18F2550 по уарту, все прекрасно один пишет, второй читает. Что не так с 18F25K22 кто подскажет?

×
×
  • Create New...