Jump to content
Sign in to follow this  
willka78

Uart / Usart

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

Edited by IMXO

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

Финальные результаты тестирования литиевых батареек FANSO при нормальных условиях

Перед разработчиком устройства, в котором предполагается использование батарейки, всегда стоит задача выбора того или иного бренда. Конечно, наиболее объективный результат по качеству можно получить при реальном тестировании в режиме работы самого устройства. Для того чтобы у разработчиков была некоторая информация о реальных значениях основных параметров ЛХИТ, инженеры компании КОМПЭЛ решили провести серию из трех тестов. Первый тест на постоянный разряд в нормальных климатических условиях, начатый в апреле 2019 г., мы завершили.

Узнать финальный результат тестирования

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
                     

Видеокурс Работаем с микроконтроллерами STM32G0. Впервые на русском языке.

В цикле видеокурсов по работе с STM32G0 от компании STMicroelectronics показаны архитектура, периферия (особенности процессорного ядра, режимов пониженного питания, векторов прерываний, DMA и мультиплексора DMA, схемы тактирования и сброса, и.т.д.) и даны практические примеры. Материал дает наглядное понимание того, как начать работу на новых микроконтроллерах STM32G0

Подробнее

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

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

Edited by mr_electron

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Мучаюсь с 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 инициализировать???

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

Edited by Yuroy

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

В симуляторе вся Ваша передача занимает 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' ; Текст сообщения 

Edited by rtfcnf

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...