Перейти к содержанию

Примеры кода для AVR


Duhas

Рекомендуемые сообщения

Очень хорошая инструкция как и чего "врубать" в МК написана в книге А.В. Евстифеева "Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL", причем полностью на русском языке. Скачай и прочитай.

спасибо за помощь очень содержательно. Почитаю)

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

ЦАП-ов в AVR-ах вообще нету (есть только в семействе ATXMega). Если надо, цепляйте внешний, либо берите другой контроллер, где есть ЦАП.

Извините пожалуйста за такой тупой вопрос. Я просто только начал Си изучать. Как я понял в МК можно сделать только три переменных PORTB PORTC PORTD, или можно сделать больше переменных?

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Геннадий, не регистры а порты ввода-вывода.

Nikitka Как и в любом Си: "char c; int i; long l; float f;..." продолжать?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Геннадий, не регистры а порты ввода-вывода.

Nikitka Как и в любом Си: "char c; int i; long l; float f;..." продолжать?

Просто уменя Atmega Studio выдает ошибку на такие команды, хорошо будем пробивать.. У меня пишут ошибку "что значит c;" и того рода

Ссылка на комментарий
Поделиться на другие сайты

Вот программка , которая при нажатии на кнопку зажигает светодиоды по очереди: (для ATtiny13)


#define F_CPU 1200000UL
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
   DDRB  = 0b110111;
   PORTB = 0b001000;

   char x = 0;

   while(1)
   {
         if (bit_is_clear(PINB, 3))
         {
                  x++;
                  if (x > 3) x = 1;

                  switch (x)
                  {
                             case 1: PORTB = 0b001001; break;
                             case 2: PORTB = 0b001010; break;
                             case 3: PORTB = 0b001100; break;
                  }
             _delay_ms(200);         
         }
    }
}

Изменено пользователем TDSS

Иван Сусанин - первый полупроводник

Ссылка на комментарий
Поделиться на другие сайты

Извините пожалуйста за такой тупой вопрос. Я просто только начал Си изучать.
Лучше бы начать с компьютерного. По крайней мере не будет вопросов по синтаксису языка. Конечно, у контроллерной версии есть некоторые особенности, но они описаны в даташите.
для ATtiny13
Может я плохо посмотрел, но привязку к контроллеру не вижу. Для ATtiny13 лучше закладываться на частоту 1,2 МГц (тактовая 9,6 МГц и делитель на 8) чтобы не заморачиваться с фузами, для новичка это опасно.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

@COKPOWEHEU, верхняя строчка кода, там установка частоты 1,2 МГц для правильного отсчета задержек. С таймерами наверное ему еще рано разбираться .

@Nikitka, а что это за Atmega Studio у Вас ? Вот AtmelStudio 6 Моя ссылка

Вот тоже может пригодится Моя ссылка

Скачайте и прочтите книгу Евстифеев А.В. Микроконтроллеры AVR семейств Tiny и Mega фирмы Atmel

Изменено пользователем TDSS

Иван Сусанин - первый полупроводник

Ссылка на комментарий
Поделиться на другие сайты

... не регистры а порты ввода-вывода...

... А что же тогда DDRB, DDRC, DDRD или PINB, PINC, PIND, тоже "порты"?

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

... А что же тогда DDRB, DDRC, DDRD или PINB, PINC, PIND, тоже "порты"?
да. Как и какой-нибудь OCR1A. Отличаются они от регистров способом обращения: большинство команд работает с регистрами, кроме разве что in, out, sbi, cbi, sbic, sbis может еще кое-что забыл. Между прочим, например cbi расшифровывается как clear bit [in] I/O [port], сравните с cbr (clear bit [in] register). Физически, конечно, это все регистры, но программно именно порты связи ядра с переферией, как внешней так и внутренней (что DDRx, PORTx, PINx, что SPL/SPH, TIMSK и прочие).

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

но программно именно порты...

Программно это именно регистры. Программе фиолетово, как мы их используем. В них вообще данные хранить можно. Видимо, в даташите их регистрами по ошибке называют...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

 Register Summary - все они там. Отличие в командах введено из-за различного размещения их в адресном пространстве МК. COKPOWEHEU имеет ввиду разницу между РЕГИСТРАМИ ОБЩЕГО НАЗНАЧЕНИЯ (R0-R32) и периферией. Но и она состоит из регистров. Что касается разных команд при работе с ними. Часть отведена для работы с регистровым файлом РОН (CBR/SBR и др.), часть - для "ближней периферии ($00-$1F) типа CBI/SBI, потому как в инструкции есть всего 5бит для адреса, часть для "среднего радиуса действия" ($00-$3F) типа IN/OUT, а есть и "дальнобойные" ($60-$FF) - это уже LD/ST.  

Изменено пользователем Геннадий
Ссылка на комментарий
Поделиться на другие сайты

Здравствуйте это снова я. Я написал программу под такие параметры.

post-161534-0-06815600-1342892302_thumb.jpg

И он мне жалуется на параметр delay.h цитата: "Error 3 __builtin_avr_delay_cycles expects an integer constant."

/*
* GccApplication1.c
*
* Created: 22.07.2012 03:21:11
*  Author: Nicky Sprouse
*/ 

#include <avr/io.h>
#include <avr/iom8.h>
#include <avr/delay.h>

unsigned int ADCdata;

int main(void)

{
char x = 0; //переменная кнопок + и - комманды Attack
char y = 0; //переменная кнопок + и - комманды Gain
char z = 0; //переменная кнопок + и - комманды Level
char a = 0; //переменная кнопок + и - комманды Time
char w = 0; //свободная переменная

switch (PORTB)
{
case 0b00000001: x=x+1; break;
case 0b00000010: x=x-1; break;
case 0b00000100: y=y+1; break;
case 0b00001000: y=y-1; break;
case 0b00010000: z=z+1; break;
case 0b00100000: z=z-1; break;
case 0b01000000: a=a+1; break;
case 0b10000000: a=a-1; break;
}

if(ADCdata>z) //УСЛОВИЕ 1. Если АЦП больше параметра level то "дальше"
{
	_delay_ms(x); //сделать паузу на параметр Attack
GOTO1:
		if (w<y) //УСЛОВИЕ 2. Если w(свободная переменная) меньше параметра Gain то "дальше"
		{
			PORTD=w;
				w=w+1; //приплюсовать к (свободной переменной) единицу
					_delay_ms(a); //задержать на параметр Time
				goto GOTO1; //перейти на строчку GOTO1:
		} else {PORTD=w;} //УСЛОВИЕ 2. Если w(свободная переменная) больше или равно Gain то PORTD="w"
} else {w=0;} //УСЛОВИЕ 1. Если АЦП меньше или равно level то w=0

}//The END)))) xDDD

Изменено пользователем Nikitka
Ссылка на комментарий
Поделиться на другие сайты

Ну например реализовать задержку вручную

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

В delay в CVAVR нельзя вставлять переменные, только константы.

ERROR 5 at line 10 © ZX Spectrum

Точнее даже 2:

1. У товарища не CvAVR, а, похоже, атмел студия.

2. В CvAVR delay_ms работает и с переменными, и с константами. Проверял. Про линейку GCC based продуктов (WinAVR, Atmel Studio) не знаю.

Ссылка на комментарий
Поделиться на другие сайты

ERROR 5 at line 10 © ZX Spectrum

Два минуса дают плюс :D Действительно не CVAVR, попробовал, вторая версия понимает. Но суть от этого не изменилась - компилятор хочет константу в delay )))

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

интересна как
Головой немного подумать. Всё реализовывается просто.

Создать ф-ию, в которую будет передаваться значение миллисекунд, а в ней тупо цикл.

Ссылка на комментарий
Поделиться на другие сайты

если у меня плавающая задержка.?

Ну самое тупое и корявое решение:

unsigned long k, i;

// величина задержки в каких-то "попугайчиках"
k=100000;

for (i=0; i<k; i++)
{
asm ("nop");  // Синтаксис уточнить!
asm ("nop");  // Синтаксис уточнить!
asm ("nop");  // Синтаксис уточнить!
asm ("nop");  // Синтаксис уточнить!
} // for

Изменено пользователем hd44780
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...