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

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

Вт окт 24, 2017 19:51:57

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

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

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

Чт окт 26, 2017 16:46:31

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

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

Чт окт 26, 2017 17:27:19

sibiryak69 писал(а):как по вашему можно было бы записать?
Код:
UBRPH = baud>>8;
UBRRL = baud;

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

Пт окт 27, 2017 16:54:59

sibiryak69 писал(а):как по вашему можно было бы записать?
Код:
UBRPH = baud>>8;
UBRRL = baud;

то есть если запихивается в байтный регистр 16 разрядное значение старший байт просто откидывается?

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

Пт окт 27, 2017 17:57:40

угу

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

Вс окт 29, 2017 04:39:01

угу


спасибо

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

Пн ноя 06, 2017 14:55:29

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

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 мы можем получить доступ к элементам структуры. Доступ к элементам структуры осуществляется через точку.

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

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

Пн ноя 06, 2017 15:09:15

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

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

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

Пн ноя 06, 2017 15:13:47

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


Для Вашего примера, напишите, функцию поиска нужной записи, например, по фамилии. Без использования структур. А потом с использованием. И все поймете.

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

Пн ноя 06, 2017 15:41:36

Структуры помогают упорядочить код. Например, часы с будильником - вводим структуру, храняющую время в своих элементах, аналогично - для будильников. Потом и сравнивать много легче, и код читабельнее. А без этого получается вот такое :).

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

Вт ноя 07, 2017 19:01:58

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

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

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

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

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

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

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

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

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

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

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

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

прошу извинить, что много расписал, но я так понял структуры в си
если я не прав попрошу поправить
всем спасибо

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

Вт ноя 07, 2017 20:01:42

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

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

А так, да: ты ввел новую абстракцию (новый тип) (struct автомобиль). Далее можешь данный тип использовать:
Код:
/* считаем транспортный налог :-) */
float nalog (struct автомобиль *a)
{
    if (a->мощность <= 100)
        return a->мощность * 12.0;
    if (a->мощность <= 125)
        return a->мощность * 25.0;
   ...
    return a->мощность * 150.0;
}

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

Чт ноя 09, 2017 22:39:49

Всем привет!
Не совсем нашёл тему куда этот вопрос можно задать, так что напишу пока здесь. Если не туда запостил - перенесу, извините.
В общем, решил поэкспериментировать с АВР, сварганил небольшой проект на Атмега 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:

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

Пт ноя 10, 2017 06:41:12

Не вижу причин схеме не работать.Проверьте вольтметром на ножках МК, "мигают" ли они.

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

Пт ноя 10, 2017 07:18:11

restfuldon,а как оно будет работать если резет к земле прижат?
его к +5 надо подтянуть! :solder:

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

Пт ноя 10, 2017 08:36:13

Ха, действительно :)

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

Пт ноя 10, 2017 14:34:16

restfuldon,а как оно будет работать если резет к земле прижат?
его к +5 надо подтянуть! :solder:


Ё-моё, а слона-то я и не заметил :facepalm:
Всё, зашуршала схема! Спасибо огромное ) :music:
Вот что значит взгляд со стороны!

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

Пт ноя 10, 2017 16:57:17

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

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


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

Добавлено after 8 minutes 6 seconds:
не плохо о структурах рассказано здесь
http://www.youngcoder.net/2015/01/structury1.html?m=1
понравилось выражение "структурная переменная", а сама структура как бы шаблон для структурной переменной

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

Пт ноя 10, 2017 19:37:10

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

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

Пт ноя 24, 2017 16:09:13

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