roboforum.ru

Технический форум по робототехнике.

Уарт - передатчик

Уарт - передатчик

к561ЛА7 » 20 янв 2018, 21:33

вот бы сделать такой передатчик... :) Считываешь данные с резисторов и передаешь их на экран компьютера... но я очень давно не брался за програмирование, и все подзабыл ... Короче без вашей помощи никак ) в общем, пацаны, хочется мне сделать этот передатчик и хоть немного почувствовать себя высокоранговым самцом ) но пока немогу понять, как задать массив их 512 переменных, например а, и как потом к нему обащаться чтобы посылать его на уарт... и как обращаться к переменным этого масссива, тоесть как записывать туда данные например в позиции , например а3, а4, а5, а6 этого массива и как считать эти позиции например.. Подскажите, плиз...

Re: Уарт - передатчик

Aseris » 20 янв 2018, 22:10

Эт типа стеб и потролить?

Код: Выделить всёРазвернуть
 value = arrray[index];
Uart_send(value);


не?

Добавлено спустя 2 минуты 33 секунды:
А вобще нужна конкретика что есть и где и что подключаем

Добавлено спустя 1 минуту 54 секунды:
Не оно? Переносной UART терминал

Добавлено спустя 2 минуты 41 секунду:
AVR. Работа с UART

Дальше гугль в помощь

Re: Уарт - передатчик

к561ЛА7 » 20 янв 2018, 23:33

Да уж какой там стеб...
Есть плата ардуино на АТмега 2560, компилятор Содвижн Авр

тоесть

value = a[512]; // назначаем массив из 512 переменных
Uart_send(value); // и посылаем его на уарт?

а теперь можно допустим с АЦП считывать и писать в а1, а2, а3 ? или array это команда?

я нашел во такую запись
char a[512]; // определяем массив а из 512 переменных (строка)
тогда наверно чтобы послать на уарт нужно будет писать
Uart_send(а);

Re: Уарт - передатчик

Aseris » 20 янв 2018, 23:49

Uart_send(а[0]);
..
Uart_send(а[511]);

Либо в цикле, либо только нужный индекс. посути работа с масивом на с.

С даным набором не работал, так что прямо код не подскажу, может есьть готовое API дл
я работы с UART. Смотри второй пример, код поидее должен для АВР быть подобный.

Если хотим послать число чтоб прочитать на терминале то нужно его перевести в текст.

Проблем с инициализацией уарта нет? чтото посылается/принимается?

Re: Уарт - передатчик

к561ЛА7 » 21 янв 2018, 00:04

мне нуюно сразу послать все 512 чисел одним пакетом, по протоколу ДМХ 512, это то же что уарт, только перед началом нужно синхроимпульс сформировать.. тоесть послать сразу весь массив.. или строку...
инициализировать пока не пробывал, думаю как обьявить этот массив чтобы можно было в него числа писать , тоесть в определенные места пакета фрейма

Re: Уарт - передатчик

Aseris » 21 янв 2018, 00:47

C DMX не знаком,
но посылка масива:

Код: Выделить всёРазвернуть
unsigned int index;
char a[512];

/*заполнение масива*/
...
/*Послать синхроимпульс*/
...
/*послать даные*/
for (index=0;index<sizeof(a); index++)
{
Uart_send(а[index]);
}

Re: Уарт - передатчик

к561ЛА7 » 21 янв 2018, 23:26

Спасибо.
но почему то компилятор кодвидн авр пишет "undefinet simbol Uart_send
И я пытаюсь заполнить массив числами, пишу
a1 = 11;
но компилятор пишет что переменная a1 тоже не определена... тоесть ка заполнять конкретные ячейки массива - непонятно... и как читать из конкретных ячеек массива..

о, блин.. написал

a[1] = 11;

и компилятор не ругнулся !!!! Счас попробую )

да, а ты не знаешь как на дисплейчик 1602 выводить числа из массива ? :bad:
пишу

lcd_gotoxy(4,0);
lcd_putsf(a[1]);

и не работает ( пишет параметр 1 не совместим с типом flash (

Re: Уарт - передатчик

Romikgy » 22 янв 2018, 11:44

lcd_putchar .... или что то аналогичное

Re: Уарт - передатчик

Aseris » 22 янв 2018, 14:23

А може почитать для начала чтото вроде "c для чайников", чтоб єлементарные вещи не спрашивать?

Re: Уарт - передатчик

RootAdmin » 22 янв 2018, 14:42

Я так понял - что нужно
1. Присвоить элементам массива значения.
2. Отправить их в UART?

Написать пример (правда под руками только ардуино IDE).

Re: Уарт - передатчик

к561ЛА7 » 22 янв 2018, 23:53

Aseris писал(а):А може почитать для начала чтото вроде "c для чайников", чтоб єлементарные вещи не спрашивать?


полдня не работало и вдруг заработало )

[code
sprintf(string, "%4d", b3); это выводим переменую
lcd_puts(string);

sprintf(string, "%4d", a[1]); а это элемент массива
lcd_puts(string);]
[/code]

Добавлено спустя 4 минуты 43 секунды:
RootAdmin писал(а):Я так понял - что нужно
1. Присвоить элементам массива значения.
2. Отправить их в UART?

Написать пример (правда под руками только ардуино IDE).


ну да, присвоить и отправить...
похоже что присвоить очень просто..
вот так

a[1] = 2;

а вот на запись
for (index=0;index<sizeof(a); index++)
{
Uart_send(a[index]);
}
компилятор ругается, что андефинит симбол Uart_send (

Re: Уарт - передатчик

к561ЛА7 » 23 янв 2018, 09:59

вчера все работало..

Код: Выделить всёРазвернуть
    sprintf(string, "%4d", b);
    lcd_puts(string);

    sprintf(string, "%4d", b1);
    lcd_puts(string);   

    sprintf(string, "%4d", b2);
    lcd_puts(string);

    sprintf(string, "%4d", b3);
    lcd_puts(string);

  sprintf(string, "%4d",a[0]);
    lcd_puts(string);


    sprintf(string, "%4d", a[1]);
    lcd_puts(string);


    sprintf(string, "%4d", a[2]);
    lcd_puts(string);

    sprintf(string, "%4d", a[3]);
    lcd_puts(string);





поменял
sprintf(string, "%4d", a[1]);
lcd_puts(string);
на
sprintf(string, "%4d", a[1+1]);
lcd_puts(string);
и перестало выводить вторую строчку... на ЛСД..
вернул обратно - все равно не выводит..
если загнать в первую строчку, тоесть только 4 записи - выводит нормально..

че за "офигеть", может знает кто..

сам дисплейчик работает нормально, если писать в него просто символы...

Re: Уарт - передатчик

Romikgy » 23 янв 2018, 12:30

что есть string ?

Re: Уарт - передатчик

к561ЛА7 » 23 янв 2018, 23:44

Romikgy писал(а):что есть string ?


функция

void sprintf(char flash, char flash *fmtstr [,arg1, arg2, ...])
она форматирует строку и записывает ее в массив. после этого ее можно вывести на экран.

unsigned char temp = 123;
unsigned char string[20];
sprintf(string, "temp = %05d\n", temp);
lcd_puts(string);


Что означает эта абра-кадабра. Первая строка создает переменную и присваевает ей
значение. Тут все понятно, а вот что делает вторая. Все по порядку. Сначала выводится
запись temp = , затем 00123. Почему выводится 00123. А потому что у нас есть условие
%05d\n которое говорит:

1) % - будем форматировать значения первого аргумента
2) 0 - будем выводить n знаков, пустые забьем нулями
3) 5 - выводим 5 знаков, если число меньше 5 знаков, то заполнить пустышки
нулями. Об этом говорит пункт 2. Число будет выровнено по правому краю.
4) d - выводим число в десятичном формате.
5) \n - Заставит после вывода символа перейти на другую строку.


взято отсюда http://www.avrki.ru/articles/content/lcdsegment/


Rambler\'s Top100 Mail.ru counter