Jump to content
Main_18

USART PIC18F25K22

Recommended Posts

Доброго времени суток всем. Выручайте, у меня уже едет крыша. Не могу прочитать 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 кто подскажет?

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
57 минут назад, IMXO сказал:

пин  приемника 1юарта настраиваите на выход?

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

Share this post


Link to post
Share on other sites

Популярные пружинные клеммники Degson со склада Компэл

Пружинные разъемные клеммники Degson с технологией Push-In обеспечивают надежное и безопасное электрическое соединение. При их использовании исключается возможность короткого замыкания в точке контакта, что гарантирует надежное соединение. Электрическая безопасность клеммных блоков подтверждается соответствием мировым стандартам UL, IEC и VDE.
Подробнее

не, с этим все нормально, пины разные.

Share this post


Link to post
Share on other sites

Приглашаем на вебинар "Как сделать эффективную антенну для устройств IoT. Решения Quectel" (29.07.2021)

Вебинар посвящен проектированию и интеграции встроенных и внешних антенн Quectel для сотовых модемов, устройств навигации и передачи данных 2,4 ГГц. На вебинаре вы познакомитесь с продуктовой линейкой и способами решения проблем проектирования. В программе: выбор типа антенны; ключевые проблемы, влияющие на эффективность работы антенны; требования к сертификации ОТА; практическое измерение параметров антенн.

Подробнее

Posted (edited)
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'ов одни и те же пины пытается использовать :)

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

Edited by Main_18

Share this post


Link to post
Share on other sites

Решения TE Connectivity для 112 Gbps архитектуры и серверов. Перспективные решения для серверов и дата-центров

В статье дается полный обзор серий высокоскоростных разъемов IMPACT и Z-PACK, соединителей SFP- QSFP и Mini-SAS, а также разъемов и кабельных сборок для организации питания. Раскрываются преимущества и отличительные особенности данных серий высокоскоростных разъемов и области их применения.
Подробнее

11 часов назад, IMXO сказал:

не, с этим все нормально, пины разные.

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

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

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

Share this post


Link to post
Share on other sites
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)]

 

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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МГц, пойду почитаю что там пишут.

Share this post


Link to post
Share on other sites
14 часов назад, Main_18 сказал:

Не могу прочитать uart 1 на pic18f25k22 работает только отправка данных.

 

19 минут назад, Main_18 сказал:

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

вы уже определитесь юарт1 или работает на прием, или все таки не работает на прием :D

Share this post


Link to post
Share on other sites
Posted (edited)

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

вот 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 и выше, прогресса пока нет(

Edited by Main_18

Share this post


Link to post
Share on other sites

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

 

Share this post


Link to post
Share on other sites
5 минут назад, IMXO сказал:

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

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
6 часов назад, Alex сказал:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Какой  у вас стоит резистор в цепи разряда, у меня  резистор 2Ом  50Вт, шунт 0,02Ом  10А   Как  не понял.
    • Всем привет. Запустил я это усилитель. Не обошлось и без бубна- сначала накосячил потом исправлял. Сейчас на выходе несущая вот такая:   На нагрузку 6 Ом сигнал какой-то не очень. Сигнал заполнен несущей. Вот:  Собирал по вот такой печатке. Плата Максима Владимировича. Только под себя подправил. Схема предварительного и самого усилителя.   Дроссель из транса от АТХ ER35/21/11. Зазор 2мм. Индуктивность измеренная 110мкгН.  Питание +-65В стабилизированное ватт 600 где-то. На выходе максимум смог снять 26В RMS на 6 Ом, на 12 Ом тож самое. На входе сигнал 6В RMS.  Вопрос усиленный сигнал так и должен быть заполнен несущей? и почему не удается снять с усилителя большее напряжение. усилитель планирую на дин 8 Ом и снять 250Вт.
    • Я на своем перемерил как-то кучу Д-0,55. Все нормально было.
    • Я на своём аналоге zb2 как то пытался измерить емкость банок от шуруповёрта. Ничего не вышло, выдаёт ошибку типа "напряжение аккумулятора ниже установленного напряжения отсечки". Хотя всё настроено нормально, ток нагрузки мизерный и банки не совсем дохлые. Хз, может баг такой в моём конкретно приборе.
    • Какая-то старая военная поделка. Марка 6МГ277. Если интересно, вечером могу фотки покидать. Недавно видел, такой даже на авито продавался. 
    • У меня не хватает скорости в обратной связи, чтобы побороть резкий скачок напряжения на входе (моделирование). Использую ПИД регулятор. Возможно ООС не поможет от скачка на входе. От скачка - пассивный или активный фильтр. У меня не стабильность на частоте 30 кГц, то есть на этой частоте коэф. передачи ООС минимальный сделан, а значит все ближние частоты проходят на выход с входа при скачке напряжения. Вариант - повышать частоту нестабильности, чтобы все частоты на выходе фильтра были много меньше этой частоты. Но это можно сделать только уменьшением выходной ёмкости, тогда при скачках нагрузки будут пульсации)  Ну и если ёмкостный фильтр  используется, то обязательно ставить сетевой фильтр, причём с расчётом В общем, теперь понятно, почему на многих LLC ставят активную коррекцию 
    • Типовая процедура зарядки никеля подразумевает 16 часов х 0,1Сном= 1,6 Сном. По задутым мАч ничего не ясно будет. Только на разряде замерять.  ZB2L3 должно помочь.
  • Similar Content

    • Guest Константин
      By Guest Константин
      Здравствуйте, совсем недавно начать освоение микроконтроллеров и в начале пути столкнулся с двумя проблемами:  
      1) При нажатии кнопки "Run" для запуска проекта выдает ошибку: No ST-LINK detected! Please conncect ST-LINK and restart the debug sesion. При этом ST_Link установлен, создаю bin-файлы и зашиваю через него.
      2) есть плата STM32discovery и преобразователь интерфейса uart-usb|com, нужно передать сообщение по данному интерфейсу, но терминальные программы  (putty, smarty, realterm) не принимают ничего хотя видят данный порт. Ошибок в коде нет, светодиод мигает.
       


    • Guest NickL
      By Guest NickL
      Всем привет.
      Имеется датчик давления под управлением микрухи MLX90308. Микруха сия собирает показания с 4-х включенных мостом тензометрических датчиков, и отдает обработанное значение в виде аналогового сигнала. Так же есть пин для получения данных в цифре и калибровки/прошивки этой микрухи. Производитель микрухи предлагает бесплатный софт и свою отладочно-прошивочную плату (EVB90308) за 250 бакинских (дорого), которую ждать 8 недель (долго)
      Судя по докам, там обычный UART, но с другими уровнями. Логический 0 = 0.3*Uвх, т.е. 1.5в, Логическая 1 = 0.7*Uвх, т.е. 3,5в. И всё это засунуто в единственный пин и на прием и на передачу.
      Универ был давно, да и учился я плохо, подскажите пожалуйста пример схемы чтобы 1) свести tx и rx на одну ногу 2)согласовать уровни для чтения/записи сей микрухи доступными средствами. Например, FTDI.
      Даташит микрухи:
      https://www.melexis.com/-/media/files/documents/datasheets/mlx90308-datasheet-melexis.pdf
      Спасибо заранее! Это датчик из блока АБС мотоцикла, замены нет, б/у запчастей нет, а новый блок стоит как сам мотоцикл.
    • By Дмитрий -
      На примере GSM/GPRS Goouuu Tech IOT-GA6-B и ATtiny85.
      Программа «Звонилка». 
      Программа на BASCOM-AVR. 
      Источник https://178654.blogspot.com/p/uart.html
       

    • By Viktor Golubov
      Почему может неправильно работать uart? Подключил 1 uart к пк через usb/uart переходник, а второй к gsm модему. В первый уарт вывожу инфу для дебага, а во второй AT команды. Суть в том, что сообщения для 2 уарта выводятся в 1 уарт

      и выводятся как то странно

      не полностью

      Вот такой вывод постоянно:

      Begin
      End
      AT+CNMI=2,2,0,0,0
      AT+CMGEnd
      AT+CNMI=2,2,0,0,0

      а должно быть просто

      begin

      end

      и все

      полный код https://pastebin.com/zBBZmZue
    • By IgnatiusF
      Появилась надобность в микроконтрллере STM32 для проектирования устройства. И вопрос вот в чем - в программировании этих стм-ов. Прочитал несколько статей по их программированию - что вообще для этого нужно. Выяснил, что в них (во всех?) есть вшитый bootloader, который может сам прошить МК.
      То есть для этого необходимо подключить какой-либо ...to UART преобразователь, а именно TX, RX, VCC и gnd к соответсвующим ногам микроконтроллера и все? Или надо еще куда-то подавать управляющий сигнал?
      Еще вопрос по поводу бутлоадера - если он занимает 8 КБ (или по разному?), то МК с 16 КБ памяти, по сути, будет иметь 8 КБ для программ?
      Datasheet я только начинаю читать и пока еще не нашел точной информации, так что за помощь буду очень признателен
×
×
  • Create New...