Поиск сообщества
Показаны результаты для тегов 'avr'.
Найдено: 202 результата
-
Обязанности: · Разработка радиоэлектронных и GSM-устройств: разработка схем, программирование, разводка печатных плат, разработка документации. · Программирование микроконтроллеров STM, AVR, ARM, PIC на языке С/С++ в личку или en@argument74.com
-
Всем доброго времени суток. Помогите пожалуйста начинающему.Нужна программа для Attiny13a на языке С. Вот такой алгоритм: Нажимают кнопку и начинают мигать светодиоды типа "Бегущие огни", при отпускании остается светится один из четырех, причем в случайном порядке как в рулетке.Нажимают и снова начинают бежать- отпускают остается гореть один.
-
Здравствуйте. Делаю ночник с плавно меняющимися цветами, в корпусе недорогого светильника, который включается в полной темноте. Включение/отключение реализовал через фоторезистор и составной транзистор. Для МК atMega8 в DIP-корпусе места в корпусе уже впритык. Думал напрямую к пинам подключить RGB-светодиод, но, внезапно, обнаружил, что они у меня с общим анодом. На макетной плате собрал с 3-мя транзисторами, работает. Но можно ли обойтись без транзисторов? Это дополнительные 6 элементов... Сейчас задам, возможно, сумасшедший вопрос, но если подключить светодиод катодами к пинам, а анод на +5 вольт ? Будет ли это работать как обратный сигнал ШИМ (т.е. при скважности 10%, обратная величина - 90%)? Или это просто загубит МК?
-
Помогите пожалуйста разобраться, программа не работает. Есть задумка через bluetooth terminal на телефоне передавать команду(ноль или единицу) на bluetooth модуль HC-05, подключенный к atmega328p и таким образом управлять светодиодом. Но почему то светодиод не загорается. Соединил выходы bluetooth модуля и атмеги так: tx -> rx, rx -> tx, светодиод подключен к нулевому биту порта B(PB0). В чём может быть ошибка? question.txt question.txt
-
Доброго дня! Купил на барахолке вот такую плату на последней фото 2 черных провода в дальнейшем соединены Это бегущая строка от игровых автоматов, на ней 2-мя цветами отображаются слоганы, хочу перепрошить в целях обучения. Вопросы: 1) встречал ли кто-то описание этой микросхемы? (я в интернете не нашел, потратил 2 дня) 2) есть на микросхеме разъем (10 ножек хорошо видно на последнем фото), как узнать их имена, за что отвечает каждая ножка? (есть некоторые предположения, но сомневаюсь в них) 3) можно ли через CP2102-USB-UART-MODULE перепрошить вот эту микросхему, если да то как соединить?
-
Добрый день. Мне требуется реализовать программный юарт на атмеге16. Он нужен для того, чтобы принятые по нему данные отправить на аппаратный юарт. В интернете нашел примеры кода, но понять его мне трудно. Прошу вас словами в общих чертах объяснить принцип реализации программного юарта. Буду рад примерам, которые, на ваш взгляд, являются наиболее простыми и понятными. Заранее спасибо.
-
Можно ли залить в arduino прошивку, предназначенную для чистого AVR?
-
Товарищи, помогите пожалуйста. Данная програмулина при нажатии на кнопку входит в функцию MinU() в которой инициализирует таймер для задержки(ждем отпустит пользователь кнопку или нет) если кнопка не отпущена то уменьшаем скважность ШИМ. проблема в выделенной красным строчке! когда count больше 3 уменьшаем скважность, но в отладчике AVR studio, Proteus и в железе не робит. Перепрыгивает действие в {} так будь-то условие не выполнено... #define F_CPU 1000000L #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> unsigned char count = 0; unsigned char a=5,s=3,b=0; //===================================Насройка таймера==================== void Timer_ini(void){ TCCR1B = (1<<CS12)|(0<<CS11)|(0<<CS10); TCNT1 = 65535-976; TIMSK |= (1<<TOIE1); count = 0; } //===========================настройка шим=========================== void PWM_ini(void){ ASSR=0x00; TCCR2=0b01101110; //На выводе OC1A единица, когда OCR1A==TCNT1, восьмибитный ШИМ OCR2=200; } //=============== void MinU(){ unsigned char i=0; Timer_ini(); while (!(PINB&0b00000010)){ if(count>2){ //Если таймер считал более двух раз _delay_ms(100); // ждем 100 мс OCR2--; // Уменьшаем скважность i=1; // были в плавном уменьшении } } if (i!=1) // если не были в плавном уменьшении { OCR2=OCR2-50; i=0; } } //======================================================= int main(void) { // Настраиваем порт D на выход DDRB = 0b00001000; PWM_ini(); //Timer_ini(); sei(); while(1) { b=a-s; if (!(PINB&0b00000010)) { MinU(); }/* //if (!(PINB&0b00000100)) //{ //PlsU(); //}*/ } return 0; } ISR (TIMER1_OVF_vect) { count++; TCNT1 = 65535-976; }
-
Всех приветствую! Вообщем ситуация такая - (сейчас будет предыстория) стал понемногу интересоваться МК и набрел на статью о подключении экрана нокии 3310 к атмеге8. Вот она http://cxem.net/mc/mc201.php Сказать что заинтриговало - ничего не сказать... к тому же автор в комментариях написал, что можно поочередно выводить изображения, и таким образом создать анимацию. Так вот, к чему я, была у меня монохромная моторолла и на ней был прикольный "скринсейвер" с рыбками, теперь который я хочу воссоздать. Надписей "Hello, world!" я не планирую, а только чистый вывод изображений. Теперь сама суть моего обращения на форум. 1) Так как в Bascom я начинающий, решил идти по пути наименьшего сопротивления, то есть немного подправив код в проэкте, предоставленный автором статьи. Подправить то я его подправил, но вот правильно ли... Вообщем мне бы хотелось чтобы знающие люди проверили бы мой код. Хотя Bascom компилирует код без проблем. Вот исходный код: Вот мой код: (на одинаковость стека изображений не обращайте внимания, мои в процессе воссоздания, а мне нужна проверка самого принципа вывода изображений, который я написал) Таким образом я хочу выводить изображения поочередно с интервалом в 1 секунду. 2)Еще более интересующий меня вопрос - если открыть даташит на атмега8, то там написано, что флеш памяти для программ 8 кб. Но вот что интересно и вводит меня в ступор. Если просто взять проэкт автора статьи и скомпилировать его в .hex, то получаем: Bascom пишет при компиляции "Flash used - 55%", то есть как бы половина атмеги пустая, но вот выходной файл .hex имеет размер 13кб. Вот я и не могу понять как даже авторский проэкт в 13кб прошивается в атмегу с 8кб? Магия наверное. Скомпилировав "свой" проэкт, я получаю "Flash used - 66%" и файл на 15кб. Вот и возник такой вопрос - это нормально и так и должно быть? А если нет - то как правильно скомпилировать? Так как пока проверить код в железе нет возможности (еще едет), вот к Вам, знающим людям, за помощью и обращаюсь. Ниже прикрепляю видеофайл с компиляцией проэкта автора статьи в Bascom. clip0002.avi
-
здравствуйте. ребята помогите разобраться с программой задача программы мигать светодиодами и менять тетрады при внешнем прерывании всё хорошо только одно но! если по шагово смотреть процесс в avr studio 4 то доходя до команды call её не получается активировать. То есть в подпрограмму не получается зайти, после этой команды переходит к следующей команде. ЗАГРУЖАЮ В Мк atmega16A программа не работает подскажите пожалуйста в чём косяк что я не правильно делаю .include"m16def.inc" .ORG 0x0000 // адрес прерывания по сбросу JMP start // переход на метку start .ORG 0x0024 // адрес прерывания INT2 JMP int_2 // переход на обработчик прерывания INT2 .ORG 0x002A // адрес начала программы start: //**** инициализация стека **** LDI R16, 0x04 ;// загрузка в R16 числа 0x04 OUT SPH, R16 ;// пересылка числа 0x04 из R16 в регистр SPH LDI R16, 0x5F ;// загрузка в R16 числа 0x5F OUT SPL, R16 ;// пересылка числа 0x5F из R16 в регистр SPL //**** инициализация прерывания **** LDI R16, 0b00100000 OUT GICR, R16 ;// разрешение прерывания INT2 LDI R16, 0b00000000 OUT MCUCSR, R16 ;// прерывание по спадающему фронту сигнала ("H->L") //**** инициализация порта С **** SER R16 ;// установка всех бит регистра R16 в "1" OUT DDRC, R16 ;// инициализация порта C (работает как выход) //**** загрузка R16 и R17 **** LDI R16, 0b11110000 ;// значение 0xF0 LDI R17, 0b11100111 ;// значение 0xE7 SEI ;// установка флага глобального прерывания m1: ;// метка начала цикла основной программы OUT PORTC, R16 ;// вывод на светодиоды содержимого R16 CALL wait ;// вызов подпрограммы задержки OUT PORTC, R17 ;// вывод на светодиоды содержимого R17 CALL wait ;// вызов подпрограммы задержки RJMP m1 ;// переход на метку m1 //**** подпрограмма задержки на 800 мкс (при f=1 МГц) **** wait: ;// метка по которой вызывается подпрограмма PUSH R17 ;// сохранение [R17] в стеке LDI R17, 200 ;// загрузка в R17 константы задержки (200 циклов) w1: ;// метка цикла задержки на 800 машинных тактов NOP ;// пустая команда (добавляет 1 такт в цикл задержки) DEC R17 ;// декрементирование R17 (уменьшение на 1) BRNE w1 ;// если не обнулился R17, продолжать цикл POP R17 ;// восстановление содержимого R17 из стека RET ;// выход из подпрограммы задержки //**** обработчик прерывания INT_2 **** int_2: SWAP R16 // поменять тетрады R16 местами RETI // выход из подпрограммы обработчика прерывания
-
Продаются: -Паяльная станция lukey 852D+ Состояние хорошее, использовалась редко, не вскрывалась. Цена - 4500 -Отладочная плата STM32F429I-DISCO Цена - 2500 -Программатор AVR STK500 Цена - 1000 -Ультразвуковые дальномеры HC-SR04 Имеется 10 штук Цена - 80 за штуку, 5 штук за 350, 10 штук за 600 -Зарядное утройство ICharger 106В + Цена - 5500 -Блок питания DC12V 250 Вт Подойдет для ICharger 106В + Цена - 1000 -Плата для подключения по Bluetooth HC-05 Цена - 300 -Сервопривод MG90S Имеется 2 штуки Цена - 150 Все цены в рублях. Местонахождение - Воронеж. Почта за ваш счет.
- 5 ответов
-
-1
-
- отладочная плата
- паяльная станция
- (и ещё 4 )
-
Всем привет! На данный момент уже есть работающий прототип устройства на основе atmega2560. Устройство автомобильной тематики, узкоспециализированное. Сейчас готовлюсь к опытной партии и пытаюсь перенести все модули на одну печатную плату. Принципиальная схема уже практически готова. Тк своего опыта не достаточно, нужна помощь в изготовлении макета (проверить/оптимизировать схему), возможно в обсуждении какие-то функции упростятся. Территориально - Москва.
-
Сделал девайс для своей машины, думаю, многим понравится. Прибор устанавливается на любом автомобиле с напряжением бортовой сети 12В. Основные функции: 1.остаток топлива в баке в литрах. 2.напряжение бортовой сети. 3.рабочую температуру двигателя. 4.температуру воздуха снаружи машины. 5.изменение яркости дисплея в зависимости от включенного габаритного освещения (день/ночь). Дополнительно, компьютер обладает следующими сервисными возможностями: 1.калибровка штатного датчика уровня топлива. 2.установка уровня подсветки дисплея для режимов день/ночь. 3.изменение поправочного коэффициента инерционности показаний уровня топлива. Все калибровки прибора производятся программно. Для измерения температуры необходима установка собственных датчиков dallas ds18b20. В основе устройства лежит микроконтроллер AVR ATMega8 производства фирмы ATMEL. Для измерения напряжения бортовой сети предусмотрен отдельный контакт, который можно подключить непосредственно к аккумулятору или замку зажигания. В качестве индикатора был выбран алфавитно-цифровой ЖК индикатор фирмы МЭЛТ МТ-16S2H, который с успехом можно заменить на любой другой, совместимый с HD44780. Статья на сайте: Бортовой миникомпьютер В архиве схема, фьюзы для прошивания, файлы lcd.hex и lcd.epp, описание работы с менюшками. avr_lcd.rar
- 2 627 ответов
-
2
-
- Бортовой компьютер
- БК
- (и ещё 7 )
-
Продаю свои запасы разных МК список будет (позже). Есть STM8, STM32(F1,F2, F3, F4, F7), ADUC, ADUCM, SiLabs (EFM8, EFM32, 8051F), LPC, AVR. Цены будут ниже чем в магазинах. Если что в ЛС пишите посмотрю. Только Украина.
-
- микроконтроллер
- avr
-
(и ещё 2 )
C тегом:
-
Добрый день, уважаемые форумчане! Столкнулся с тривиальной проблемой, которую не могу решить. Достав из закромов USBASP, решил поставить дрова на комп и протестировать его на своей Atmega16 - зашить простую мигалку. То есть на нулевой пин порта "А" повесил светодиод и заставил в цикле подавать 1 - задержка - 0. Проще программы не бывает наверное. Код ниже (ассемблер): .include "m16def.inc" .def temp = r16 .org 0 rjmp reset Reset: // порт на вывод ldi temp,255 out ddra,temp out porta,temp start: //цикл мигалки clr temp out porta,temp rcall del ser temp out porta,temp rcall del rjmp start del: //стандартная задержка ldi r17,255 ldi r18,255 ldi r19,10 del2: dec r17 brne del2 dec r18 brne del2 dec r19 brne del2 ret Очевидно, что в коде ошибки нет. Протестировано в протеусе) Но после прошивки МК, на нужной ноге не происходит смена состояний. То есть светодиод загорается и не мигает - просто горит. Поменял порты - тоже самое. С фьюзами вроде тоже все нормально - скрины прилагаю. Шил и хазамой, и дудкой. Использовал USBASP. Сигнатура читается , фьюзы меняются - все хорошо. Менял чип на аналогичный - все тоже самое. Схема соединения - думаю не стоит выкладывать)) Короче, я в тупике. Настолько дурацкая проблема, что я даже не знаю что думать. Может проблема в том, что в я не отсоединяю МК от USBASP ( MOSI, MISO, SCK, RESET) ?
-
Всем привет. В общем есть простая мигалка по переполнению нулевого таймера. ATmega328. В АВР студии все прекрасно работает, в протеусе-0 реакции. Либо протеус тупит, либо я не настроил в нем что-то, так как собрал в железе и прошил - все работает замечательно. Файлы исходника, прошивки и протеуса прилагаю. P_5.asm P_5.hex Timer.pdsprj
-
Всем Привет. Прошу не кидаться тапками за название темы, понимаю, что уже много опубликовано материалов по этому вопросу, однако все кроется в нюансах. Итак, к проблеме. Выполняю курсовую работу. Опыта в программировании минимум. Имеется схема с МК ATmega8 и дисплеем LM044 на контроллере HD44780. При попытке вывести инфу на дисплей столкнулся с этими двумя рядами прямоугольников (к слову, дисплей 20х4). Поначалу думал, что оторвались провода, которые соединяют дисплей с МК. Нет, все прозваниваются. Кстати, схема вся была спаяна преподавателем и раньше дисплей уже выводил инфу, но когда начал я ее прошил своей прогой, появилось, то что на фотке. Потом пошли мысли, что неправильно настроил выводы в CodeVision AVR, в котором работаю. Исходя из даташита МК и того, куда припаяны провода в схеме, настроил порты таким образом: Думал, что теперь будет все норм, прошил снова - ничего. Начал уже бесится, изучил десятки страниц (уже не первый день работаю над схемой, думал все-таки смогу сделать сам, ан нет) Решил начать с простого. Нашел в инете самый простой код по выводу инфы Сделал стандартный проект в CodeVision AVR, вставил туда этот код, настроил настроил выводы на свои. Прошил в Протеусе МК и вуаля - в Протеусе инфа выводится! На радостях решил, что теперь-то все получится - опять нет! Прошивал МК через AVRDUDE PROG 3.0 через USBasp Ребят, у меня к вам такие вопросы: 1. Что может быть не так с дисплеем? 2. Нужно ли как-то настраивать порты МК? Потому что я нигде не видел, чтобы хоть где-то пытались настроить порты МК при выводе инфы на экран. Даже в том коде, что я выложил. Прошу вас, высказывайте любые идеи и мысли, ибо я реально хочу понять программирование и выяснить в чем же проблема. Спасибо!
-
В поисках схемы управления малогабаритным двигателем типа ДПМ, пришел к выводу о необходимости создания своей модификации. Принцип такого устройства везде один - при превышении потребляемого тока под нагрузкой на двигатель подается полное напряжение, при снятии нагрузки - напряжение уменьшается до минимально необходимого. Найденные в инете схемы были аналоговые и не позволяли достаточно дискретно установить необходимый ток срабатывания. Ниже предлагается простая схема и программа для микроконтроллера ATMega8, позволяющая подключить любой двигатель и настроить его, исходя непосредственно из его электрических параметров. А также настроить чувствительность к степени нажатия сверлом на плату. При включении двигатель (Д) находится в режиме холостого хода - iR<i1. Микроконтроллер (МК) отслеживает превышение рабочего тока iR над заданным i1, что будет означать подачу нагрузки на вал Д. При превышении iR>i1 МК переходит в режим отслеживания тока iR<i2, который задает порог возвращения в режим холостого хода, а также подает почти полное напряжение питания на Д. Также активируется режим отслеживания заклинивания вала Д - iR>i3. В этом случае подача напряжения на Д прекращается. Сброс осуществляется аппаратным сбросом МК. Настройка i1,i2,i3 осуществляется энкодером поочередно. Выбранные значения запоминаются в ппзу. Индикация производится с помощью трехразрядного семисегментного индикатора. Принципиальная схема устройства. За основу был взят классический блок питания. В цепь задающего стабилитрона включен транзистор VT1. В режиме холостого хода он открыт, благодаря чему напряжение на Д определяется напряжением стабилизации стабилитрона VD3. При увеличении нагрузки выход МК OUT1 переводится в логический ноль. Транзистор VT1 закрывается, на Д подается почти полное напряжение питания. При заклинивании вала на выходе OUT2 появляется логическая единица, транзистор VT2 открывается и замыкает базу VT3 на корпус. Регулирующий транзистор VT4 закрывается. Программирование необходимых значений i1, i2, i3 осуществляется поочередно в режиме настройки, для перехода в который надо нажать кнопку КN2. Подсказкой для индикации выбранного тока служит количество светящихся точек. Запоминание в ппзу происходит при выходе из режима настройки. Индикация текущего тока и программируемых значений происходит с помощью светодиодного индикатора. При заклинивании вала индикатор показывает три тире. Для сброса надо нажать кнопку КN1. Съем значения потребляемого тока происходит с резистора 1 Ом, включенного последовательно с Д. В этом и заключается особенность схемы. Приведенный узел управления Д не является обязательным и может быть заменен любым другим. Обязательно лишь наличие токоизмерительного резистора 1 Ом, включенного в минусовую цепь питания Д. Питание МК производится через стабилизатор 7805 и ограничивающие резисторы. Сам стабилизатор 7805 и выходной транзистор КТ805 необходимо установить на небольшие радиаторы. Программа написана на ассемблере. Обработка дребезга контактов кнопок и энкодера программная, не требующая дополнительных конденсаторов в схеме. Поскольку задача достичь абсолютной точности устанавливаемых значений токов не ставилась, то для упрощения программы математическая обработка была также упрощена и дробная часть не учитывалась. Вследствие чего из-за двойной обработки записываемое в ппзу значение иногда будет меньше индицируемого на единицу. По большому счету, это не доставляет никаких проблем, просто надо иметь в виду этот момент. На случай сбоя в ппзу при включении МК проверяет контрольный байт. Если он совпадает, то считываются записанные ранее значения. Если нет - записываются исходные значения (что происходит при первом включении) - 200мА, 100мА, 800мА. Энкодер на плату не устанавливается и подключается отдельно. Ограничительный резистор перед стабилизатором 7805 составлен из четырех резисторов МЛТ-0.5 75 Ом. В программе используются значения токоизмерительного резистора 1 Ом и напряжение на AREF 2 В. Если они будут отличны - фактическое значение устанавливаемого тока будет также другим. Но опять-таки, по большому счету в данной схеме бОльшую важность имеют не абсолютные значения тока, а относительные. Всё равно придется подбирать токи при настройке под конкретный двигатель. Максимальный измеряемый ток через Ri равен 2 А. Это значение может быть установлено для каждого из i1, i2, i3. Таким образом, возможности регулирования достаточно широкие под практически любой малогабаритный двигатель. В процессе испытаний резисторы на сегменты индикатора (8 шт) были увеличены с 510 Ом до 1к. Яркость осталась достаточная, ток потребления МК и индикатора уменьшился с 70 до 50 мА. Транзисторы VT1...VT3 были использованы из имеющихся в наличии, можно заменить на любые с напряжением коллектор-эмиттер не менее 50 В. Кварцевый резонатор - 16.000 МГц. Индикатор - E30561-L-O-0-W с общим катодом. Фьюзы для МК - запрограммированы SPIEN и CKOPT. К примеру, для моего ДПМ-30-Н1-04 i1=120mA, i2=95mA, i3=700mA. Возможный вариант печатной платы в формате lay6 и прошивка в архиве. dpm.RAR
- 25 ответов
-
1
-
Здравствуйте, на днях собрал ubs-usart на attiny2313 на макетной плате, всё работало. Припаял к плате - не работает. В диспетчере задач показывается, как Неизвестное устройство. В чём может быть проблема, контакты проверил тестером в режиме прозвонки, вроде не коротит ничего.
-
Код с помощью которого двигатель вращается в одном направлений по часовой стрелке. А нужно "составить программу на языке ассемблера для реверсивного управления электродвигателем постоянного тока". так написано в заданий Но я думаю можно новую не писать, а можно изменить эту так что бы двигатель вращался в одну сторону и потом в другую, наверно так. Помогите, а то я вообще не понимаю этот ассемблер(( ;* На выходе OC1A МК АТmega16 получаем выходные импульсы ;* с частотой 50 Гц и коэффициентом заполнения g=0,025. ;* Тактовая частота MK AVR: 4 МГц .nolist .include"m16def.inc" .list .def STAT = r15 ;Регистр для хранения состояния главной программы .def WorkH = r16 ;Рабочий регистр для главной программы .def WorkI = r17 ;Рабочий регистр для прерывания от таймера .def AddLo = r18 ;Вспомогательный регистр для прибавления константы .equ Impuls = 9000 ;Число тактовых сигналов, соответствующее импултсу .equ Pause = 1000 ;Число тактовых сигналов, соответствующее паузе Reset: rjmp Initial ;Переход к части инициализации reti ;Внешнее прерывание 0 (не используется) reti ;Внешнее прерывание 1 (не используется) reti ;Прерывание по захвату (не используется) Timer1CompA: ;Прерывание CompareA для ATmega16 in STAT,SREG ;Сохраняем флаги главной программы in WorkI,TCCR1A ;Регистр управления А счетчика Т/С1 sbrs WorkI,COM1A0 ;Пропускаем следующую команду, если COM1A0 = 1 rjmp TC1 ;Пропускаем следующую команду, если COM1A0 = 0 cbr WorkI,1<<COM1A0 ;При следующем прерывании OC1A -> 1 out TCCR1A,WorkI ;Сохраняем новое значение in AddLo,OCR1AL ;Младший байт OCR1A subi AddLo,Low(-Impuls) ;Прибавляем младший байт значения импульса in WorkI,OCR1AH ;Старший байт OCR1A sbci WorkI,High(-Impuls) ;Прибавляем старший байт значения импульса rjmp IntEnde TC1: sbr WorkI,1<<COM1A0 ;При следующем прерывании OC1A -> 1 out TCCR1A,WorkI ;Сохраняем новое значение in AddLo,OCR1AL ;Младший байт OCR1A subi AddLo,Low(-Pause) ;Прибавляем младший байт значения длительности импульса in WorkI,OCR1AH ;Старший байт OCR1A sbci WorkI,High(-Impuls) ;Прибавляем старший байт значения длительности импульса IntEnde: out OCR1AH,WorkI ;Назад - старший байт нового значения out OCR1AL,AddLo ;Назад - младший байт нового значения out SREG,STAT ;Восстанавливаем старые флаги reti ;Выход из обработки прерывания CompareA Initial: ;Инициализация регистра ввода/вывода ldi WorkH,High(RamEnd) out sph,WorkH ldi WorkH,Low(RamEnd) out spl,WorkH ;Инициализируем стек clr WorkH ;Все разряды = 0 out PortD,WorkH ;Вывод в порт D ldi WorkH,$20 ;Разряд 5 - в 1, остальные - в 0 out DDRD,WorkH ;OC1A (PD5) - выход, остальные входы ldi WorkH,High(Pause) ;Старший байт значения паузы out OCR1AH,WorkH ;в старший байт регистра сравнения А ldi WorkH,Low(Pause) ;Младший байт значения паузы out OCR1AL,WorkH ;в младший байт регистра сравнения А ldi WorkH,$C0 ;OC1A -> 1 out TCCR1A,WorkH ;Сохраняем новое значение ldi WorkH,$02 ;Входной такт Т/С1 = такт сист. синхр./8 out TCCR1B,WorkH ;Запускаем Т/С1 ldi WorkH,$40 out TIMSK,WorkH ;Разрешаем прерывание CompareA sei ;Общее разряшение прерываний (разряд I) Haupt: rjmp Haupt ;Главная часть программы: ожидаем возникновения прерывания Программа работает двигатель крутиться по часовой стрелке, Препод сказал что на один вход мы сигнал подали теперь нужно его сохранить и подать на другой, на фотках схема подключения и установка В методичке это 4 лаба, там программа не та но теория та что и вновой методичке lab_rab_MK_AVR.pdf
-
Добрый день (вечер)! Уже практически целый день голову ломаю, что же это может быть... Итак, в чем проблема. Имеется некий проект на ATmega8, компилятор - WinAVR, среда - встроенный в протеус редактор кода. Все бы хорошо, но вот незадача, при компилировании и запуске в отладчике отображается черт знает что. Пример: Строки 147, 153 и т.д. не должны иметь адресов, но они есть. А вот строки 143, 150 и т.д. наоборот. И это при выключенной оптимизации... Никто не сталкивался с таким? Весь проект очень не хочется заново делать, но чувствую по-другому этот странный баг не одолеть. Так как остальные проекты открываются и редактируются нормально. Пробовал и менять версии протеуса, машины, оптимизацию. Результат 0.
-
Atmel Studio 7. Здравствуйте. Занимаюсь в свободное время небольшим проектом. Пару дней был перерыв, всё работало. Сегодня делаю ребилд, вот Output: ------ Rebuild All started: Project: RF, Configuration: Debug AVR ------ Build started. Project "RF.cproj" (Clean target(s)): Target "Clean" in file "D:\Circuits\AtmelStudio\7.0\Vs\Compiler.targets" from project "D:\Circuits\AvrProjects\RadioNanny\RF\RF.cproj" (entry point): Task "RunCompilerTask" Shell Utils Path D:\Circuits\AtmelStudio\7.0\shellUtils D:\Circuits\AtmelStudio\7.0\shellUtils\make.exe clean rm -rf library.o rm -rf library.d rm -rf "libRF.elf" "libRF.a" "libRF.hex" "libRF.lss" "libRF.eep" "libRF.map" "libRF.srec" "libRF.usersignatures" Done executing task "RunCompilerTask". Done building target "Clean" in project "RF.cproj". Done building project "RF.cproj". Build succeeded. ------ Rebuild All started: Project: RF, Configuration: Debug AVR ------ Build started. Project "RF.cproj" (default targets): Target "PreBuildEvent" skipped, due to false condition; ('$(PreBuildEvent)'!='') was evaluated as (''!=''). Target "CoreBuild" in file "D:\Circuits\AtmelStudio\7.0\Vs\Compiler.targets" from project "D:\Circuits\AvrProjects\RadioNanny\RF\RF.cproj" (target "Build" depends on it): Task "RunCompilerTask" Shell Utils Path D:\Circuits\AtmelStudio\7.0\shellUtils D:\Circuits\AtmelStudio\7.0\shellUtils\make.exe all --jobs 2 --output-sync D:\Circuits\AvrProjects\RadioNanny\RF\Release\Makefile(79,1): error: recipe for target 'library.o' failed make: *** [library.o] Error 1 Done executing task "RunCompilerTask" -- FAILED. Done building target "CoreBuild" in project "RF.cproj" -- FAILED. Done building project "RF.cproj" -- FAILED. Build FAILED. ========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ========== В ошибках: Severity Code Description Project File Line Error recipe for target 'library.o' failed RF D:\Circuits\AvrProjects\RadioNanny\RF\Release\Makefile 79 Что находится в Makefile строка 78-82: 78: ./%.o: .././%.c 79: @echo Building file: $< 80: @echo Invoking: AVR/GNU C Compiler : 5.4.0 81: $(QUOTE)D:\Circuits\AtmelStudio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe$(QUOTE) -x c -funsigned-char -funsigned-bitfields -DNDEBUG -I"D:\Circuits\AtmelStudio\7.0\Packs\atmel\ATtiny_DFP\1.2.118\include" -Os -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -Wall -mmcu=attiny13 -B "D:\Circuits\AtmelStudio\7.0\Packs\atmel\ATtiny_DFP\1.2.118\gcc\dev\attiny13" -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -o "$@" "$<" 82: @echo Finished building: $< Перестало билдиться именно при ребилде. Если откатить изменения, и сделать просто билд - всё работает. Запускаю студию от администратора, т.е. с правами проблем нет. Да и по логике, если хватает прав удалить при clean файлы, то должно хватать и на создание. Вообще, мне не совсем понятна фраза recipe for target 'library.o' failed.
-
Здравствуйте. Думаю кто-то сталкивался с таким. Пишу прошивку для двух контроллеров, которые будут общаться через RF модуль. Для них нужны некоторые общие настройки, например частота, время задержки при определенных действиях, и тд. Задавать в каждом проекте в коде - противоречит принципу DRY, да и вообще... Сделал два проекта, для передатчика и приемника. И сделал проект static library для общих настроек, назвал Common. Добавил референсы на статическую библиотеку. Определяю в common: unsigned char KEY = 0b10010110; Пытаюсь использовать в проекте передатчика: send(KEY); При ребилде получаю ошибку, что KEY не определена.
-
Привет. Вот, озадачился такой, на первый взгляд, простой ерундой. Как подключить 24 релюшки к одному микроконтроллеру. Да еще и ножки микросхемы сэкономить. Конечно же 74hc595!!! Да не тут то было. Если с двумя регистрами проблем никаких не возникало, то с тремя, что то пошло не так. Пишу в AtmelStudio на Си. Макро #define DS_PORT PORTD #define DS_PIN 3 #define ST_CP_PORT PORTD #define ST_CP_PIN 4 #define SH_CP_PORT PORTA #define SH_CP_PIN 4 #define DS_low() DS_PORT&=~ (1 << DS_PIN) #define DS_high() DS_PORT|= (1 << DS_PIN) #define ST_CP_low() ST_CP_PORT&=~ (1 << ST_CP_PIN) #define ST_CP_high() ST_CP_PORT|= (1 << ST_CP_PIN) #define SH_CP_low() SH_CP_PORT&=~ (1 << SH_CP_PIN) #define SH_CP_high() SH_CP_PORT|= (1 << SH_CP_PIN) А это функция вывода числа через три последовательно подключенных регистра void output_led_state(unsigned long int __led_state) { SH_CP_low(); ST_CP_low(); for (long int i=0;i<24;i++) { if (((1 << i) & __led_state) == (1 << i)) DS_high(); else DS_low(); SH_CP_high(); SH_CP_low(); } ST_CP_high(); } А тут, в майне, я передаю число. output_led_state(0b000000010000000000000000); Но выводится только 16 бит а не 24!!!!!! Вопрос, что я делаю не так??? В архиве схема и прошивка. proyeck.rar
- 59 ответов
-
- atmelstudio
- 74hc595
-
(и ещё 2 )
C тегом:
-
Добрый вечер уважаемые! Помогите советом .. Как лучше всего реализовать генератор . Исходные данные такие : Есть выделенный 10 битный параллельный порт при помощи ножек ввода . Он принимает значения от 0 до 1000 , выводит эти данные основной микроконтроллер тоже через параллельный порт . Нужно исходя из этого генерировать частоту от 1000Гц до 5000Гц с шагом 4-5Гц . Пробую программно генерить - не получается , вернее получается очень коряво . Если подстроил нижнюю границу точно , к примеру 1000Гц , то верхняя плывет и наоборот , если верхнюю подстроил то нижняя плывет . Допускается на больших частотах (свыше 4000Гц шаг 20Гц ) но как синхронизировать показания дисплея с генератором ? Есть вариант применить таблицу но это очень муторно ... Частота кварца мк который генерит частоту 16МГц. Посоветуйте какую частоту кварца лучше выбрать и каким методом генерить частоту ? Еще одна особенность : надо формировать импульс длительностью 10мкс , а вот чтобы период был к примеру при 1000Гц = 990мкс. и т.д. Есть хитрости у таймера Attiny2313A при помощи которых можно аппаратно сформировать частоту? С уважением Артем.
- 12 ответов
-
- attiny2313a
- avr
-
(и ещё 2 )
C тегом: