1. В сообществе нашего форума Вконтакте создан раздел по продаже электронных компонентов.
    Каждый может продать в нем свои залежавшиеся детали. Подробности здесь.

Библиотеки для AVR

Тема в разделе "AVR", создана пользователем Buba_Chkhadze, 18 янв 2016.

  1. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.329
    Симпатии:
    352
    Адрес:
    Талгар
    Предлагаю скидывать сюда нужные библиотеки для контроллеров семейства AVR.
    Например , библиотеки энкодеров, LED дисплеев, LCD дисплеев, и т.д., для того чтобы не рыться лишний раз в сети, чтобы было под рукой как говорится, и начинающим полезно будет :)

    P.S. Надеюсь что тема нужная

    Библиотека для дисплеев Nokia 3310, 5110 - ATmega8
    Gcc, Cи

    Вложения:

    Последнее редактирование: 26 янв 2016
     
  2. Дмитрий BASIC

    Дмитрий BASIC В доску свой

    Сообщения:
    190
    Симпатии:
    101
    Уточнить хочу библиотеки на Си или на других языках тоже можно ?
  3. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.329
    Симпатии:
    352
    Адрес:
    Талгар
    Библиотека для дисплеев Nokia 1100 - ATmega8
    Gcc, Cи
    --- Сообщения объединены, 18 янв 2016 ---
    да можно любые выкладывать, помечать только - язык, компилятор :)

    Вложения:

    Последнее редактирование: 26 янв 2016
  4. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.329
    Симпатии:
    352
    Адрес:
    Талгар
    для koteika:
    Саня, у тебя библиотека для LED дисплея часового была, Cи, Gcc, кинь сюда пжлста :)
    Последнее редактирование: 26 янв 2016
  5. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.553
    Симпатии:
    352
    Адрес:
    Алматы
    Ребят, создайте GIT репозиторий и выкладывайте туда все библиотеки, а здесь просто ссылку киньте, так будет всем удобнее и, если кто-то хочет внести изменения он это сделает и все об этом узнают.
  6. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.329
    Симпатии:
    352
    Адрес:
    Талгар
    я им пользоваться не умею :)
  7. trengtor

    trengtor Guest

    Можно пользоваться программой-клиентом SourceTree
  8. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.329
    Симпатии:
    352
    Адрес:
    Талгар
    Последнее редактирование модератором: 1 июл 2017
  9. koteika

    koteika В доску свой

    Сообщения:
    769
    Симпатии:
    121
    Род занятий:
    программирование
    Библиотека для АЦП.

    PHP:
    #define CAN_MASK   ((1 << MUX2)|(1 << MUX1)|(1 << MUX0))

    # include "ADC_m8.h"
    # include <avr/io.h>

    // Инициализация АЦП ===========================================================
    void ADC_m8_init (unsigned char Prescalerunsigned char REF_){
      
    unsigned char PrRF;

      switch (
    Prescaler){
        case 
    2   Pr = (<< ADPS2)|(<< ADPS1)|(<< ADPS0); break; //  2
        
    case 4   Pr = (<< ADPS2)|(<< ADPS1)|(<< ADPS0); break; //  4
        
    case 8   Pr = (<< ADPS2)|(<< ADPS1)|(<< ADPS0); break; //  8
        
    case 16  Pr = (<< ADPS2)|(<< ADPS1)|(<< ADPS0); break; //  16
        
    case 32  Pr = (<< ADPS2)|(<< ADPS1)|(<< ADPS0); break; //  32
        
    case 64  Pr = (<< ADPS2)|(<< ADPS1)|(<< ADPS0); break; //  64
        
    case 128 Pr = (<< ADPS2)|(<< ADPS1)|(<< ADPS0); break; //  128
        
    default  : Pr = (<< ADPS2)|(<< ADPS1)|(<< ADPS0);        //  2
      
    }

      switch (
    REF_){
        case 
    VCC  RF = (<< REFS1)|(<< REFS0); break; // внешний ИОН
        
    case OPR  RF = (<< REFS1)|(<< REFS0); break; // внутренний ИОН
        
    default : RF = (<< REFS1)|(<< REFS0);          // внешний ИОН
      
    }

      
    ADCSR = (<< ADEN// Разрешаем АЦП
             
    |(<< ADFR// Непрерывный режим работы 
             
    |(Pr); // Предделитель

      
    ADMUX = (RF// ИОН
             
    |(<< ADLAR// Выравнивание вправо
             
    |(<< MUX3)|(<< MUX2)|(<< MUX1)|(<< MUX0); // вход АЦП ADC7
    }
    //==============================================================================

    // Выбор канала АЦП ============================================================
    void ADC_SetCan(char can)
    {
       
    ADMUX &= ~(CAN_MASK);
       
    ADMUX |= (can & (CAN_MASK));
    }
    // Считываем напряжение с канала ===============================================
    unsigned int ADC_Read (char can){
      
    ADC_SetCan(can);
      
    ADCSR |= (<< ADSC);    //Начинаем преобразование
      
    while ((ADCSR&(<< ADIF))== 0); //Ждем окончания преобразования
      
    return (ADCL ADCH << 8); // Выдаем значение
    }
    //==============================================================================

    PHP:
    #ifndef ADC_H
    #define ADC_H
    //------------------------------------------------------------------------------
    #define VCC 0 // вшешний ИОН
    #define OPR 3 // внутренний ИОН

    void ADC_m8_init (unsigned char Prescalerunsigned char REF_); // Иниц-я АЦП
    void ADC_SetCan(char can); // Выбор канала АЦП
    unsigned int ADC_Read (char can); // Считываем напряжение с канала
    //------------------------------------------------------------------------------
    #endif


    Библиотека энкодера от Антона http://blog.radiotech.kz/avr/upravlenie-inkrementalnym-enkoderom-na-avr/

    Библиотека энкодера от радиокотов:

    Настройка таймера
    PHP:
        TCCR1A 0x00;
        
    TCCR1B |= (1<<CS11);            // Тактировать с коэффициентом деления 8
        
    TCNT1H 0x00;                    // Обнуляем счетный регистр старший байт
        
    TCNT1L 0x00;                    // Обнуляем счетный регистр младший байт
      
        
    OCR1AH=0x03;                    // Настраиваем регистр сравнения старший байт
        
    OCR1AL=0xE8;                    // Настраиваем регистр сравнения младший байт

        // Разрешаем прерывание таймера по совпадению с OCR1A
        
    TIMSK |= (1<<OCIE1A);
    Обработка вращения в таймере
    PHP:
    ISR (TIMER1_COMPA_vect)
    {  
        static 
    char olddata=0;
        
    char data PIND;
        
    char res data^olddata;
        
    char data_n = (data>>1)&0x55;
        
    char data_i = (~(data<<1))&0xAA;
        
    olddata data_n data_i;
        
    res res ^ ((res>>1) & 0x55);
        
    //теперь в res содержится информация о факте вращения (2n - й бит) и направлении (2n+1 - й бит)
        
    if(! (res & (1<<0)) ){
          if( 
    res & (1<<1) )rotate1_left(); else rotate1_right();
        }else{
          
    //неправильные данные либо отсутствие вращения
        
    }
        if(! (
    res & (1<<2)) ){
          if( 
    res & (1<<3) )rotate2_left(); else rotate2_right();
        }else{
          
    //неправильные данные либо отсутствие вращения
        
    }
        if(! (
    res & (1<<4)) ){
          if( 
    res & (1<<5) )rotate3_left(); else rotate3_right();
        }else{
      
    //неправильные данные либо отсутствие вращения
        

             
        
    TCNT1H=0x00;
        
    TCNT1L=0x00;                    // Обнуляем счетчик
    }
    Обработка вращений вправо-влево, для 3х энкодеров
    PHP:
    void rotate1_left()
    {
        
    //тут нужный код
    }

    void rotate1_right()
    {
        
    //
    }

    void rotate2_left()
    {
      
    }

    void rotate2_right()
    {
       
    //
    }

    void rotate3_left()
    {
     
    }

    void rotate3_right()
    {
       
    //
    }
    }

    Библиотеки проверены на atmega8
    Последнее редактирование модератором: 1 июл 2017
    Buba_Chkhadze нравится это.
  10. koteika

    koteika В доску свой

    Сообщения:
    769
    Симпатии:
    121
    Род занятий:
    программирование
    Библиотека для 7 сегментного индикатора

    Вложения:

    Buba_Chkhadze нравится это.
  11. UL7AAjr

    UL7AAjr В доску свой

    Сообщения:
    1.848
    Симпатии:
    313
    Род занятий:
    инженер-программист
    Адрес:
    Алма-Ата
    С энкодером по опросу осторожнее. Там разница между спадающими фронтами может быть менее 10 мс. Опрашивать надо намного чаще.
    Правильно делать по прерываниям от спадающего фронта. Какое первое произошло - в ту сторону и крутят энкодер.
  12. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.329
    Симпатии:
    352
    Адрес:
    Талгар
    я еще не смотрел, позже код посмотрю
  13. _VN_

    _VN_ В доску свой

    Сообщения:
    488
    Симпатии:
    64
    Род занятий:
    Инженер
    Адрес:
    Алматы
    Библиотеки от Atmel

    Вложения:

    koteika нравится это.
  14. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.329
    Симпатии:
    352
    Адрес:
    Талгар
    koteika добавь в своих сообщениях язык на котором написано, и компилятор.
    например Gcc, Cи, если не затруднит.... чтобы всем понятно было :)
    Последнее редактирование: 26 янв 2016
  15. UL7AAjr

    UL7AAjr В доску свой

    Сообщения:
    1.848
    Симпатии:
    313
    Род занятий:
    инженер-программист
    Адрес:
    Алма-Ата
    Вы под АВР еще и на С шарпе пишите что-ли?
  16. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.329
    Симпатии:
    352
    Адрес:
    Талгар
    я может значок зря прилепил ? это просто Си
  17. .ctor

    .ctor В доску свой

    Сообщения:
    715
    Симпатии:
    202
    Род занятий:
    парогенератор
    Адрес:
    Алматы
    зря..)
  18. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.329
    Симпатии:
    352
    Адрес:
    Талгар
    ОК, исправил
  19. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.329
    Симпатии:
    352
    Адрес:
    Талгар
    хорошая библиотека - Спасибо :)
    koteika нравится это.
  20. Buba_Chkhadze

    Buba_Chkhadze Модератор Команда форума

    Сообщения:
    4.329
    Симпатии:
    352
    Адрес:
    Талгар
    библиотека работает на ATmega8 без проблем, а на ATmega328 слишком много ругательств от компилятора, даже с учетом правки настроек таймера

Поделиться этой страницей