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

Обсуждаем контроллеры компании Atmel.
veso74
Поставщик валерьянки для Кота
Сообщения: 1907
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

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

B &= 0b11110000;
B |= (A & 0b00001111);
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1392
Зарегистрирован: Вт июн 07, 2011 08:03:18

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

Сообщение OKF »

veso74, скобки лишние. И 0b, как бы, нестандарт.)
Реклама
Аватара пользователя
Мокренькая кисонька
Открыл глаза
Сообщения: 59
Зарегистрирован: Вт сен 27, 2011 07:28:44
Откуда: Москва
Контактная информация:

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

Сообщение Мокренькая кисонька »

Народ, подскажите пожалуйста как передать порт и пин в функцию?
Есть такая функция:

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

// функция свистоперделки (служебные сигналы)
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 больше или равен единице, то запускаем второй таймер
	}
}
Если порт только А, оно работает, а если порты разные то происходит бяка. Видимо не в те адреса попадаю... Порт пытался добавить как еще один аргумент.
ИзвЕните от слова - веник, ИзвИните от слова - вина.
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

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

Сообщение Just_Fluffy »

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

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 раза.
Белая и Пушистая
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Мокренькая кисонька
Открыл глаза
Сообщения: 59
Зарегистрирован: Вт сен 27, 2011 07:28:44
Откуда: Москва
Контактная информация:

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

Сообщение Мокренькая кисонька »

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

Добавлено after 15 minutes 48 seconds:
Да уж, аппетит приходит во время еды...
А нельзя сделать так, чтобы было как в дефайнах, например:

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

#define BUZZER PORTA4 // пищалка
#define BLUE PORTB1 // синий светодиод
#define GREEN PORTB0 // зеленый светодиод
#define RED PORTA1 // красный светодиод
И каким-то образом передавать в функцию например GREEN, а в ней уже распарсить что за порт и что за пин?
ИзвЕните от слова - веник, ИзвИните от слова - вина.
Реклама
Аватара пользователя
Just_Fluffy
Вымогатель припоя
Сообщения: 532
Зарегистрирован: Ср июн 29, 2022 16:25:45

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

Сообщение Just_Fluffy »

порт для компилятора - переменная. Но ее значение может меняться извне. Поэтому она объявлена как волатильная. Что б компилятор свою оптимизацию туда не пихал.
Соответственно, когда мы объявляем указатель на эту переменную - мы должны его написать так, как объявлена сама переменная. Поэтому компилятор у вас волатиль и попросил. Вы правильно сделали, что дописали.
Белая и Пушистая
Реклама
Аватара пользователя
Shuspano
Грызет канифоль
Сообщения: 270
Зарегистрирован: Вс окт 20, 2019 13:03:56

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

Сообщение Shuspano »

Немножко странный вопрос. Не задумывался об этом, но стало интересно. Если main() незамкнут, не зациклен, не ведет к аппаратной остановке, что происходит в МК?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

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

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

Мой уютный бложик... заходите!
OKF
Это не хвост, это антенна
Сообщения: 1392
Зарегистрирован: Вт июн 07, 2011 08:03:18

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

Сообщение OKF »

[uquote="Shuspano",url="/forum/viewtopic.php?p=4506542#p4506542"]Если main() незамкнут, не зациклен, не ведет к аппаратной остановке, что происходит в МК?[/uquote]
Ну посмотрели бы в листинге, заради любопытства. Не?)

Добавлено after 19 minutes 51 second:
[uquote="Shuspano",url="/forum/viewtopic.php?p=4506542#p4506542"]Немножко странный вопрос. Не задумывался об этом, но стало интересно. Если main() незамкнут, не зациклен, не ведет к аппаратной остановке, что происходит в МК?[/uquote]
Конечно странный. Что значит не замкнут? Что значит не зациклен? Что значит "не ведет к аппаратной остановке"? Одни вопросы. Учитесь формулировать свои вопросы. Без этого никак. Или так и будете дурачком выглядеть на форумах.
Аватара пользователя
Shuspano
Грызет канифоль
Сообщения: 270
Зарегистрирован: Вс окт 20, 2019 13:03:56

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

Сообщение Shuspano »

OKF писал(а): Ну посмотрели бы в листинге, заради любопытства. Не?)
А как его получить? Компилятор Си - не ассемблер.
ARV писал(а):Учитесь формулировать свои вопросы
Тогда форумы мне были бы не нужны
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

листинг - файл .lss. и там ассемблерный код.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

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

Сообщение Martian »

[uquote="Shuspano",url="/forum/viewtopic.php?p=4506598#p4506598"]Тогда форумы мне были бы не нужны[/uquote] согласен. форумы - это для идиотов.
veso74
Поставщик валерьянки для Кота
Сообщения: 1907
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

[uquote="Shuspano",url="/forum/viewtopic.php?p=4506542#p4506542"]... Если main() незамкнут, не зациклен, не ведет к аппаратной остановке, что происходит в МК?[/uquote]
При коммулятор, который использовал для теста (PIC), МК прошел этап запуска, сделал то, что ему написал и больше ничего не делает.
Один раз. И SLEEP.

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

#use FIXED_IO(A_outputs = PIN_A2)

void main() {
  output_high(PIN_A2);
}

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

...
001A:  BSF    05.2
.. }
001B:  SLEEP
И для ATtiny другой компилятор прошел без предупреждения. Тестового устройства нет, но вероятно действия тоже проходит один раз.
сокол
Вымогатель припоя
Сообщения: 602
Зарегистрирован: Сб июл 07, 2012 23:01:25

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

Сообщение сокол »

Всем доброго вечера. Есть Вольт Амперметр на Атмега8 с дисплеем от Нокия 1202. При подаче питания вентилятор сразу должен запуститься на полую 12в, а потом должен падать напряжение зависимости от температуры,но полностью не должен отключиться то что установлено PWM=190 там вроде 6..8в на кулере. На каком Языке написано не знаю. Помогите кто может,где что 0 или 1 ставить.Изображение
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

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

Сообщение Martian »

а что, скопировать текст никак было? Мне вот лень его набирать.
сокол
Вымогатель припоя
Сообщения: 602
Зарегистрирован: Сб июл 07, 2012 23:01:25

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

Сообщение сокол »

Вот прект
Вложения
dual_band_pok.c
(7.77 КБ) 194 скачивания
veso74
Поставщик валерьянки для Кота
Сообщения: 1907
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

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

Сообщение veso74 »

Если правильно понял идею:

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

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);
сокол
Вымогатель припоя
Сообщения: 602
Зарегистрирован: Сб июл 07, 2012 23:01:25

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

Сообщение сокол »

Благодарю.Ребята тут у меня целая проблема вот тут на картинке обозначил красным как их делать с какими кнопками или дайте пожалуйста ссылку какими кнопками как управляют при написании ПО.
Изображение
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

Доброго времени суток. Есть ли у кого-то компилятор ICCTiny v6 ? Или какой-то другой, поддерживающий AVR без SRAM, такие как AT90S1200, ATtiny12, ATtiny28.
AVK
Потрогал лапой паяльник
Сообщения: 349
Зарегистрирован: Сб окт 20, 2007 14:12:03

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

Сообщение AVK »

[uquote="Пока_без_кота",url="/forum/viewtopic.php?p=4559492#p4559492"]поддерживающий AVR без SRAM, такие как AT90S1200, ATtiny12, ATtiny28.[/uquote]
Проще на Асме написать. Очевидно задачи простейшие раз хватит регистров. Да и какой смысл?
Ответить

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