Перейти к содержанию
    

Dars

Свой
  • Постов

    237
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Dars


  1. Ваши же замечания по поводу стабилизации объекта с помощью гироскопов и акселерометров вызывают улыбку. Когда начнёте разбираться с этим плотно, поймёте, в чём дело...

    Только не подумайте, что задача очень уж сложна. Вовсе нет...

     

     

    А можно по подробней?что для этого достаточно?и где про это все можно почитать?

     

    Прошу прощения, я не заметил, что "eb". На них цена действительно побольше. Только вот нафиг они нужны?

     

    Там бга корпус,мне его нечем и некуда паять)

  2. Делаю балансирующего робота(типа игрушка,для души, вроде этого должно получится http://www.geology.smu.edu/~dpa-www/robo/nbot/), встал вопрос о том как его удерживать на двух колесах. Посмотрел в интеренете, обычно делают с помощью гироскопа(большая погрешность со временем,быстрая скорость) + акселлерометр(маленькая скорость,маленькая погрешность).Типа гироскопом меряют угол отклонения,а потом его акселлерометром калибруют. Посмотрел у AD,adxl202eb(2000 руб) + adxrs300eb(3000 руб).Цены совсем не радуют((( может кто подскажет как еще можно подешевле решить проблему? хатит ли одного акселлерометра для стабилизации положения??

  3. В общем ситуация такая. Есть ИК пульт управления от Robosapien, там 21 кнопка. Мне надо управлять этим пультом с компа. Не могу понять можно микроконтроллером нажимать кнопки???Клавиатура похожа на матричную,но никаких резисторов и диодов нет!

  4. Dars, смахивает на шаманство. А физический смысл каков?

     

     

    Смысл чего? Кода? Если да, то смысл такой. Работая в четырехбитном режиме, чтобы записать 8 битную команду, надо сначала на (DB7...DB4), вывести старшие биты числа(Bit7...Bit4) а потом младшие(Bit3..0), короче по всем правилам два раза сделать запись. Для этого вызывается функция

    LCD_WRITE_BYTE . Первый раз она передает функции LCD_WRITE_NIBL принятое значение. LCD_WRITE_NIBL записывает старшие 4 бита числа, в старшие 4 бита порта(в общем DB7=Bit7 числа, DB6=Bit6 числа).

     

    char temp;

    temp=PORTC;

    temp |= (LCD_DATA & 0xF0);

    temp &= (LCD_DATA | 0x0F);

    LCD_PORT = temp;

     

     

    Вот это присваивает старшим 4 битам порта, значение старших 4 бит числа, не меняя младших.(если мы передали число

    0101 1101 то значение DB7=0,DB6=1,DB5=0,DB4=1.

     

    Второй раз вызывая функцию мы передаем ей значение __swap_nibbles(data_lcd) и она записывает в DB7..4 уже младшие 4 бита. Таким образом в LCD производится запись всего числа.

    Объяснил как смог.

  5. Ура!!! Замигал курсор, haker_fox & &-rey :a14: за помощь! Всего надо было строчку

     

    LCD_PORT |= (LCD_DATA & 0xF0);

     

    заменить на

     

    char temp;
    temp=PORTC;
    temp |= (LCD_DATA & 0xF0);
    temp &= (LCD_DATA | 0x0F);
    LCD_PORT = temp;

  6. Вот 100% рабочий исходник. Правда для IBM PC, среда Borland C++ 3.1, но сути дела это не меняет. Попробуйте приминить инициализацию дисплея из прикрепленного файла.

     

    Спасибо за исходник. Я понял в чем ошибка. У меня неправильная функция записи нибла в порт. Дело в том что у меня RS,RD,EN повешены на тот же прорт что и DB7,DB6,DB5,DB4.

     

     

    RS ------ bit 0 PORTC

    RD ------ bit 1 PORTC

    EN ------ bit 2 ...

    DB4 --- bit 4 ...

    DB5 --- bit 5 ...

    DB6 --- bit 6 ...

    DB7 --- bit 7 ...

     

    И я не понимаю как можно четырем старшим битам порта, присвоить значения четырех старших бит числа в виде 0xFF. Побитно тупо. Пока писал так LCD_PORT |= (LCD_DATA & 0xF0);, но это неправильно... :(

  7. Что-то все равно он не работает.... :(

    Может все таки кто ткнет на ошибку, экран вроде включается, но на команды не реагирует. Я указал режим с курсором а курсора тоже нет :(

     

    Вот функция инициализации:

     

    void LCD_INIT (void)                                                            
    {
    
      delay_ms(45);                                        //Задержка после включения питания
      LCD_WRITE_NIBL(0x30);                        //Три раза пишем команду 0x30
      delay_ms(4);
      delay_us(100);
      LCD_WRITE_NIBL(0x30);
      delay_us(100);
      LCD_WRITE_NIBL(0x30);
      delay_us(40);
      LCD_WRITE_NIBL(0x20);                         //Один раз 0x20
      delay_us(40);
      
      LCD_WRITE_BYTE(0x28);                         //Function Set
      
      LCD_WRITE_BYTE(0x0F);                         //Включаем экран и курсор
        delay_us(40);   
      
      LCD_WRITE_BYTE(0x01);                         //Очищаем экран
      delay_ms(1); 
      delay_us(500);
      
    LCD_WRITE_BYTE(0x06);       //ENTRY_MODE_SET
      delay_us(40);
    };
    
    
    void LCD_WRITE_BYTE (unsigned char LCD_DATA)                        
    {
    
    LCD_RW=0;
    LCD_WRITE_NIBL (LCD_DATA);
    LCD_WRITE_NIBL (__swap_nibbles (LCD_DATA));
       
    };
    
    void LCD_WRITE_NIBL (unsigned char LCD_DATA)
    {
    
      __disable_interrupt();
      
      LCD_E=1;
      delay_ns(20);
      LCD_PORT |= (LCD_DATA & 0xF0);
      delay_ns(230);
      LCD_E=0;
      delay_ns(250);
      
      __enable_interrupt();
    
    };

     

    DB7 повешен на PORTC7, DB6 на PORTC6, DB5 на PORTC5, DB4 на PORTC4.

  8. Судя по ссылке которую дал IgorKossak , стоит начать с электроники, без нее никуда! Всячески рекомендую (думаю многие со мной согласятся) книгу "Искусство Схемотехники" П.Хоровиц и У.Хилл , месяц интенсивного чтения, и все вопросы отпадут, независимо от начального уровня.

  9. А как может сказаться на работе, если кварц, резисторы, конденсаторы, в общем вся обвеска подключаемая к at91sam7s64, будет удалена от него примерно на 30 см ???Будет работать?Шиться?

    Думаю, что будет. В приложении фоты моей платы. Размер - 10 на 15 см. Все компоненты платы разбросаны, при этом всё хорошо прошивается, usb и com работают хорошо.

     

    Спасибо за фоты, думаю и у меня все прошьется. А что эта за микросхема в нижнем правом углу ?

  10. "мне главное чтоб по усб шилась..." У меня FT232 и по усб через нее 57600 бит\с шьет отлично!

    поял станцией(регулировка температуры), на жало проволку 1мм наматал и сплавом розе(температура плавления 80 С) под микроскопом (можно и просто увеличит стеко). Потом выпаивать удобно, промышленным феном нагрел и м\с отпадывает. с таким подходом и кристал и плата живые остаются.

    См. фотоjava script:emoticon(':biggrin:', 'smid_7').

    Насчет 2106 и 2148 не знаю не сталкивался. Но в первом вроде внешняя шина есть, а во втором USB смотри доки там описано все.

     

     

    От эта система :a14:

    Особенно FTDI. После увиденного, я думаю у меня точно все запустится :)

    P.S За фотки спасибо :)

  11. Дык что бы такое спаять чтоб через USB?

    Может взять схемку wiggler'a да какую-нить микруху-мост типа USB->LPT замастрячить? Будет работать?

     

     

    У меня такая же проблема, есть только усб. Мост USB->LPT сомневаюсь что заработает, это надо пробовать. 100% заработает переходник PCMCIA-LPT .

  12. Его еще сначала купить надо. МТ-Системс в Москве вообще по-моему не работают, на запросы не отвечают вообще, когда звонишь говорят отправляйте заявку, заявку на которую они потом не отвечают. Всякое желание исчезает что либо покупать у них.

  13. " Я видел только в чип и дипе на корпус QFP208, за 210 руб."

    они и есть на них можно микросхемы ставить от 40 до 208 ножек у меня она называется RADIO-MASTER.

    На счет кварца и кондеров - думаю не так критично, конечно на полной скорости могут возникнуть неприятности, но у меня пока нормально.

     

     

    А паяли чем? Станцией или паяльником? у меня паяльник ERSA + жало 0.5мм конусообразное, получится припаять? чет меня напрягает все-таки такое большое расстояние от корпуса до кварца и до фильтрующих конденсаторов, но надо попробовать, давно была мысль самопалку сделать, но боялся не запустится, а тут оказывается у народа работает :) мне главное чтоб по усб шилась...

  14. Хотя я бы, тебе посоветовал для начала: купить какойнибудь LPC2124 и плату

    перехадную QFP0.5 на 2.54мм

     

    А где такие в Москве например можно купить? Я видел только в чип и дипе на корпус QFP208, за 210 руб. А если такую плату использовать, ничего что всякие конденсаторы, да кварцы далековато от корпуса микросхемы стоять будут???

  15. В общем ситуация такая, всю жизнь сидел на CodeVision, а тут решил перейти на IAR. А там как оказалось нет библиотеки для ЖК, ну я взял и попытался написать простенькую прогу которая выводит букву А на экран ( 20 * 4 ), ну и нифига у меня не работает :(

     

    У кого есть библиотечка выложите пожалуйста :)

    Ну или ткините кто нибудь в ошибку (если вся программа не есть ошибка).

     

    #include <delay.h>
    #include <iom128.h>
    #include <intrinsics.h>
    
    void DB_SET_RESET (int DB7, int DB6, int DB5, int DB4);
    void LCD_PORT_INIT (void);
    void LCD_INIT (void);
    void LCD_PRINT (void);
    void LCD_CLEAR (void);
    
    int main( void )
    {
    
      delay_s(2);                                                                   //Пауза
      DDRB |= (1<<4);
      PORTB |= (1<<4);                                                              // Зажгли светодиод
      
      LCD_PORT_INIT();                                                              //Установили порт С на выход
      LCD_CLEAR();                                                                  //Очистка экрана
      LCD_PRINT();                                                                  //Выводим букву А                                                                
                                                                                  
      
      
      for(;;);
      return 0;
    }
    
    void DB_SET_RESET (int DB7, int DB6, int DB5, int DB4)
    {
      if (DB7)
        PORTC |= (1<<7);                                                            // DB7 = 1
      else
        PORTC &= 0x7F;                                                              // DB7 = 0
      
      if (DB6)
        PORTC |= (1<<6);                                                            // DB6 = 1
      else
        PORTC &= 0xBF;                                                              // DB6 = 0
          
      if (DB5)
        PORTC |= (1<<5);                                                            // DB5 = 1
      else
        PORTC &= 0xDF;                                                              // DB5 = 0
          
      if (DB4)
        PORTC |= (1<<4);                                                            // DB4 = 1
      else
        PORTC &= 0xEF;                                                              // DB4 = 0
    
    }
    
    void LCD_PORT_INIT (void)
    {
       /* Инициализация портов для LCD */
      DDRC |= (1<<0);                                                             //  RS
      DDRC |= (1<<1);                                                             //  RW
      DDRC |= (1<<2);                                                             //  EN
      DDRC |= (1<<4);                                                             //  DB4
      DDRC |= (1<<5);                                                             //  DB5
      DDRC |= (1<<6);                                                             //  DB6
      DDRC |= (1<<7);                                                             //  DB7
      
    }
    
    void LCD_INIT (void)
    {
      PORTC = 0x30;                                                                 // RS=0,R/W=0,E=0, DB7=0, DB6=0, DB5=1, DB4=1
      
      delay_ms(5);
      
      PORTC = 0x30;                                                                 // RS=0,R/W=0,E=0, DB7=0, DB6=0, DB5=1, DB4=1
      
      delay_us(100);
      
      PORTC = 0x30;                                                                  // RS=0,R/W=0,E=0, DB7=0, DB6=0, DB5=1, DB4=1
      
      delay_us(100);
      
      DB_SET_RESET(0,0,1,0);                                                        // Установка 4 битного режима DB7=0, DB6=0, DB5=1, DB4=0
      delay_ms(2);
      
      DB_SET_RESET(0,0,1,0);                                                        //Установка параметров DB7=0, DB6=0, DB5=1, DB4=0
      delay_ms(2);
      DB_SET_RESET(1,0,0,0);                                                         //DB7=1, DB6=0, DB5=0, DB4=0
      delay_ms(2);
      
      DB_SET_RESET(0,0,0,0);                                                         //Включение дисплея  DB7=0, DB6=0, DB5=0, DB4=0
      delay_ms(2);
      DB_SET_RESET(1,0,0,0);                                                         //DB7=1, DB6=0, DB5=0, DB4=0
      delay_ms(2);
      
      DB_SET_RESET(0,0,0,0);                                                         //Очистка дисплея DB7=0, DB6=0, DB5=0, DB4=0
      delay_ms(2);
      DB_SET_RESET(0,0,0,1);                                                         //DB7=0, DB6=0, DB5=, DB4=1
      delay_ms(2);
      
      DB_SET_RESET(0,0,0,0);                                                        //Установка режима ввода данных DB7=0,DB6=0,DB5=1,DB4=0
      delay_ms(2);
      DB_SET_RESET(0,1,1,0);                                                         //DB7=0, DB6=1, DB5=1, DB4=0
      delay_ms(2);
      
    }
    
    void LCD_PRINT (void)
    {
      
      /* Установка адреса 0 */
      
      PORTC &= 0xFE;                                                                //  RS = 0
      PORTC &= 0xFD;                                                                //  R/W = 0
      PORTC |= (1<<2);                                                              //  E = 1
      PORTC |= (1<<7);                                                              //  DB7 = 1
      
      DB_SET_RESET(1,0,0,0);
      PORTC &= 0xFB;                                                                //  E = 0
      delay_us(50);
      PORTC |= (1<<2);                                                              //  E = 1
      DB_SET_RESET(0,0,0,0);                                                        //  DB7=0, DB6 = 0, DB5 = 0, DB4 = 0
      PORTC &= 0xFB;                                                                //  E = 0
      delay_us(50);
      
      /* Вывод буквы A */
      
      PORTC |= (1<<0);                                                              //  RS = 1
      PORTC |= (1<<2);                                                              //  E = 1
      DB_SET_RESET(0,1,0,0);
      PORTC &= 0xFB;                                                                //  E = 0
      delay_us(40);
      PORTC |= (1<<2);                                                              //  E = 1
      DB_SET_RESET(0,0,0,1);
      PORTC &= 0xFB;                                                                //  E = 0
      delay_us(50);
    
    }
    
    void LCD_CLEAR(void)
    {
    PORTC &= 0xFE;                                                                //  RS = 0
    PORTC &= 0xFD;                                                                //  R/W = 0 
    PORTC |= (1<<2);                                                              //  E = 1
    
    DB_SET_RESET(0,0,0,0);
    PORTC &= 0xFB;                                                                //  E = 0
    delay_ms(2);
    
    PORTC |= (1<<2);                                                              //  E = 1
    DB_SET_RESET(0,0,0,1);
    PORTC &= 0xFB;                                                                //  E = 0
    
    delay_ms(2);
    }

  16. А у меня такой вопрос. Имеется опыт работы с авр, сейчас арм изучаю. Почитал тут про микроконтроллеры silicon laboratories, очень понравилась перефирия, да и производительность вроде ничего. Скажите пожалуйста стоит ли их применять в новых разработках?Или 51 ядро уже морально устаревшее? Стоит ли их изучать?

  17. "В понедельник я перешлю, что нужно написать там,

    где указал Уважаемый NML, чтоб генерировался BIN-файл"

     

    Буду ждать. А то я uCOS-II_V280 собрался ставить, да + моя нехилая программа точно >64k будет. Надо будет в аргуссофт позвонить, недовольство высказать, а то даже не предупреждают...

  18. был совместим с одним из этих, и как заставить IAR генерить разные файлы для Flash и Eeprom? Там громадный список, я не знаю какой нужно, а все перебирать - очень долго!

    Спасибо!

     

    В свойствах проекта - линкер - extra option - введите такое:

     

    -we133=i

    -Ointel-extended,(CODE)=%PROJ_NAME%.hex

    -Ointel-extended,(XDATA)=ee_%PROJ_NAME%.hex

     

    или то же самое - в .xcl файл... Но в свойствах, думаю, удобнее.

     

     

    TO nml

    Есть небольшая особенность - программатор AS2 от Аргуссофт не понимает стандарт "intel-extended"!!! Нужно ставить "intel-standard". , а для выходного файла EEPROM (XDATA) лучше указать расширение ".EEP" Тогда для AS2 не будет затруднений!

     

     

     

    Сейчас я использую as3m & мегу128, пишу простетскую программу, ставлю standart, в железе работает, extended программатор хавает, зашивает но ничего не работает. Это as3m виноват или я чего то упустил? Мне что теперь не судьба программы > 64k писать??????? :(

×
×
  • Создать...