Перейти к содержанию

Uart / Usart


willka78

Рекомендуемые сообщения

Ребята спасите, уже который месяц сижу думаю и думаю, и ничего не могу надумать путевого :) Возможно я ищу что-то не в правильном направлении, но найти ответа на сложившиеся вопросы я просто не могу. Мне нужно следующее, прямое управление с компьютера микроконтроллером, все поиски постоянно выводят меня на программирование микроконтроллеров, это для меня пройденный этап, вот некоторые поиски вывели на USART/UART, почитал, что-то понял, что-то нет, был бы пример я бы разобрался давно. Как я понял это и есть отправка-прием сигналов в микроконтроллер-из микроконтроллера, схема преобразования в TTL есть и ее подключение к МК, а что делать дальше?, это самый больной для меня сейчас вопрос. Допустим мы соберем простую схему, прицепим 1 светодиод к микроконтроллеру, и подключим к ком порту все это через вышесказанную схему, а как писать программу в компьютере на отправку сигнала? Насколько я понимаю мы пишем сперва программу для МК, заливаем ее, а потом нужно писать программу для компа как бы??? Скажем сделаем программу так, 2 кнопки, вкл и выкл, на вкл включаем светодиод на выкл- выключаем. Если кому-то не составит труда объяснить все это на "пальцах" если я это понимаю не так как оно есть на самом деле, а еще лучше с программным кодом, ну так для намека чтобы было. Надеюсь на Вашу помощь, и заранее говорю спасибо

Ссылка на комментарий
Поделиться на другие сайты

на компе пишите программу скажем 1 кнопке присваиваете какой-то код

в проге настраиваете управление СОМ-портом и передаете этот код в МК

в МК обрабатываете этот код и зажигаете свои СД

более подробно об этом можно почитать у

1 А.Ю. Кузьминов интерфейс RS232 ,примеры прог для ПК и МК

2 Пей Ан Сопряжение с ПК

Изменено пользователем IMXO
Ссылка на комментарий
Поделиться на другие сайты

А для МК тоже что-то писать нужно, прошивку? или оно будет общаться с компом напрямую, данные будут поступать, или будет оно работать так как мы в МК зашиваем программу, а потом просто с компа говорим что именно нужно сделать из запрограммированого случая???

А еще литературы не найдется по данной теме, а то так вкусно, аж еще охото, да еще и примеры написанные на дельфи, это вообще замечательно, вот дельфи я заметил, язык программирования с полной дисциплиной, не как с++ помойка какая-то, а не программная структуризация, не понимаю почему оно завоевало себе такой авторитет, хотя программная возможность выше как понимается. ну это все лирика, а за книги большое спасибо как раз то что нужно, хотя конкретные примеры было бы лучше B)

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Естественно, для МК нужна прошивка и для ПК программа управляющая. Для связи МК с ПК я пользовал адаптер на FT232, можно и на МАХ232. Я делал так - в мк кольцевой буфер на прием\отправку, сидит и ждет пока в буфер свалится какойто символ, дальше проверяем, если это нужный символ - делаем что нада, если нет - сидим дальше. Сложного ничего нет)

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Естественно, для МК нужна прошивка и для ПК программа управляющая. Для связи МК с ПК я пользовал адаптер на FT232, можно и на МАХ232. Я делал так - в мк кольцевой буфер на прием\отправку, сидит и ждет пока в буфер свалится какойто символ, дальше проверяем, если это нужный символ - делаем что нада, если нет - сидим дальше. Сложного ничего нет)

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

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Надо найти даташит на конкретный микроконтроллер, поддерживающий (а точнее имеющий в своем составе) USART. Далее по даташиту проследить всю цепочку задействования этого USART'а. То есть какие имеются регистры, что надо сделать для приема байта, что - для передачи. Если имели дело с PIC'ами, то вроде PIC16F874 (876, 877) работают с USART. Со стороны комьютера надо определиться на каком языке будете программировать. Если на Delphi, то имеется свободно распространяемый компонент TBComPort (построен на основе api функций, но в использовании намного проще). Его необходимо установить в Delphi, описание его использования как правило прилагается (наберите в поиске TBComPort). А конкретная программа вряд ли поможет, если перед глазами нет даташита.

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

Изменено пользователем mr_electron
Ссылка на комментарий
Поделиться на другие сайты

работа с буфером подробно описана на http://chipenable.ru/index.php/programming-c/44-usart-uart-queue.html Код рабочий, я на его взял за основу

А вообще рекомендую обучалку DIHALTa http://easyelectronics.ru/category/avr-uchebnyj-kurs

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Помогите пожалуйста еще с уартом, что-то не получается сделать вход в МК и сверить условие, по примерам делал, там пишут у них работает у меня нет, работает только выход из МК, ну отправка в компьютер в сымсле, а из компьютера не хочет :(

Ссылка на комментарий
Поделиться на другие сайты

Добрый день програмисты!

Мучаюсь с ATMEGA8535. Хочу передать информацию, а именно в моём случае три буквы "AVR" с мокроконтроллера через USART на COM порт компьютера в программу hiper terminal.

Программка зашиваемая в контроллер вот:

.include "m8535def.inc" ; Присоединение файла описаний

.list ; Включение листинга

.def temp=R16 ; Определение главного рабочего регистра

.def count=R17 ; Счётчик

.equ start=0 ; 0 вывод порта PD

.def rab=r18

.org 0 ; Установка текущегно адреса в ноль

rjmp init

;---------------Инициализация микроконтроллера------------------

init:

;-----------------Инициализация стёка--------------------------

ldi temp, high(RAMEND) ; Выбор адреса вершины стёка

out SPH, temp ; Запись его в регистр стёка

ldi temp, low(RAMEND)

out SPL, temp

ldi ZL, low(text*2)

ldi ZH, high(text*2)

ldi count, 3 ; Установка счётчика байтов

ldi temp, 0 ; Запись 0 в temp

out DDRC, temp ; Порт D на ввод

ldi temp, 0xFF

out PORTC, temp ; Подключаем внутренние резисторы

;---------------Настройка UART на передачу данных---------------

ldi temp, 1 ;Настройка скорости

out UBRRL, temp

ldi temp, 0

out UCSRA, temp

ldi temp, (1<<RXEN)|(1<<TXEN)|(0<<RXCIE)|(0<<TXCIE)|(0<<UDRIE)

out UCSRB, temp

ldi temp, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)

out UCSRC, temp

WAIT_START: sbic PINC, start ; Ожидание нажатия кнопки

rjmp WAIT_START

OUTPUT: lpm ; Загрузка байта из програмной памяти в r0

out UDR, r0 ; Вывод этого байта в регистр данных(пер-ик)

sbi UCSRA, TXC ; Сброс флага ТХС

WAIT: sbic UCSRA, TXC ; Ожидание завершения передачи

rjmp next

rjmp WAIT

next: adiw zl,1 ; Увеличение адреса на 1

dec count ; Уменьшение счётчика на 1

brne OUTPUT ; Продолжение вывода(перейти сли Z не равно 0)

fin: rjmp fin ; Передача завершена

text: .db 'A','V','R' ; Текст сообщения

Пишу а AVR studio. Когда запускаю пошаговое выполнение программы в AVR studio, то нужный код поступает в регистр UDR. Когда прошиваю программу в контроллер , то на выходе TXD нет никакого кода. Симулирую программу в протеусе, тоже на выходе TXD ничего нет.

Вопрос в том куда этот код девается, как его на TXD вывести?

Может в программу ещё што-то надо дописать....?

Много книжек пересмотрел, не могу найти нужный пример.

Может как-нибудь надо ещё и TDX инициализировать???

Выручайте....

Изменено пользователем Yuroy
Ссылка на комментарий
Поделиться на другие сайты

Помимо записи программы в AVR еще нужно прошить конфигурацию, Вы это делаете?

Схему устройство тоже не плохо бы показать.

А Гипер-терминал умеет работать с LPT?

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

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

Ссылка на комментарий
Поделиться на другие сайты

Помимо записи программы в AVR еще нужно прошить конфигурацию, Вы это делаете?

Схему устройство тоже не плохо бы показать.

А Гипер-терминал умеет работать с LPT?

Исправил на COM. Если вы имеете ввиду фьюзы под словом конфигурация, то их пока не трогал?

Схема очень простая. Питание, и кнопка в порту PC0. Есть ещё микросхема МАХ232, но и без этого сигнал на вывлде контроллера TXD должен быть.

Частота от внутреннего генератора 1 МГц.

Ссылка на комментарий
Поделиться на другие сайты

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

Про протеус не могу ни чего сказать, не пользуюсь.

Вот еще вариант. Свой код допишите сами.

Обратите внимание, что ожидание сделано вот так " SBIS UCSRA,UDRE "

.include "m8535def.inc"
; Internal Hardware Init  ======================================
.equ     XTAL = 8000000     
.equ     baudrate = 9600  
.equ     bauddivider = XTAL/(16*baudrate)-1

.list ; Включение листинга
.def temp=R16 ; Определение главного рабочего регистра
.def count=R17 ; Счётчик
.equ start=0 ; 0 вывод порта PD
.def rab=r18
.org 0 ; Установка текущегно адреса в ноль

   	rjmp init
;-----------------Инициализация стёка--------------------------
init:
   	ldi temp, high(RAMEND) ; Выбор адреса вершины стёка
   	out SPH, temp ; Запись его в регистр стёка
   	ldi temp, low(RAMEND)
   	out SPL, temp
   	ldi ZL, low(text*2)
   	ldi ZH, high(text*2)
   	ldi count, 3 ; Установка счётчика байтов
   	ldi temp, 0 ; Запись 0 в temp
   	out DDRC, temp ; Порт D на ввод
   	ldi temp, 0xFF
   	out PORTC, temp ; Подключаем внутренние резисторы

   	rcall    uart_init

Main:
   	LDI    R16,'E'   	 ; загоняем в регистр код буквы «E»
   	RCALL    uart_snt    ; Вызываем процедуру отправки байта.
stop:
   	NOP   		 ; Любой дальнейший код
   	NOP
   	rjmp    stop


uart_init:    
   	LDI    R16, low(bauddivider)
   	OUT    UBRRL,R16
   	LDI    R16, high(bauddivider)
   	OUT    UBRRH,R16

   	LDI    R16,0
   	OUT    UCSRA, R16

; Прерывания запрещены, прием-передача разрешен.
   	LDI    R16, (1<<RXEN)|(1<<TXEN)|(0<<RXCIE)|(0<<TXCIE)|(0<<UDRIE)
   	OUT    UCSRB, R16    

; Формат кадра - 8 бит, пишем в регистр UCSRC, за это отвечает бит селектор
   	LDI    R16, (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)
   	OUT    UCSRC, R16

; Процедура отправки байта
uart_snt:    
   	SBIS    UCSRA,UDRE    ; Пропуск если нет флага готовности
   	RJMP    uart_snt     ; ждем готовности - флага UDRE

   	OUT    UDR, R16    ; шлем байт
   	RET

;Посылка байта:
   	RCALL    uart_init     ; вызываем нашу процедуру инициализации.

;Ожидание байта
uart_rcv:    
   	SBIS    UCSRA,RXC    ; Ждем флага прихода байта
   	RJMP    uart_rcv    ; вращаясь в цикле

   	IN    R16,UDR   	 ; байт пришел - забираем.
   	RET
text: .db 'A','V','R' ; Текст сообщения 

Изменено пользователем rtfcnf

Это сообщение поставляется "как есть", без каких либо гарантий. Автор сообщения не несёт какой либо ответственности

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

Ссылка на комментарий
Поделиться на другие сайты

В общем кажется разобрался. Моя программа написана правильно.

rtfcnf, вся загвоздка была как вы и предполагали в частоте микроконтроллера, а также в скорости передачи кода BAUD.

В регистр UBRRL загрузил 0х33, что соответствует скорости 9600 при частоте микроконтроллера 8 МГц.

Заработало в протеусе! Попробовал разные частоты, разные скорости обмена, почему-то только на частоте 8 МГц и со скоростью 9600 работает(в протеусе). На других частотах выдаёт непонятные символы. Ну хорошо, что теперь знаю почему не работало. Я думал, что всё таки дело в программе.

В понедельник проверю на железе - отпишусь.

rtfcnf, спасибо за советы. :rolleyes:

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Идеально! Просто, идеально! На W10 64 находятся 2 физических ком порта(1 и 2) и один виртуальный (перенастроенный 10-й) при запуске программы определяются все три порта, по порядку: ком 1, ком 10, ком 2. Если же запущена программа (у меня программатор в выбором ком порта), и она занимает какой либо ком порт, при запуске BootLoader12 определяются только свободные ком порты. Опробовано со всеми доступными портами, прекрасно все определяется. Ну и конечно-же проверены самые главные функции: бутлодер определяется с первого раза (в первой версии определялся со второго раза,.... не существенно), еепром записывается, флеш тоже записывается! (у меня битый чип, и флеш не записыватся,.... не существенно). Огромнейшее СПАСИБО ВЕЛИЧАЙШЕМУ МАСТЕРУ! (... это тяжелый труд, знаю по себе ...)
    • Дожили, "ардуино" на капельку .моющего надо..  Даже не смеюсь. .. Дитя прогресса, вы не заметили. Как вас грамотно - стесняюсь написать... Послали за ... их деньгами.
    • Фото нет. И это не печать, просто кусочек текстолита. Поставил точки, засверлил, поставил детали, распаял выводами. Да там работы - на 15 мин. Убрать С1, С2, землю из розетки. (3-й провод,который по схеме припаян к земле)
    • AlexeyStudent.  Даже не смотрел. Тема на диплом радиоинженера. Можете поверить. Через 16 лет.. Входное сопротивление - это ток через входное сопротивление при определённом напряжении на входе. И началось..
    • Всё просто - не бегает. Только один раз делал. Опыта мало.
    • А он при минимуме телодвижений дает качество очень приличное. Соотношение хорошее, короче  И по циферкам - не рекордсмен, но вполне.    
    • https://forum.vegalab.ru/showthread.php?t=70634 Имеется ввиду усь аудиоманьяка на 3886.
×
×
  • Создать...