Обсуждаем контроллеры компании Atmel.
Ответить

Re: AVR studio в вопросах и ответах

Вт окт 31, 2017 06:42:58

Ничего там не происходит, компилятор выкинул все это, как ничего не делающее. Отключите оптимизацию и попробуйте снова.

Re: AVR studio в вопросах и ответах

Вт окт 31, 2017 06:49:07

Отключил оптимизацию полет нормальный :/

Re: AVR studio в вопросах и ответах

Ср ноя 01, 2017 08:37:37

И снова компаратор, не могу сделать прерывания от компаратора что я уже не перепробовал, может кто еще поможет

Вот код:
Спойлер
Код:
.include "tn13def.inc"    ; Header files
//.equ MCUclock=4000000      ; 4MHz


.list; // Отоброжения листинга исполнения команды.
.cseg; работаем с програмной памятью а не озу или eeprom
.org 0; устанавливаем начальную позицию строки
rjmp START; Reset Handler
rjmp START; IRQ0 Handler
rjmp START;; PCINT0Z Handler
rjmp START; Timer0 Overflow Handler
rjmp START; EEPROM Ready Handler
rjmp Comparator; Analog Comparator Handler
rjmp START; TIM0_COMPA CompareA Handler
rjmp START; Timer0 CompareB Handler
rjmp START; Watchdog Interrupt Handler
rjmp START; ADC Conversion Handler

//Оброботка прерывания от компаратора
Comparator:
cbi DDRB,4;
cbi PORTB,4; - Подкючаем подтягивающий резистор для включения лампы
reti; - Выход с под программы прерывания
//оброботка прерывания порта INT0, по высокому сигналу.


//Определяем начальные параметры микроконтролера.

START:
 
 CLI; команда запрещает глобальные прерывания.
 //инициализация стэка.(установка максимально размера ОЗУ);
 ldi R17, RAMEND;
 out SPL, R17;
 
 //Отключаем аналогово-цифровой преобразователь
 CBI ADCSRA, ADEN;
//Подключаем компаратор для сравнения сигналов
//Разрешаем прерывания
sbi ACSR, ACIE;
//Подключаем внутрений ион 1,23 Вольт.  на AIN0 вывод.
sbi ACSR, ACBG;

LDI R22,1<<AIN1D|1<<AIN0D;//Если какой-либо из входов ADC3-0 используется как аналоговый,
OUT DIDR0,R22;//то в соответствующий бит ADC3D-ADC0D нужно устанавливать логическую единицу.


//Устанавливаем работу портов на вход и выход.
//Устанавливаем выходы DDB1 и DDB0 работу на вход для компаратора
//Если порт DDB установлен в 1 то данный порт является выходам,
//а если в 0 то входам.
ldi R16,1<<DDB4;
out DDRB,R16;

ldi R16, 1<<PB4;
out PORTB, R16;
//Разрешаем глобальные прерывания
sei;
//Переходим к основному циклу проверки
rjmp START1;

START1:
nop;
rjmp START1;
.exit
Вложения
картинка.png
(25.02 KiB) Скачиваний: 291

Re: AVR studio в вопросах и ответах

Ср ноя 01, 2017 12:08:37

strengerst писал(а):И снова компаратор
Вы хоть читаете что вам пишут?
Принцип работы компаратора
Очередное видео
И да еще кое что
Спойлер
Код:
sbi ACSR, ACIS1;  // Изменение состояния выхода компаратора с «1» на «0» ACIS1=1 ACIS0=0
Изображение

Re: AVR studio в вопросах и ответах

Ср ноя 01, 2017 13:40:18

Сделал все как сказали , изменил состояние выхода компаратора с «1» на «0» в протеусе сделал точ точ как на видео, у меня не входит в прерывания и все. Че за хрень не знаю чуть поже выложу видео. Большое спасибо за видео.
Вот видео с протеуса:
https://drive.google.com/open?id=0B997q ... 1A3d3dRd1U
Последний раз редактировалось strengerst Ср ноя 01, 2017 13:55:16, всего редактировалось 1 раз.

Re: AVR studio в вопросах и ответах

Ср ноя 01, 2017 13:51:25

strengerst писал(а):Сделал все как сказали , изменил состояние выхода компаратора с «1» на «0» в протеусе сделал точ точ как на видео, у меня не входит в прерывания и все. Че за хрень не знаю чуть поже выложу видео. Большое спасибо за видео.
Открой мой проект. Работает?

Re: AVR studio в вопросах и ответах

Ср ноя 01, 2017 14:00:17

ОТкрываю твой проект и он у меня не работает. Наверное протеус глючит, попробую переустановить. Большое спасибо за уделенное время и помощь.

Re: AVR studio в вопросах и ответах

Ср ноя 01, 2017 14:04:01

strengerst выложи свой проект.

Re: AVR studio в вопросах и ответах

Вт ноя 14, 2017 14:10:34

Народ, подскажите пожалуйста, чё я не так делаю (я только учусь)!
Использую AVR Studio 4.19.
Пытаюсь вынести функции в отдельный .c файл, при этом объявляя их в отдельном подключаемом заголовочном .h файле.
Получается конструкция примерно такого вида (упрощённо для примера):
main.c
Код:
#define F_CPU 16000000UL
#include "test.h"
int main(void)
{
   while (1) {
      doNothing();
   }
}


test.h
Код:
#ifndef TEST_H
#define TEST_H

   #ifndef F_CPU
      #warning "F_CPU not defined for test.h"
      #define F_CPU 1000000UL
   #endif /* F_CPU */
   
   extern void doNothing(void);

#endif /* TEST_H */


tect.c
Код:
#include "test.h"
void doNothing(void) {}

Вот почему теперь, после попытки компиляции, получаю варнинг:
Код:
../test.h:5:4: warning: #warning "F_CPU not defined for test.h"

Не смотря на то, что в main.c я определил F_CPU ? Надо полагать, что и нужную частоту (16МГц), заданную в main.c, компилятор тоже не задействовал, а использовал дефолтную 1МГц из test.h ?
Как правильно поступать в таком случае? Как грамотно компилировать код из разных исходных файлов?

Re: AVR studio в вопросах и ответах

Вт ноя 14, 2017 16:21:08

Не смотря на то, что в main.c я определил F_CPU


В main.c оппределил.
Но ругается не при компиляции main.c а при компиляции test.c!!!

В си раздельная компиляция: т.е. когда компилируется test.c, компилятор ничего не знает про другие исходники (про ваш main.c). Если надо константу (или еще что-то) иметь во многих *.c файлах, выносите ее в h-файл и этот h-файл включайте где надо: в Вашем случае, test.h включается и в main.с и test.c, если определите F_CPU в test.h, то в обоих исходниках (и в main.с и в test.c) F_CPU будет определена.

Re: AVR studio в вопросах и ответах

Ср ноя 15, 2017 09:23:56

Всем привет. Ребята что-то туплю с ШИМ. Сдела простую програмку, которая изменяет регистр OCR2 в Atmega16 и выводит на 1602. Все работает, только как-то не получается отмасштабировать значение 0 -255 в 0 - 100%.
Код:
#ifndef F_CPU
   #define F_CPU 8000000L
#endif

#include "delay.h"
#include <avr/io.h>
#include "main.h"
#include "lcd_lib.h"
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdio.h>

//Настройка кнопок
#define UP (!(PINB) &(1<<PINB0))
#define DOWN (!(PINB) &(1<<PINB1))
#define TEST_LED_ON (PORTA &=~(1<<PINA0))
#define TEST_LED_OFF (PORTA |=(1<<PINA0))
#define DUTY OCR2
#define PWM_STEP 0x01
#define UPPER_THRESHOLD 0xff
#define LOWER_THRESHOLD 0x00

mcu_init();
sei();

В бесконечном цикле делаю следующую операцию...
Код:
if(!(PINB & (1<<PINB0)) && (DUTY<UPPER_THRESHOLD))
      {
         TEST_LED_ON;
         DUTY=DUTY + PWM_STEP;
         timerDelayMs(5);
      }
      else
      {
         TEST_LED_OFF;
      }

В этом коде у меня при нажатии кнопки инкрементируется значение в OCR2;
Настройка.
Код:
        ASSR=0<<AS2;
   TCCR2=(1<<WGM20) | (1<<COM21) | (0<<COM20) | (1<<WGM21) | (1<<CS22) | (0<<CS21) | (0<<CS20);
   TCNT2=0x00;
   OCR2=0x00;
   
   TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);

Мне нужно OCR2 / OCR2 * 100 что бы перевести в проценты? Или я что-то не правильно понимаю?

Re: AVR studio в вопросах и ответах

Ср ноя 15, 2017 10:20:28

OCR2/255*100 или лучше 100*OCR2/255
Последний раз редактировалось akl Ср ноя 15, 2017 10:23:08, всего редактировалось 1 раз.

Re: AVR studio в вопросах и ответах

Ср ноя 15, 2017 10:48:58

OCR2/255*100

Да да, я это и имел ввиду. Но такой момент, на экране через задержку сразу 100 или 0. Т.е нет ступенчатого изменения с дискретностью 1.
Или создать отдельную переменную, и туда записать что-то вроде
Код:
volatile unsigned char test;

test = ((DUTY - PWM_STEP) / 255) * 100;

lcd_gotoxy(0,0);
      lcd_num_to_str(test, 4);


Добавлено after 26 minutes 59 seconds:
OCR2/255*100 или лучше 100*OCR2/255

Спасибо, заработало.

Re: AVR studio в вопросах и ответах

Ср ноя 22, 2017 12:15:16

добрый день. вопрос может немного не в тему... короче решил я поковыряться с ардуиной. как известно, родная ее среда очень убога в плане разработки, поэтому по старой памяти перешел на atmel studio (лет 5 назад было дело занимался железками на мегах8). так вот гружу свой elf в протеус, а он из всего кода дает ставить брекпоинты только в несокльких местах и то на выходе из функции. что я делаю не так?
Изображение

Re: AVR studio в вопросах и ответах

Ср ноя 22, 2017 12:35:57

Если вы перешли на Atmel Studio, то, боюсь, ничего у вас с отладкой в протеусе по шагам или брейкпойнтам не выйдет... AVR-GCC свежее 3.x.x выдает отладочную инфу не так, как понимает протеус...

Можете попробовать отключить оптимизацию, но и это, скорее всего не поможет, тем более что и памяти может в этом случае не хватить...

Re: AVR studio в вопросах и ответах

Ср ноя 22, 2017 12:46:56

Да... оптимизация не помогла. а есть ли какие то другие среды для софтварной отладки ардуин? у меня протеус 7.х

Re: AVR studio в вопросах и ответах

Ср ноя 22, 2017 13:02:03

На сколько я в курсе, ничего "отдельного" для ардуин нет.

Re: AVR studio в вопросах и ответах

Ср ноя 22, 2017 13:16:13

поставил протеус 8.6 - такая же шляпа

Re: AVR studio в вопросах и ответах

Ср ноя 22, 2017 14:29:29

Я же вам сразу сказал - вы не слушаете, что ли?
ARV писал(а):Если вы перешли на Atmel Studio, то, боюсь, ничего у вас с отладкой в протеусе по шагам или брейкпойнтам не выйдет... AVR-GCC свежее 3.x.x выдает отладочную инфу не так, как понимает протеус...

Re: AVR studio в вопросах и ответах

Ср ноя 22, 2017 14:36:24

я с той надеждой, что 8.6 все таки 2017 года и может быть там поправили этот косяк, тем более там уже есть готовые наборы для отладочных плат.
Ответить