Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
 
mode2
0 / 0 / 0
Регистрация: 28.03.2015
Сообщений: 45
1

Как открыть проект студии 6 в студии 4.19?

04.02.2020, 19:01. Просмотров 418. Ответов 23
Метки нет (Все метки)

Иду последовательно урок за уроком с этого курса, проекты курса созданы в студии 6. Пока код был в одном файле, я его копировал и вставлял в новый проект четвертой студии. Но начиная с 10-го урока код разбросан по нескольким файлам, старый метод не проходит. Пытался объединить все .С и .H файлы в один .C файл, но запутался, короче не смог. Как же мне проект 6-й студии открыть в четвертой?

Добавлено через 34 минуты
Насчет номера урока ошибся, застрял на 13-м.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2020, 19:01
Ответы с готовыми решениями:

Проект в Студии: Можно ли сделать Save as...
Внизу в спойлере тот текст, которым я начал тему. В результате недолгого обсуждения с уважаемыми...

глюки студии
основной цикл программы (чисто для примера уже пробую) while(1==1){ DevOn=4; DevOn=DevOn+1; ...

Софтовый i2c в студии (си)
Кодвижн реально глючная хрень, поэтому перешол на студию. Тут начались проблемы с макросами типа...

бинарник из AVR студии
Здравствуйте всем. Вопросик такой возник: нужно соорудить контроль версий прошивок. Из этого...

Помогите с отладкой в студии 4.18/4.19
Привет всему сообществу! Сразу прошу не пинать меня ногами. так как изучать контроллеры начал...

23
liv
Модератор
2561 / 2283 / 377
Регистрация: 07.10.2015
Сообщений: 4,801
Завершенные тесты: 1
04.02.2020, 19:11 2
mode2, то-то я смотрю, вроде как в 10-м только один *.c файл
А нельзя создать новый проект, скопировав и включив туда все *c и *.h файлы?
Как предыдущие открывал? Насколько знаю, структура файла проекта у них разная.
0
mode2
0 / 0 / 0
Регистрация: 28.03.2015
Сообщений: 45
04.02.2020, 20:51  [ТС] 3
Цитата Сообщение от liv Посмотреть сообщение
А нельзя создать новый проект, скопировав и включив туда все *c и *.h файлы?
Попробовал, перенес 5 файлов во вновь созданный проект, но проект не собирается. В проекте 6-й студии применяются кавычки после инклюда #include "PWM.h", компилятор из 4-й ругается на это. Если заменяю на <> ругается что нет такого файла, хотя файл лежит в той же папке что и главный сишник.
Цитата Сообщение от liv Посмотреть сообщение
Как предыдущие открывал?
Копи-пасте текста из файла, прокатывало до тех пор пока был один файл.
Приложил оригинальный исходник из урока.
0
Вложения
Тип файла: rar Test10.rar (70.2 Кб, 3 просмотров)
liv
Модератор
2561 / 2283 / 377
Регистрация: 07.10.2015
Сообщений: 4,801
Завершенные тесты: 1
04.02.2020, 23:09 4
mode2, попробую завтра...
0
liv
Модератор
2561 / 2283 / 377
Регистрация: 07.10.2015
Сообщений: 4,801
Завершенные тесты: 1
05.02.2020, 12:46 5
mode2, ну и какие проблемы? Вот, держите:
test10.zip
1
liv
Модератор
2561 / 2283 / 377
Регистрация: 07.10.2015
Сообщений: 4,801
Завершенные тесты: 1
05.02.2020, 12:49 6
Кстати, в пустом файле test10.c еще одна main(). Этот файлик не нужен.
0
mode2
0 / 0 / 0
Регистрация: 28.03.2015
Сообщений: 45
05.02.2020, 15:52  [ТС] 7
Спасибо, но я не понял как это сделать самому, ведь уроков еще много. И как сделать чтобы проект был под мою atmega2560? Сейчас он под atmega48. Если создаю пустой проект для своей меги (так я поступал во всех уроках с одним файлом кода), чтобы потом подкинуть в него C и H файлы, под каким именем его создать? Студия при создании проекта открывает файл Имя_проекта.c, что в него переместить из Вашей сборки? Иначе он остается пустой. Если перекидываю в него содержимое файла main.c, то компилятор ругается на "OCR undeclared". Попробовал создать проект с именем main, и подсунул в него файлы из сборки, но опять "OCR undeclared".
0
locm
2397 / 1061 / 133
Регистрация: 28.10.2011
Сообщений: 3,518
Записей в блоге: 6
05.02.2020, 16:04 8
Цитата Сообщение от mode2 Посмотреть сообщение
И как сделать чтобы проект был под мою atmega2560? Сейчас он под atmega48.
Учтите что могут быть различия на уровне регистров.

Цитата Сообщение от mode2 Посмотреть сообщение
Если перекидываю в него содержимое файла main.c, то компилятор ругается на "OCR undeclared".
Нужно понимать код, иначе дальше "скопировать->вставить" не продвинетесь.
Конкретно в данном случае в h файле урока (скорее всего его имя будет main.h) должно быть что-то типа
C
1
#include <avr/io.h>
Просто посмотрите уроки где все в одном файле. В них же подключается этот файл.
1
liv
Модератор
2561 / 2283 / 377
Регистрация: 07.10.2015
Сообщений: 4,801
Завершенные тесты: 1
05.02.2020, 17:01 9
mode2, в проекте записан atmega8
У которого у таймера 2 есть регистр OCR2
В mega48 же два регистра OCR2A и OCR2B, потому и ругается

Добавлено через 1 минуту
Читайте datasheet на конкретный контроллер, чтобы знать, что у него есть на борту

Добавлено через 11 минут
У mega2560 также два регистра OCR2A и OCR2B.
Как настраивать именно этот контроллер почитайте в datasheet
1
mode2
0 / 0 / 0
Регистрация: 28.03.2015
Сообщений: 45
05.02.2020, 20:29  [ТС] 10
Проект наконец собрал, поправил согласно даташиту названия регистров, теперь все компилится без ошибок, но диод не зажигает.
Заметил, что в дебагере выставляется бит wgm22, хотя я его оставил в нуле. А так вижу как в режиме Autostep заполняется регистр OSR2A, затем убывает. Но в PORTB везде нули, ну и сам диод, как сказал уже, не загорается. Проект приложил архивом. Посмотрите, плиз, где еще живет ошибка?
0
Вложения
Тип файла: rar PWM_diod.rar (11.8 Кб, 3 просмотров)
mode2
0 / 0 / 0
Регистрация: 28.03.2015
Сообщений: 45
05.02.2020, 21:23  [ТС] 11
Вот главный файл, из чего следует что ШИМ будет направлен именно на PORTB4? Только потому что я его включил на вывод? В архиве запечатался вариант с DDRB=0xFF, но и с ним не зажигало диод.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include "main.h"
#include "PWM.c"
#include "PWM.h"
//----------------------------------------
void port_ini(void)
{
    DDRB=0b00010000; 
    PORTB=0x00; 
}
//----------------------------------------
int main(void)
{
    
    
    unsigned char pwm_state=0;
    port_ini();
    init_PWM_timer();
    OCR2A = 0;
    while(1)
    {
        
        if (pwm_state==0)
        {
            OCR2A++;
            if (OCR2A>254)
            {
                pwm_state=1;
            }
        }
        if (pwm_state==1)
        {
            OCR2A--;
            if (OCR2A<1)
            {
                pwm_state=0;
            }
        }
        _delay_ms(1);
       
    
    }
}
Добавлено через 11 минут
Цитата Сообщение от mode2 Посмотреть сообщение
в дебагере выставляется бит wgm22, хотя я его оставил в нуле.
Добавил в шапку главного файла строку #include "PWM.h", биты TCCR2A(B) стали выставляться так, как я их выставил в коде.
0
locm
2397 / 1061 / 133
Регистрация: 28.10.2011
Сообщений: 3,518
Записей в блоге: 6
05.02.2020, 21:42 12
Цитата Сообщение от mode2 Посмотреть сообщение
C
1
#include "PWM.c"
Так не следует делать.
Файлы с кодом нужно добавлять в проект.
0
mode2
0 / 0 / 0
Регистрация: 28.03.2015
Сообщений: 45
05.02.2020, 23:26  [ТС] 13
Все-таки надо заставлять себя курить даташит, хоть и напряжно это. Вот с такой конфигурацией таймера диод заработал
C
1
2
3
4
5
6
7
8
9
void init_PWM_timer(void)
{
    ASSR=0x00;
    TCCR2B=0b00001110; 
    TCCR2A=0b00100011;
    TCNT2=0x00;
    OCR2A=0x00; 
    TIMSK2|=0x00;
}
Добавлено через 59 минут
Забыл добавить, заработал на порте PORTH6, а на PORTB пока не получилось добиться аналогичной работы светодиода, какие-то мигания присутствуют, но бессистемные.
0
liv
Модератор
2561 / 2283 / 377
Регистрация: 07.10.2015
Сообщений: 4,801
Завершенные тесты: 1
06.02.2020, 00:57 14
mode2, я завтра посмотрю более внимательно, что получилось.
А Вы молодец, что пришли к пониманию того, что без чтения datasheet не обойтись
0
mode2
0 / 0 / 0
Регистрация: 28.03.2015
Сообщений: 45
06.02.2020, 09:17  [ТС] 15
Ну, без интуиции не обошлось, не скажу что прямо озарение пришло после ознакомления с разделом второго счетчика из даташита, некоторые записи непонятны. Например, в записи WGM22:0 = 2 что означает двойка? Пока встречал на её месте ноль полагал что это бит, который нужно выставить в регистр TCCR2B на место WG22 (либо 0, либо 1), но как может быть бит двойкой? А встречается и 3, и 7 на её месте. Значит это не значение бита, тогда что? Или запись типа WGM22:0 = 2 нужно понимать как выражение на Си?
0
liv
Модератор
2561 / 2283 / 377
Регистрация: 07.10.2015
Сообщений: 4,801
Завершенные тесты: 1
06.02.2020, 10:32 16
mode2, wgm (2:0) = 010
Так будет понятнее? Биты со второго по нулевой задать 0102 = 2
0
mode2
0 / 0 / 0
Регистрация: 28.03.2015
Сообщений: 45
06.02.2020, 11:27  [ТС] 17
Т.е. одним выражением определяется состояние всех трех битов относящихся к wgm? Но ведь они не рядом, а в разных регистрах у 2560: нулевой и первый в TCCR2A, а второй в TCCR2B.
0
Миниатюры
Как открыть проект студии 6 в студии 4.19?  
liv
Модератор
2561 / 2283 / 377
Регистрация: 07.10.2015
Сообщений: 4,801
Завершенные тесты: 1
06.02.2020, 11:56 18
mode2, ну и замечательно Распихайте биты куда надо.
Означенное выражение просто описывает, что три эти бита задают некий режим.

Добавлено через 7 минут
Если найдете в datasheet табличку "Waveform Generation Mode Bit Description",
то увидите влияние этих трех бит (WGM2, WGM1, WGM0) на режим работы таймера/счетчика
И не важно в каких регистрах и на каких местах эти биты стоят.

Добавлено через 3 минуты
Надеюсь, теперь стало понятно, что речь идет не об одном бите, а о трех?
0
liv
Модератор
2561 / 2283 / 377
Регистрация: 07.10.2015
Сообщений: 4,801
Завершенные тесты: 1
06.02.2020, 13:19 19
Цитата Сообщение от mode2 Посмотреть сообщение
заработал на порте PORTH6
Все правильно, Вы же используете не COM2A, а COM2B.
Т.е. вывод будет на пине OC2B = PH6. Посмотрите настройку регистра TCCR2A.
Чтобы вывод был на пине OC2A = PB4, надо задать COM2A = 102
0
mode2
0 / 0 / 0
Регистрация: 28.03.2015
Сообщений: 45
06.02.2020, 21:08  [ТС] 20
Цитата Сообщение от liv Посмотреть сообщение
Надеюсь, теперь стало понятно, что речь идет не об одном бите, а о трех?
Да, теперь понятно, но такой способ обозначения двоичной системы еще не встречал.
Цитата Сообщение от liv Посмотреть сообщение
Чтобы вывод был на пине OC2A = PB4, надо задать COM2A = 102
Т.е. TCCR2A=0b10000011 ?
Пробовал еще вчера, при таком конфиге светодиод на PB4 горит ровным светом, нет пульсации, которая была на PH6 при TCCR2A=0b00100011;
Может еще в цикле while что-то изменить нужно?
0
06.02.2020, 21:08
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2020, 21:08

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

В студии работает, в железе - нет
Добрый день! Столкнулся с проблемой - никак не могу сравнить принятые данные по uart с чем-либо и,...

Глюк AVR студии или... ?
Скриншот сеанса отладки с JTAG: Скриншот &lt;Изображение удалено&gt; Кому верить ? Окну Registers...

Как открыть проект 2008 в 2005 студии
У меня проблема создал проект в 2008 , можно ли открыть его в 2005.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.