Main_18 Опубликовано 18 июня, 2021 Поделиться Опубликовано 18 июня, 2021 Доброго времени суток всем. Выручайте, у меня уже едет крыша. Не могу прочитать 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 кто подскажет? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 18 июня, 2021 Поделиться Опубликовано 18 июня, 2021 а можете объяснить зачем вы пин приемника 1юарта настраиваите на выход? TRISCbits.TRISC6 = 1; TRISCbits.TRISC7 = 0; ????? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
Alex Опубликовано 18 июня, 2021 Поделиться Опубликовано 18 июня, 2021 57 минут назад, IMXO сказал: пин приемника 1юарта настраиваите на выход? Ещё и для разных UART'ов одни и те же пины пытается использовать 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
IMXO Опубликовано 18 июня, 2021 Поделиться Опубликовано 18 июня, 2021 не, с этим все нормально, пины разные. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Main_18 Опубликовано 19 июня, 2021 Автор Поделиться Опубликовано 19 июня, 2021 (изменено) 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'ов одни и те же пины пытается использовать вот это вот обидно было, как будто в оба глаза наплевали. Изменено 19 июня, 2021 пользователем Main_18 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 19 июня, 2021 Поделиться Опубликовано 19 июня, 2021 11 часов назад, IMXO сказал: не, с этим все нормально, пины разные. Ой, порты разные, точно @Main_18 , где остальной код, который принимает данные ? И опишите вкраце, что куда подключено, откуда и какие данные принимаете ... Мы на производстве используем эти процы, УАРТы (оба) работают безупречно. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 19 июня, 2021 Поделиться Опубликовано 19 июня, 2021 13 часов назад, Main_18 сказал: temp=(( (float) (F_CPU) / (float) baud_rate) - 1); SP2BRG = (int) temp; /* Baud rate=9600 SPBRG=(F_CPU /(64*9600))-1*/ не понятна формула расчета скорости: 1. зачем используется float, если F_CPU в дифайнах описывается как UL (unsigned long)#define F_CPU 16000000UL 2. Вы эратту на камень читали? Цитата 12. Module: EUSART 12.1 The EUSART asynchronous operation has a probability of 1 in 256 of missing the Start bit edge for all combinations of BRGH and BRG16 values, other than BRGH = 1, BRG16 = 1.Work around Set BRGH = 1, and BRG16 = 1 and use this baud rate formula:Baud_Rate = Fosc/ [4 *( [SPBRGH:SPBRGL] +1)] 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Main_18 Опубликовано 19 июня, 2021 Автор Поделиться Опубликовано 19 июня, 2021 читал. за вчера столько инициализаций на писал что всех не упомню. конкретно эта работает (проверено на многих пиках за все время) и на этом я выше писал, что usart 2 работает и на прием и на передачу, usart 1 работает на прием, в терминале байты целые. уверен, скорость здесь ни при чем 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Main_18 Опубликовано 19 июня, 2021 Автор Поделиться Опубликовано 19 июня, 2021 46 минут назад, Alex сказал: Ой, порты разные, точно @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МГц, пойду почитаю что там пишут. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 19 июня, 2021 Поделиться Опубликовано 19 июня, 2021 14 часов назад, Main_18 сказал: Не могу прочитать uart 1 на pic18f25k22 работает только отправка данных. 19 минут назад, Main_18 сказал: что usart 2 работает и на прием и на передачу, usart 1 работает на прием, в терминале байты целые. уверен, скорость здесь ни при чем вы уже определитесь юарт1 или работает на прием, или все таки не работает на прием 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Main_18 Опубликовано 19 июня, 2021 Автор Поделиться Опубликовано 19 июня, 2021 (изменено) пардон. только на передачу вот 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 и выше, прогресса пока нет( Изменено 19 июня, 2021 пользователем Main_18 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
IMXO Опубликовано 19 июня, 2021 Поделиться Опубликовано 19 июня, 2021 попробуйте в регистре ANSELC переключить пины на цифровые 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Main_18 Опубликовано 19 июня, 2021 Автор Поделиться Опубликовано 19 июня, 2021 5 минут назад, IMXO сказал: попробуйте в регистре ANSELC переключить пины на цифровые Оно. как я мог про него забыть. Спасибо милый человек. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex Опубликовано 19 июня, 2021 Поделиться Опубликовано 19 июня, 2021 Ну, ё-маё... Чего-чего, а такое не простительно ... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Main_18 Опубликовано 19 июня, 2021 Автор Поделиться Опубликовано 19 июня, 2021 6 часов назад, Alex сказал: Ну, ё-маё... Чего-чего, а такое не простительно ... согласен. там просто всякого дерьма висит... и дисплей и sd катра и юсб и внешняя eeprom. видимо я вчера ночью просто устал) 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.