Нескольно простых вопросов о программировании AVR на Си.

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18547
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение ARV »

sibiryak69 писал(а):а точнее не совсем понятно зачем unsigned char заключено в круглые скобки
это явное преобразование типа результата. по умолчанию результат (baud>>8) будет иметь тип unsigned int (по "наибольшему типу операнда, т.е. baud), а в регистры UBRRL/UBRRH надо помещать байт... и автор посчитал, что без явного указания компилятору рассматривать результат сдвига, как беззнаковый байт, правильный результат может быть не достигнут...

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

Мой уютный бложик... заходите!
Реклама
sibiryak69
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июн 19, 2016 06:31:18

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение sibiryak69 »

А как по вашему можно было бы записать?
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18547
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение ARV »

sibiryak69 писал(а):как по вашему можно было бы записать?

Код: Выделить всё

UBRPH = baud>>8;
UBRRL = baud;
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
sibiryak69
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июн 19, 2016 06:31:18

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение sibiryak69 »

[uquote="ARV",url="/forum/viewtopic.php?p=3216932#p3216932"]
sibiryak69 писал(а):как по вашему можно было бы записать?

Код: Выделить всё

UBRPH = baud>>8;
UBRRL = baud;
[/uquote]
то есть если запихивается в байтный регистр 16 разрядное значение старший байт просто откидывается?
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18547
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение ARV »

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

Мой уютный бложик... заходите!
Реклама
sibiryak69
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июн 19, 2016 06:31:18

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение sibiryak69 »

[uquote="ARV",url="/forum/viewtopic.php?p=3217697#p3217697"]угу[/uquote]

спасибо
Реклама
sibiryak69
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июн 19, 2016 06:31:18

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение sibiryak69 »

Всем добрый день, подскажите кто знает о структурах в си
Например встречал такие записи

struct database {
int rowId;
int name;
float surname;
};

int main()
{
struct database worker; // объявили переменную-структуру

worker.rowId = 1;
worker.name = Denis;
worker.surname = Sukhoverkhov;
}

Объявляется структура с именем database имеет три переменные, rowId, name, surname.
затем объявляется переменная worker
через переменную worker мы можем получить доступ к элементам структуры. Доступ к элементам структуры осуществляется через точку.

Так вот вопрос, для чего такие сложности и каким образом структуры могут использоваться при программировании микроконтроллеров
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18547
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение ARV »

sibiryak69 писал(а):для чего такие сложности и каким образом структуры могут использоваться при программировании микроконтроллеров
как вы себе представляете обработку 25-и аналогичных структур? когда всего 3 переменных, можно обойтись и без структуры, а когда групп по 3 переменных 25 или более?
структуры всегда используются для создания логически увязанных единиц информации, чтобы унифицировать обработку этой информации.
например, я применял структуры, когда делал индикацию методом чарлиплекса - слыхали о таком? это, грубо говоря, когда для зажигания светодиода используется не только два состояния (0 и 1), но и третье состояние пина микроконтроллера, так называемое Z-состояние. так вот, пока вы управляете светодиодом через единственный порт PORTx, все просто и без структур. Но когда состояние светодиода определяется состоянием уже двух портов PORTx и DDRx, получается уже не так красиво...

я создал структуру, в которой каждому светодиоду сопоставил поле "адрес порта PORT", "адрес порта DDR" и "битовая маска светодиода", после чего работать стало гораздо проще... особенно для светодиодов, подключаемых к разным портам. у меня вышло все унифицировать именно благодаря структурам, описывающим каждый светодиод.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
viiv
Грызет канифоль
Сообщения: 289
Зарегистрирован: Чт ноя 06, 2014 13:09:06

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение viiv »

[uquote="sibiryak69",url="/forum/viewtopic.php?p=3225656#p3225656"]Так вот вопрос, для чего такие сложности и каким образом структуры могут использоваться при программировании микроконтроллеров[/uquote]

Для Вашего примера, напишите, функцию поиска нужной записи, например, по фамилии. Без использования структур. А потом с использованием. И все поймете.
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение WiseLord »

Структуры помогают упорядочить код. Например, часы с будильником - вводим структуру, храняющую время в своих элементах, аналогично - для будильников. Потом и сравнивать много легче, и код читабельнее. А без этого получается вот такое :).
sibiryak69
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июн 19, 2016 06:31:18

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение sibiryak69 »

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

struct автомобиль {
int длинна;
int ширина;
float мощность;
nt вес;
};

но марки автомобилей разные и характеристики у них разные

возьмем к примеру несколько марок

ваз
тойота
ниссан

и объявим переменные
struct автомобиль ваз
struct автомобиль тойота
struct автомобиль ниссан

и затем инициализируем их

ваз.длинна = хх
ваз.ширина = хх
ваз.мощность = хх
ваз.вес = хх

тойота.длинна = хх
тойота.ширина = хх
тойота.мощность = хх
тойота.вес =

ниссан.длинна = хх
ниссан.ширина = хх
ниссан.мощность = хх
ниссан.вес = хх

то есть под именем структуры объединяются названия характеристик, параметров и т.д. присущие какой либо группе объектов. под объявленными переменными с типом имени структуры, подразумеваются конкретные объекты группы

и вполне логична запись через точку имя конкретного объекта и его конкретная характеристика с последующим присвоением значения или другими операциями

прошу извинить, что много расписал, но я так понял структуры в си
если я не прав попрошу поправить
всем спасибо
viiv
Грызет канифоль
Сообщения: 289
Зарегистрирован: Чт ноя 06, 2014 13:09:06

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение viiv »

sibiryak69, чем фамилия-имя из предидущего примера не понравилось? :))

Примерно ты правильно понял. Это способ объединить логически связанные данные.
Но доступ <имя переменной>.<поле структуры> - не единственная возможность.
Еще есть указатель (в том числе и на структуру).
Еще есть массивы (в том числе и структур).

А так, да: ты ввел новую абстракцию (новый тип) (struct автомобиль). Далее можешь данный тип использовать:

Код: Выделить всё

/* считаем транспортный налог :-) */
float nalog (struct автомобиль *a)
{
    if (a->мощность <= 100)
        return a->мощность * 12.0;
    if (a->мощность <= 125)
        return a->мощность * 25.0;
   ...
    return a->мощность * 150.0;
}
restfuldon
Родился
Сообщения: 2
Зарегистрирован: Вт ноя 07, 2017 22:24:06

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение restfuldon »

Всем привет!
Не совсем нашёл тему куда этот вопрос можно задать, так что напишу пока здесь. Если не туда запостил - перенесу, извините.
В общем, решил поэкспериментировать с АВР, сварганил небольшой проект на Атмега 168, но даже светодиод не моргает, хотя контроллер шьётся.
Я уже отчаялся искать где у меня косяк, несколько вечеров бьюсь.
Вводные:
Atmega168
USBasp
AVRDude_PROG3.3 ( khazama тоже пробовал)
AtmelStudio

Схема
Изображение

Код:

Код: Выделить всё

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

int main(void)
{
	DDRD = 0b10010000;
	PORTD = 0b10010000;

    while (1) 
    {
		PORTD = 0b10000000;
		_delay_ms(300);
		PORTD = 0b00010000;
		_delay_ms(300);
    }
}
Hex-файл
https://yadi.sk/d/_qbhwHYZ3PVWrQ

хекс-файл беру из папки Release проекта после билда.

Суть проблемы в том, что контроллер шьётся, верификацию памяти проходит, но не подает никаких признаков жизни. Причем прошивается он 100%, т.к. я пробовал шить на одном компе и верификацию проводить на другом - если прошивки одинаковые, то верификация проходит нормально, если разные, то не верифицируется. (также и при прошивке AVRDUDE и верификацией Khazam'ом)
Если изменить фьюзы в хазаме, то потом эти изменения можно увидеть в AVRdude.
Настройка фьюзов:
Изображение
Пытаюсь запустить хотя бы просто на внутреннем генераторе.
EESAVE нажат просто для теста.записи\считывания фьюзов.

В протеусе код работает ><
Уже впаял другой контроллер ( думал, мб порт выгорел), но результат такой же.
Блин, мужики, ЧЯДНТ?! :facepalm:
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение WiseLord »

Не вижу причин схеме не работать.Проверьте вольтметром на ножках МК, "мигают" ли они.
Аватара пользователя
Mishany
Электрический кот
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение Mishany »

restfuldon,а как оно будет работать если резет к земле прижат?
его к +5 надо подтянуть! :solder:
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение WiseLord »

Ха, действительно :)
restfuldon
Родился
Сообщения: 2
Зарегистрирован: Вт ноя 07, 2017 22:24:06

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение restfuldon »

[uquote="Mishany",url="/forum/viewtopic.php?p=3228874#p3228874"]restfuldon,а как оно будет работать если резет к земле прижат?
его к +5 надо подтянуть! :solder:[/uquote]

Ё-моё, а слона-то я и не заметил :facepalm:
Всё, зашуршала схема! Спасибо огромное ) :music:
Вот что значит взгляд со стороны!
sibiryak69
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июн 19, 2016 06:31:18

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение sibiryak69 »

[uquote="ARV",url="/forum/viewtopic.php?p=3225673#p3225673"]так вот, пока вы управляете светодиодом через единственный порт PORTx, все просто и без структур. Но когда состояние светодиода определяется состоянием уже двух портов PORTx и DDRx, получается уже не так красиво...

я создал структуру, в которой каждому светодиоду сопоставил поле "адрес порта PORT", "адрес порта DDR" и "битовая маска светодиода", после чего работать стало гораздо проще... особенно для светодиодов, подключаемых к разным портам. у меня вышло все унифицировать именно благодаря структурам, описывающим каждый светодиод.[/uquote]

Уважаемый AVR, я так полагаю вы имели в виду регистры PORT и DDR ???

Добавлено after 8 minutes 6 seconds:
не плохо о структурах рассказано здесь
http://www.youngcoder.net/2015/01/structury1.html?m=1
понравилось выражение "структурная переменная", а сама структура как бы шаблон для структурной переменной
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18547
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение ARV »

sibiryak69 писал(а):я так полагаю вы имели в виду регистры PORT и DDR ???
я вполне четко написал, что я имел ввиду. в поле структуры нельзя хранить "порт", но можно хранить "указатель на этот порт", т.е., как я и написал, адрес порта.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
НиколасПэЛ
Родился
Сообщения: 3
Зарегистрирован: Пн ноя 13, 2017 11:35:30

Re: Нескольно простых вопросов о программировании AVR на Си.

Сообщение НиколасПэЛ »

Добрый день, не поможете мне разобраться в регистрах. Пытаюсь сделать импульсы на atmel328. Нужно два канала, на которых будут импульсы длительностью 10 мкс и паузой между ними 30 мкс. Импульсы одинаковые, только на втором канале есть задержка от первого канала. На 5-10 мкс по заднему фронту от первого канала.
Ответить

Вернуться в «AVR»