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

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

Пн янв 15, 2018 15:12:02

5 секунд гуглится. К чему эти вопросы ? - https://yandex.ru/search/?lr=2&msid=151 ... %20c%2B%2B

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

Пн янв 15, 2018 15:12:32

Птичий язык. :evil: :facepalm:
Пойду читать.

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

Вт янв 16, 2018 06:56:51

СКАЗОЧНИК писал(а):Вот это я написал на СИ
Код:
#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)

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

Вт янв 16, 2018 07:14:50

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

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

Вт янв 16, 2018 13:39:17

Как все сложно то... ((((

Код:
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 байт) Скачиваний: 208
LCD_driver.c
(1013 байт) Скачиваний: 223

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

Вт янв 16, 2018 16:36:19

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

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

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

Что-то в таком порядке, с выбранным программатором как на снимке, ошибки лезут. Грешу на то, что либо программатор не правильный выбрал, либо IDE не настроил.

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

Ср янв 17, 2018 09:17:49

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

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

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

Что-то в таком порядке, с выбранным программатором как на снимке, ошибки лезут. Грешу на то, что либо программатор не правильный выбрал, либо IDE не настроил.

:facepalm: ft232 можно было и загуглить, тогда было бы понятно что это просто usbToUart конвертор. А если шьем через юарт (последовательный порт), то это что-то на подобии программатога Громова и дальше копать и копать информацию. Для прошивки без гемороя купите USBasp, цена которым пару баксов и есть почти в каждом радиомагазине. Последовательность зашития фьюзы-прошивка, в принципе, любая, если только фьюзы не блокируют залитие прошивки (например отключают исп интерфейс).

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

Вс янв 21, 2018 15:17:07

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

Ковыряю информацию, как перевернуть тетрады в байте местами?
В ассемблере есть одна команда, очень удобная, а в Си?

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

Вс янв 21, 2018 15:28:46

Код:
   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

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

Вс янв 21, 2018 15:38:27

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

Пытаюсь вычислить, что в записи 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");
   
      }

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

Вс янв 21, 2018 17:12:18

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

А вообще, откровенно говоря, при включенной оптимизации что использование этой команды (вызывающей соответствующую команду SWAP ассемблера avr), что простое #define swap(x) (((x & 0x0F) << 4) | ((x & 0xF0) >> 4)) генерируют один и тот же код с этим ассемблерным вызовом.

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

Вс янв 21, 2018 17:40:42

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

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

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

З.Ы. Простите, мне этот бред, но накалило до белого.

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

Вс янв 21, 2018 17:43:26

СКАЗОЧНИК писал(а):...

Это с непривычки. Привыкните. Если что-то работает не так, то по любому, что-то вы сделали не так. Перетерпите этот период.

Добавлено after 1 minute 46 seconds:
IAR.

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

Вс янв 21, 2018 17:52:22

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

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

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

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

Вс янв 21, 2018 18:04:39

chipenable.ru Там был пример подключение дисплея на произвольные пины мк. Лично я всегда вешал на один порт. В крайнем случае, данные на одном порту, управление на другом.

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

Вс янв 21, 2018 18:28:45

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

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

Пн янв 22, 2018 06:47:02

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

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

З.Ы. И жалко, что я уже удалил свою писанную библиотеку совсем... Может тоже заработала бы. ((((

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

Пн янв 22, 2018 11:04:33

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

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

З.Ы. И жалко, что я уже удалил свою писанную библиотеку совсем... Может тоже заработала бы. ((((

:facepalm: само собой! К хидерам или в свойствах проекта прописываем пути, или инклюдим с прописанием пути. Сишные файлы в дерево добавляем. Некоторые умудряются сишные файлы через директиву инклюд подключать, но это по молодости опыта, потом проходит.
Не люблю я эти Ваши библиотеки с сайтиков. Даже фирменные авровские аппноты иногда говеные. Очень часто встречаются любители всунуть в код нечто вида while(isRedy()); Т-е заставляют ядро втыкать до готовности периферии (юарт, айтуси, и т.д.)
Код должен быть построен через системный таймер - запулили процедуру, она проверила состояния, переключила регистры,. приготовила буферы и т.д. и возврат. А периферия сама по прерыванию молотит. На следующем тике таймера - снова проверка состояния.
Например, когда в программе надо общаться с 4мя ацп по спи, делать математику с плавающей запятой, пулить модбас и еще и в другой юарт лог писать - ждать некогда.

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

Пн янв 22, 2018 11:27:42

Кто бы еще толково описал подобное построение программ с помощью таймеров.
А то я тут читал у Ди-Халта про это, но там одно по одному и путано, в итоге он как-то сразу переходит на диспетчер задач и РТОС.
Надо бы, чтобы понятно было расписано, как использовать таймер, какие промежутки считать, как использовать и на пальцах. ))))))

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

Пн янв 22, 2018 11:51:49

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