Нескольно простых вопросов о программировании AVR на Си.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
5 секунд гуглится. К чему эти вопросы ? - https://yandex.ru/search/?lr=2&msid=151 ... %20c%2B%2B
- Реклама
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Я когда-то перенес на си ассемблерные наработки.СКАЗОЧНИК писал(а):Вот это я написал на СИА вот это надо переделать на СИКод: Выделить всё
#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 на Си.
[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 на Си.
Всем привет! На работе потребовалось прошить железо (ATTYNI 44A). Софт написан в ардуино. Дел с ардуино не имел, потому прошу помощи.
Есть программатор (самодельный). На нем имеются микросхема FT232RL. На плате (возле разъема для программирования), которую надо зашить, имеются надписи: MISO, MOSI, RST, CLK, +5V, GND.
В общем, Arduino IDE я настроил (в папку \Documents\Arduino\hardware\ATTinyCore я перенес нужные файлы), в IDE появилось куча доп. опций. Выставил как на скриншоте.

Какой выбрать программатор?
Какая последовательность прошивки?
1. Зписать программу
2. записать фьюьзы (нажатием кнопки "записать загрузчик")?
Что-то в таком порядке, с выбранным программатором как на снимке, ошибки лезут. Грешу на то, что либо программатор не правильный выбрал, либо IDE не настроил.
Есть программатор (самодельный). На нем имеются микросхема 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 на Си.
[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]
ft232 можно было и загуглить, тогда было бы понятно что это просто usbToUart конвертор. А если шьем через юарт (последовательный порт), то это что-то на подобии программатога Громова и дальше копать и копать информацию. Для прошивки без гемороя купите USBasp, цена которым пару баксов и есть почти в каждом радиомагазине. Последовательность зашития фьюзы-прошивка, в принципе, любая, если только фьюзы не блокируют залитие прошивки (например отключают исп интерфейс).
Есть программатор (самодельный). На нем имеются микросхема FT232RL. На плате (возле разъема для программирования), которую надо зашить, имеются надписи: MISO, MOSI, RST, CLK, +5V, GND.
В общем, Arduino IDE я настроил (в папку \Documents\Arduino\hardware\ATTinyCore я перенес нужные файлы), в IDE появилось куча доп. опций. Выставил как на скриншоте.
Какой выбрать программатор?
Какая последовательность прошивки?
1. Зписать программу
2. записать фьюьзы (нажатием кнопки "записать загрузчик")?
Что-то в таком порядке, с выбранным программатором как на снимке, ошибки лезут. Грешу на то, что либо программатор не правильный выбрал, либо IDE не настроил.[/uquote]
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Нескольно простых вопросов о программировании AVR на Си.
И не знала тупость моя границ...
Ковыряю информацию, как перевернуть тетрады в байте местами?
В ассемблере есть одна команда, очень удобная, а в Си?
Ковыряю информацию, как перевернуть тетрады в байте местами?
В ассемблере есть одна команда, очень удобная, а в Си?
Станислав
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Код: Выделить всё
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;
Пытаюсь вычислить, что в записи 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 на Си.
В каком ассемблере? Если речь о 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 на Си.
Три дня уже пытаюсь дисплей запустить, все почем зря.
Переставишь пару библиотек местами - компилится. Не переставишь - кучу ошибок выдает. Но не так ни так не работает!
Да еще и чтобы что-то применить - надо знать какую библиотеку, где и когда врубить! А еще и во всех нахрен файлах ее прописать.
Зачем же мне тогда подключать библиотеку с функциями переворачивания байта, библиотеку задержек, прерываний, вводов/выводов, если можно подключить целиком библиотеку работы с дисплеем?
Уже сделал среди кода включения светодиода контрольного, чтобы видеть, где у меня код висит, так он повис у меня в месте ожидания флага готовности дисплея. Тупо. Потому что почему-то у меня этот флаг читаться начинает раньше, чем идет инициализация дисплея. Сверху вниз выполняет все функции и все тут.
А если из инициализации вызывать эти функции, то почему-то заваливает ошибками, что не там и не то объявлено.
Как же должно быть, что подключил библиотеку с дисплеем и все! Забыл! Только выводишь на него буквы и все, не заботясь, как он там этот флаг ждет...
Добавлено after 8 minutes 13 seconds:
Еще пишет мне в ворнингах, что конфликт типов у него в функции...
Какой конфликт типов, если у меня функция ВОЙД и параметры ВОЙД. Ничего не передаю и не возвращаю... Откуда он вообще берет эту ересь?!
З.Ы. Простите, мне этот бред, но накалило до белого.
Станислав
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
Это с непривычки. Привыкните. Если что-то работает не так, то по любому, что-то вы сделали не так. Перетерпите этот период.СКАЗОЧНИК писал(а):...
Добавлено after 1 minute 46 seconds:
IAR.
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Нескольно простых вопросов о программировании AVR на Си.
Я использую АВРСтудио.
Просто с нее начинал на ассемблере. Не скажу, что его хорошо узнал, но на ассемблере казалось проще все и понятнее, хотя разбирать его команды тоже сложно, но зато однозначно.
Наверное привыкну, надеюсь.
Читаю на данный момент все подряд. Может дадите совет, что почитать по подключению 1602 к Атмега16, чтобы 4битный режим и чтение флага занятости. А еще, выводы любых портов, которые свободные используются не по порядку. (Ранее, я это делал на ассемблере и очень компактно получалось).
Здесь уже 700 байт кода не рабочего - это я ассемблерную свою библиотеку на Си переводил.
Добавлено after 3 minutes 10 seconds:
И еще интересно... Если на компиляцию нажать иной раз 5 раз, то ошибки и ворнинги пропадают.
За раз их становится меньше, а на следующий раз вообще нету!
Как это так???
Просто с нее начинал на ассемблере. Не скажу, что его хорошо узнал, но на ассемблере казалось проще все и понятнее, хотя разбирать его команды тоже сложно, но зато однозначно.
Наверное привыкну, надеюсь.
Читаю на данный момент все подряд. Может дадите совет, что почитать по подключению 1602 к Атмега16, чтобы 4битный режим и чтение флага занятости. А еще, выводы любых портов, которые свободные используются не по порядку. (Ранее, я это делал на ассемблере и очень компактно получалось).
Здесь уже 700 байт кода не рабочего - это я ассемблерную свою библиотеку на Си переводил.
Добавлено after 3 minutes 10 seconds:
И еще интересно... Если на компиляцию нажать иной раз 5 раз, то ошибки и ворнинги пропадают.
Как это так???
Станислав
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
chipenable.ru Там был пример подключение дисплея на произвольные пины мк. Лично я всегда вешал на один порт. В крайнем случае, данные на одном порту, управление на другом.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18561
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
вот я писал: https://www.simple-devices.ru/articles/ ... -interfaceСКАЗОЧНИК писал(а):Может дадите совет, что почитать по подключению 1602 к Атмега16, чтобы 4битный режим и чтение флага занятости. А еще, выводы любых портов, которые свободные используются не по порядку. (Ранее, я это делал на ассемблере и очень компактно получалось).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Нескольно простых вопросов о программировании AVR на Си.
Завелась библиотека с ЧипЭнейбл.ру.
Правда, тоже пришлось маленько комментарии к ней почитать и голову поломать.
Оказалось все банально. Надо было все файлы с расширением .h кинуть в Хидеры к проекту. Ну и остальные как положено. Только тогда заработала.
Почему-то нигде не увидел акцента на этом и описания как правильно пользоваться АВРСтудией по созданию проекта.
Короче, если кому будет надо, то обращайте внимание, что раскинуть файлы по папкам в проекте - это еще ничего не значит. Их нужно из самого проекта в дереве папок добавить (ПРИСОЕДИНИТЬ) к проекту, чтобы он их видел.
З.Ы. И жалко, что я уже удалил свою писанную библиотеку совсем... Может тоже заработала бы. ((((
Правда, тоже пришлось маленько комментарии к ней почитать и голову поломать.
Оказалось все банально. Надо было все файлы с расширением .h кинуть в Хидеры к проекту. Ну и остальные как положено. Только тогда заработала.
Почему-то нигде не увидел акцента на этом и описания как правильно пользоваться АВРСтудией по созданию проекта.
Короче, если кому будет надо, то обращайте внимание, что раскинуть файлы по папкам в проекте - это еще ничего не значит. Их нужно из самого проекта в дереве папок добавить (ПРИСОЕДИНИТЬ) к проекту, чтобы он их видел.
З.Ы. И жалко, что я уже удалил свою писанную библиотеку совсем... Может тоже заработала бы. ((((
Станислав
- Ярослав555
- Поставщик валерьянки для Кота
- Сообщения: 2081
- Зарегистрирован: Пт май 31, 2013 17:14:38
- Откуда: Украина, Винница
Re: Нескольно простых вопросов о программировании AVR на Си.
[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=3289357#p3289357"]Завелась библиотека с ЧипЭнейбл.ру.
Правда, тоже пришлось маленько комментарии к ней почитать и голову поломать.
Оказалось все банально. Надо было все файлы с расширением .h кинуть в Хидеры к проекту. Ну и остальные как положено. Только тогда заработала.
Почему-то нигде не увидел акцента на этом и описания как правильно пользоваться АВРСтудией по созданию проекта.
Короче, если кому будет надо, то обращайте внимание, что раскинуть файлы по папкам в проекте - это еще ничего не значит. Их нужно из самого проекта в дереве папок добавить (ПРИСОЕДИНИТЬ) к проекту, чтобы он их видел.
З.Ы. И жалко, что я уже удалил свою писанную библиотеку совсем... Может тоже заработала бы. (((([/uquote]
само собой! К хидерам или в свойствах проекта прописываем пути, или инклюдим с прописанием пути. Сишные файлы в дерево добавляем. Некоторые умудряются сишные файлы через директиву инклюд подключать, но это по молодости опыта, потом проходит.
Не люблю я эти Ваши библиотеки с сайтиков. Даже фирменные авровские аппноты иногда говеные. Очень часто встречаются любители всунуть в код нечто вида while(isRedy()); Т-е заставляют ядро втыкать до готовности периферии (юарт, айтуси, и т.д.)
Код должен быть построен через системный таймер - запулили процедуру, она проверила состояния, переключила регистры,. приготовила буферы и т.д. и возврат. А периферия сама по прерыванию молотит. На следующем тике таймера - снова проверка состояния.
Например, когда в программе надо общаться с 4мя ацп по спи, делать математику с плавающей запятой, пулить модбас и еще и в другой юарт лог писать - ждать некогда.
Правда, тоже пришлось маленько комментарии к ней почитать и голову поломать.
Оказалось все банально. Надо было все файлы с расширением .h кинуть в Хидеры к проекту. Ну и остальные как положено. Только тогда заработала.
Почему-то нигде не увидел акцента на этом и описания как правильно пользоваться АВРСтудией по созданию проекта.
Короче, если кому будет надо, то обращайте внимание, что раскинуть файлы по папкам в проекте - это еще ничего не значит. Их нужно из самого проекта в дереве папок добавить (ПРИСОЕДИНИТЬ) к проекту, чтобы он их видел.
З.Ы. И жалко, что я уже удалил свою писанную библиотеку совсем... Может тоже заработала бы. (((([/uquote]
Не люблю я эти Ваши библиотеки с сайтиков. Даже фирменные авровские аппноты иногда говеные. Очень часто встречаются любители всунуть в код нечто вида while(isRedy()); Т-е заставляют ядро втыкать до готовности периферии (юарт, айтуси, и т.д.)
Код должен быть построен через системный таймер - запулили процедуру, она проверила состояния, переключила регистры,. приготовила буферы и т.д. и возврат. А периферия сама по прерыванию молотит. На следующем тике таймера - снова проверка состояния.
Например, когда в программе надо общаться с 4мя ацп по спи, делать математику с плавающей запятой, пулить модбас и еще и в другой юарт лог писать - ждать некогда.
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Нескольно простых вопросов о программировании AVR на Си.
Кто бы еще толково описал подобное построение программ с помощью таймеров.
А то я тут читал у Ди-Халта про это, но там одно по одному и путано, в итоге он как-то сразу переходит на диспетчер задач и РТОС.
Надо бы, чтобы понятно было расписано, как использовать таймер, какие промежутки считать, как использовать и на пальцах. ))))))
А то я тут читал у Ди-Халта про это, но там одно по одному и путано, в итоге он как-то сразу переходит на диспетчер задач и РТОС.
Надо бы, чтобы понятно было расписано, как использовать таймер, какие промежутки считать, как использовать и на пальцах. ))))))
Станислав
- prinv
- Вымогатель припоя
- Сообщения: 677
- Зарегистрирован: Чт янв 20, 2011 09:07:08
- Откуда: Пермь
- Контактная информация:
Re: Нескольно простых вопросов о программировании AVR на Си.
По Сеньке и шапка.
Если задача простая, то и в поллинге (while(IsReady()) ничего плохого нет.
Если задача простая, то и в поллинге (while(IsReady()) ничего плохого нет.
Никакая контра не уйдёт от нас


