Например TDA7294

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



Текущее время: Чт июн 29, 2017 10:34:34



Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 111 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Пн янв 09, 2017 23:09:13 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 91
Зарегистрирован: Чт дек 28, 2006 09:19:56
Сообщений: 10292
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Аlex писал(а):
Вы ходите по форуму только в поисках фраз (слов, предложений), за которые можно зацепиться и, поспорив, попытаться показать себя грамотнее тех, кто их озвучил
разве не в этом смысл форума? разве дающий советы изначально не позиционирует сам себя, как более знающий?
я встреваю только в том случае, когда вижу попытку сделать хуже, чем было. топикстартер спросил совета, и я молчал, пока не увидел ВРЕДНЫЙ совет. в чем вредность - я обосновал. вы считаете, что из толерантности к чужому мнению, которое вредит другим, я должен промолчать? ок, теперь буду молчать, когда люди демонстрируют полную безграмотность: "АБ" - это два магических числа... да еще и с сарказмом демонстрируют...

а потом вы же сами будете отсылать новичка учить матчасть, когда он будет спрашивать "почему в Си в строке на 1 символ больше, чем в кавычках" - да? это лучше? причем отсылать будете куда как в более резкой форме, чем я.

ладно, теперь можете потереть тему, как модератор. :( всё равно моё мнение не интересно тем, кто считает неприемлемым обращать внимание на собственные ляпы...

_________________
на Си можно написать: main(_,l)char**l;{6*putchar(--_%20?_+_/21&56>_?strchr(1[l],_^"pt`u}rxf~c{wk~zyHHOJ]QULGQ[Z"[_/2])?111:46:32:10)^_&&main(2+_,l);} и это не будет ошибкой


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Вт янв 10, 2017 00:35:09 
Открыл глаза

Зарегистрирован: Пн янв 11, 2016 21:35:49
Сообщений: 53
Рейтинг сообщения: 0
В чем может быт л шибка?
Записал я данные принятые по UART в буфер далее по окончанию приёма активирую переменную и проверяю в цикле условие
If (start == 1)
If (strcmp(rx_buffer, buffer) == 0)
PORTC = 0b00000001

Где:
start переменная активируется после окончания приёма данных.
rx_buffer принятые данные
buffer переменная типа char заполненая символами ON тоесть char buffer[] = "ON"
В итоге два этих буфера должы быть одинаковы но на деле ни чего не работает.

Добавлено after 13 minutes 10 seconds:
Пробовал и таким способом
Код:
define RX_BUFFER   128    //длина нашего буфера, читай макс. длина строки

volatile unsigned char work=0;
volatile unsigned char rx_buffer[RX_BUFFER];
int rx_index;
ISR(USART_RXC_vect)
   {
   unsigned char status,data;
   status=UCSRA;
   data=UDR;
   if ((status&((1<<FE)|(1<<PE)|(1<<DOR)))==0)
      {
      if (data==10) // CR
      {
         work=1;
      }
      else rx_buffer[rx_index]=data;

      if (++rx_index == RX_BUFFER) rx_index=0;
     
      }
   
   }
в майне:
   if (work)
      {
      work=0;   
                  //тут пробовал так же проверять бесполезно.
                }

Переменная work не принимает значение 1, через терминал посылал данные с окончанием символом CR


Вернуться наверх
 Профиль  
 
От идеи до готового устройства! Нужен только EasyEDA!

Бесплатный инструмент для проектирования печатных плат - нарисуй свою плату прямо сейчас!

Дешевле уже некуда: всего $2, за 10 ПП размером 10х10см!

Электронные компоненты: Экономия до 50%, бесплатная доставка при одновременном заказе печатной платы и компонентов!

Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Вт янв 10, 2017 00:52:35 
Модератор
Аватар пользователя

Карма: 59
Зарегистрирован: Пт мар 19, 2010 00:09:57
Сообщений: 3513
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
но на деле ни чего не работает
Кот покажите весь полностью. Тяжело угадать, почему у Вас может не работать.

Добавлено after 14 minutes 17 seconds:
LEX38RUS писал(а):
Пробовал и таким способом
А вот это что такое ? :
Код:
if ((status&((1<<FE)|(1<<PE)|(1<<DOR)))==0)

_________________
Я мненью вашему вращенье придавал, а осью был - мой детородный орган.


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Вт янв 10, 2017 07:19:48 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 25
Зарегистрирован: Сб сен 10, 2011 18:46:25
Сообщений: 2278
Рейтинг сообщения: 0
LEX38RUS писал(а):
через терминал посылал данные с окончанием символом CR

Код:
if (data==10) // CR

В ASCII и Юникоде возврат каретки вроде определён как 13 (или шестнадцатеричное 0D), могу и ошибаться. Лучше обозначить магическим числом '\r' :)) имхо.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Вт янв 10, 2017 10:36:50 
Открыл глаза

Зарегистрирован: Пн янв 11, 2016 21:35:49
Сообщений: 53
Рейтинг сообщения: 0
делал и как 13 бесполезно


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Вт янв 10, 2017 11:30:05 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 25
Зарегистрирован: Сб сен 10, 2011 18:46:25
Сообщений: 2278
Рейтинг сообщения: 0
взял исходник из первоисточника, наверное, покорежил так:

в протеусе работает:
Изображение


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Вт янв 10, 2017 14:57:21 
Открыл глаза

Зарегистрирован: Пн янв 11, 2016 21:35:49
Сообщений: 53
Рейтинг сообщения: 0
Вот еще пример кода:


Если опять пытаюсь сравнить буфер
Код:
If (strcmp(rx_buffer, buffer) == 0)
PORTC = 0b00000001


то та же ни чего не работает.
Вообще не могу вкурить как его сравнить этот буфер принятый.

Здесь алгоритм такой, когда принимаем символ $ то активируем переменную _out = 1, и заканчиваем прием read_enable = 0
Далее уже в цикле сравниваем записанные данные в буфер.
Но ни чего не выходит.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Вт янв 10, 2017 17:01:01 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 25
Зарегистрирован: Сб сен 10, 2011 18:46:25
Сообщений: 2278
Рейтинг сообщения: 1
корявенько так накарябал, может дядюшка Мокус поправит, сравнение работает


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Вт янв 10, 2017 18:10:25 
Открыл глаза

Зарегистрирован: Пн янв 11, 2016 21:35:49
Сообщений: 53
Рейтинг сообщения: 0
Благодарю. Будем изучать в чем ошибки у меня. Это я слизывал код с инета.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Чт янв 12, 2017 14:45:13 
Открыл глаза

Зарегистрирован: Пн янв 11, 2016 21:35:49
Сообщений: 53
Рейтинг сообщения: 0
Код с поста выше:
Код:
#include <avr/io.h>
#define F_CPU 8000000UL //8MHz
#include <util/delay.h>
#include <avr/interrupt.h>
#include <string.h>

#define RX_BUFFER_SIZE 6
uint8_t received;
char rx_data [6];
volatile uint8_t rx_flag = 0;
volatile uint8_t indexchar = 0;

void UARTInit(void) {
   UBRRH = 0;
   UBRRL = 51; //baud rate 9600
   UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
   UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8 bit, 1 stop bit
}

void UARTSend(uint8_t data) {
   while(!(UCSRA & (1<<UDRE)));
   UDR = data;
}

unsigned char UARTGet() {
   while(!rx_flag);
   rx_flag = 0;
   indexchar = 0;
   rx_data[4] = '\0';
   return 1;
}

int main(void) {
   DDRC = 0b00000001;
   sei();
   UARTInit();
   while(1) {
      received = UARTGet();
      if (strcmp("*ON!", rx_data) == 0)
      {
         PORTC = 0b00000001;
      }
      else
      if (strcmp("*OF!", rx_data) == 0)
      {
         PORTC = 0b00000000;
      }

   }
}

ISR(USART_RXC_vect) {
   rx_data[indexchar] = UDR;
   if (rx_data[0] !='*')
   {
      indexchar = 0;
      return;
   }
   if ((rx_data[0]=='*') && (rx_data[indexchar]=='!'))
   {
      rx_flag = 1;
      return;
   }
   if(++indexchar >= RX_BUFFER_SIZE)
   {
      indexchar = 0;
   }
}

В протеусе все работает, но если залить прошивку в кристалл то включить светодиод удается а вот выключить уже нет. В чем может быть причина?


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Чт янв 12, 2017 15:27:55 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 25
Зарегистрирован: Сб сен 10, 2011 18:46:25
Сообщений: 2278
Рейтинг сообщения: 0
криминала в тексте не вижу, может фузы, кварц 8мГц присутствует?


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Чт янв 12, 2017 15:30:53 
Открыл глаза

Зарегистрирован: Пн янв 11, 2016 21:35:49
Сообщений: 53
Рейтинг сообщения: 0
Кварц внутренний на 8 стоит с фьюзами все ровно

Добавлено after 1 minute 46 seconds:
Вот скрин фьюзов


Вложения:
Снимок.PNG [20.54 KiB]
Скачиваний: 21
Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Чт янв 12, 2017 15:50:38 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 25
Зарегистрирован: Сб сен 10, 2011 18:46:25
Сообщений: 2278
Рейтинг сообщения: 0
хм на скриншоте JTAG - это не atmega8? Птичка это включен или выключен?


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Чт янв 12, 2017 16:02:14 
Открыл глаза

Зарегистрирован: Пн янв 11, 2016 21:35:49
Сообщений: 53
Рейтинг сообщения: 0
Атмега 16. Забыл указать. Да включён.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Чт янв 12, 2017 16:08:01 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 25
Зарегистрирован: Сб сен 10, 2011 18:46:25
Сообщений: 2278
Рейтинг сообщения: 0
так выключить, SPIEN не задеть!


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Чт янв 12, 2017 16:17:25 
Открыл глаза

Зарегистрирован: Пн янв 11, 2016 21:35:49
Сообщений: 53
Рейтинг сообщения: 0
А что изменится при отключение jtag?


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Чт янв 12, 2017 16:35:26 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 25
Зарегистрирован: Сб сен 10, 2011 18:46:25
Сообщений: 2278
Рейтинг сообщения: 0
глянул док. - вроде для PORTC0 отключение житага не даст ничего - может пробовать перейти на скорость UARTа ниже (1200), никогда меги с использованием UART без кварца не включал.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Чт янв 12, 2017 16:50:44 
Мудрый кот
Аватар пользователя

Карма: 21
Зарегистрирован: Сб май 14, 2011 22:16:04
Сообщений: 1715
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
oleg110592 писал(а):
никогда меги с использованием UART без кварца не включал.
Включал несколько раз на 9600 мегу8 со внутренним RC генератором, а OSCCAL не менял . Проблем не было.

Добавлено after 6 minutes 35 seconds:
LEX38RUS писал(а):
но если залить прошивку в кристалл то включить светодиод удается а вот выключить уже нет.
Я данный топик только бегло поглядывал. Хороший метод для тестирования UART, это возвращать на комп, что принял. В любой терминальной программе сразу будет видно.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Чт янв 12, 2017 16:58:28 
Открыл глаза

Зарегистрирован: Пн янв 11, 2016 21:35:49
Сообщений: 53
Рейтинг сообщения: 0
Попробую внешний поставить на 12. Но думаю ни чего не изменится. Отпишусь о результатах. Скорость кстати понижал.
Включение то нормально отробатывает.

Добавлено after 5 minutes 11 seconds:
И добавлю чтоб назад отсылал то что принял. Это я так понимаю, что то вроде эхо?


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Передача строки по UART
СообщениеДобавлено: Чт янв 12, 2017 17:06:11 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 25
Зарегистрирован: Сб сен 10, 2011 18:46:25
Сообщений: 2278
Рейтинг сообщения: 0

проверил протеус, мега16 - все четко


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 111 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.



Часовой пояс: 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