Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 11.01.2011, 21:36  
Марья-2
Почётный гражданин KAZUS.RU
 
Аватар для Марья-2
 
Регистрация: 26.06.2010
Адрес: Минск
Сообщений: 1,511
Сказал спасибо: 916
Сказали Спасибо 1,275 раз(а) в 488 сообщении(ях)
Марья-2 на пути к лучшему
По умолчанию Re: Кольцевой буфер uart

nml, мое "спасибо" - это не ошибка . Использовала пример с Вашего сайта (обмен с МК по UART) у себя в программе.
Реклама:
Марья-2 вне форума  
Непрочитано 12.01.2011, 11:20  
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Кольцевой буфер uart

Сообщение от code-by Посмотреть сообщение
если маркер дублировать, например 0x55, то наверное нет необходимости переводить числа в ascii
А что, среди Ваших 15-ти int'ов не может встретиться число 21845?

Погуглите наконец "MODBUS", "протокол rs232", "протокол последовательного обмена" и т.п. Поверьте, многое уже придумано до нас.
makakus вне форума  
Непрочитано 12.01.2011, 11:42  
code-by
Прописка
 
Регистрация: 04.08.2006
Сообщений: 181
Сказал спасибо: 1
Сказали Спасибо 31 раз(а) в 31 сообщении(ях)
code-by на пути к лучшему
По умолчанию Re: Кольцевой буфер uart

я уже выше писал, что числа будут от 99 до 1499.
code-by вне форума  
Непрочитано 12.01.2011, 12:13  
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Кольцевой буфер uart

Сообщение от code-by Посмотреть сообщение
я уже выше писал, что числа будут от 99 до 1499.
Да, тогда конечно. А Вы перечитайте внимательно посты 24 и 29.
makakus вне форума  
Непрочитано 12.01.2011, 13:01  
OlegNZH
Почётный гражданин KAZUS.RU
 
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
OlegNZH на пути к лучшему
По умолчанию Re: Кольцевой буфер uart

Можно ещё дальше потеоретизировать .Например - маркер 0x55- один из самых Худших ( наряду с 0x00 и 0xFF) -Синус можно словить (а по 0 и FF - одиночную помеху) .Я понимаю, что если такое случится- то аппаратную часть нужно в помойку , но всё-же .
PS . а при ..."до 1499"- младший байт "гуляет " в полном диапазоне.
OlegNZH вне форума  
Непрочитано 12.01.2011, 13:09  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Кольцевой буфер uart

Сообщение от makakus Посмотреть сообщение
А что, среди Ваших 15-ти int'ов не может встретиться число 21845?

Погуглите наконец "MODBUS", "протокол rs232", "протокол последовательного обмена" и т.п. Поверьте, многое уже придумано до нас.
Вы смысла не понимаете. Есть понятие битстаффинг и байтстаффинг. Если первое здесь неприменимо, то второе - вполне.

Итак маркер может быть любым. Например 0x55. Он есть начало пакета. За ним идёт байт кода команды или что-то другое отличное от 0x55.
Если маркер встречается в потоке данных, то он дублируется.
==
На распаковывающей стороне проверяется:
по первому маркеру устанавливается признак.
Если следом идёт маркер, то признак сбрасывается а код вашего маркера 0x55 идёт в поток принимаемых данных. Если же следом за маркером идёт байт отличный от маркера, то устанавливается признак начала пакета байт воспринимается как код команды, счётчик принятых байт сбрасывается.
Вот и всё вкратце. Таким образом пакет может упаковываться внутри непрерывного потока даных.
===
Теперь по поводу кольцевого буфера.
Имеется 2 варианта.
1. Каждый новый пакет записывается с начала буфера (нет кольца).
В этом случае предыдущий пакет затирается и должен быть обработан до начала приёма нового.
2. Кольцевой буфер.
На самом деле обслуживание кольцевого буфера - примитивная задача. Очень простая. Если вы не управляете потоком данных (то есть не используете RTS/CTS или XON/XOFF), то у вас размер буфера должен быть таким, чтобы новое сообщение не могло затереть старое до завершения обработки. Если же управляете потоком, то вы должны следить за заполнением буфера (что тоже - одна строчка на Си).
===
Честно говоря непонятно из-за чего ломать копья.
SasaVitebsk вне форума  
Непрочитано 12.01.2011, 13:27  
makakus
Почётный гражданин KAZUS.RU
 
Регистрация: 08.10.2007
Сообщений: 2,760
Сказал спасибо: 1,105
Сказали Спасибо 1,037 раз(а) в 569 сообщении(ях)
makakus на пути к лучшему
По умолчанию Re: Кольцевой буфер uart

Сообщение от SasaVitebsk Посмотреть сообщение
Вы смысла не понимаете. Есть понятие битстаффинг и байтстаффинг. Если первое здесь неприменимо, то второе - вполне.
Я понимаю Просто описался, не подумал.
Я думаю, что правильно - это накидать топикстартеру слов по теме вопроса: "байтстаффинг", "модбус", "протокол обмена"... дальше он возьмёт гугл/яндекс/рамблер, поищет там это всё и спросит уже про нюансы какие-то. А решать его задачу за него мы не должны, да и не сможем даже если захотим, это нужно полное ТЗ с гаком.
makakus вне форума  
Непрочитано 12.01.2011, 13:28  
code-by
Прописка
 
Регистрация: 04.08.2006
Сообщений: 181
Сказал спасибо: 1
Сказали Спасибо 31 раз(а) в 31 сообщении(ях)
code-by на пути к лучшему
По умолчанию Re: Кольцевой буфер uart

Сообщение от Марья-2 Посмотреть сообщение
Использовала пример с Вашего сайта (обмен с МК по UART) у себя в программе.
это где (можно полную ссылку)?
code-by вне форума  
Непрочитано 12.01.2011, 13:43  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Кольцевой буфер uart

Сообщение от makakus Посмотреть сообщение
Я понимаю Просто описался, не подумал.
Я думаю, что правильно - это накидать топикстартеру слов по теме вопроса: "байтстаффинг", "модбус", "протокол обмена"... дальше он возьмёт гугл/яндекс/рамблер, поищет там это всё и спросит уже про нюансы какие-то. А решать его задачу за него мы не должны, да и не сможем даже если захотим, это нужно полное ТЗ с гаком.
Согласен.
Есть примитивный протокол который называется WAKE-UP. К нему существует куча исходников. Он прост для понимания и основа у него вполне приемлемая. Существуют тестировочные проги на IBM и компоненты для DELFI например. Можете использовать как готовый протокол.
SasaVitebsk вне форума  
Непрочитано 17.01.2011, 17:50  
code-by
Прописка
 
Регистрация: 04.08.2006
Сообщений: 181
Сказал спасибо: 1
Сказали Спасибо 31 раз(а) в 31 сообщении(ях)
code-by на пути к лучшему
Смущение Re: Кольцевой буфер uart

Решил для начала сделать без контрольных сумм и т.п. усложнений.
Правильно ли так (avr codevision):

Код:
// CPU=4MHz
#include ‹mega1281.h›
#include ‹delay.h›

void UART_send(char c)
{
    while ((UCSR0A & (1‹‹5))==0);   
    UDR0=c;
}


void SendInt(int data)
{
    unsigned int x;       
    x=data››8;
    UART_send((char) x);    
    x=data&0x00FF;    
    UART_send((char) x); 
}

void main(void)
{
...
// USART0 Mode: Asynchronous
// USART0 Baud Rate: 9600
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x19; // 9600

while (1)
{               
      SendInt(0x5555);  //begin indicator
      for(i=0;i‹5;i=i++)
      {
        UART_send(0xED);  //data indicator
        SendInt((i+1)*100); //data
      }
      SendInt(0xDDDD);  // end indicator
      delay_ms(1000);
      
};
}
code-by вне форума  
 

Закладки

Метки
avr, uart, буфер
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инверсия uart в at89c52 sanek231081 Микроконтроллеры, АЦП, память и т.д 2 04.01.2011 11:22
Симуляция UART для AVR studio mm12345 Микроконтроллеры, АЦП, память и т.д 0 22.11.2010 15:40
Подключение Siemens A52 по UART serb-radio Микроконтроллеры, АЦП, память и т.д 2 30.09.2010 07:15
Нужно 2 UART на мк , как быть? Zemlyanov Микроконтроллеры, АЦП, память и т.д 77 04.05.2010 19:26
Нужна простая библиотечка программного UART на С DK Микроконтроллеры, АЦП, память и т.д 7 08.04.2010 06:01


Часовой пояс GMT +4, время: 05:30.


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