HOT ICE Опубликовано 22 октября, 2007 Поделиться Опубликовано 22 октября, 2007 Привет,чтото не могу я подружиться с Си,хочу попробовать асемблер-подскажите пожалуйста Софт на котором нужно писать для AVR и хороший учебник по этой теме Спасибо 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Duhas Опубликовано 23 октября, 2007 Поделиться Опубликовано 23 октября, 2007 софт АВРстудия, учебник - сайт Николаева __http://avr.nikolaew.org 0 «Как сердцу выразить себя? … Мысль изреченная есть ложь!» Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
alts Опубликовано 23 октября, 2007 Поделиться Опубликовано 23 октября, 2007 Если Вы только начинаете что-то программить, то не стоит накидываться на язык не изучив перед этим "железа" хотя бы чуть чуть.Беда многих кто задает вопросы на форумах (в том числе и в этом) как раз и кроется в этом.Не представляя себе КАК работает тот или иной элемент "железа" написать сколько нибудь удачную программку "на выход" очень трудно. А если при этом еще и хвататься за такой в общем-то непростой язык как Си...Ничего против него не имею,но начинать нужно с азов, т.е. - Ассемблера. По сути Ассемблер это та же система команд кристалла только дополненная пользовательскими упрощениями процедур доступа к памяти и переферии. Иногда ассемблер может лишь чуть чуть отличаться от ЯВУ... Для начала сходите на www.atmel.ru и в рубрике Softwear найдите инсталляцию Algorithm Builder. Весит она немного и доступна для скачивания даже в Dial up. Это графический ассемблер. Существует множество мнений на его счет, но одно бесспороно-нагляднее программу ни один классический язык не представляет.За исключением разве что Паскаля и его клонов...А когда поймете что же такое АЛГОРИТМ в ПРИНЦИПЕ, то и освоение другого языка пойдет проще. Не лишним будет и литература по МК.Для АВР-ов это Евстифеев "Микроконтроллеры серий Tiny и Mega фирмы ATMEL". Можно найти в Инете. У меня даже где-то валялось в DJVU формате...если не выкинул. Посмотрю.Если надо напишите на мыло: alt@inbox.ru В теме только напишите что про книги по АВР, а то в спам выкину... Только они тоже немало весят что-то около метра...Про Pic тоже что-то было но я ими уже давно не интересуюсь.Но описалово про них доступно на русском сайте компании Microchip в PDF по моему...Причем на русском. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Особенности хранения литиевых аккумуляторов и батареекПотеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
ss85 Опубликовано 23 октября, 2007 Поделиться Опубликовано 23 октября, 2007 В АВРстудии очень хороший хелп по работе ассемблерных инструкций, с примерами. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
HOT ICE Опубликовано 23 октября, 2007 Автор Поделиться Опубликовано 23 октября, 2007 Скачал я AVR студию написал там следующий текст когда нажимаю Build выдаёт ошибку -ERROR: Unable to open input file 'C:\Documents and Settings\Tøªðûøú\¦þø ôþúºüõýªv\VV\VV.asm' Вот программа: .device Atmega8 .nolist .include "F:\AVRs\AvrAssembler\Appnotes\m8def.inc" .list ;================================================ .def temp=r16 ;================================================ rjmp Init ; ;=============================================== Init: ldi temp,0b00000000; out DDRB,temp ; ldi temp,0b00000000; out DDRC,temp; ldi temp,0b00000000; out DDRD,temp; ldi temp,0b00000000; out PortB,temp; ldi temp,0b00000000; out PortC,temp; ldi temp,0b00000000; out PortD,temp; ;================================================ Start: ldi ZL,20; rjmp Start; 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
sheva_s Опубликовано 23 октября, 2007 Поделиться Опубликовано 23 октября, 2007 .def temp=r16 rjmp Init ; В общем я сам только начинаю учиться возможно мои ответы и не правильны. 1. Между этими сторками нужно вписать такие строчки .cseg .org 0 2. Ошибку может выдавать если название проекта написано по русски. 3. Нужно в открытой АВРстудии нажать на вкладку Project > Assembler Options > AVR Assembler - и выбрать Version 1 > OK И так каждый раз при создании нового проекта. Сильно не бейте если что не так , а лучше поправте. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
fredo Опубликовано 23 октября, 2007 Поделиться Опубликовано 23 октября, 2007 Не стоило создавать проект в папке Мои документы, не любит он русский язык Перенеси проект в другое место и все заработает 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
HOT ICE Опубликовано 24 октября, 2007 Автор Поделиться Опубликовано 24 октября, 2007 Не стоило создавать проект в папке Мои документы, не любит он русский языкПеренеси проект в другое место и все заработает Да точно пересоздал всё ок.Спасибо. А я могу так делать hex,файл и заливать его через CodeVisionAVR?Так как програматор у меня LPT 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
fredo Опубликовано 24 октября, 2007 Поделиться Опубликовано 24 октября, 2007 А я могу так делать hex,файл и заливать его через CodeVisionAVR?Так как програматор у меня LPT Ну да. Из авр студио с помощью лпт программатор прошить нельзя, насколько я помню. Или можно еще через PonyProg заливать. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
HOT ICE Опубликовано 24 октября, 2007 Автор Поделиться Опубликовано 24 октября, 2007 А я могу так делать hex,файл и заливать его через CodeVisionAVR?Так как програматор у меня LPT Ну да. Из авр студио с помощью лпт программатор прошить нельзя, насколько я помню. Или можно еще через PonyProg заливать. CodeVisionAVR можно как STK200) Ясн ну тогда буду пробовать чтото писать 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
HOT ICE Опубликовано 25 октября, 2007 Автор Поделиться Опубликовано 25 октября, 2007 Блин( Читаю книгу по асемблеру для AVR Решил написать маленькую програмку чтоб при нажатии на кнопку на полевик типа P!Подавался сигнал и через него светился св диод rjmp Init ;Первая выполняемая команда ;=============================================== Init: ldi temp,0b00000010;Определяяем входы и выходы порта B out DDRB,temp ; ldi temp,0b00000000;Определяем входы и выходы порта C out DDRC,temp; ldi temp,0b00000000;Определяем входы и выходы порта D out DDRD,temp; ldi temp,0b00000000;Включаем подтяжку для входов порта B out PortB,temp;и задаём начальные состояния входов ldi temp,0b00000000;Включаем подтяжку для входов порта C out PortC,temp;и задаём начальные состояния входов ldi temp,0b00000000;Включаем подтяжку для входов порта D out PortD,temp;и задаём начальные состояния входов ;================================================ ;Основное тело программы Start: sbic PinD,4 ;нажата ли кнопка тоесть 1? rjmp ledon;переход к метке св диод вкл sbi PortB,1 ;выкл rjmp Start ledon: sbi PortC,2; rjmp Start;Возврат к метке START ////И не пашет(((Уже пробывал по разному писать место sbi PortC,2; писал cbi всёравно нет результата нажимаю кнопку и св диод молчит Что не так не могу понять,а в эта книга воообще меня запутала( Скажите плз sbi устанавливает в 1?сbi в 0? В книге опечатки блин и не могу понять где правильно а где нет( 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
fredo Опубликовано 25 октября, 2007 Поделиться Опубликовано 25 октября, 2007 (изменено) ledon:sbi PortC,2; так у тебя светодиод подключен к С2 или В1 ?? ldi temp,0b00000000;Включаем подтяжку для входов порта D подтяжка включается записью 1 Изменено 25 октября, 2007 пользователем fredo 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
HOT ICE Опубликовано 25 октября, 2007 Автор Поделиться Опубликовано 25 октября, 2007 К C2 я там перепутал в том письме. Подтяжка уже вкл.Но всёравно не пашет 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
fredo Опубликовано 25 октября, 2007 Поделиться Опубликовано 25 октября, 2007 выложи еще раз исправленный текст, а то непонятно где ты исправил при нажатии кнопка замыкается на землю или питание? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
HOT ICE Опубликовано 25 октября, 2007 Автор Поделиться Опубликовано 25 октября, 2007 выложи еще раз исправленный текст, а то непонятно где ты исправилпри нажатии кнопка замыкается на землю или питание? rjmp Init ;Первая выполняемая команда ;=============================================== Init: ldi temp,0b00000010;Определяяем входы и выходы порта B out DDRB,temp ; ldi temp,0b00000100;Определяем входы и выходы порта C out DDRC,temp; ldi temp,0b00000000;Определяем входы и выходы порта D out DDRD,temp; ldi temp,0b00000000;Включаем подтяжку для входов порта B out PortB,temp;и задаём начальные состояния входов ldi temp,0b00000000;Включаем подтяжку для входов порта C out PortC,temp;и задаём начальные состояния входов ldi temp,0b00010000;Включаем подтяжку для входов порта D out PortD,temp;и задаём начальные состояния входов ;================================================ ;Основное тело программы Start: sbic PinD,4 ;нажата ли кнопка тоесть 1? rjmp ledon;переход к метке св диод вкл sbi PortB,1 ;выкл это просто светодиод который подключён напрямую к порту rjmp Start ledon: cbi PortB,1;вкл СИд sbi PortC,2;А это тот который через полевик rjmp Start;Возврат к метке START Кнопка замыкается на землю! Функцыя кнопки работает.Потому что светодио который на портк PB1 светица когда кнопка нажата А тот который через полевик нет( 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Duhas Опубликовано 26 октября, 2007 Поделиться Опубликовано 26 октября, 2007 посмотри что еще на етих пинах висит.. иногда периферия не дает нормально юзать порт.. над фузы смареть.. + повесь полевик на тот порт где светодиод мигает .. 0 «Как сердцу выразить себя? … Мысль изреченная есть ложь!» Ссылка на комментарий Поделиться на другие сайты Поделиться
YurkaM Опубликовано 26 октября, 2007 Поделиться Опубликовано 26 октября, 2007 (изменено) Трудно сообразить, не видя как что подключено. Если кнопка на землю, то нажатие даёт 0, а не 1. Соответственно программа у тебя сразу после включения идёт на ledon и выдаёт в С2 единицу. И дальше эта единица в твоей проге нигде в ноль не сбрасывается - хоть жми на кнопку, хоть не жми! Сделай хотя бы так: ... sbi PortB,1 ;выкл это просто светодиод который подключён напрямую к порту cbi PortC,2 rjmp Start .... Должно заработать, хоть и задом-наперёд... Изменено 26 октября, 2007 пользователем YurkaM 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
HOT ICE Опубликовано 26 октября, 2007 Автор Поделиться Опубликовано 26 октября, 2007 Ребят спасибо вам за ответы!!!!! Я вот сел подумал и нашол ошибкуу код должен быть таким Init: ldi temp,0b00000010;Определяяем входы и выходы порта B out DDRB,temp ; ldi temp,0b00000100;Определяем входы и выходы порта C out DDRC,temp; ldi temp,0b00000000;Определяем входы и выходы порта D out DDRD,temp; ldi temp,0b00000000;Включаем подтяжку для входов порта B out PortB,temp;и задаём начальные состояния входов ldi temp,0b00000100;Включаем подтяжку для входов порта C out PortC,temp;и задаём начальные состояния входов ldi temp,0b00010000;Включаем подтяжку для входов порта D out PortD,temp;и задаём начальные состояния входов ;================================================ ;Основное тело программы Start: sbic PinD,4 ;нажата ли кнопка тоесть 1? rjmp ledon;переход к метке св диод вкл sbi PortB,1 ;выкл это просто светодиод который подключён напрямую к порту cbi PortC,2 rjmp Start ledon: cbi PortB,1;вкл СИд sbi PortC,2;А это тот который через полевик rjmp Start;Возврат к метке START Теперь всё работает,буду учить чтото следующее наверно то как сформировать задержку на 5 минут 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
HOT ICE Опубликовано 26 октября, 2007 Автор Поделиться Опубликовано 26 октября, 2007 блиНННн((((Разобрался с одним не могу теперь с другим(( Я пишу задержку без таймера вот такой код делаю Происходит следующее-Светодиод который подключен без полевика ели заметно светица когда нажимаю кнопку,а тот который через полевик вообще не хочет,а когда не пишу задержку всё ок,скажите пожалуйста в чём дело и что я делаю не так? И если не сложно объясните как сформировать задержку на 1мин и 10 сек не использую таймер0,и с его использованием?Я вообще не могу понять книга про это мало говорит( ____________________________ .device Atmega8 .nolist .include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc" .list ;================================================ ; .def temp=r16 .def delay=r17 .def delay2=r18 ;================================================ d: ldi delay,0x72;это примерно я не понял как выщитать задержку ldi delay2,0x72; Loop: subi delay,1;вычитаю 1 из делеи sbci delay2,0;Вычитаю 1 из делеи если флаг С=1 brcc loop; ret ;возврат из подпрограмы rjmp Init ; ;=============================================== Init: ldi temp,0b00000010; out DDRB,temp ; ldi temp,0b00000100;выход out DDRC,temp; ldi temp,0b00000000; out DDRD,temp; ldi temp,0b00000000; out PortB,temp; ldi temp,0b00000100;Начальное состояние ноги 1 out PortC,temp; ldi temp,0b00010000;подтяжка вкл out PortD,temp; ;================================================ Start: sbic PinD,4 ;проверка кнопки которая подключена на минус rjmp ledon;переход к вкл светтодиоды sbi PortB,1 ;светодиод без полевика подключён к - cbi PortC,2 ;с полевиком rjmp Start ledon: cbi PortB,1; sbi PortC,2; rcall d;вкл задержку тоесть мне нужно чтоб светодиоды светились какоето время N rjmp Start; 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
YurkaM Опубликовано 27 октября, 2007 Поделиться Опубликовано 27 октября, 2007 Во-первых. По адресам, начиная с 0000, должны распологаться вектора переходов от прерываний. Если прерывания не используются (как у тебя в данном случае), то конечно можно расположить основной код в этом месте. Но у тебя с самого начала расположена подпрограмма и именно с неё и начинается работа. Перекинь её в конец или поставь по адресу 0000, т.е. самым первым оператором rjmp init. Во-вторых. Ты забыл настроить указатель стека. А он у тебя используется, т.к. есть команды rcall и ret. Добавь в кусок, где у тебя инициализация строчки: ldi temp,high(RAMEND) out SPH,temp ldi temp,low(RAMEND) out SPL,temp ;установка стека 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
HOT ICE Опубликовано 27 октября, 2007 Автор Поделиться Опубликовано 27 октября, 2007 Во-первых. По адресам, начиная с 0000, должны распологаться вектора переходов от прерываний. Если прерывания не используются (как у тебя в данном случае), то конечно можно расположить основной код в этом месте. Но у тебя с самого начала расположена подпрограмма и именно с неё и начинается работа. Перекинь её в конец или поставь по адресу 0000, т.е. самым первым оператором rjmp init.Во-вторых. Ты забыл настроить указатель стека. А он у тебя используется, т.к. есть команды rcall и ret. Добавь в кусок, где у тебя инициализация строчки: ldi temp,high(RAMEND) out SPH,temp ldi temp,low(RAMEND) out SPL,temp ;установка стека Скажи пожалуйста где ты смотриш что находится по этим адресам? В книге не сказано было про это(И так же не сказано что нужно писть вот те строчки( Так хочу разобраться потехунькку с этим всем. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
YurkaM Опубликовано 27 октября, 2007 Поделиться Опубликовано 27 октября, 2007 (изменено) Если адрес не указывать принудительно директивой .org xxxx, то компилятор по умолчанию начинает счёт с 0000, и встретив в тексте первый оператор, воткнёт его код именно с адреса 0000. Если сильно хочется посмотреть, какой оператор в какие адреса попал, открой окно "disassembler". Это можно сделать после того как запущена отладка ("Start Debugging"). зы: Ну не может быть, чтобы в книге не было сказано про вектора прерываний по начальным адресам!! Чё это за книга такая?? Да это и без книги в любом даташите есть, раздел "Interrupt Vectors" Изменено 27 октября, 2007 пользователем YurkaM 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
HOT ICE Опубликовано 27 октября, 2007 Автор Поделиться Опубликовано 27 октября, 2007 ''Книга микроконтроллеры AVR вводный курс'' Я купил микросхему ST 232BN мне сказали на рынке что она типа RS232.Это так?Я хочу подключить к компу МК чтоб изучать связь AVR И пк.Если есть схема подключения выложи пожалуйста 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
HOT ICE Опубликовано 28 октября, 2007 Автор Поделиться Опубликовано 28 октября, 2007 (изменено) Чтото всёравно не работает и теперь я полностью во всём запуталсЯ( ;АВТОР: * ;ДАТА: * ;ВЕРСИЯ: ;Имя файла: ;ДЛЯ AVR: ;ТАКТОВАЯ Частота: ;***************************** ;Выполняемые функцыи_____________________________ .device Atmega8 .nolist .include "C:\Program Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m8def.inc" .list ;================================================ ;Объявления .def temp=r16 .def delay=r17 .def delay2=r18 ;================================================ ;НАЧАЛО программ rjmp Init ;Первая выполняемая команда ;=============================================== Init: ldi temp,0b00000010;Определяяем входы и выходы порта B out DDRB,temp ; ldi temp,0b00000100;Определяем входы и выходы порта C out DDRC,temp; ldi temp,0b00000000;Определяем входы и выходы порта D out DDRD,temp; ldi temp,0b00000000;Включаем подтяжку для входов порта B out PortB,temp;и задаём начальные состояния входов ldi temp,0b00000100;Включаем подтяжку для входов порта C out PortC,temp;и задаём начальные состояния входов ldi temp,0b00010000;Включаем подтяжку для входов порта D out PortD,temp;и задаём начальные состояния входов ;================================================ ldi temp,high(RAMEND) out SPH,temp ldi temp,low(RAMEND) out SPL,temp ;установка стека ;подпроги d: ldi delay,0x72;формирую ldi delay2,0x72;задержку Loop: subi delay,1;вычитаю 1 из делаи sbci delay2,0;вычитаю 1 из делаи 2 если флвг С=1 brcc loop;возвращаюсь в лоп если флаг C сброшен ret ;Основное тело программы Start: sbic PinD,4 ;нажата ли кнопка тоесть 0? rjmp ledon;переход к метке св диод вкл sbi PortB,1 ;выкл это просто светодиод который подключён напрямую к порту cbi PortC,2 rjmp Start ledon: cbi PortB,1;вкл СИд sbi PortC,2;А это тот который через полевик rcall d rjmp Start;Возврат к метке START Изменено 28 октября, 2007 пользователем HOT ICE 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
YurkaM Опубликовано 28 октября, 2007 Поделиться Опубликовано 28 октября, 2007 Напримр, так: ... ;НАЧАЛО программ Init: ldi temp,0b00000010;Определяяем входы и выходы порта B out DDRB,temp ; ldi temp,0b00000100;Определяем входы и выходы порта C out DDRC,temp; ldi temp,0b00000000;Определяем входы и выходы порта D out DDRD,temp; ldi temp,0b00000000;Включаем подтяжку для входов порта B out PortB,temp;и задаём начальные состояния входов ldi temp,0b00000100;Включаем подтяжку для входов порта C out PortC,temp;и задаём начальные состояния входов ldi temp,0b00010000;Включаем подтяжку для входов порта D out PortD,temp;и задаём начальные состояния входов ldi temp,high(RAMEND) out SPH,temp ldi temp,low(RAMEND) out SPL,temp ;установка стека ;================================================ ;Основное тело программы Start: sbic PinD,4 ;нажата ли кнопка тоесть 0? rjmp ledon;переход к метке св диод вкл sbi PortB,1 ;выкл это просто светодиод который подключён напрямую к порту cbi PortC,2 rjmp Start ledon: cbi PortB,1;вкл СИд sbi PortC,2;А это тот который через полевик rcall d rjmp Start;Возврат к метке START ;подпроги --------------------------------------------- d: ldi delay,0x72;формирую ldi delay2,0x72;задержку Loop: subi delay,1;вычитаю 1 из делаи sbci delay2,0;вычитаю 1 из делаи 2 если флвг С=1 brcc loop;возвращаюсь в лоп если флаг C сброшен ret 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.