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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

5 секунд гуглится. К чему эти вопросы ? - https://yandex.ru/search/?lr=2&msid=151 ... %20c%2B%2B
Реклама
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Птичий язык. :evil: :facepalm:
Пойду читать.
Станислав
Реклама
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

СКАЗОЧНИК писал(а):Вот это я написал на СИ

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

#define RSport   PORTB	// Указать порт, к которому подключена линия управления RS
#define RSddr	 DDRB	// Указать регистр направления порта, к которому подключена RS
#define RSpin    5		// Указать номер бита порта, к которому подключеа линия RS
А вот это надо переделать на СИ

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

sbi	RSddr, RSpin
Я когда-то перенес на си ассемблерные наработки.

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

#define RS_PORT PORTB
#define RS_DDR DDRB
#define RS_PIN PINB
#define RS PB5

#define set_bit(reg,bit) reg |= (1<<bit)
#define clr_bit(reg,bit) reg &= (~(1<<bit))

#define sbi(reg,bit) set_bit(reg,bit)
#define cbi(reg,bit) clr_bit(reg,bit)

sbi (RS_DDR, RS)
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Ну, так можно весь ассамблер на си перевести. ))) благодарю за подсказки. )
Станислав
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

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

Сообщение Ярослав555 »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3283781#p3283781"]Как все сложно то... (((([/uquote]

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

void LCDInit (void)
{ 
  uint8_t byte;
  SetE();
  LCDPORT&=0x0F;
  LCDPORT|=0x30;
  PulES();
  PulES();
  PulES();
  LCDPORT&=0x0F;
  LCDPORT|=0x20;
  PulES();
  byte = 0x28;
  ToLCD(byte);
  byte = 0x08;
  ToLCD(byte);
  byte = 0x0C;
  ToLCD(byte);
  byte = 0x01;
  ToLCD(byte);
  byte = 0x06;
  ToLCD(byte);
}
void ToLCDText(const uint8_t* data)
{  
  uint8_t buffer [32];
  for(uint8_t i = 0; i < 32; i++) buffer[i] = 0x20;
  for(uint8_t i = 0; i < 32; i++)
  {
    if(data[i] != 0) buffer[i] = data[i];
    else break;
  }
  
  SetDdramAddr (0);
  RsH();
  for(uint8_t i = 0; i < 16; i++) ToLCD(buffer[i]);
  RsL();
  SetDdramAddr (0x40);
  RsH();
  for(uint8_t i = 16; i < 32; i++) ToLCD(buffer[i]);
  RsL();
}
void SetDdramAddr (uint8_t addr)
{
    ToLCD(addr|0x80);
}  
void ToLCD (const uint8_t data)
{   
    LCDPORT&=0x0F;
    LCDPORT|=data&0xF0;
    PulEF();
    LCDPORT&=0x0F;
    LCDPORT|=data<<4;
    PulEF();
}
Вложения
LCD_driver.h
(919 байт) 228 скачиваний
LCD_driver.c
(1013 байт) 239 скачиваний
Реклама
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

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

Сообщение Chip115 »

Всем привет! На работе потребовалось прошить железо (ATTYNI 44A). Софт написан в ардуино. Дел с ардуино не имел, потому прошу помощи.

Есть программатор (самодельный). На нем имеются микросхема FT232RL. На плате (возле разъема для программирования), которую надо зашить, имеются надписи: MISO, MOSI, RST, CLK, +5V, GND.
В общем, Arduino IDE я настроил (в папку \Documents\Arduino\hardware\ATTinyCore я перенес нужные файлы), в IDE появилось куча доп. опций. Выставил как на скриншоте.
Изображение

Какой выбрать программатор?
Какая последовательность прошивки?
1. Зписать программу
2. записать фьюьзы (нажатием кнопки "записать загрузчик")?

Что-то в таком порядке, с выбранным программатором как на снимке, ошибки лезут. Грешу на то, что либо программатор не правильный выбрал, либо IDE не настроил.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Реклама
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

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

Сообщение Ярослав555 »

[uquote="Chip115",url="/forum/viewtopic.php?p=3284792#p3284792"]Всем привет! На работе потребовалось прошить железо (ATTYNI 44A). Софт написан в ардуино. Дел с ардуино не имел, потому прошу помощи.

Есть программатор (самодельный). На нем имеются микросхема FT232RL. На плате (возле разъема для программирования), которую надо зашить, имеются надписи: MISO, MOSI, RST, CLK, +5V, GND.
В общем, Arduino IDE я настроил (в папку \Documents\Arduino\hardware\ATTinyCore я перенес нужные файлы), в IDE появилось куча доп. опций. Выставил как на скриншоте.
Изображение

Какой выбрать программатор?
Какая последовательность прошивки?
1. Зписать программу
2. записать фьюьзы (нажатием кнопки "записать загрузчик")?

Что-то в таком порядке, с выбранным программатором как на снимке, ошибки лезут. Грешу на то, что либо программатор не правильный выбрал, либо IDE не настроил.[/uquote]
:facepalm: ft232 можно было и загуглить, тогда было бы понятно что это просто usbToUart конвертор. А если шьем через юарт (последовательный порт), то это что-то на подобии программатога Громова и дальше копать и копать информацию. Для прошивки без гемороя купите USBasp, цена которым пару баксов и есть почти в каждом радиомагазине. Последовательность зашития фьюзы-прошивка, в принципе, любая, если только фьюзы не блокируют залитие прошивки (например отключают исп интерфейс).
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

И не знала тупость моя границ... :facepalm:

Ковыряю информацию, как перевернуть тетрады в байте местами?
В ассемблере есть одна команда, очень удобная, а в Си?
Станислав
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

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

   lcd_send_nibble (lcd_data << 4);


    104             lcd_send_nibble (lcd_data << 4);
   \   0000000E   9582               SWAP    R24
   \   00000010   7F80               ANDI    R24, 0xF0
   \   00000012   2F08               MOV     R16, R24
   \   00000014   ....               RCALL   lcd_send_nibble
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Сделал в итоге так... Не знаю правильно ли.

Пытаюсь вычислить, что в записи b = R18>>4 | R18<<4;

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

	void WRITE (unsigned char R18)
		{
			DB_LINE (R18);				// Вызываем подпрограмму, которая выведет значение тетрады в порт(ы)

			STROBE ();

			//	swap	R18			// Перевернем тетрады местами 

			
unsigned char b = R18>>4 | R18<<4;
	
	R18 = b;

		
			DB_LINE	(R18);			

			STROBE ();

				asm volatile("sei");
	
		}
Станислав
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

СКАЗОЧНИК писал(а):Ковыряю информацию, как перевернуть тетрады в байте местами?
В ассемблере есть одна команда, очень удобная, а в Си?
В каком ассемблере? Если речь о avr, то да. Но и в AVR-GCC это тоже есть, соответственно: __builtin_avr_swap(x) Описана в заголовочном файле builtins.h avr-libc, ежели чего.

А вообще, откровенно говоря, при включенной оптимизации что использование этой команды (вызывающей соответствующую команду SWAP ассемблера avr), что простое #define swap(x) (((x & 0x0F) << 4) | ((x & 0xF0) >> 4)) генерируют один и тот же код с этим ассемблерным вызовом.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

:kill: :facepalm: :evil: Уродский этот Си с его уродскими библиотеками и объявлениями. Вообще идиотский язык программирования.
Три дня уже пытаюсь дисплей запустить, все почем зря.
Переставишь пару библиотек местами - компилится. Не переставишь - кучу ошибок выдает. Но не так ни так не работает!
Да еще и чтобы что-то применить - надо знать какую библиотеку, где и когда врубить! А еще и во всех нахрен файлах ее прописать. :kill:

Зачем же мне тогда подключать библиотеку с функциями переворачивания байта, библиотеку задержек, прерываний, вводов/выводов, если можно подключить целиком библиотеку работы с дисплеем?
Уже сделал среди кода включения светодиода контрольного, чтобы видеть, где у меня код висит, так он повис у меня в месте ожидания флага готовности дисплея. Тупо. Потому что почему-то у меня этот флаг читаться начинает раньше, чем идет инициализация дисплея. Сверху вниз выполняет все функции и все тут.
А если из инициализации вызывать эти функции, то почему-то заваливает ошибками, что не там и не то объявлено.
Как же должно быть, что подключил библиотеку с дисплеем и все! Забыл! Только выводишь на него буквы и все, не заботясь, как он там этот флаг ждет... :cry:

Добавлено after 8 minutes 13 seconds:
Еще пишет мне в ворнингах, что конфликт типов у него в функции...
Какой конфликт типов, если у меня функция ВОЙД и параметры ВОЙД. Ничего не передаю и не возвращаю... Откуда он вообще берет эту ересь?!

З.Ы. Простите, мне этот бред, но накалило до белого.
Станислав
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

СКАЗОЧНИК писал(а):...
Это с непривычки. Привыкните. Если что-то работает не так, то по любому, что-то вы сделали не так. Перетерпите этот период.

Добавлено after 1 minute 46 seconds:
IAR.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Я использую АВРСтудио.
Просто с нее начинал на ассемблере. Не скажу, что его хорошо узнал, но на ассемблере казалось проще все и понятнее, хотя разбирать его команды тоже сложно, но зато однозначно.

Наверное привыкну, надеюсь.
Читаю на данный момент все подряд. Может дадите совет, что почитать по подключению 1602 к Атмега16, чтобы 4битный режим и чтение флага занятости. А еще, выводы любых портов, которые свободные используются не по порядку. (Ранее, я это делал на ассемблере и очень компактно получалось).
Здесь уже 700 байт кода не рабочего - это я ассемблерную свою библиотеку на Си переводил.

Добавлено after 3 minutes 10 seconds:
И еще интересно... Если на компиляцию нажать иной раз 5 раз, то ошибки и ворнинги пропадают. :shock: За раз их становится меньше, а на следующий раз вообще нету!
Как это так??? :dont_know:
Станислав
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

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

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

Сообщение ARV »

СКАЗОЧНИК писал(а):Может дадите совет, что почитать по подключению 1602 к Атмега16, чтобы 4битный режим и чтение флага занятости. А еще, выводы любых портов, которые свободные используются не по порядку. (Ранее, я это делал на ассемблере и очень компактно получалось).
вот я писал: https://www.simple-devices.ru/articles/ ... -interface
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Завелась библиотека с ЧипЭнейбл.ру.
Правда, тоже пришлось маленько комментарии к ней почитать и голову поломать.
Оказалось все банально. Надо было все файлы с расширением .h кинуть в Хидеры к проекту. Ну и остальные как положено. Только тогда заработала.
Почему-то нигде не увидел акцента на этом и описания как правильно пользоваться АВРСтудией по созданию проекта.

Короче, если кому будет надо, то обращайте внимание, что раскинуть файлы по папкам в проекте - это еще ничего не значит. Их нужно из самого проекта в дереве папок добавить (ПРИСОЕДИНИТЬ) к проекту, чтобы он их видел.

З.Ы. И жалко, что я уже удалил свою писанную библиотеку совсем... Может тоже заработала бы. ((((
Станислав
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

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

Сообщение Ярослав555 »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3289357#p3289357"]Завелась библиотека с ЧипЭнейбл.ру.
Правда, тоже пришлось маленько комментарии к ней почитать и голову поломать.
Оказалось все банально. Надо было все файлы с расширением .h кинуть в Хидеры к проекту. Ну и остальные как положено. Только тогда заработала.
Почему-то нигде не увидел акцента на этом и описания как правильно пользоваться АВРСтудией по созданию проекта.

Короче, если кому будет надо, то обращайте внимание, что раскинуть файлы по папкам в проекте - это еще ничего не значит. Их нужно из самого проекта в дереве папок добавить (ПРИСОЕДИНИТЬ) к проекту, чтобы он их видел.

З.Ы. И жалко, что я уже удалил свою писанную библиотеку совсем... Может тоже заработала бы. (((([/uquote]
:facepalm: само собой! К хидерам или в свойствах проекта прописываем пути, или инклюдим с прописанием пути. Сишные файлы в дерево добавляем. Некоторые умудряются сишные файлы через директиву инклюд подключать, но это по молодости опыта, потом проходит.
Не люблю я эти Ваши библиотеки с сайтиков. Даже фирменные авровские аппноты иногда говеные. Очень часто встречаются любители всунуть в код нечто вида while(isRedy()); Т-е заставляют ядро втыкать до готовности периферии (юарт, айтуси, и т.д.)
Код должен быть построен через системный таймер - запулили процедуру, она проверила состояния, переключила регистры,. приготовила буферы и т.д. и возврат. А периферия сама по прерыванию молотит. На следующем тике таймера - снова проверка состояния.
Например, когда в программе надо общаться с 4мя ацп по спи, делать математику с плавающей запятой, пулить модбас и еще и в другой юарт лог писать - ждать некогда.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Кто бы еще толково описал подобное построение программ с помощью таймеров.
А то я тут читал у Ди-Халта про это, но там одно по одному и путано, в итоге он как-то сразу переходит на диспетчер задач и РТОС.
Надо бы, чтобы понятно было расписано, как использовать таймер, какие промежутки считать, как использовать и на пальцах. ))))))
Станислав
Аватара пользователя
prinv
Вымогатель припоя
Сообщения: 677
Зарегистрирован: Чт янв 20, 2011 09:07:08
Откуда: Пермь
Контактная информация:

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

Сообщение prinv »

По Сеньке и шапка.
Если задача простая, то и в поллинге (while(IsReady()) ничего плохого нет.
Никакая контра не уйдёт от нас
Ответить

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