Поиск сообщества
Показаны результаты для тегов 'avr'.
Найдено: 194 результата
-
Здравствуйте! Пишу программу на 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 // выход из подпрограммы обработчика прерывания
-
Всех приветствую! Вообщем ситуация такая - (сейчас будет предыстория) стал понемногу интересоваться МК и набрел на статью о подключении экрана нокии 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
-
Всем привет! На данный момент уже есть работающий прототип устройства на основе atmega2560. Устройство автомобильной тематики, узкоспециализированное. Сейчас готовлюсь к опытной партии и пытаюсь перенести все модули на одну печатную плату. Принципиальная схема уже практически готова. Тк своего опыта не достаточно, нужна помощь в изготовлении макета (проверить/оптимизировать схему), возможно в обсуждении какие-то функции упростятся. Территориально - Москва.
-
Продаются: -Паяльная станция 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 )
-
Продаю свои запасы разных МК список будет (позже). Есть 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. Нужно ли как-то настраивать порты МК? Потому что я нигде не видел, чтобы хоть где-то пытались настроить порты МК при выводе инфы на экран. Даже в том коде, что я выложил. Прошу вас, высказывайте любые идеи и мысли, ибо я реально хочу понять программирование и выяснить в чем же проблема. Спасибо!
-
Здравствуйте, на днях собрал 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 тегом:
-
Светодинамическая установка на Attiny2313
Владимир Семионов опубликовал тема в Световые эффекты и LED
Здравствуйте, форумчане! Подскажите пожалуйста как расставить биты конфигурации при прошивке контроллера в этом проекте http://cxem.net/sound/light/light19.php. Кто собирал данную схему? У кого заработало? Если можно, то скиньте рабочую прошивку и фото расставленных битов.- 4 ответа
-
- avr
- микроконтроллер
-
(и ещё 1 )
C тегом:
-
Требуется помощь в реализации некого микроконтроллера+ написания кода прошивки на с++. Контроллер будет работать на ATMEGA128A Требуется принципиальная схема некоторой части функционала, а именно: 1. Управление LED лентой суммарный ток потребление ленты 7А, напряжение питания -12в. Нужно подобрать mosfet(N-канал) и обвзяку, привести пример кода для управление ШИМ. Находил тут примеры контроллеров для управление лентой, но у меня почему-то шим больше 5В не получился. 2. Управление 16 двигателями 12В(0.15А каждый ), управление через ШИМ. Но не отдельно для каждого двигателя, а по 8. Т.е. 1 шим-канал на 8 двигателей. Я так понимаю что для этого можно будет использовать 1 шим контроллера+ сдвиговый регистр на 8 портов. Двигатели одновременно не будут работать. Будут подключаться по-очереди. Тоже нужен подбор компонентов, схема подключения, пример кода на си++ 3. Аналоговое чтение, 16 каналов принципиальная схема подключения(я так понимаю что там только токоорграничивающий резистр и конденсатор к земле)+ пример кода для чтения из канала(аналог функции analogRead() в ардуино) 4. Схема обвязки микроконтроллера не нужна- она типовая, есть у меня. отвечу на вопросы. Напишите кто готов сделать, сроки и цену.
-
Доброго времени суток! Делаю библиотеку для расширения возможностей EEPROM!Помогите в создании, идеями, мыслями, предложениями и всем в этом роде! Планирую добавить: -Чтение\запись отдельных битов; -Возвращение размера EEPROM(в байтах); -Возвращение размера отдельной строки в памяти EEPROM(в байтах); -Возвращение размера незанятой памяти EEPROM(в байтах, но желательно КБ); -Вывод\ввод данных EEPROM по UART/SPI/I2C(взаимодействие 2x EEPROM); -Чтение\запись STRING/HEX/BIN; -Еще хочу реализовать хранение символьных картинок типа(если возможно): //////////////////////////////////////////////////////////////////////////////////////////////////////// //#####//#####//####//####//#####//#////#//#////////////////////////#//////// //#//////////#//////////#////#//#////#//#//////#//#/#/#//#//////////////#////////#//////// //#####//#####//####//####//#//////#//#////#//#//////////###////////###//// //#//////////#//////////#////////#//#////#//////#//#////#//#//////////////#////////#////#// //#####//#####//#////////#///#///#####//#////#//#####//#####//#//##//// //////////////////////////////////////////////////////////////////////////////////////////////////////// Здесь написано EEPROMLib! -Ваши идеи,мысли,предложения! Всех кто будет содействовать(т.е. портиртировать из интернета или предлагать свои рабочие процедуры\функции и т.п.) созданию библиотеки запишу в начале библиотеки ник\имя,как человека\людей содействовавших\помогавших в создании библиотеки EEPROMLib! P.S. Сильно не ругайте!За то что по пустякам дергаю!
-
Здравствуйте, нужна схема переходника usb-com на Atmega8, не usb-uart. В интернете нашёл что-то, но там драйвера не прилагались. Переходник нужен для прошивки тюнеров, так же для шаринга. Что посоветуете?
-
Добрый день! Программирую в Arduino IDE, программатор Arduino ISP, других к сожалению нету. Решил поменять скорость работы контроллера ATTiny13A при помощи смены fuse. Менял через Arduino IDE, которая подставила такую команду C:\Program Files\Arduino\hardware\tools\avr/bin/avrdude -CC:\Program Files\Arduino\hardware\tools\avr/etc/avrdude.conf -v -v -pattiny13 -cstk500v1 -PCOM3 -b19200 -e -Uhfuse:w:0xFF:m -Ulfuse:w:0x7b:m После чего достучатся до контроллера теперь никак не могу. Вот, что пишет avrdude: avrdude: Version 6.3, compiled on Dec 16 2016 at 13:33:19 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "C:\Program Files\Arduino\hardware\tools\avr/etc/avrdude.conf" Using Port : COM3 Using Programmer : stk500v1 Overriding Baud Rate : 19200 AVR Part : ATtiny13 Chip Erase delay : 4000 us PAGEL : P00 BS2 : P00 RESET disposition : dedicated RETRY pulse : SCK serial program mode : yes parallel program mode : yes Timeout : 200 StabDelay : 100 CmdexeDelay : 25 SyncLoops : 32 ByteDelay : 0 PollIndex : 3 PollValue : 0x53 Memory Detail : Block Poll Page Polled Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- --------- eeprom 65 5 4 0 no 64 4 0 4000 4000 0xff 0xff flash 65 6 32 0 yes 1024 32 32 4500 4500 0xff 0xff signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00 lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 calibration 0 0 0 0 no 2 0 0 0 0 0x00 0x00 lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00 Programmer Type : STK500 Description : Atmel STK500 Version 1.x firmware Hardware Version: 2 Firmware Version: 1.18 Topcard : Unknown Vtarget : 0.0 V Varef : 0.0 V Oscillator : Off SCK period : 0.1 us avrdude: PAGEL and BS2 signals not defined in the configuration file for part ATtiny13, using dummy values avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.01s avrdude: Device signature = 0x000000 (retrying) Reading | ################################################## | 100% 0.02s avrdude: Device signature = 0x000000 (retrying) Ошибка при записи загрузчика. Reading | ################################################## | 100% 0.01s avrdude: Device signature = 0x000000 avrdude: Yikes! Invalid device signature. Double check connections and try again, or use -F to override this check. avrdude done. Thank you. Опция -F, которую предлагает avrdude, не помогает. Пробовал менять битрейт (опция -b), но в таком случае выдаёт ошибку stk500_getsync, что обычно бывает, если битрейт выбран неправильно. Судя по фьюзам http://www.engbedded.com/fusecalc/, я просто убрал CKDIV8, что должно ускорить внутренний таймер в 8 раз, и убрал флаг CKSEL0, что вместе со снятым CKSEL1 устанавливает частоту контроллера в 128 КГц (вместо заводских 9.6 МГц). Вобще ничего не говорит о том, что контроллер залочился. Приконнекчен к программатору по такой схеме Причём, до замены фьюзов работало и без кондёра. А после не работает и с ним. Что можно попробовать? Можно ли вернуть контроллер к заводским настройкам и как вобще поменять внутреннюю скорость таймера без таких вот багов?
-
Добрый вечер. Я начал изучать МК с помощью ваших роликов на YouTub (https://www.youtube.com/watch?v=u-iI6EDUtA4). Попытался собрать 1ую схему с мигающим светодиодом. Не получается, и я не могу понять, что не так. 1) Написал в AtmelStudio код как в ролике 2) Попробовал в протеусе. Работает! 3)Прошиваю мк через WizardProg-87. (Очищаю МК, загружаю код, жму прошить, вытаскиваю). 4) Собираю схему на макетной плате - не работает. 4.1) Не мигает диод. Горит тускло и от всех портов. Хоть В, хоть С. Я что-то делаю не так? Или что-то не делаю, что надо делать?
-
Всем доброго дня. Возникла такая проблема: AVR JTAGICE MK2 отказывается видеть по протоколу JTAG устройство на ATmega-128, как под управлением AVR Studio 4, так и под управлением Atmel Studio 7 на частотах от 1 до 11 МГц, хотя другие устройства видит нормально. В то же время это устройство отлично видится через Atmel-ICE 3, при частотах от 1 до 11 МГц, но при условии, что в настройках Devise Programming параметр JTAG Clock установлен не выше 3,5 МГц, хотя, судя по описанию, этот параметр влияет только на протокол ISP. Параметр JTAG Clock в настройках для JTAGICE MK2 отсутствует. Подскажите, что это может быть, и есть ли где ни будь в студиях "секретные коды". В логах пишут, что JTAG Clock = 0, но где можно поменять это умолчание? Заранее благодарен.
-
Динамическая развертка для построения изображений в пространстве
Denys Zverev опубликовал тема в AVR
Добрый день дорогие форумчане! Кто может помочь с написанием/"или ткнуть носом" кода для микроконтроллера, который будет выполнять динамическую развертку изображения в пространстве. Для того чтоб было понятнее что я хочу, вот ссылка на видео https://www.youtube.com/watch?v=YuVXndVujG8&list=RDLGy0neDXxAE&index=4. Конструкция собой представляет: 1) гироскоп - будет передавать сигнал положения в пространстве, и из этого должна строится картинка. 2) RGB светодиоды - 144шт. на метр. 3) Микроконтроллер. Может еще что-то упустил. -
Здравствуйте. Пишу сейчас программу под attiny13, пишу в codevisionavr eval, нужно подключить dht11. Нашел c+h файлы, но не пойму как правильно установить библиотеку. На каком-то сайте нашел, что все скидывается в inc папку. Скинул - пишет что функция объявлена но не определена. Короче *.h файл видит, а *.c - нет. Заранее, спасибо.
- 1 ответ
-
- codevisionavr
- avr
-
(и ещё 1 )
C тегом: