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

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

Ср июл 19, 2023 08:26:51

Код:
B &= 0b11110000;
B |= (A & 0b00001111);

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

Ср июл 19, 2023 10:05:38

veso74, скобки лишние. И 0b, как бы, нестандарт.)

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

Пн окт 02, 2023 17:28:08

Народ, подскажите пожалуйста как передать порт и пин в функцию?
Есть такая функция:
Код:
// функция свистоперделки (служебные сигналы)
void buzz_n_blink(uint16_t duration, uint8_t quantity, uint16_t pause, uint8_t pin)
{
   // аргументы: длительность, количество, пауза (2-я длительность), нога
   for (uint8_t i=0; i < quantity; i++) // количество оборотов цикла опеределено в quantity
   {   
      PORTA |=(1<<pin); // поднимаем ногу
      loopdelay(duration); // вызываем задержку
      PORTA &=~(1<<pin); // опускаем ногу
      if (pause >= 1) loopdelay(pause); // если аргумент pause больше или равен единице, то запускаем второй таймер
   }
}

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

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

Пн окт 02, 2023 17:43:04

Код:
void MyProc ( volatile uint8_t* pPort, uint8_t pinMask ){
    // pPort - указатель на порт
    // pinMask - маска в порту
    *pPort |= pinMask;
    // delay
    *pPort &= ~pinMask;
}

--
передавать порт вот так:
Код:
MyProc(&PORTA, 0x01);
MyProc(&PORTB, 0x04);


Добавлено after 3 minutes 44 seconds:
pinMask - маска в порту. Если нужно номер бита - то есть смысл передавать в функцию вот так:
Код:
MyProc(&PORTA, 1<<0);
MyProc(&PORTB, 1<<3);

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

Отредактировано: Дописала волатиль
Последний раз редактировалось Just_Fluffy Пн окт 02, 2023 19:51:06, всего редактировалось 2 раз(а).

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

Пн окт 02, 2023 18:36:07

Большое спасибо за помощь!
Ругается на отсутствие квалификатора volatile для указателя. Который я добавил и ворнинг пропал...
Не могли бы Вы объяснить в формате для дурачков зачем он там и разве так можно было, указывать его (volatile) прямо в там, где указываются аргументы функции?
Остальное вроде бы понятно и спасибо за дополнение!

Добавлено after 15 minutes 48 seconds:
Да уж, аппетит приходит во время еды...
А нельзя сделать так, чтобы было как в дефайнах, например:
Код:
#define BUZZER PORTA4 // пищалка
#define BLUE PORTB1 // синий светодиод
#define GREEN PORTB0 // зеленый светодиод
#define RED PORTA1 // красный светодиод

И каким-то образом передавать в функцию например GREEN, а в ней уже распарсить что за порт и что за пин?

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

Пн окт 02, 2023 18:37:01

порт для компилятора - переменная. Но ее значение может меняться извне. Поэтому она объявлена как волатильная. Что б компилятор свою оптимизацию туда не пихал.
Соответственно, когда мы объявляем указатель на эту переменную - мы должны его написать так, как объявлена сама переменная. Поэтому компилятор у вас волатиль и попросил. Вы правильно сделали, что дописали.

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

Ср ноя 22, 2023 14:38:31

Немножко странный вопрос. Не задумывался об этом, но стало интересно. Если main() незамкнут, не зациклен, не ведет к аппаратной остановке, что происходит в МК?

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

Ср ноя 22, 2023 14:51:28

avr-gcc после "выхода" из main запрещает прерывания и уводит МК в бесконечный цикл.
Код:
CLI
JMP $

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

Ср ноя 22, 2023 16:11:18

Если main() незамкнут, не зациклен, не ведет к аппаратной остановке, что происходит в МК?

Ну посмотрели бы в листинге, заради любопытства. Не?)

Добавлено after 19 minutes 51 second:
Немножко странный вопрос. Не задумывался об этом, но стало интересно. Если main() незамкнут, не зациклен, не ведет к аппаратной остановке, что происходит в МК?

Конечно странный. Что значит не замкнут? Что значит не зациклен? Что значит "не ведет к аппаратной остановке"? Одни вопросы. Учитесь формулировать свои вопросы. Без этого никак. Или так и будете дурачком выглядеть на форумах.

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

Ср ноя 22, 2023 16:59:49

OKF писал(а):Ну посмотрели бы в листинге, заради любопытства. Не?)

А как его получить? Компилятор Си - не ассемблер.

ARV писал(а):Учитесь формулировать свои вопросы

Тогда форумы мне были бы не нужны

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

Ср ноя 22, 2023 17:07:26

листинг - файл .lss. и там ассемблерный код.

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

Ср ноя 22, 2023 17:08:42

Тогда форумы мне были бы не нужны
согласен. форумы - это для идиотов.

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

Ср ноя 22, 2023 17:39:06

... Если main() незамкнут, не зациклен, не ведет к аппаратной остановке, что происходит в МК?

При коммулятор, который использовал для теста (PIC), МК прошел этап запуска, сделал то, что ему написал и больше ничего не делает.
Один раз. И SLEEP.
Код:
#use FIXED_IO(A_outputs = PIN_A2)

void main() {
  output_high(PIN_A2);
}

Код:
...
001A:  BSF    05.2
.................... }
001B:  SLEEP

И для ATtiny другой компилятор прошел без предупреждения. Тестового устройства нет, но вероятно действия тоже проходит один раз.

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

Вт дек 26, 2023 21:07:07

Всем доброго вечера. Есть Вольт Амперметр на Атмега8 с дисплеем от Нокия 1202. При подаче питания вентилятор сразу должен запуститься на полую 12в, а потом должен падать напряжение зависимости от температуры,но полностью не должен отключиться то что установлено PWM=190 там вроде 6..8в на кулере. На каком Языке написано не знаю. Помогите кто может,где что 0 или 1 ставить.Изображение

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

Ср дек 27, 2023 01:07:27

а что, скопировать текст никак было? Мне вот лень его набирать.

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

Ср дек 27, 2023 15:15:54

Вот прект
Вложения
dual_band_pok.c
(7.77 KiB) Скачиваний: 23

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

Ср дек 27, 2023 19:12:09

Если правильно понял идею:
Код:
interrupt [TIM0_OVF] void timer0_ovf_isr(void) ...

в:
Код:
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
  counter_term++;
 
  if (counter_term == 60) {
    counter_term = 0;
   
    if (term == 0) {
      temper = ds18b20_temperature(0);

      if (temper < 50)
        PWM = 190;
      else if (temper < 55)
        PWM = 220;
      else if (temper < 60)
        PWM = 240;
      else
        PWM = 255;

      OCR2 = PWM;
    }
  }
}

и строка 109:
Код:
 delay_ms(200);

в напр.
Код:
 delay_ms(5000);

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

Ср дек 27, 2023 21:45:39

Благодарю.Ребята тут у меня целая проблема вот тут на картинке обозначил красным как их делать с какими кнопками или дайте пожалуйста ссылку какими кнопками как управляют при написании ПО.
Изображение

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

Вс мар 24, 2024 21:33:27

Доброго времени суток. Есть ли у кого-то компилятор ICCTiny v6 ? Или какой-то другой, поддерживающий AVR без SRAM, такие как AT90S1200, ATtiny12, ATtiny28.
Ответить