Например TDA7294

Форум РадиоКот • Просмотр темы - Работа с UART
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср май 14, 2025 16:59:11

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 44 ]    , 2,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Пн июл 08, 2019 12:26:30 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
я проверял в фунции приема. Если FERR или OERR принимают значение 1, то зажигаю светодиод


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Пн июл 08, 2019 17:13:35 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23675
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Значит скорости у модулей разные. Ну и переполнение имеет место быть.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Вт июл 09, 2019 14:25:23 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
Сделал прием и отправку без использования прерываний, стало намного лучше, но все равно иногда теряются байты. Подскажите как можно реализовать два стоповых бита?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Ср июл 10, 2019 12:23:52 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23675
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Зачем Вам нужны два стоповых бита?
Если происходит потеря байтов, то есть два пути.
1 Выяснить причину и устранить ее.
2. Изменить верхний уровень протокола для компенсации этой проблемы.
Второй путь не исключает первого и наоборот.
Проверка целостности информации - стандартная фича любого вменяемого протокола.


Вернуться наверх
 
Открыт интернет-магазин MEAN WELL.Market – весь ассортимент MEAN WELL, выгодные цены

Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России. На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Ср июл 10, 2019 20:08:56 
Потрогал лапой паяльник

Карма: 11
Рейтинг сообщений: 62
Зарегистрирован: Сб авг 08, 2009 23:02:57
Сообщений: 394
Откуда: Ростов-на-Дону
Рейтинг сообщения: 0
Два стоповых бита применяют для не кварцованных приемо-передатчиков. Позволяет увеличить разброс скорости приемника- передатчика без потерь байтов.

_________________
__________________
Все, что нельзя запрограммировать на ассемблере, приходится паять


Вернуться наверх
 
LED-драйверы MOSO - надежные решения для индустриальных приложений

Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO подробнее>>
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Ср июл 10, 2019 20:41:40 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23675
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Позволяет увеличить разброс скорости

С одним стопом разброс может быть до 10%. Даже и не представляю себе реального случая, когда этого может не хватить.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Ср июл 10, 2019 21:18:39 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18383
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Всегда думал, что стоп-биты дают время для обработки принятого байта и впридачу позволяют обнаружить повреждение линии, когда в ней "зависает" ноль...
А вот что они помогают победить рассинхронизацию, слышу впервые...

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Чт июл 11, 2019 04:19:58 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23675
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Стоп бит служит не целям синхронизации, а для детектирования ошибок по скорости приёма. Для синхронизации имеется стартовый бит, который запускает сдвиговый регистр и входной фильтр.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Чт июл 11, 2019 08:25:25 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
Подозреваю что у меня различные скорости, хоть и настраиваю по формуле из datashit. Первый контроллер от второго принимает все правильно. но вот второй принимает не те байты. Например передаю 0xAA а принимает 0xD5 и иногда 0x00.

Вот настройки:

Код:
procedure EUSART1_Initialize();
begin
    BAUDCON1 := 0x08;   
    // 115200
    SPBRG1 := 0x0C;
    SPBRGH1 := 0x00;

    // SPEN enabled; RX9 8-bit; CREN enabled; ADDEN disabled; SREN disabled;
    RCSTA1 := 0x90;

    // TX9 8-bit; TX9D 0; SENDB sync_break_complete; TXEN enabled; SYNC asynchronous; BRGH hi_speed; CSRC slave_mode;
    TXSTA1 := 0x24;

end;


Расчитываю исходя из кварца 24MHz и второй контроллер 19,44MHz.

Правильную ли частоту я беру? У меня так же включен PPL, и в настройках проекта Частота Clock указана 48 MHz


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Чт июл 11, 2019 09:51:10 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23675
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Правильную ли частоту я беру?

Из приведенного кода совершенно непонятно какое значение предделителя установлено для CPU в конфиге (CPDIV)
И вообще, нужно привести конфиг полностью.
ЗЫ. На вскидку. SPBRG=12 (0x0C) Считаем рейт: 24000000/(4*(12+1))=24000000/52=461538 бит/с
В каком месте тут 115200 ? (каламбур! :))) )
При 24 МГц и рейте 115200 получается SPBRG=51 (0x33)
При 19,44 МГц и рейте 115200 получается SPBRG=41 (0x29)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Чт июл 11, 2019 10:34:32 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
Правильную ли частоту я беру?

Из приведенного кода совершенно непонятно какое значение предделителя установлено для CPU в конфиге (CPDIV)
И вообще, нужно привести конфиг полностью.
ЗЫ. На вскидку. SPBRG=12 (0x0C) Считаем рейт: 24000000/(4*(12+1))=24000000/52=461538 бит/с
В каком месте тут 115200 ? (каламбур! :))) )
При 24 МГц и рейте 115200 получается SPBRG=51 (0x33)
При 19,44 МГц и рейте 115200 получается SPBRG=41 (0x29)


Судя по даташиту данная формула справедлива для синхронного приемо передатчика, у меня же асинхронный поэтому формула выглядит так: Считаем рейт: 24000000/(16*(12+1))=24000000/208=115384 бит/с

Конфиг прикрепил

Понял, что скорость 115200 не подходит. для 19,44 погрешность больше 4 %. Пересчитал для скорость 57600 теперь передает и принимает не то что нужно


Вложения:
Комментарий к файлу: Config
Config.png [41.1 KiB]
Скачиваний: 222
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Чт июл 11, 2019 11:19:13 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23675
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Судя по даташиту данная формула справедлива для синхронного приемо передатчика

Из даташита этого НЕ следует. Вы ошиблись с расчетом. Множитель для 16-разрядного хай спид - 4, а не 16.
Откройте любой другой даташит на 18-ое семейство, где у таблицы есть рамка и убедитесь.

Изображение

Приведенные мной коэффициенты рейта дают почти нулевую погрешность для обозначенных частот. Это во первых, а во вторых, для УАРТА допустима погрешность до 10%. И никаких ошибок в пределах этой погрешности не будет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Чт июл 11, 2019 11:54:02 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
Да, у меня в даташите без таблицы. Настроил скорости исходя из новой формулы. Но почему то всеравно приходит не то что нужно. если на 19,44 при отправке не добавить задержку 40 us то передача не завершается.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Чт июл 11, 2019 13:08:20 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23675
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Но почему то всеравно

Милостивый государь, сделайте одолжение, приведите схему связанную с этим каналом между двумя МК с указанием ног используемых на МК.
А так же ОБА кода инициализации.
Задержка Ваша никакого практического смысла не имеет. UART-у болт положить на задержки. Он начинает прием со старт-бита, далее квантуя сигнал с заданным рейтом. При передаче после загрузки байта немедленно начинается передача и остановить ее невозможно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Чт июл 11, 2019 13:56:22 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
схема 1 Изображение 24MHz


Код:
Код инициализации:

procedure EUSART1_Initialize();
begin
    BAUDCON1 := 0x08;
    SPBRG1 := 51;
    SPBRGH1 := 0;
    // SPEN enabled; RX9 8-bit; CREN enabled; ADDEN disabled; SREN disabled;
    RCSTA1 := 0x90;

    // TX9 8-bit; TX9D 0; SENDB sync_break_complete; TXEN enabled; SYNC asynchronous; BRGH hi_speed; CSRC slave_mode;
    TXSTA1 := 0x24;
end;

Использование:
procedure Uart1(cmdUart:byte);     // ïåðåä èñïîëüçîâàíèå ïîäãîòîâèòü var dataSendUart: array[1..12] of byte
begin
   {
    TUN0_bit := 1;
    TUN1_bit := 1;
    TUN2_bit := 1;
    TUN3_bit := 1;
    TUN4_bit := 1;
    TUN5_bit := 0;   
   }
   
    SSPEN_SSP1CON1_bit := 0;
    SSPEN_bit := 0;
    PORTE.B2 := 1;
    TRISC.b7 := 1;
    TRISC.b6 := 0;
    RC2_bit := 1;             //разрешаем работу UART
    EUSART1_Initialize();
    delay_ms(100);

    for i := 0 to 7 do
    begin

      UART1_Write(0x15);
      //delay_us(500);
    end;
    i:=0;
    while (i <= 15) do
    begin
        if  (UART1_Data_Ready = 1)  then
        begin
             dataReadUart[i] := UART1_Read();
             inc(i);
             PIR1.RC1IF:=0;
        end
    end;
   
   // Выключаем UART
    RC2_bit := 0;
    //TXEN1_bit := 0;
    SPEN1_bit :=0;
    //CREN1_bit := 0;
    //TXEN1_bit := 0;
   // Включаем SPI
    SSPEN_SSP1CON1_bit := 1;
    SSPEN_bit := 1;

    //Сохраняем в файл
    FS_SDSel();
    Mmc_Fat_ChangeDir('\');
    Mmc_Fat_Assign('uart.cfg',0);
    Mmc_Fat_Reset(file_size);
    Mmc_Fat_Append;
    Mmc_Fat_Write(dataReadUart,16);
    delay_ms(200);
    Mmc_Fat_Close();
    ChangeDir('shar');
end;



Cхема 2 Изображение 19,44 MHz

Код:
procedure EUSART1_Initialize();
begin
    BAUDCON1 := 0x08;
    SPBRG1 := 41;
    SPBRGH1 := 0;
    // SPEN enabled; RX9 8-bit; CREN enabled; ADDEN disabled; SREN disabled;
    RCSTA1 := 0x90;
    // TX9 8-bit; TX9D 0; SENDB sync_break_complete; TXEN enabled; SYNC asynchronous; BRGH hi_speed; CSRC slave_mode;
    TXSTA1 := 0x24;
end;

прием данных
procedure interrupt;
begin
 if RC1IE_bit=1 then
 count:=0;
    while (count <= 7) do
    begin
        if  (UART1_Data_Ready = 1)  then
        begin
             pUART_Read[count] := UART1_Read();
             inc(count);
             PIR1.RC1IF:=0;
        end
    end;
    WriteUart();
end;

отправляем:

procedure WriteUart();
var cmd: byte;
begin
pUART_Write := pUART_Read;
   PIR1.RC1IF:=0;
   PIE1.RC1IE:=0;
   GIE_bit := 0;
   INTCON.PEIE := 0;
   
          pUART_Write[0] := pUART_Read[0];
          pUART_Write[1] := pUART_Read[1];
          pUART_Write[2] := pUART_Read[2];
          pUART_Write[3] := pUART_Read[3];
          pUART_Write[4] := pUART_Read[4];
          pUART_Write[5] := pUART_Read[5];
          pUART_Write[6] := pUART_Read[6];
          pUART_Write[7] := pUART_Read[7];
          pUART_Write[8] := 0x08;
          pUART_Write[9] := 0x09;
          pUART_Write[10] := 0x10;
          pUART_Write[11] := 0x11;
          pUART_Write[12] := 0x12;
          pUART_Write[13] := 0x13;
          pUART_Write[14] := 0x14;
          pUART_Write[15] := 0x15;

          for i:= 0 to 15 do
          begin
              UART1_Write(pUART_Write[i]);
          end;                   
   PIR1.RC1IF:=0;
   PIE1.RC1IE:=1;
   GIE_bit := 1;
   INTCON.PEIE := 1;
end;


TX- ножка 44, Rx - ножка 1 (совмещенная с SPI)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Чт июл 11, 2019 14:01:45 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23675
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
И што мне с этими портянками делать? Лень нарисовать фрагмент связанный с обсуждаемым вопросом?
И не надо ничего совмещать с SPI. Решите сначала проблему связи УАРТов, а потом будете пытаться что либо совмещать...

Цитата:
UART1_Write(0x15)

Где тело функции? Как обеспечивается зазор между загрузкой байт?
Если у Вас не работает пакетный обмен, то за каким хреном Вы пытаетесь передавать пакеты? Чтобы все запутать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Чт июл 11, 2019 14:12:55 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
я не схемотехник., в рисовании схем вообще не разбираюсь. Просто сначала проект была сделана часть проекта, теперь добавилось вторая часть с использованием UART с SPI все отлажено и работает без сбоев.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Чт июл 11, 2019 14:32:39 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23675
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Уважаемый, если у Вас все работает без сбоев, то к чему вся эта головоломка?
В конце концов, все можно посмотреть осциллографом.
А если его нет, но можно написать фрагмент кода с обменом ОДНИМ БАЙТОМ, выяснив все вопросы по скорости и взаимодействию.
При пакетном обмене необходимо обеспечивать время на передачу каждого байта, а так же на возможности принимающей части обработать принимаемый байт между приходом байт.
Вы пытаетесь запустить некий комплексный механизм сразу оптом. Это несерьезно при Вашей схемотехнической подготовке. Дробите задачу.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Пт июл 19, 2019 15:26:21 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
Спасибо всем за подсказки и советы. Проблема решена. Оказалось виноватым железо. Контроллеры между собой соединены оптикой, и вот приемник PLR135/T6 не держит постоянную составляющую. В даташите по этому поводу ничего не сказано. Решением данной проблемы было передача 0 и 1 с помощью несущих частот.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с UART
СообщениеДобавлено: Пт июл 19, 2019 15:29:28 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23675
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Решением данной проблемы было передача 0 и 1 с помощью несущих частот.

Для этого существует манчестерское кодирование.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 44 ]    , 2,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y