Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с TWI
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2, 3, 4, 5, 6
bodja74
У меня AVRstudio 4.11
Насчет AVRASM2 не знаю,должен по идее брать.
AVRASM2 я вечером вышлю на мыло

***А это что за звери -FI -L?***

Это командная строка для компиллера AVRASM2
-FI генерация Intel-HEX
-L генерация lst-файла
Если не указывать, компилер сразу НЕХ зашурует, без LST


Просто AVRASM не компилит автоматом MEGA8,16,32 т.д.
Поэтому и подключать приходилось m32def.inc
При .device ATmega32 возможна более корректная работа на AVRASM2 AVRASM32
James D.
Цитата
Просто AVRASM не компилит автоматом MEGA8,16,32 т.д.
Поэтому и подключать приходилось m32def.inc
При .device ATmega32 возможна более корректная работа на AVRASM2 AVRASM32

Добавил, ради экперимента, строку - .device ATmega32 в свой исходник (строку .include "m32def.inc" не убирал), выдало: warning : Only one .device statement allowed (line ignored) типа: "хрен вам".
Потом закомментировал строку .include "m32def.inc" - выдало огромную кучу ошибок, оно и понятно...
Интересно, можно ли в мою студию вставить AVRASM2 вместо существующего AVRASM32?...
bodja74
Блин ,я извиняюсь сам напутал пока разбирлся с этими файлами и копиллерами,в голове полный бардак был.
Коротче оставляем в исходнике .include "m32def.inc"
а в m32def.inc файле оставляем .device ATmega32

Куча ошибок из за того что компиллер дважды находит туже диррективу .device ATmega32

пошел слать мыло
James D.
Сегодня, считай, целый день посвятил чтению темы: http://kazus.ru/modules.php?name=Forums&fi...der=asc&start=0
У меня создалось впечатление, что из этой темы просто сквозит главный вывод: и это г...о еще и за деньги продают! Да его надо бесплатно раздавать, да еще и приплачивать пользователям!
Но! Мне Протеус понравился. Надо, просто, разобраться во всех тонкостях и добиться максимальной реалистичности моделирования.
Сама идея виртуального моделирования электросхем гениальна - это же то, о чем мечтает любой электронщик! Допустим, для МК (и то не для всех) можно использовать JTAG, но мир электроники это не только МК! А для всего остального и создан Протеус. Не надо его охаивать, никто не совершенен.
Пожелаем же его разработчикам сил и таланта довести таки Протеус до совершенства.
bodja74
Я эту ссылку Вам недаром дал,чтобы Вы смогли сделать для себя определленные выводы.
Во всем и везде есть как и преимужества так и недостатки.И чтобы хорошо владеть и добиваться результата нужно знать с чем ты имееш дело.
Ну на охаивание реагировать бурно не стоит.Стоит присматриваться к конкретной критике,с конкретными примерами,а общие фразы это ,как вы сказали г...о .
Пардон за флейм.
James D.
Почту получил, спасибо.
Жаль, pdf на аглицком. Ну ничего, буду переводить.
А, можно, хотя бы в двух словах пояснить, куда этот avrasm2 вставлять: в студию, вместо существующего, или в Протеус?
bodja74
Вкиньте его в туже папку где AVRASM32 в AVRstudio,так как он использует файлы из папки Appnotes.
В ПРОТЕУСЕ просто укажите путь и поменяйте Flags.
bodja74
Разобрался я с Вашими "прыжками" по проге.
Нельзя указывать диррективу .org в секторах РАМ и ЕЕПРОМ у AVR раздельная память ,а не общая как
у моторол например.
James D.
Цитата
Вкиньте его в туже папку где AVRASM32 в AVRstudio,так как он использует файлы из папки Appnotes.
В ПРОТЕУСЕ просто укажите путь и поменяйте Flags.

Сделал. Flags поменял для всех трех МК.
При попатке выполнить Build All выдало (привожу для одного МК, для остальных тоже самое):

Processing AZ_1_mega32.asm...
AVRASM AZ_1_mega32.asm -FI -L az_1_mega32.lst
C:\PROGRA~1\ATMEL\AVRTOO~1\AVRASS~1\AVRASM2.EXE: illegal option -- F
AVRASM: AVR macro assembler 2.0.8-BETA5 (build 25 Aug 20 2004 11:30:30)
Copyright © 1995-2004 ATMEL Corporation

usage: AVRASM2.EXE [options] file.asm

Options:
-f O|M|I|G - output file format:
-fO Debug info for simulation in AVR Studio (default)
-fM Motorola hex
-fI Intel hex
-fG Generic hex format
-f- No output file
-o ofile Put output in 'ofile'.
-d dfile Generate debug info for simulation in AVR Studio in 'dfile'.
Can only be used with the -f [M|I|G] option.
-l lfile Generate listing in 'lfile'
-m mfile Generate map in 'mfile'
-e efile Place EEPROM contents in 'efile'
-w Relative jumps are allowed to wrap for program ROM
up to 4k words in size
-C ver Specify AVR core version
-c Case sensitive
-1/-2 Turn on/off AVR Assembler version 1 compatibility.
-I dir Preprocessor: Add 'dir' to include search path
-i file Preprocessor: Explicitly pre-include file
-D name[=value] Preprocessor: Define symbol. If =value is
omitted, it is set to 1.
-U name Preprocessor: Undefine symbol.
-v verbosity [0-9][s]:
-vs Include target resource usage statistics
-vl Output low-level assembly code to stdout
-v0 Silent, only error messages printed
-v1 Error and warning messages printed
-v2 Error, warning, and info messages printed (default)
-v3-v9 Unspecified, increasing amounts of assembler internal dumps.
-V Format map and list files for Verilog.
-O i|w|e Overlap report: ignore|warning|error [error]
-W-b|+bo|+bi Byte operand out of range warning disable|overflow|integer

ERROR: avrasm2.exe reported error code (1L).
Extracting debug data from AZ_1_mega32.LST...
Processed 13737 lines.

Цитата
Разобрался я с Вашими "прыжками" по проге.
Нельзя указывать диррективу .org в секторах РАМ и ЕЕПРОМ у AVR раздельная память ,а не общая как
у моторол например.

Блин, у меня по другому никак нельзя - все ячейки строго расположены в памяти, и прога иногда использует именно адреса. Мне придется переделывать практически всё... А на это я пойти не могу.
bodja74
Указать -fI -l <name>.lst
f-маленькое
I-большое
l-маленькое

компиллер же все расписал ,почитаите свой пост.

Насчет расположения ,располагайте наздоровье например
.equ ram1=$110
обьявляете имя переменной и ее расположение в памяти,
гляньте файл m32def.inc там же все так и сделано.
James D.
Processing AZ_1_mega32.asm...
AVRASM AZ_1_mega32.asm -fI -l az_1_mega32.lst
AVRASM: AVR macro assembler 2.0.8-BETA5 (build 25 Aug 20 2004 11:30:30)
Copyright &copy; 1995-2004 ATMEL Corporation

Warning: AVRASM 1.x compatibility is ON - some errors will appear as warnings
AZ_1_mega32.asm(11): Including file 'm32def.inc'
m32def.inc(41): warning: '.device ATmega32' only sets device name
AZ_1_mega32.asm(11): m32def.inc included from here
AZ_1_mega32.asm(314): error: syntax error, unexpected REGISTER, expecting SYMBOL or FUNCTION or REGDEF

Assembly failed, 1 errors, 1 warnings

ERROR: avrasm2.exe reported error code (1L).
Extracting debug data from AZ_1_mega32.LST...
Processed 7 lines.
bodja74
Ну та выберите не AVRASM а AVRASM2 что Add/Remove что DefineCode с указанием пути.
James D.
В DefineCode указал путь к avrasm2 (расположен в студии).
А в Add/Remove я никак не могу выбрать avrasm2, там только avrasm.
James D.
Нет, с пошаговым выполнением, что-то совсем не то творится!
Сегмент EEPROM у меня организован так:

.ESEG
.ORG $0010

E_U_pmhl: .db $00,$0A
E_U_p_hl: .db $03,$E8
E_U_m_hl: .db $03,$E8

Даже, если убираю команду .ORG, все равно прога "запрыгивает" сюда.
Впрочем, адреса сегментов SRAM и EEPROM расположены, практически с $0000, и занимают эти сегменты всего несколько десятков байт. И программа начинается с $0000. Так вот, пока при выполнении проги ее адреса совпадают с адресами сегментов SRAM и EEPROM, выполнение может перейти на эти сегменты, но далее, адреса, по которым идет прога, увеличиваются, и становятся больше чем у SRAM и EEPROM, и там я, пока что, "прыжков" не заметил.
bodja74
Убирайте метки,компиллер меткам присваивает адресса,а дебугер по этим адресам и ходит.
Я например подобное E_U_pmhl: .db $00,$0A указываю только при расположении данных в памяти программы когда не знаю по какому адрессу расположит их компиллер при компиляции.

Чтобы появился AVRASM2 жмите кнопку "NEW" в DefineCode и Add/Remove
James D.
AVRASM2 появился. Только убейте меня, если я знаю накой он нужен. С ним постоянно вылезают ошибки:

Processing AZ_1_mega32.asm...
AVRASM2 AZ_1_mega32.asm
AVRASM: AVR macro assembler 2.0.8-BETA5 (build 25 Aug 20 2004 11:30:30)
Copyright &copy; 1995-2004 ATMEL Corporation

Warning: AVRASM 1.x compatibility is ON - some errors will appear as warnings
AZ_1_mega32.asm(11): Including file 'm32def.inc'
m32def.inc(41): warning: '.device ATmega32' only sets device name
AZ_1_mega32.asm(11): m32def.inc included from here
AZ_1_mega32.asm(314): error: syntax error, unexpected REGISTER, expecting SYMBOL or FUNCTION or REGDEF

Assembly failed, 1 errors, 1 warnings

ERROR: avrasm2.exe reported error code (1L).
Extracting debug data from AZ_1_mega32.LST...
Processed 13737 lines.

А с AVRASM32 все нормуль. И в студии все равно присутствует AVRASM32 - я его пробовал удалить, но студия все равно вернула его обратно. Что такое должен дать AVRASM2, чего у меня нет с AVRASM32? Вы бы хоть объяснили...

Цитата
Убирайте метки,компиллер меткам присваивает адресса,а дебугер по этим адресам и ходит.


А без меток получится путаница, а так я знаю, где у меня что лежит, и где мне это что-то взять и куда положить. Ну как без меток и адресов можно считать из EEPROM/SRAM несколько определенных байт и потом их же и сохранить? Я уже привык к такому порядку, студия не ругается, и всем хорошо. Только не Протеусу...
bodja74
Ну что я могу сказать по поводу что лучте насчет того с чем я практически не работал.
По идее новая новая версия должна быть чем то лучше старой.

AZ_1_mega32.asm(314): error синтаксическая ошибка в 314 строке
Warning это конфликты как правило сильно не влияющие на прогу,(может быть повторное обьявление имени и т.д.) просто необходимо обратить внимание на них.

Да еще попробуйте перенести ESEG и DSEG в конец исходника.
James D.
Вобщем, все более или менее ясно.
Я, наверное, все-таки вернусь к avrasm32 - там ошибок нет.
Цитата
Да еще попробуйте перенести ESEG и DSEG в конец исходника.

ESEG у меня в конце исходника как раз и расположен, только вот адресация там все-равно с нуля начинается (ну, или с $0010 - как у меня).
Займусь-ка я своей промблемой вплотную, попробую испытать Протеус...
И, вот еще что заметил. Запускаю я свою схему в симуляторе, открываю 3 окна "AVR Source Code", так вот, для того окна, которое активно, работает функция F10 - шагать без захода в п/п, а для остальных - что F10, что F11 разницы никакой - работает как F11 - с заходом в п/п.
Если хочешь выполнить команду Ctrl + F10 - надо сначала не только линию выделить, но точку останова назначить. И т.д. и т.п.
Короче, есть еще над чем разработчикам поработать!
James D.
Из EEPROM Протеус не может прочитать данные. У меня там разные коды, а он всё $FF да $FF...

Я в студии этого наелся, думал тут лучше будет. Ан нет...
James D.
А что, в режиме пошаговой отладки в рабочие регистры и память (SRAM, FLASH, EEPROM) нельзя вручную занести значения? Или я просто не понял, как это делать?
Всё страньше и страньше...
James D.
Подскажите, можно ли в режиме пошаговой отладки сымитировать нажатие на кнопку?
Кнопка (или выключатель) работает, но цепь не замыкает.
bodja74
(Блин как захожу на форум,браузер виснет,наверное опять мой комп вирусов нахватался)

Так насчет ЕЕПРОМ,тут палка с двух концов,
с одной стороны компиллер не выдает прошивку с еепром,с другой стороны в протусе нельзя ее открыть(или можно незнаю)
С еепром работал нечасто,если нужно какие данные сначала то использовал память программ,
еще знаю можно например занести-выбрать значения с программы в еепром,в проекте эти значения остаються сохраненными.
Насчет невозможности изменять значения ,могу сказать только одно,по факту симуляция идет из прошивки контроллера и в протеусе дебугер выполняет просто роль статиста,просто указывает
в какой точке исходника на данный момент идет выполнение.Поэтому на всемогущество дебугера
расчитывать не стоит,и скорее всего эти удобства нескоро появяться.

Кнопка не идет в пошаговой отладке,я ставлю выключатель (SWITCH)
IgorKossak
Господа, предлагаю не сливать все вопросы в одну кучу.
Не стесняйтесь открывать новые темы, предварительно проискав имеющиеся.
Кроме того, все сообщения типа "спасибо, пожалуйста" направляйте друг другу в личную почту.
Не так приятно напоминать правила, но приходится.
Нарушителей буду наказывать.
James D.
Цитата
Кнопка не идет в пошаговой отладке,я ставлю выключатель (SWITCH)

Я ставил и выключатель - он работает, но цепь не замыкает! Он у меня стоит на входе МК, так вот, при его замыкании (на "землю"), с той стороны выключателя, которая подсоединена к "земле" = 0В (синяя метка), а со стороны МК = +5В (красная метка).
Проверьте, пожалуйста, у себя в симуляторе, такая же у вас ситуация?
Цитата
Не так приятно напоминать правила, но приходится.
Нарушителей буду наказывать.

Понятно. Обещаю постараться правила не нарушать.
James D.
Proteus, сволочь, говорит, что ошибки в моих алгоритмах нет!
Как же, блин, нету!
А на макетке не работает!!! Смоделировал точно всю свою схему.
Ну и что прикажете делать???

Да, да, я знаю, JTAG... Но я не могу пока этого сделать...
bodja74
Цитата(James D. @ Jan 13 2006, 09:14) *
Цитата
Кнопка не идет в пошаговой отладке,я ставлю выключатель (SWITCH)

Я ставил и выключатель - он работает, но цепь не замыкает! Он у меня стоит на входе МК, так вот, при его замыкании (на "землю"), с той стороны выключателя, которая подсоединена к "земле" = 0В (синяя метка), а со стороны МК = +5В (красная метка).
Проверьте, пожалуйста, у себя в симуляторе, такая же у вас ситуация?
Цитата
Не так приятно напоминать правила, но приходится.
Нарушителей буду наказывать.

Понятно. Обещаю постараться правила не нарушать.


Чето не понял насчет выключателя,вы подтягиваете вторую сторону через сопротивление?
Или источник напряжения сам вывод контроллера.
Кстати в свойствах выключателя вы можете выбрать разное сопротивление при включении-выключении
по умолчанию 100Ом-100МОм.
У меня работает кнопка и выключатель.

Насчет алгоритмов ничего не скажу,могу только посоветовать,что лучше отлаживать по частям,а потом
поэтапно соединять если прога сложная.
James D.
Ё-моё! Кажись заработало!!!
На 13 странице этой темы я приводил код слэйва2, так вот там немножко подправил (при передаче последнего байта).

Код


;***************************
;Передача мастеру 6-ти байт:
;***************************
;Передача данных:

DataT1: ldi  YH,$00
  ldi  YL,$90
  ld  temp,Y+
  out  TWDR,temp
  ldi  temp,(1<<TWINT)|(1<<TWEA)|(1<<TWEN)|(1<<TWIE)
  out  TWCR,temp
  reti

DataT2: cpi  YL,$A0
  breq t4_1
  cpi  YL,$95
  breq t4_2
  ld  temp,Y+
  out  TWDR,temp
  ldi  temp,(1<<TWINT)|(1<<TWEA)|(1<<TWEN)|(1<<TWIE)
  out  TWCR,temp
  reti

t4_1: ld  temp,Y
  out  TWDR,temp
  ldi  temp,(1<<TWINT)|(1<<TWEA)|(1<<TWEN)|(1<<TWIE)
  out  TWCR,temp
  reti

t4_2: ld  temp,Y ;Передача последнего байта
  out  TWDR,temp
  ldi  temp,(1<<TWINT)|(0<<TWEA)|(1<<TWEN)|(1<<TWIE) <<< Здесь бит TWEA сбросил в "0"
  out  TWCR,temp
  reti


Все-таки спасибо, конечно, Proteus'у - хорошо помог. Зря обзывал...
Будут, конечно, еще проблемы - планирую добавлять в другом месте программы дополнительную связь между МК, но уже что-то получилось!
А благодаря Proteus'у я практически вживую увидел, как работает этот интерфейс!

P.S. Пятница, 13-е. М-да...
James D.
Цитата
Чето не понял насчет выключателя,вы подтягиваете вторую сторону через сопротивление?
Или источник напряжения сам вывод контроллера.
Кстати в свойствах выключателя вы можете выбрать разное сопротивление при включении-выключении
по умолчанию 100Ом-100МОм.
У меня работает кнопка и выключатель.

Выводы МК работают на ввод, с вкл. подтягивающих резюков.
При пошаговой отладке цепь не замыкается, настройки выключателей в проге не менял.
Заметил еще такую штуку. Два вывода двух МК (на схеме в Proteus'е) соединены между собой через резистор 1 кОм, первый МК сбрасывает свой пин в "0", а второй МК должен определить, когда на его ноге появится "0". Так вот, первый МК пин в "0" сбрасывает, только до второго МК этот "0" не доходит, хоть через 1 кОм, хоть через 10 Ом, хоть через 0,1 Ом. Пока я этот резюк не выкинул - толку не было.
bodja74
Да вы правы так работать не хочет.

Хотя по жизни так не делал и не замечал раньше.
Я всегда отключал под кнопки внутренние резисторы и подключал подтяжку,
так как внутренние резисторы достаточно высокоомны порядком 100кОм,получалось что
небольшая уечка кнопки или даже прикосновение пальцем к дорожкам уже врубало,я уже не говорю
про помехи.Подтяжку к ресет тоже ставлю,более менее оптимальная подтяжка 4.7-10 кОм

В разрыв TWI поставил 10кОм работает.Нужно посмотреть в других вариантах.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.