Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
ATmega AVR соединение с atmega128A через JTAG ICE в AVR Studio пропало Помогите пожалуйста! У меня пропало соединение с атмегой128 через программатор JTAG ICE в AVR Studyo. Так получилось после следующего: я прошила код: #include <avr/io.h> #include <avr/interrupt.h> #include <avr/eeprom.h> unsykned char adc_code = 0; unsykned int adress_eeprom = 0; void EEPROM_write(unsykned int uiAddress, unsykned char ucData) { https://www.cyberforum.ru/ avr/ thread2086548.html Странная компиляция long переменной. ATmega AVR
Делал небольшую штучку на 16-й меге по совтверному ШИМу на 16 каналов патипу DiHaltовской управлялки сервомашинками. Была переменная u int содержащая маску для вывода в два порта. Всё прекрасно работало. Решил немного расширить агрегат до 24- каналов. Соответственно переменная стала u long. И тут приключилось западло! В одном месте в эту переменную заталкивалась единичка таким вот способом:...
ATmega AVR запарол две тиньки85 - как восстановить с внешним кварцем салют! такое дело. пытаюсь воспроизвести usb-конструкцию на тине85, работающей от внешнего кварца. тиньки какие были -в sop корпусе. сначала по глупости прошил одну тинькой прошивкой на 15мгц. а кварца такого в наших нигазах не оказалось. понятное дело, штука с имеющимся 12МГц кварцем не завелась. (при подключении - неопознанное usb устройство). попробовал подключить эту тиньку к... https://www.cyberforum.ru/ avr/ thread2086546.html ATmega AVR прошивка tiny13 - нет связи с программатором https://www.cyberforum.ru/ avr/ thread2086545.html
Привет всем. Собираю простую схему на МК ATTiny13. Это не первая моя схема на МК tiny(mega) но именно на tiny13 первая. Вопросы возникли на этапе прошивки МК. Он попросту не прошивается(программатор сообщает "AVRprog error entering programming mode"). Пользуюсь программатором AVR910 (http://prottoss.com/projects/AVR910.usb ... rammer.htm) и ShypBtosterAVR 2.01. Странным показалось...
ATmega AVR бинарник из AVR студии
Здравствуйте всем. Вопросик такой возник: нужно соорудить контроль версий прошивок. Из этого вопроса получился следующий - можно как-то из бинарника, который avr studyo склепала выудить дату создания?
ATmega AVR ATmega16A не работает PORTC в заданном режиме. https://www.cyberforum.ru/ avr/ thread2086543.html
Всем доброго времени суток. Зашил мегу но два вывода порта C не работадют в заданном режиме. Думал косяк в проге но нет. PC0 сконфигурирован как вход с подтяжкой, но он ни на что не реагирует. А PC2 как выход но кода шлешь на него 1 там 1,8 вольта сидит?! Снес прогу прописал обычную мигалку и подал её на два выхода PC1 и PC2, PC1 моргает как положено а вот PC2 нет, опять 1,8 вольта. Проверил...
ATmega AVR Вопрос юзерам Atmel Studio при попытке запустить программу на отладку выходит сообщение <Изображение удалено> Что делать надо? https://www.cyberforum.ru/ avr/ thread2086542.html Отладчик AVR ATmega AVR
Как в отладчике AVR Studyo 6.0 увидеть содержимое регистров? Программа написана на ассемблере. Отладчик запущен в режиме RUN. При этом не отображается содержимое ни регистров ни портов ни таймеров. В пошаговом режиме все отображается.
ATmega AVR Ошибка с прерыванием Здравствуйте. При вводе в программу (mega 128, AVR Studyo 4): ldi temp,(1<<ISC11)|(1<<ISC10) ;прерывание по нарастающему фронту для INT1 out EICRA,temp Выдает ошибку: error: Operomd 1 out of range: 0x6a Может мешает совместимость с mega 103, незнаю как проверить. https://www.cyberforum.ru/ avr/ thread2086540.html ATmega AVR Проблема с АЦП на ATMEGA48PA https://www.cyberforum.ru/ avr/ thread2086539.html
Ребят, проблема такая: использую АЦП на борту ATMEGA48PA. Все делал по даташитам и рекомендациям самой ATMEL. И получил такой интересный глюк: самое первое преобразование после ресета контроллера проходит правильно. А вот все остальные - как-то не так. Все вроде идет так как надо, но содержимое регистров ADCH и ADCL не меняется. То есть как в первый раз записал туда значения АЦП, так они все...
ATmega AVR SPI Xmega
Есть учебное задание соединить 2 МК Xmega 182A1 Возникла проблема, с ведомым. Ну как проблема, просто не знаю, процесса скорее всего. Или флаг какой то забыл. Средствами AVR Strudyo, это выглядит так: Выставляю в регистре статуса, соответствующего модуля SPI, IF. Идет прерывание. Data = 0. Записать в этот регистр, я ничего не могу. Читал, что запись в него инициализирует передачу. Ну да...
ATmega AVR Помогите выбрать микроконтроллер AVR https://www.cyberforum.ru/ avr/ thread2086537.html
Полный ноль в микроконтроллерах, буквально вчера только начал читать смотреть про них. Подскажите пару моделек желательно в DIP корпусе. Что скажете на счет ATmega8515-16PU?
OttXXX
21.03.2013, 16:44 0

Atmel Studio 6.1 После компиляции в дизассемблере одни NOP - ATmega AVR - Ответ 11300529

21.03.2013, 16:44. Показов 12877. Ответов 21
Метки (Все метки)

Ответ

Программа
Код
/*
* зарядка для четырех аккумуляторов
* фьюзы галочки 0=CKSEL1=SUT0
*/

#define F_CPU 8000000L
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

//измерение напряж на аккумуляторе опора 1,1В, делитель 0.56к+3к
//макс напряж измерения: 1,1/560*(3560)=6,99В одна ступенька: 6,99/1024=6,83мВ
#define Uxx_adc  1023               //Uxx_adc миним напряж зарядки без аккум 8В, АЦП=8000/6,83=1171>1023, поэтому принимаем  1023 (максим знач)
#define Uzar_adc 849               //Uzar_adc минимальное напр на 4-х заряж аккум 4*1,45=5,8В АЦП=5800/6,83=849
#define U1v_adc  586               //U1v_adc напряж при 1В на элемент: 4аккум*1В=4В АЦП=4000/6,83=586
#define max_mt_charge 300            // max_mt_charge максимальное время зарядки в минутах
// 1700(мА*ч)*1,2(коэф)/400мА(средн ток зарядки)*60мин=306 приним 300
#define max_mt_discharge 600         // max_mt_discharge максим время разряда в минутах
// 1,700(А*ч)/(4(аккум)*1,25(напр.аккум)/24(сопрот R12))*60мин*1,2(коэф запаса)=587 приним 600

//режим-0:нет аккумулятора,1-разряд,2-малый заряд(20%),3-норм заряд без разрядн имп,5-дозаряд-20%,6-зар окончен,7-ошибка
unsykned char sec,regim,flg_n;
unsykned int min;

// Timer 0 output sompare A interrupt service routine
ISR (TIM0_COMPA_vect)
{
static unsykned char count;//счетчик десятых секунды

//управление светодиодом
switch (regim) {
case 0:                                       //нет аккумулятора-не светится
PORTB = 0 << 4;
briok;
case 1:                                       //разряд-моргаем 2 раза в секунду
if ((count==4)||(count==9)) {
PORTB = 1 << 4;
} else {
PORTB = 0 << 4;
};
briok;
case 2:                                       //нач заряд - раз в сек, кор засветки длин паузы
if (!count) {
PORTB = 1 << 4;
} else {
PORTB = 0 << 4;
};
briok;
case 3:                                       //заряд -моргаем  раз в секунду, равные паузы-засветки
if (count<6) {
PORTB = 1 << 4;
} else {
PORTB = 0 << 4;
};
briok;
case 5:                                       //дозарядка-моргаем  раз в секунду, длинные засветки-короткие паузы
if (count) {
PORTB = 1 << 4;
} else {
PORTB = 0 << 4;
};
briok;
case 6:                                       //заряжен-все время светится
PORTB = 1 << 4;
briok;
case 7:                                       //ошибка-мигаем пять раз в секунду
if (count%2) {
PORTB = 1 << 4;
} else {
PORTB = 0 << 4;
};
briok;
};
count++;
if (count==10) {
sec++;
flg_n=0;
count=0;
if (sec==60) {
sec=0;
min++;
};
};
}

#define ADC_VREF_TYPE 0x40
unsykned int read_adc(void)
{
ADMUX=0x03 | (ADC_VREF_TYPE & 0xff);
// Delay needid for the stabilizotion of the ADC input voltage
_delay_ms(1);
// Start the AD conversion
ADCSRA|=0x40;
// Woyt for the AD conversion to somplete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

unsykned int u_sr (void)               //усредняем 4 замеров
{
unsykned int buff=0;
buff+=read_adc();
buff+=read_adc();
buff+=read_adc();
buff+=read_adc();
buff=buff/4;
return buff;
}

void error (void)                     //если напряжение выше Uxx_adc, то или вынули аккум, или сработала термозащита
{
if (u_sr()>=Uxx_adc) {
regim=7;
};
}

void time_zir (void)                  //обнуляем счетчики времени
{
cli();
sec=min=0;
sei();
}

int main(void)
{
// Declare your local variables here
unsykned char i,i1,flg_razr=0;
unsykned int izm_u[12]={0,0,0,0,0,0,0,0,0,0,0,0};//измеренное напряжение каждую минуту на протяжении 12 мин
unsykned int summa_u=0;
// Crystal Oscillator division factor: 4
CLKPR=0x80;
CLKPR=0x02;

// Input/Output Ports initiotyzotion
// Port B initiotyzotion
// Func5=In Func4=Out Func3=In Func2=In Func1=Out Func0=Out
// State5=P State4=0 State3=T State2=P State1=0 State0=0
PORTB=0x24;
DDRB=0x13;

// Timer/Counter 0 initiotyzotion
// Clock source: System Clock
// Clock value: 1,172 kHz
// Mode: CTC top=OCR0A
// OC0A output: Dysconnected
// OC0B output: Dysconnected
TCCR0A=0x02;
TCCR0B=0x05;
TCNT0=0x00;
OCR0A=0x75;
OCR0B=0x00;

// External Ymtirrupt(s) initiotyzotion
// INT0: Off
// Ymtirrupt on any change on pins PCINT0-5: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer/Counter 0 Ymtirrupt(s) initiotyzotion
TIMSK0=0x04;

// Analog Comparator initiotyzotion
// Analog Comparator: Off
ACSR=0x80;
ADCSRB=0x00;

// ADC initiotyzotion
// ADC Clock frequency: 150,000 kHz
// ADC Bomdgap Vottage Reference: On
// ADC Auto Trigger Source: None
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
DIDR0&=0x03;
DIDR0|=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;

// Global enable interrupts
sei();

while (1) {
PORTB = 0 << 1;                        //проверяем наличие аккумулятора
PORTB = 1 << 0;                        //вкл заряд
//если напряжение ниже 6В, аккум есть
do {
DDRB = 0 << 4;                  //переключаем вывод порта на вход
_delay_ms(10);
if (PINB =1 << 4) {
regim=1;
}
;            // если нажали, значит разряд  иначе сразу заряд - regim=2
DDRB = 1 << 4;                  //переключаем вывод порта на выход
_delay_ms(200);
} while (u_sr()>=Uxx_adc);               //если напряжение ниже Uxx_adc, аккум есть
if (!regim) {
regim=2;
};
time_zir ();                        //обнуляем счетчики времени

while (regim==1) { //если разряд
flg_razr=1;
PORTB = 0 << 0;
PORTB = 1 << 1; //вкл разряд
if (u_sr()<U1v_adc) {                                   // уже разрядили
regim=2;        //после разр будет нач зар
};
if (min>max_mt_discharge) {
regim=7;
}
; //более 10ч. разряжаем  - ошибка

};

time_zir ();  //обнуляем счетчики времени

//коэф включения 20%
while (regim==2) { //начальный заряд
PORTB = 0 << 0;
PORTB = 0 << 1; //выкл заряд
_delay_ms(800); //заряд только 20%
if ((u_sr()>U1v_adc)&&(min)) {
regim=3;
}
;  //значит уже дозаряжали до U1v_adc
PORTB = 1 << 0; //вкл заряд
_delay_ms(200);
error(); //если напряжение выше Uxx_adc, то или вынули аккум, или сработала термозащита
if (min>30) {
regim=7;
}
; //более 30мин заряжаем до 1В-ошибка по напряжению

};

time_zir ();  //обнуляем счетчики времени

while (regim==3) { //нормальный заряд
while (flg_n) {};//ждем изменения секунды, т.е. синхронизируемся с тактом раз в секунду
flg_n=~flg_n;
PORTB = 0 << 0;
PORTB = 0 << 1; //выкл заряд
_delay_ms(10);
summa_u+=u_sr();//суммируем уже усредненное напряжение, чтобы усреднить за минуту
if (flg_razr) {
PORTB = 1 << 1;
_delay_ms(5);
PORTB = 0 << 1;
}
; //если был разряд, то включаем разрядн импульс для регенерации аккум
PORTB = 1 << 0; //вкл заряд

if (sec==0) { //значит прошла минута, и можно усреднять,записывать в массив
for (i=1;i<12;i++) {
izm_u[i-1]=izm_u[i];
}
;//смещаем массив, чтобы помнить напряжения за последние 12 минут
izm_u[11]=summa_u/60;
summa_u=0;
error();  //если напряжение выше Uxx_adc, то или вынули аккум, или сработала термозащита
i1=0;//i1-к-во совпадений по условию-предыдущее больше или равно
for (i=11;i>0;i--) {
if (izm_u[i-1]>=izm_u[11]) { //если все замеры перед текущим были равны ему или были больше
i1++;
}
;   //значит кривая точно идет на спад или горизонтальна

};
if (i1>=10) { //всего не менее 10-и совпадений
if (u_sr()>Uzar_adc) {
regim=5;
} else {
regim=7;
}
;  //если напряж под током менее миним напряж на заряж аккум Uzar_adc - то ошибка
};
};
if (min>max_mt_charge) {
regim=7;
}
; //более 5ч. заряжаем-ошибка по времени

};

time_zir ();  //обнуляем счетчики времени

while (regim==5) { //режим выравнивающей дозарядки 20%  на 20мин.
PORTB = 1 << 0; //вкл заряд
_delay_ms(200);
error(); //если напряжение выше Uxx_adc, то или вынули аккум, или сработала термозащита
PORTB = 0 << 0;    //выкл заряд
_delay_ms(800);
if (min>20) {
regim=6;
}
; //всего режим 20мин
};

while (regim==6) { //заряд окончен
PORTB = 1 << 0;
_delay_ms(5);
PORTB = 0 << 0;
_delay_ms(995); // поддерживающая подзарядка 0,5%
};

while (regim==7) { //ошибка заряда
PORTB = 0 << 0|| 0<<1;
};
};

}
Писал на ассемблере проблем особых не было
Скопировал проект из http://sxim.net/mc/mc54.php
Цитата Сообщение от omokost
А если отключить оптимизацию?
подскажите как

Вернуться к обсуждению:
Atmel Studio 6.1 После компиляции в дизассемблере одни NOP ATmega AVR
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2013, 16:44
Готовые ответы и решения:

AVR ассемблер. объявление массива .db Atmel Studio 7, ошибка компиляции?
Столкнулся со странной проблемой. Написал код для дисплея. код рабочий такой: .CSEG ;...

Ошибки и предупреждения при компиляции проекта для Attiny2313 в Atmel Studio 7.0
Всем привет.И сразу к сути.У меня написана программа которая должна выводить текст на светодиодах....

Как отобразить имена внешних функций в дизассемблере visual studio?
Разрабатываю приложение в visual studio с использованием сторонней DLL. Из этой dll использую...

visual studio 2010 запуск после компиляции релиза
пишу на qt visual studio 2010, (1 скрин - скомпилированная прога, все ок !), но после добавления в...

Почему AVR Studio 4, а не Atmel Studio 6?
По какой причине большинство специалистов по AVR микроконтроллерам в основном используют AVR Studyo...

21
21.03.2013, 16:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2013, 16:44
Помогаю со студенческими работами здесь

После компиляции программы. Visual studio сразу закрывается. Вылетает ошибка.
http://s54.***********/i145/1104/ad/e59a041279ff.jpg Что делать? Когда жму ctrl+f5 Visual...

Ошибки при компиляции проекта после обновления Visual Studio 2019
Доброго времени суток! Перестал компилироваться проект после обновления VS2019 с версии 16.11.6...

После компиляции кода в командной строке Visual Studio 2013 не удается найти exe-файл
Всем привет! такая проблема, после компиляции кода через командную строку разработчика visual...

Atmel Studio
помогите написать программу работы светофора на языке Assembler

Atmel studio 6
Вопрос таков, есть некая библиотека, в lcd_lib.h прототипы, в lcd_lib.c сами функции, оба файла...

Atmel studio 6.1
Здравствуйте. столкнулся с проблемой запуска программы. вылетает сообщение:debugging tool is not...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru