anonymous@RULINUX.NET~# Last login: 2024-12-23 12:13:18
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

[avr] Связь avr с компьютером через com порт

Понадобилось реализовать сабж. Сделал программу для avr:

c
#define F_CPU 8000000UL  // 8 MHz

#include <avr/io.h>
#include <stdint.h>

#define STATE PIND & (1<<PIND2)

void hello_world ()
{
    char *hw = "hello world";

    int i, c;
    i = 0;

    while ((c = hw[i]) != '\0')
    {
        UDR = c;
        while (! (UCSRA & (1<<TXC))) ;
        i++;
    }
}

int main()
{
    // INPUT
    DDRD = 0<<DDD2;
    PORTD = 1<<DDD2;
    uint8_t state = STATE;
    uint8_t released_state = state;

    // USART
    UCSRB = 1<<TXEN;
    UCSRC = (1<<UCSZ1)|(1<<UPM1); // 7 data bits in frame + even pairty, 1 stop bit

    UBRRH = 0;
    UBRRL = 207; // 2400 baud

    while (1)
    {
        state = STATE;
        if (state != released_state)
        {
            hello_world();
        }
    }
   
    return 0;
}

 


То есть когда я замыкаю контакты между PD2 и землей, по com порту шлется сообщение. На разъеме использую только землю и RD. Открываю minicom, выставляю 2400 baud, 1 stop bit, 7 data bit, even pairty.

Отсылаю несколько раз 'hello world', а принимаю такое: 'heleolhhloo lehdrwolhdrwolhhlo lehlo lehdrwolhdrrwolhdrwolhhlhedro loldrwo...'

ЧЯДНТ? Кабель у меня, кстати ~1.5 метров. Не длинно ли? Вроде я гуглил, что до 15 можно использовать.

anonymous(*) (2012-10-25 10:40:18)

Mozilla/5.0 (X11; FreeBSD amd64; rv:13.0) Gecko/20100101 Firefox/13.0.1

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: [avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 10:40:18
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

> принимаю такое
Это реальные данные, или ты просто так пальцами на клавиатуре в произвольном порядке понажимал? Попробуй изменить скорость, убрать нафиг чётность и пр. Попробуй какой-нибудь другой терминал (cu, picocom, cat /dev/ttySxкак_там_во_фряхе_ком-порт_обзывается. А уж если есть осциллограф...

anonymous(*)(2012-10-25 11:51:31)
Отредактировано anonymous по причине Не заметил, что FreeBSD
[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 11:51:31
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

> Это реальные данные, или ты просто так пальцами на клавиатуре в произвольном порядке понажимал?
терпеливо перепечатал, копипаст не для меня) Попробую. А как насчет кабеля, он не длинный?

anonymous(*)(2012-10-25 12:41:09)

Mozilla/5.0 (X11; FreeBSD amd64; rv:13.0) Gecko/20100101 Firefox/13.0.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 12:41:09
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

> А как насчет кабеля, он не длинный?
Нет, стандартный такой кабель. На твоей скорости длина кабеля даже на 17 метрах не должна сказываться.

anonymous(*)(2012-10-25 13:30:45)

[#] [Добавить метку] [Редактировать] Ответ на: [avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 10:40:18
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

> while (! (UCSRA & (1<<TXC))) ;
Кстати, да. Косяк-c. В датащите пишут, что этот TXC надо вручную обнулять. Не выпендривайся, и используй UDRE. И да, ожидание готовности (while) и установку UDR поменяй местами.

c
loop_until_bit_is_set(UCSRA, UDRE);
UDR = c;
 

anonymous(*)(2012-10-25 13:42:07)
Отредактировано anonymous по причине Сам дурак!
[#] [Добавить метку] [Редактировать] Ответ на: [avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 10:40:18
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Я бы начал с того, что проверил настройки инициализации порта. Дважды, трижды проверил бы.

Отключи контроль четности - чтобы видеть пришёл ли битый символ или не пришло ничего.

15м - это наверное для полного RS-232 (12ти вольтного). К тому же зависит от скорости передачи (видимо не твой случай). => возникает вопрос как ты вообще подключил устройство? Если напрямую - то просто попробуй уменьшить длину проводов, если что-то ещё - опиши что.

anonymous(*)(2012-10-25 13:46:53)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 13:46:53
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Из платы идет шлейф на разъем

anonymous(*)(2012-10-25 13:49:26)

Mozilla/5.0 (X11; FreeBSD amd64; rv:13.0) Gecko/20100101 Firefox/13.0.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 13:42:07
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

По-моему ты чего-то недопонимаешь. Он пишет байт в буфер и при этом флаг сбрасывается автоматически. Когда передача байта закончена - флаг будет установлен автоматически, чего он и ждёт в цикле. ИМХО в коде всё нормально.

anonymous(*)(2012-10-25 13:52:12)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 13:49:26
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Мне это ничего не говорит

anonymous(*)(2012-10-25 13:55:01)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 13:52:12
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Нет ты!

text
Bit 6 – TXC: USART Transmit Complete
This flag bit is set when the entire frame in the Transmit Shift Register has been shifted out and there are no new data currently present in the transmit buffer (UDR). The TXC flag bit is automatically cleared when a transmit complete interrupt is executed, or it can be cleared by writing a one to its bit location.
 


Очищается автоматически в обработчике прерываний, или нужно вручную записать 1.

anonymous(*)(2012-10-25 13:56:07)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 13:56:07
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Давай разберём отквоченное предложение на составные части:

> This flag bit is set when

Во всех остальных случаях он is not set.

> the entire frame in the Transmit Shift Register has been shifted out

Т.е. когда передача уже завершена

> and

Логическое выражение "И" обозначает что для того, чтобы флаг был установлен требуется ещё и второе условие:

> there are no new data currently present in the transmit buffer (UDR).

Т.е. если ты ничего не записал в UDR, то флаг может иметь состояние "1" => если ты что-то записал в UDR, то UDR будет сожержать "new data" и флаг будет установлен в "0" => запись в UDR сбрасывает этот флаг.

anonymous(*)(2012-10-25 14:49:43)

[#] [Добавить метку] [Редактировать] Ответ на: [avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 10:40:18
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Ура, мужики, всё работает)

Не уверен, что я сделал, но я переустановил ещё и fuse-биты. Не помню что даташит говорит, но может они сбросились, и из-за этого изменилась частота, а следовательно и значение в UBRRL было неверное.

Итак, работает на 9600 baud, no pairty

UPD: Да, проверку на запись фрейма сделал с помощью бита UDRE (в даташите даже есть пример кода)

anonymous(*)(2012-10-25 14:49:44)
Отредактировано anonymous по причине "не указана"
Mozilla/5.0 (X11; FreeBSD amd64; rv:13.0) Gecko/20100101 Firefox/13.0.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 14:49:43
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

> запись в UDR сбрасывает этот флаг.
Это твоё умозаключение или есть цитата из даташита?

UPD: Я нашёл только следущее:

text
The transmit buffer can only be written when the UDRE flag in the UCSRA Register is set. Data written to UDR when the UDRE flag is not set, will be ignored by the USART Transmitter.
 

anonymous(*)(2012-10-25 15:01:31)
Отредактировано anonymous по причине "не указана"
[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 14:49:44
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Ты для верности всё-таки верни код к исходному и проверь на 2400 с паритетом. Хотя да, если во фьзах прошился внутренний генератор, то частота должна была упасть в разы и это наиболее вероятная причина проблемы.

anonymous(*)(2012-10-25 15:02:57)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 14:49:43
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

currently тебе ничего не говорит? Я тут поостерегусь занимать чью-либо сторону, но в данном случае запись в UDR вряд ли должна что-то сбрасывать

anonymous(*)(2012-10-25 15:06:36)

Mozilla/5.0 (X11; FreeBSD amd64; rv:13.0) Gecko/20100101 Firefox/13.0.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 15:02:57
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Мне уже лень под стол с отверткой лазить

Было бы 2 com порта

anonymous(*)(2012-10-25 15:07:48)

Mozilla/5.0 (X11; FreeBSD amd64; rv:13.0) Gecko/20100101 Firefox/13.0.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 15:06:36
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

> currently тебе ничего не говорит?
В смысле? Что оно тебе говорит?

anonymous(*)(2012-10-25 15:17:46)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 15:07:48
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

А отвёртка-то зачем??

anonymous(*)(2012-10-25 15:18:16)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 15:18:16
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Программатор такой:

http://www.kosmodrom.com.ua/razrabotka/pic/AVR-PG1B.jpg

Там неудобные винтики с плоским шлицем. Так пихать ссыкотно, вдруг вывалится

anonymous(*)(2012-10-25 15:39:32)

Mozilla/5.0 (X11; FreeBSD amd64; rv:13.0) Gecko/20100101 Firefox/13.0.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 15:17:46
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

То, что флаг устанавливается, когда в буфере не осталось данных к пересылке НА ДАННЫЙ МОМЕНТ. Когда они появятся ПОЗЖЕ, он не обязан очищаться. Влом смотреть, как оно на самом деле, но из процитированного предложения ничего не следует

anonymous(*)(2012-10-25 15:44:01)

Mozilla/5.0 (X11; FreeBSD amd64; rv:13.0) Gecko/20100101 Firefox/13.0.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 15:39:32
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Охблеж... Потрать пяток евро на USB-программатор. Облегчишь себе жизнь - он и работает быстрее, и дефицит разъёмов USB на хосте если даже и возникнет, то легко решается хабом (т.е. не потребуется его отключать-подключать постоянно), и питать своё устройство будешь от него, и грузить прошивку он будет быстрее, ну и никаких винтов не нужно крутить..

anonymous(*)(2012-10-25 15:45:46)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 15:45:46
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

>Потрать пяток евро на USB-программатор.
+1024

Порт com не нужен. Вернее может нужен, но без нас решили что он не нужен, смысла сопротивляться прогрессу нет.

kiba(*)(2012-10-25 15:51:23)

Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.10.289 Version/12.02
[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 15:44:01
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

> То, что флаг устанавливается, когда в буфере не осталось данных к пересылке НА ДАННЫЙ МОМЕНТ. Когда они появятся ПОЗЖЕ, он не обязан очищаться. Влом смотреть, как оно на самом деле, но из процитированного предложения ничего не следует

Засунь фразу "there are no new data currently present in the transmit buffer" в гугл-транслейт и получишь буквальный перевод: "Никаких новых данных в настоящее время в буферe передачи" - это условие при котором флаг может быть установлен. После того, как новые данные поступили в UDR - флаг не может быть установлен пока эти данные не стали "старыми". Т.е. даже если он был установлен в тот момент, когда происходила запись в UDR, после этой записи он не может находиться в установленном состоянии, и следовательно он будет сброшен.

anonymous(*)(2012-10-25 15:56:03)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 15:01:31
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

> Это твоё умозаключение или есть цитата из даташита?

Это моя попытка помочь тебе понять твою же цитату из даташита.

anonymous(*)(2012-10-25 15:58:33)

avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Кстати, а на новых компьютерах его (com порт) ставят? У меня помимо основного ещё и нетбук, там, ясное дело, нет. А на десктопах? Если есть, можно переходник купить.

anonymous(*)(2012-10-25 16:01:30)

Mozilla/5.0 (X11; FreeBSD amd64; rv:13.0) Gecko/20100101 Firefox/13.0.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 16:01:30
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

На новых ноутбуках не ставят COM-порта уже давно, на стационарных новых не знаю (подскажите кто точней владеет информацией?), но дело идет дело к тому что его тоже не будет. У меня не новый ноутбук и тоже COM-порта нет, из-за этого только на USB ориентируюсь. Переходник конечно можно, но читал в интернетах много нелестных отзывов про них, что не так как нужно это все работает с этими переходниками, много танцев с бубном короче.

kiba(*)(2012-10-25 16:10:37)
Отредактировано kiba по причине "не указана"
Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.10.289 Version/12.02
[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 16:01:30
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

> Кстати, а на новых компьютерах его (com порт) ставят? У меня помимо основного ещё и нетбук, там, ясное дело, нет. А на десктопах? Если есть, можно переходник купить

На ноуты ком-порт уже почти не вешают, но он часто встречается в докстейшенах к ним. На десктопах - зависит от матери, на навороченных мамках вроде ставят и по сию пору (по крайней мере два года назад сам такую купил) - чтобы добавочной прибыли срубить. Переходники UART<->USB широко распространены, я пользовался разными (что было дешевле на момент покупки) - на стандартных частотах передачи никаких проблем. Под линупсом драйвера для USB-компортов идут искаропки. Дополнительный профит от использования переходника - питание на поделку берёшь с USB, т.е. если автономка не нужна - о нём можно не заморачиваться. Хотя потребляемый ток эти переходники декларируют мизерный, по этому если питать через них значительную нагрузку - то по уму вроде бы надо перешивать соотв.регистры переходника.. но я пока не сталкивался с такой проблемой.

anonymous(*)(2012-10-25 16:23:31)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 15:58:33
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

>> Это твоё умозаключение или есть цитата из даташита?
> Это моя попытка помочь тебе понять твою же цитату из даташита.
Нет, это больше похоже на твоё умозаключение. Ты из условий установки бита пытаешься сделать выводы об условиях его сброса. А это не одно и то же.

anonymous(*)(2012-10-25 16:34:09)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 16:34:09
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

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

anonymous(*)(2012-10-25 16:50:49)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 16:50:49
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Я написал, что я стал использовать UDRE

anonymous(*)(2012-10-25 17:21:54)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.16) Gecko/20120421 Iceweasel/3.5.16 (like Firefox/3.5.16)
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

>На новых ноутбуках не ставят COM-порта уже давно, на стационарных новых не знаю (подскажите кто точней владеет информацией?), но дело идет дело к тому что его тоже не будет. У меня не новый ноутбук и тоже COM-порта нет, из-за этого только на USB ориентируюсь. Переходник конечно можно, но читал в интернетах много нелестных отзывов про них, что не так как нужно это все работает с этими переходниками, много танцев с бубном короче.
Поэтому надо покупать не переходник USB -> COM, а PCIMCIA -> COM, они лучше работают.

svarwik(*)(2012-10-25 17:47:51)

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0
[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 17:21:54
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Погуглил - похоже что я действительно был не прав и TXC будучи единожды взведён не очистится при записи в UDR.

anonymous(*)(2012-10-25 17:53:22)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от svarwik 2012-10-25 17:47:51
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

> Поэтому надо покупать не переходник USB -> COM, а PCIMCIA -> COM, они лучше работают.

Они стоят дороже, а нужны только для поддержки чужих приветов из прошлого. Для своих поделок где нужно просто байты передать достаточно переходника USB -> COM.

anonymous(*)(2012-10-25 17:56:03)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от svarwik 2012-10-25 17:47:51
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

>а PCIMCIA -> COM, они лучше работают
А не лучше ли сразу под USB девайс проектировать, не пердставляю например olympus или LG какой-нибудь делающий фотик, телефон или еще какой-то девайс с расчетом что его нужно подключать пользователю через всякие PCIMCIA -> COM. :)

kiba(*)(2012-10-25 18:28:23)

Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.10.289 Version/12.02
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Ну так у девайса все ресурсы уйдут на обслуживание USB (это если эмклировать с v-USB), да и сложное это дело.

anonymous(*)(2012-10-25 18:46:32)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 17:53:22
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

> Погуглил - похоже что я действительно был не прав и TXC будучи единожды взведён не очистится при записи в UDR.
А спорил с самого утра. Нет чтобы сразу погуглить.

anonymous(*)(2012-10-25 18:46:41)

[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 18:46:41
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Ну ладно, ладно. Признаю: был неправ, вспылил..

anonymous(*)(2012-10-25 19:02:09)

avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Хорошо, что напомнил о фотиках.

Интересно, продолжает ли использоваться COM или LPT порт для всяких промышленных устройств и "сурьёзных" светочувствительных ПЗС-матриц (сам видел ПЗС-матрицу на LPT, правда давно)? Ещё интересна судьба SCSI.

anonymous(*)(2012-10-25 19:06:00)

Mozilla/5.0 (X11; FreeBSD amd64; rv:13.0) Gecko/20100101 Firefox/13.0.1
[#] [Добавить метку] [Редактировать] Ответ на: Re:[avr] Связь avr с компьютером через com порт от anonymous 2012-10-25 19:06:00
avatar
Скрыть

Re:[avr] Связь avr с компьютером через com порт

Для промышленных устройств использовался, используется и будет использоваться com-порт стандарта RS-485.

josephson(*)(2012-10-26 08:31:02)
Отредактировано josephson по причине "не указана"
Этот тред читают 4 пользователя:
Анонимных: 4
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!