Поиск сообщества
Показаны результаты для тегов 'AVR'.
Найдено: 200 результатов
-
Добрый день! Необходимо подобрать микроконтроллер, который будет получать команды по serial от esp8266 и димировать RGBW светодиод по следующему алгоритму: https://docs.google.com/document/d/1FkPLiIgxleuDQn8pjihICQGRrMPXbwFzqCt6StQZjhU/edit?usp=sharing а также написать для него прошивку на си. Отвечать можете в телеграм arsenicum32 или сюда. Пишите цену / сроки, находитесь ли в МСК и/или в области.
-
Всем привет. Можно ли измерить 230 вольт ардуиной,если напряжение пропустить через диодный мост и делитель напряжения? Вроде понизить нужно в 72 раза,но в инете я такого не встречал. Питание контроллера будет через импульсный БП.
-
Доброго дня Пересматривая множество мануалов и примеров по ассемблеру для AVR, возник такой вопросик по работе с памятью данных (SRAM). Множество документов и примеров пересмотрел, нигде не нашел ответа. В начале программы мы можем в сегменте данных зарезервировать память под некие переменные. Для VAR1, например, резервируем один байт .DSEG VAR1: .BYTE 1 после чего с помощью LDS/STS с ним работаем. А теперь самая мякотка. Директивой BYTE мы можем зарезервировать более одного байта для переменной. Если я правильно понимаю, то данный код .DSEG VAR2: .BYTE 8 я создаю некое подобие массива, что-то вроде char VAR2[8], если провести аналогию с Си. Каким образом на ассемблере я могу работать с N-ным байтом зарезервированной области VAR2?
-
Доброго времени всем! Собрал паяльную станцию теперь из схемы хочу попробовать исключить операционный усилитель, т.к. паяльник с терморезистором сделать по схеме резистивного делителя. Диапазон регулировки напряжений получается мал. Помогите программно рассчитать рабочий диапазон чтобы показания на дисплей выводились от 0 до 420. Все значения на рисунке условны, главное узнать общий принцип расчета. PS: Очень нужно да и для будущих поделок пригодится.
-
Здравствуйте, пытаюсь прошить свой первый микроконтроллер, Atmega8. Нашел программу в Atmel Studio, мигания светодиодом, откомпилировал и получил hex файл. Начал зашивать в МК делал все как в примере Как прошить микроконтроллер. Не пойму момент в этом примере : "после того как мы прошили МК, нам нужно установить FUSE бит CKDIV8". Зачем нужно делить тактовую частоту на 8, так всегда нужно делать? И почему именно на 8 а не на другой делитель?
-
Доброго времени суток. Хотел бы попросить вас помочь мне изучить микроконтроллеры STM32. Я знаком с AVR, ну STM32 кажется мне сложнее, хотелось бы получить от ВАС какую-то литературу, полезные ссылки. Начать своё изучения я хочу с мигания светодиода). Сперва я думал сам сделать себе отладочную плату, ну потом мной было принято решения взять себе не очень дорогой вариант Discovery, так как он имеет встроенный программатор, который можно использовать к разным МК этой компании.
-
Здравствуйте. У меня возникла проблема в прошивке микроконтроллера Atmega8. Задача заключается в том чтобы сравнивалось опорное на напряжение АЦП с подаваемым на вход АЦП напряжением и далее результат выводился на дисплей. У меня возникли сложности с настройкой АЦП, как я думаю оно находится в спящем режим так как когда я загружаю hex файл в Proteus и запускаю пошаговую отладку, то мои условия не выполняются и в переменной в которую я прописываю значение подаваемого напряжения постоянно находится значение опорного напряжения. Код пишу в Atmel Studio 6 на С Симуляцию делаю в Proteus Очень нужна помощь Спасибо! Примерный код в Atmel,не судите строго только начинаю изучать микроконтроллеры #define F_CPU 1000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> static volatile int u = 0; static volatile float v; int main(void) { DDRB=0xFF; PORTB=0x00; DDRC=0x00; PORTC=0xFF; //настройка АЦП// ADCSRA |=(1<<ADEN)//включение ацп |(1<<ADPS1)|(1<<ADPS0)|(1<<ADFR);//ADPS2-ADPS0-тактовая частота АЦП??? //ADCRA=0x83 ADMUX |= (0<<REFS1)|(1<<REFS0)//внешний ИОН |(0<<MUX0)|(0<<MUX1)|(0<<MUX2)|(0<<MUX3); //вход PC0 //ADMUX=0x00 while(1) {ADCSRA |=(1<<ADSC);//начинаем преобразование while ((ADCSRA&(1<<ADIF))==0);//ждём флага окончание преобразование _delay_ms(5); u=ADCW;// считываем ADC v = (float) u*0.0048828; if (v>=2.1){ PORTB=0x01; } else{ PORTB=0xFF; } _delay_ms(5); Также начальный проект в протеус, опять же не судите строго) micro.pdsprj
-
Есть задумка собрать вольтметр постоянного напряжения (до 1000В) на ГРИ, использовав за основу популярную схему часов. Либо на базе микросхемы ICL7107, если это возможно. Знающих прошу помочь.
- 14 ответов
-
- AVR
- микроконтроллер
-
(и ещё 1 )
C тегом:
-
Меня тут порадовали задачкой для АВР (я когда то очень много таких порешал, на практике - напомнили молодость ): http://cxem.net/mc/mc446.php сформулирована так: Нужно два быстрых элемента "И" и одновибратор. Можно использовать серию 155 у которой время срабатывания даже меньше получается, но не подходит по энергопотреблению. Хотелось бы сделать это на Attiny13. Остановимся пока на Я, соответственно, предложил реализацию: Можожно сделать так: loop1: in reg1, pina; 1-tick in reg2, pinb; 1-tick and reg1, reg2; 1-tick LSR reg1; 1-tick out portB, reg1; 1-tick rjmp loop1; 2-tick Это код на ассемблере , который реализует два «элемента И» на АВР со временем срабатывания около 1мкс, в зависимости от тактовой частоты МК. На частоте 16 MHz это 7/16 мк-секунды(7 ticks, на самом деле +4 = 11тиков максимум время срабатывания, позже поясню), входы элемента-И должны быть на одинаковых пинах условных портов A and B, а выходы следующие по старшинству биты-пины. Вообще говоря перед выводом в порт, скорее всего, нужно будет еще маску добавить это еще +1 тик! Цикл можно переделать на использование только одного порта. Мой вариант в закодированном архиве приатачен, ключ выложу через неделю! Мне интересно можно ли сделать быстрее чем у меня получилось! Сможет кто нибудь предложить вариант решения? В общем, похоже что, на ассемблере можно написать «два элемента И» со временем срабатывания около 1.5мкс даже на 10МГц при произвольном расположении ног на одном порту. bestAvrCodeForAnd.7z
-
Прошу помочь изменить прошивку из проекта http://cxem.net/mc/mc187.php Часы будут содержать 4 индикатора 1) управление функционалом без изменений (время, дата, температура). 2) убраны индикаторы отвечающие за секунды, т.е. нужно вырезать функции отображения секунд и года. 3) отображение температуры без десятых градуса (индикатор №3 и №4). Схема:
- 7 ответов
-
- Часы
- Микроконтроллер
-
(и ещё 2 )
C тегом:
-
Для коптера делаем контроллер для автополета на ардуине. Но не можем совладать с калибровкой внешнего компаса. Требуется написать прошивку для контроллера, который бы считал калибровку и выдавал ардуине готовый сигнал. Компас классический HMC5983, подключается по I2C. Но при его использовании ближе к югу или северу начинает показания резко менять, получается так называемый "эллипс" а не круг. Контроллер найду, прошью, но с программированием на AVR вообще никак ((. В итоге должна получится железка, на входе компас, на выходе готовый сигнал после поправок. И кнопка начала калибровки. Т.е. по ее нажатию, надо крутануть компас вокруг своей оси. Проект не коммерческий, для себя, если кто хочет внести свой небольшой вклад, буду очень рад! Спасибо! С меня пивасик! )
- 19 ответов
-
Здравствуйте. Посоветуйте пожалуйста схемы программаторов для AVR и STM- универсальный не надеюсь. Имеется в наличии usbasp китайский-работает как гнилой еврей раз в неделю. Сделал PICKIT2 за 4 года ни одного отказа. usbasp может сегодня тупо отказываться работать на 3 компьютерах, на следующий день как часики прошивает 1-2 камня и опять отдыхает. Надоело.
- 1 ответ
-
- программатор
- avr
-
(и ещё 1 )
C тегом:
-
Обязанности: · Разработка радиоэлектронных и GSM-устройств: разработка схем, программирование, разводка печатных плат, разработка документации. · Программирование микроконтроллеров STM, AVR, ARM, PIC на языке С/С++ в личку или en@argument74.com
-
Приветствую всех. Как на 2313 рассчитать значение для записи в эти регистры, если я хочу получить задержку в 6 секунд? OCR1AH OCR1AL TCCR1B
-
Всем доброго времени суток. Помогите пожалуйста начинающему.Нужна программа для Attiny13a на языке С. Вот такой алгоритм: Нажимают кнопку и начинают мигать светодиоды типа "Бегущие огни", при отпускании остается светится один из четырех, причем в случайном порядке как в рулетке.Нажимают и снова начинают бежать- отпускают остается гореть один.
-
Есть проект СГУ на AVR. Музой проекта послужил не безызвестный проект СГУ на PIC. Хотел сделать его ещё в 2012 но знаний не хватало. А вот сейчас знаний хватает, вот и сбылась моя мечта. Пока что прикреплю видео, когда напишу статью о нем, ждите публикацию на ГЛ странице сайта. В качестве динамика использовал колонку от Соньки музыкалки.
-
Помогите пожалуйста разобраться, программа не работает. Есть задумка через bluetooth terminal на телефоне передавать команду(ноль или единицу) на bluetooth модуль HC-05, подключенный к atmega328p и таким образом управлять светодиодом. Но почему то светодиод не загорается. Соединил выходы bluetooth модуля и атмеги так: tx -> rx, rx -> tx, светодиод подключен к нулевому биту порта B(PB0). В чём может быть ошибка? question.txt question.txt
-
Влияние измеряемых сигналов друг на друга
serj280294 опубликовал тема в Периферия и внешние устройства
Всем привет. Собираю вольтамперметр на микроконтроллере. Снимаю напряжение с шунта и усиливаю его с помощью ОУ. Развел плату, собрал, но при подключении к плате проводов, измеряющих напряжение самого источника питания и напряжение снятое с шунта, на последнем сильно проседает напряжение. Я понимаю, что ОУ при таком подключении не должен влиять на измеряемое напряжение. Я предполагаю, что проблема может скрываться в разнице потенциалов земель измеряемых напряжений и источника питания вольтамперметра. Вольтамперметр имеет отдельное питание. Если отключить контакты, измеряющие напряжение источника питания, амперметр работает как и задумано и напряжение на шунте падает в соответствии с измеренным при проектировании вольтамперметра. Подскажите пожалуйста, как правильно развести земли или изменить схему подключения. -
Доброго дня! Купил на барахолке вот такую плату на последней фото 2 черных провода в дальнейшем соединены Это бегущая строка от игровых автоматов, на ней 2-мя цветами отображаются слоганы, хочу перепрошить в целях обучения. Вопросы: 1) встречал ли кто-то описание этой микросхемы? (я в интернете не нашел, потратил 2 дня) 2) есть на микросхеме разъем (10 ножек хорошо видно на последнем фото), как узнать их имена, за что отвечает каждая ножка? (есть некоторые предположения, но сомневаюсь в них) 3) можно ли через CP2102-USB-UART-MODULE перепрошить вот эту микросхему, если да то как соединить?
-
Добрый день. Мне требуется реализовать программный юарт на атмеге16. Он нужен для того, чтобы принятые по нему данные отправить на аппаратный юарт. В интернете нашел примеры кода, но понять его мне трудно. Прошу вас словами в общих чертах объяснить принцип реализации программного юарта. Буду рад примерам, которые, на ваш взгляд, являются наиболее простыми и понятными. Заранее спасибо.
-
Всем доброго времени суток! в поиске не смог найти инфо, поэтому создал тему, не ругайте, если ошибся с веткой. Идея следующая, есть автомагнитола deh-3600MP c выходом Ip-bus.Хочу подружить магнитофон с мп3 плеером (есть от фм-трансмиттера, завтра куплю платку отдельного мп3). Сразу подчеркну, что хочу управление плеером (треки, теги, пауза и т.д) с головного устройства. предполагаю схему так: ip-bus - avr - mp3 player. алгоритм avr-mp3 несложен и открыт, а вот описание протокола ip-bus нигде нет, форум витат.спб уже изучил, есть кусок кода работы авр и ip-bus, но не очень понятно, может подскажете набор команд ip-bus или что происходит по событию нажатию кнопки вперед/назад. Заранее благодарен.
-
Товарищи, помогите пожалуйста. Данная програмулина при нажатии на кнопку входит в функцию 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; }
-
Можно ли залить в arduino прошивку, предназначенную для чистого AVR?
-
Здравствуйте! Пишу программу на C++ для управления LCD (HD44780) по I2C через модуль расширения портов ввода/вывода PCF8574AT. void LCD_I2C::readBF() { transmitByte(0b00001110); //transmits E, RW set to HIGH and RS, set to LOW _delay_ms(5); transmitByte(0b00001010); //transmits E, RS set to LOW and RW set to HIGH _delay_ms(5); initRestart(); transmitAddrRW(0b01111111); //sends PCF8574AT address + SLA+R do { receiveDataAck(); PORTA = storage; } while((storage & (1 << BF)) != 0); //wait until BF is 0 initRestart(); transmitAddrRW(0b01111110); } Метод void transmitByte(uint8_t data) после инициализации состояния "Старт" и отправки адреса устройства + SLA+W отправляет байт данных по TWI с ожиданием бита подтверждения (команды работают верно, проверял по регистру статуса TWI - 0x08, 0x10 и 0x24). Метод void transmitAddrRW(uint8_t address) отправляет соответственно SLA+W/R + адрес устройства (команда работает также верно). Нареканий к работе TWI у меня нет, т.к. недавно с его помощью успешно запустил часы DS1307 с интеграцией LCD. После передачи запроса на чтение флага занятости инициализируется состояние "ПОВСТАРТ", отправляется адрес устройства + SLA+R, далее идет цикл - запрос байта данных (состояние выводов PCF8574AT) с отправкой бита подтверждения uint8_t receiveDataAck() (команды работают также верно, возвращает storage = TWDR) и вывод storage на порт А микроконтроллера (там установлены светодиоды). Чтение регистра данных TWDR после принятия байта данных (receiveDataAck()) дает следующий результат - 0b00000010 - установлен только бит RW микросхемы. Таким образом, флаг занятости BF = DB7 = 7й бит оказывается сразу же сброшенным, происходит мгновенный выход из цикла - контроллер дисплея не успевает скушать информацию, и инициализация не выполняется (неудачную инициализацию определяю по отсутствию курсора). Ожидалось, что флаг занятости будет установлен в единицу и произойдет несколько итераций перед выходом из цикла. При замене метода ожидания сброса флага занятости BF на программную задержку в 250 мс везде, где это требует datasheet - инициализация происходит успешно (появляется курсор, как и должно быть). Вопрос: что можно сделать, чтобы вместо _delay_ms(250) использовать readBF(), т.к. этот путь мне кажется более верным (уж очень не хочется использовать задержку .__.)? Возможно, проблема в микросхеме, которая неверно выдает информацию при чтении? (Имеется вторая микросхема, она вообще не работает:D) З.Ы. На фото виден результат чтения флага BF и Adress Counter - установлен только бит RW. З.Ы.Ы Кому интересно - вот функция main(). Повторюсь - проблема только в методе readBF(): void LCD_I2C::init() { setBitRate(20000); initStart(); transmitAddrRW(0b01111110); //send PCF8574AT address + SLA+W _delay_ms(60); sendInstruction(0b00110000); //function set 8-bit operation _delay_ms(20); sendInstruction(0b00110000); //function set 8-bit operation _delay_ms(5); sendInstruction(0b00110000); //function set 8-bit operation _delay_ms(5); sendInstruction(0b00100000); //function set 4-bit operation readBF(); //_delay_ms(250); //debug!! sendInstruction(0b00100000); //function set 4-bit operation, 2 lines, 5x8 dots sendInstruction(0b10000000); readBF(); //_delay_ms(250); //debug!! sendInstruction(0b00000000); //display off, cursor off, blinking off sendInstruction(0b10000000); readBF(); //_delay_ms(250); //debug!! sendInstruction(0b00000000); //display clear sendInstruction(0b00010000); readBF(); //_delay_ms(250); //debug!! sendInstruction(0b00000000); //entry mode set increment, display shift off sendInstruction(0b01100000); readBF(); //_delay_ms(250); //debug!! sendInstruction(0b00000000); //display on, cursor off, blinking off sendInstruction(0b11100000); readBF();/ }
-
здравствуйте. ребята помогите разобраться с программой задача программы мигать светодиодами и менять тетрады при внешнем прерывании всё хорошо только одно но! если по шагово смотреть процесс в 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 // выход из подпрограммы обработчика прерывания