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

Вопросы от начинающих по МК


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

я чуть поправил то что приходит на плату, посмотрите еще раз пожалуйста!

в том то и дело что это вроде как не код ASCII, а что то другое , но что? совсем не понятно..

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

Конфигурация UART какая? а на компе какая конфигурация порта выставлена? RS232-TTL преобразователь используется со стороны контроллера? Еще неплохо бы постоянно контролировать возникающие ошибки UART, например ошибку фрейминга (Framing error) что скажет тебе о неверной скорости передачи.

Для начала, сделай на контроллере эхо, принимаешь и тут же передаешь обратно.

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

Учение - изучение правил. Опыт - изучение исключений.

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Конфигурация UART какая? а на компе какая конфигурация порта выставлена? RS232-TTL преобразователь используется со стороны контроллера? Еще неплохо бы постоянно контролировать возникающие ошибки UART, например ошибку фрейминга (Framing error) что скажет тебе о неверной скорости передачи.

Для начала, сделай на контроллере эхо, принимаешь и тут же передаешь обратно.

@Конфигурация UART какая?@

; выполняемые функции: через модуль UART от компьютера принимаем числа

; которые отображаются на 8 СИДах в двоичном коде.

.device ATmega8515

.nolist

.include "m8515def.inc"

.list

;================

; Объявления

.def temp = r16

; FLASH ===========================================

.CSEG ; Кодовый сегмент

;====== Таблица векторов прерываний================

.ORG 0x0000 ; RESET - Аппаратный сброс

RJMP Init

.ORG 0x0001 ; INT0 - External Interrupt0 Vector Address; Внешнее прерывание 0 ;

RETI

.ORG 0x0002 ; INT1 - External Interrupt1 Vector Address; Внешнее прерывание 1 ;

RETI ; Ничего не делаем, возвращаемся в основную программу

.ORG 0x0003 ; ICP1 - Input Capture1 Interrupt Vector Address; Событие захват Таймера/Счетчика 1 ;

RETI

.ORG 0x0004 ; OC1A - Output Compare1A Interrupt Vector Address ;Событие "совпадение A" Таймера/Счетчика 1 ;

RETI

.ORG 0x0005 ; OC1B - Output Compare1B Interrupt Vector Address; Событие "совпадение B" Таймера/Счетчика 1 ;

RETI

.ORG 0x0006 ; OVF1 - Overflow1 Interrupt Vector Address; Переполнение Таймера/Счетчика 1 ;

RETI

.ORG 0x0007 ; OVF0 - Overflow0 Interrupt Vector Address; Переполнение Таймера/Счетчика 0 ;

RETI

.ORG 0x0008 ; SPI - SPI Interrupt Vector Address; Передача данных по SPI завершена

RETI

.ORG 0x0009 ; URXC - UART Receive Complete Interrupt Vector Address; Прием данных по UART завершена

rjmp PriemZavershen ; Переходим к обработчику прерывания

.ORG 0x000a ; UDRE - UART Data Register Empty Interrupt Vector Address; Регистр данных UART пуст

RETI

.ORG 0x000b ; UTXC - UART Transmit Complete Interrupt Vector Address; Передача данных по UART завершен

reti;

.ORG 0x000c ; ACI - Analog Comparator Interrupt Vector Address; Готов результат аналогового компаратора

RETI

.ORG 0x000d ; INT2 - External Interrupt2 Vector Address

RETI

.ORG 0x000e ; OC0 - Output Compare0 Interrupt Vector Address

RETI

.ORG 0x000f ; ERDY - EEPROM Interrupt Vector Address

RETI

.ORG 0x0010 ; SPM - SPM complete Interrupt Vector Address

RETI

;.ORG 0x0011 ; SPMR - SPM complete Interrupt Vector Address

; RETI

; .ORG INT_VECTORS_SIZE

;================ ; Конец таблицы векторов прерываний===

;============ Блок подпрограмм обработки прерываний ===========

PriemZavershen:

in temp,UDR

out PortB,temp

reti

;============ конец Блока подпрограмм обработки прерываний ===========

;=================== Основная программа ======================

Init:

;++++++++++++++ Сдержимое файла INITCORE.INC +++++++++++++++++++++++++

;==== Инициализация ядра: Память; Регистры; Стек =============

.include "INITCORE.inc"

;++++++++++++++ Конец Содержимого файла INITCORE.INC +++++++++++++++++

;======= Инициализация внутренних периферийных устройств:======

ldi temp , 0b11111111 ; определяем входы\выходы порта В,

out DDRB , temp ; 1 делает вывод выходом, 0 - входом!

ldi temp , 0b00000000 ; определяем в\в порта D

out DDRD , temp

ldi temp , 0b11111111 ; включаем подтяжку (1) для входов порта В

out portB , temp ; и задаем начальние состояния выходов

ldi temp , 0b00000000 ; то же самое для D

out portD , temp

ldi temp, 1<<RXEN|1<<RXCIE ; разрешаем прием и прерывание по приему по UART

out UCSRB, temp

ldi temp,25 ; задаем скорость UART = 9600

out UBRRL, temp

ldi r16, (1<<URSEL|1<<UCSZ0|1<<UCSZ1) ; 8-мибитный формат посылки

out UCSRC,r16

sei ; глобально разрешаем прерывания!

;==== Коенц Инициализация внутренних периферийных устройств====

;========================= Главный цикл =======================

Start:

nop

rjmp Start

@ а на компе какая конфигурация порта выставлена? @

я пользуюсь програмкой "терминал 1.9" все так же выставляю, скорость 9600,

стоп бит один

@RS232-TTL преобразователь используется со стороны контроллера?@

что это? я подключаю COMпорт компьютера с COMпортом отладочной платы STK500

@ Для начала, сделай на контроллере эхо, принимаешь и тут же передаешь обратно.@

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

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

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

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

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

Учение - изучение правил. Опыт - изучение исключений.

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

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

Здравствуйте, скачал прошивку в hex для схемы плавного включения/выключения светодиодов на attiny 13. В прошивке задано время включения/выключения 15сек., как можно изменить это время в прошивке, чем открыть для редактирования?

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

hex....

как можно изменить это время в прошивке, чем открыть для редактирования?

Никак, ну или почти никак. Нужен исходник.

Errare humanum est. Коли людЯм позволено, что же о нас то говорить!
 

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

Дизассемблировать исходник, понять как работает программа и найти эту злополучную константу. Но, можно взять симулятор запустить программу на выполнение и посмотреть в каких ячейках памяти организован счетчик. Затем в дизассемблированном коде найти где в него загружается константа(как правило счетчики организуют на декремент - так проще проверить конец отсчета, иначе нужна еще одна команда сравнения или целый алгоритм если счетчик не однобайтный)

Но... если делал дилетант - константа будет в памяти программ, но если программу делали основательно, на вырост - эта константа может быть вынесена в EEPROM. Посмотри, нет ли там значений отличных от FF. Константа может быть не в минутах, а в количестве прерываний от таймера или в секундах, или в сотнях милисекунд, или отсчет может производится кратными 20мс интервалами(привязка к сетевому напряжению, и правда зачем выдумывать какие-то счетчики когда есть такой надежный источник 50Гц)

Учение - изучение правил. Опыт - изучение исключений.

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

Товарищи ,не понимаю.. Ацп на pic16f877. на входе 1-5В на выходе в юарт пишется FF (3,5в - СС | 1в - CD) и тд.

во что только не переводил. непонимаю. Как переводить и как сопоставлять. в чем нюанс?

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

Это зависит от настройки АЦП. Он выдает код от 0 до максимального значения при напряжении равном опорному, а вот источник опорного напряжения можно выбирать, если в качестве опорного используется напряжение питания - это потенциометрический режим, подключив ко входу потенциометры запитанные от питания контроллера на выходе АЦП будет код 0..255 (при 8 битах) пропорционально повороту ручки потенциометра независимо от напряжения питания контроллера.

Учение - изучение правил. Опыт - изучение исключений.

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

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

переключал, на порт А, та же ситуация.

Может у кого есть STK500? попробовать у Вас мою програму запрограмировать? или какая нибудь другая отдодная плата?

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

Так, а давайте подробней что именно Вы посылаете в порт(16-ричное значение каждого отсылаемого байта). И неплохо было бы пройтись отладчиком по всей программе в пошаговом режиме. Например, подключить контроллер в Proteus к виртуальному порту передавать туда данные и отлаживать программу в AvrStudio используя специальный плагин-отладчик(ищется в гугле без проблем) который связывает AvrStudio с удаленным отладчиком в лице Proteus-а. МОжет у тебя где есть лишний код, прерывание или подпрограмма которая в неподходящий момент портит содержимое регистра. Кстати, а ЧЕМ ты отслеживаешь уровни на выводах порта? Может неисправен индикатор?

Учение - изучение правил. Опыт - изучение исключений.

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

Так, а давайте подробней что именно Вы посылаете в порт(16-ричное значение каждого отсылаемого байта).

я пользуюсь програмкой Terminal v1.9b, там набираю $01,$02,$03...$FF. То есть отсылаю 16ричное значение.

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

Проходил в AVR studio пошагово, работает как надо. Протеусом не пользовался ни разу, пока не в курсе что такое, нужная штука? не одно и то же что и пошагово в студии пройтись?

МОжет у тебя где есть лишний код, прерывание или подпрограмма которая в неподходящий момент портит содержимое регистра.

нету ничего все прозрачно,еще раз могу отослать код?

Кстати, а ЧЕМ ты отслеживаешь уровни на выводах порта? Может неисправен индикатор?

имеется 8 светодиодов, которые я подключчаю к порту. Работают все, проверял.

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

В студии нет эмулятора порта, как эмулировать прием данных чтобы посмотреть на реакцию?

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

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

Учение - изучение правил. Опыт - изучение исключений.

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

В студии нет эмулятора порта, как эмулировать прием данных чтобы посмотреть на реакцию?

Как нет? все порты в окошке " I\O View ". В USART пишу в регистр UDR данные, которые якобы принял, и в порту PORTB, после перехода в обработчик прерывания, они отражаются. Так все работает.

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

...в том то и дело что это вроде как не код ASCII, а что то другое , но что? совсем не понятно..

Если светодиоды подключены с общим анодом, то не забывай инвертировать принятый байт перед выводом в порт. Иначе получится "что то другое , но что?". :)

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

это понятно, суть проблемы в другом:

посылаю $01 но на плате показывает 10000001 а не 00000001

тут инверсия не при чем.

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

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

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

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

; выполняемые функции: через модуль UART от компьютера принимаем числа

; которые отображаются на 8 СИДах в двоичном коде.

.device ATmega8515

.nolist

.include "m8515def.inc"

.list

;================

; Объявления

.def temp = r16

; FLASH ===========================================

.CSEG ; Кодовый сегмент

;====== Таблица векторов прерываний================

.ORG 0x0000 ; RESET - Аппаратный сброс

RJMP Init

.ORG 0x0001 ; INT0 - External Interrupt0 Vector Address; Внешнее прерывание 0 ;

RETI

.ORG 0x0002 ; INT1 - External Interrupt1 Vector Address; Внешнее прерывание 1 ;

RETI ; Ничего не делаем, возвращаемся в основную программу

.ORG 0x0003 ; ICP1 - Input Capture1 Interrupt Vector Address; Событие захват Таймера/Счетчика 1 ;

RETI

.ORG 0x0004 ; OC1A - Output Compare1A Interrupt Vector Address ;Событие "совпадение A" Таймера/Счетчика 1 ;

RETI

.ORG 0x0005 ; OC1B - Output Compare1B Interrupt Vector Address; Событие "совпадение B" Таймера/Счетчика 1 ;

RETI

.ORG 0x0006 ; OVF1 - Overflow1 Interrupt Vector Address; Переполнение Таймера/Счетчика 1 ;

RETI

.ORG 0x0007 ; OVF0 - Overflow0 Interrupt Vector Address; Переполнение Таймера/Счетчика 0 ;

RETI

.ORG 0x0008 ; SPI - SPI Interrupt Vector Address; Передача данных по SPI завершена

RETI

.ORG 0x0009 ; URXC - UART Receive Complete Interrupt Vector Address; Прием данных по UART завершена

rjmp PriemZavershen ; Переходим к обработчику прерывания

.ORG 0x000a ; UDRE - UART Data Register Empty Interrupt Vector Address; Регистр данных UART пуст

RETI

.ORG 0x000b ; UTXC - UART Transmit Complete Interrupt Vector Address; Передача данных по UART завершен

reti;

.ORG 0x000c ; ACI - Analog Comparator Interrupt Vector Address; Готов результат аналогового компаратора

RETI

.ORG 0x000d ; INT2 - External Interrupt2 Vector Address

RETI

.ORG 0x000e ; OC0 - Output Compare0 Interrupt Vector Address

RETI

.ORG 0x000f ; ERDY - EEPROM Interrupt Vector Address

RETI

.ORG 0x0010 ; SPM - SPM complete Interrupt Vector Address

RETI

;.ORG 0x0011 ; SPMR - SPM complete Interrupt Vector Address

; RETI

; .ORG INT_VECTORS_SIZE

;================ ; Конец таблицы векторов прерываний===

;============ Блок подпрограмм обработки прерываний ===========

PriemZavershen:

in temp,UDR

out PortB,temp

reti

;============ конец Блока подпрограмм обработки прерываний ===========

;=================== Основная программа ======================

Init:

;==== Инициализация ядра: Память; Регистры; Стек =============

;================= Инициализация Памяти ======================

RAM_Flush: LDI ZL,Low(SRAM_START) ; Адрес начала ОЗУ в индекс

LDI ZH,High(SRAM_START)

CLR R16 ; Очищаем R16

Flush: ST Z+,R16 ; Сохраняем 0 в ячейку памяти

CPI ZH,High(RAMEND) ; Достигли конца ОЗУ?

BRNE Flush ; Нет! Крутимся дальше!

; Старший байт достиг конца ОЗУ!!!

; Заполняем оставшиеся 255 байт ОЗУ нулями.

CPI ZL,Low(RAMEND) ; Младший байт достиг конца ОЗУ?

BRNE Flush ; Нет! Крутимся дальше, до конца ОЗУ.

ST Z , r16 ; Да? тогда очиаем последний адрес и выходим из цикла

;=============== Инициализация регистров =====================

; Очищаем 32 индексных регистра R0-R31

ldi ZL, 30 ; ZL есть регистр R30

CLR ZH ; ZH есть регистр R31

dec Zl

st Z,ZH

BRNE PC-2

;================ Инициализация стека ========================

LDI R16,Low(RAMEND) ; Обязательно!!!

OUT SPL,R16

LDI R16,High(RAMEND)

OUT SPH,R16

CLR R16

;======= Инициализация внутренних периферийных устройств:======

ldi temp , 0b11111111 ; определяем входы\выходы порта В,

out DDRB , temp ; 1 делает вывод выходом, 0 - входом!

ldi temp , 0b00000000 ; определяем в\в порта D

out DDRD , temp

ldi temp , 0b11111111 ; включаем подтяжку (1) для входов порта В

out portB , temp ; и задаем начальние состояния выходов

ldi temp , 0b00000000 ; то же самое для D

out portD , temp

ldi temp, 1<<RXEN|1<<RXCIE ; разрешаем прием и прерывание по приему по UART

out UCSRB, temp

ldi temp,25 ; задаем скорость UART = 9600

out UBRRL, temp

ldi r16, (1<<URSEL|1<<UCSZ0|1<<UCSZ1) ; 8-мибитный формат посылки

out UCSRC,r16

sei ; глобально разрешаем прерывания!

;==== Коенц Инициализация внутренних периферийных устройств====

;========================= Главный цикл =======================

Start:

nop

rjmp Start

а схема даже не знаю как показать: пользуюсь отладочной платой STK500 , шлейфом PortB(пробовал и PortA) подключаю к светодиодам (LEDS), и перемычкой соединяю PD0 с RXD и PD1 с TXD ,то есть настраиваю UART на плате. Использую Atmega 8515.

HEX фаил отправил.

peredach_dannih.rar

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

Ребят, беда :( если полярность перепутать на питании МК, он моментально сгорит? А то от БП всегда думал, что красный провод крайний - это земля

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

Да, он очень сильно нагрелся. Он как плитка раскаленный был, но он подключен был секунд 5-7. А на на каких ножках проверить ток? ATmega8 в пдипе

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

На питании конечно, остальные выводы отключить чтобы не мешали - ток не должен быть существенно больше 10мА, и темболее не должен при этом греться. Но вообще, шина питания рассчитана на ток не более 200мА - при большем могут происходить внутренние повреждения кристалла. Сам контроллер может оставаться функциональным, но с очень большим потреблением и глюками.

Учение - изучение правил. Опыт - изучение исключений.

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

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

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

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

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

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

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

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

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

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

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

×
×
  • Создать...