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

ДЕЙЛ

Свой
  • Постов

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

  • Посещение

  • Победитель дней

    5

Сообщения, опубликованные ДЕЙЛ


  1. Не приведет ли к сбоям схема где выход одного PLL поступает на вход другого? Ведь джиттер первого по идее воздействует на петлю обратной связи второго.

    А то я хочу затактировать процессор с генератора имеющего внутри PLL. В процессоре тоже тактовая частота формируется через свой PLL.

    Почему бы обычный буфер не поставить, если есть сомнения? Процессору без разницы, как формируется сигнал до его входа :)

  2. Ну вот же -

             if (RXBUF[i]<>$A) and (RXBUF[i]<>$D) then

    По тексту программы видно, что пока она не примет символ конца строки или перевода каретки (CR или LF) она ничего никуда не выводит, а тихо и молча накапливает принятые символы в RxData

     

    А модуль после приглашения '>' никаких CR/LF не добавляет (в отличие от остальных команд)

    Есть такое дело, неподумавши накодил :rolleyes:

    Подправил свою программу ещё в некоторых местах и добавил функцию сниффера(для него ещё нужно железо).

    SIM900_DIALOG.rar

  3. Тогда показывайте текст программы (ту часть, что читает данные с модуля)

    Вкратце вот так:

    procedure TForm1.RxTimerTimer(Sender: TObject);
    var
         Errors : Dword;
    LenReceive : DWord;
              i : integer;
    RxData, Log, NumStr : string;
    
    begin
    RxData := '';
    ClearCommError(hCom, Errors ,@Stat);//?????????? ????
    LenReceive := Stat.cbInQue;
    If LenReceive>0 Then
       Begin  {1}
         ReadFile(hCom,RXBUF,LenReceive,LenReceive,nil);
         For i:=0 to LenReceive-1 Do
           Begin
             if (RXBUF[i]<>$A) and (RXBUF[i]<>$D) then
               begin
                RxData := RxData + Chr(RXBUF[i]);
               end
             else
               begin
                   ListBox1.Items.Strings[ListBox1.ItemIndex] :='       '+RxData;
                   RxData := '';
                   ListBox1.TopIndex := ListBox1.Items.Count - 1;
               end;
    
           End;
       End; {1}
    
    end;

    Данные он отправляет без приглашения, смски тоже. В прикреплённом файле только что дописанная программа для работы с SIM900. В инете не нашёл, поэтому сам сочинил. До этого ковырялся в программе от другова модуля.

    SIM900_DIALOG.rar

  4. а ножка RTS в каком состоянии ? Включено ли управление Flow Control ?

    Я использую только TX-RX, остальные ножки не трогаю. Это принципиально для работы с TCP/IP?

     

    А как вы получаете лог? Может оно буферизует символы (до символа конца строки)?

    скопировал как текст из окна программы

  5. //перезапуск
    AT+CFUN=1,1 
    yyyy
    
    //проверка регистрации в сети
    Send: AT+CREG?<cr><lf>	   
    AT+CREG?
    
    +CREG: 1,1				 
    
    OK
    
    //проверка GPRS
    Send: AT+CGATT?<cr><lf>	
    AT+CGATT?
    
    +CGATT: 1
    
    OK
    
    //закрытие всех соединений
    Send: AT+CIPSHUT<cr><lf>  
    AT+CIPSHUT
    
    SHUT OK
    
    //проверка инициализации модуля IP
    Send: AT+CIPSTATUS<cr><lf>  
    AT+CIPSTATUS
    
    OK
    
    STATE: IP INITIAL
    
    //устанавливаем только одно соединение
    Send: AT+CIPMUX=0<cr><lf>  
    AT+CIPMUX=0
    
    OK
    
    //настройки GPRS
    Send: AT+CSTT="internet.mts.ru","mts","mts"<cr><lf> 
    AT+CSTT="internet.mts.ru","mts","mts"
    
    OK
    
    //соединяемся с заданными настройками 
    Send: AT+CIICR<cr><lf> 
    AT+CIICR
    
    OK
    
    //смотрим свой IP
    Send: AT+CIFSR<cr><lf> 
    AT+CIFSR
    
    10.49.180.250
    
    //включаем TCP-соединение
    Send: AT+CIPSTART="TCP","yandex.ru",80<cr><lf>  
    AT+CIPSTART="TCP","yandex.ru",80
    
    OK
    
    CONNECT OK
    
    //после этой команды должно появиться приглашение для записи отправляемых данных
    Send: AT+CIPSEND<cr><lf> 
    AT+CIPSEND

     

    и в этом месте всё виснет, никаких признаков жизни

  6. делаю по шагам, как написано вот тут http://badembed.ru/sim900-tcp-soedinenie-s-serverom/

     

    Дохожу вот до этой строки

    -> AT+CIPSEND — запрос на посылку сообщения серверу

     

    <- > — в ответе символ готовности, после его получения можно вводить данные, которые надо передать

     

    Символ готовности никак не хочет появляться даже посли 20минутного ожидания.

  7. Как то так:

    AT+CIPSTART="TCP","ya.ru",80
    GET /index.html HTTP/1.1

    (Не забудьте про пустую строку в конце! Ее форум съел, а без нее работать не будет :) )

    Что за пустая строка в конце? Можно скрин, если форум съедает?

     

    http://badembed.ru/sim900-tcp-soedinenie-s-serverom/

    -> AT+CIPSEND — запрос на посылку сообщения серверу

     

    <- > — в ответе символ готовности, после его получения можно вводить данные, которые надо передать

     

    -> data — данные которые необходимо передать. После ввода данных необходимо указать модему, что сообщение окончено и его надо передавать серверу — для этого передают следующую команду

     

    -> 26 — команда конца сообщения (0x1A) после нее модем передает серверу данные data

     

    -< SEND OK

     

    -> AT+CIPCLOSE — закрытие соединения с сервером или можно вызвать AT+CIPSHUT

    Правильно я понимаю, что команды серверу нужно формировать и отправлять в виде данных data?

    Или для этого нужны какие-то AT-команды?

  8. Обычно можно сразу давать команду AT+CIPSTART, которая и установит соединение.

    Допустим, что соединение установилось с каким-то сервером. Дальше я хочу записать данные в конкретный файл на удалённом сервере. Какими командами нужно пользоваться? Где их найти?

     

     

    Как будет выглядеть AT-команда для запроса страницы yandex.ru? Т.е. в ответ на эту команду должен прийти текст вроде этого:

     

    <!DOCTYPE html>

    <html class="i-ua_js_yes i-ua_css_standart i-ua_browser_firefox i-ua_pseudo_yes js m-border-radius i-ua_inlinesvg_yes m-svg i-ua_animation_yes" lang="ru"><head xmlns:og="http://ogp.me/ns#"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>Яндекс</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="apple-touch-icon" href="http://yastatic.net/morda-logo/i/apple-touch-icon/ru-76x76.png" sizes="76x76"><link rel="apple-touch-icon" href="http://yastatic.net/morda-logo/i/apple-touch-icon/ru-120x120.png" sizes="120x120"><link rel="apple-touch-icon" href="http://yastatic.net/morda-logo/i/apple-touch-icon/ru-152x152.png" sizes="152x152"><link rel="apple-touch-icon" href="http://yastatic.net/morda-logo/i/apple-touch-icon/ru-180x180.png" sizes="180x180"><link rel="alternate" type="application/rss+xml" title="Новости Яндекса" href="http://company.yandex.ru/news/news.rss"><link rel="alternate" type="application/rss+xml" title="Блог Яндекса" href="http://company.yandex.ru/blog/index.rss"><link rel="search" href="http://yandex.ru/opensearch.xml" title="Яндекс" type="application/opensearchdescription+xml"><link rel="shortcut icon" href="http://yastatic.net/morda-logo/i/favicon_islands.ico"><meta property="og:title" content="Яндекс"><meta property="og:type" content="website"><meta property="og:image" content="//yastatic.net/morda-logo/i/share-logo-ru.png"><meta

    .....................

    .....................

     

    ></div><i class="b-counter" style="background: url(//www.tns-counter.ru/V13a**5cd4d635da5c3fdb9cf9f5a4e2b6e7da**yandex_ru/ru/CP1251/tmsec=yandex_main/0);"></i><div style="display:none" class="page-info">{"static":"2.264","skins":"1.79"}</div><!--s54.wfront.yandex.net--><div style="height:0;overflow:hidden;"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="fco" height="1" width="1"><param name="movie" value="//yastatic.net/browser-cookie/flash-cookie.swf"><param name="allowScriptAccess" value="Always"><embed src="%D0%AF%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_files/flash-cookie.swf" allowscriptaccess="Always" id="fce" height="1" width="1"></object></div><object style="position:absolute;left:-500px;top:0;visibility:hidden" data="%D0%AF%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_files/_search.js"></object><object style="position:absolute;left:-500px;top:0;visibility:hidden" data="%D0%AF%D0%BD%D0%B4%D0%B5%D0%BA%D1%81_files/jquery.js"></object></body></html>

  9. Тут желательно по частям схему промоделировать и найти источник колебаний. Частота 100 кГц может говорить о наличии задержки сигнала в какой-то цепи, в данном случае операционник в обратной связи надо получше изучить или заменить на другой, если частота колебаний изменится, то вывод однозначный - генерация обусловлена частотной характеристикой операционника, на какой-то частоте фаза сдвигается на 180 градусов, имеем положительную обратную связь и генератор в итоге. Попробуй на вход подать синусоиду или плавно изменяющийся сигнал, чтобы не возбудился паразитный генератор.

     

    В одной из своих схем я убрал такие колебания установкой конденсатора на вход одного из операционников генератора.

  10. Опять вернулся к этой теме. Почитал Агурова и описание модуля. В моём представлении вырисовывается такая картина:

    1. Подключаем разъём к ноуту, хост видит, что резистор притянул линию и отсылает запрос;

    2. Устройство принимает байты запроса в буфер нулевой конечной точки, смотрит эти байты и формирует массив данных, которые хостом воспринимаются как дескриптор устройства;

    3. На основании данных дескриптора хост отправляет более конкретную команду устройству и т.д. до окончания инициализации соединения.

    Мои соображения похожи на правду?

  11. Появилось предположение, что дело в разряде статичекого напряжения. Двигатель пластмассовый? На ковре висит? Электризованную пыль гоняет? Попробуй движок другого типа или из электропроводных частей.

  12. Моя версия-

    запитывал двумя лучами питания разными МК и +12 мотора. Проблема была той же. Общая у них земля была. Так вот то, что сейчас видим, это скорее всего прыгающая земля. От туда и пики наверх, когда она сильно ниже становится.

    А вот как бороть?

    Точно по земле помеха? Почему бы для эксперимента полностью не развязать гальванически МК и двигатель? Т.е. два независимых источника питания и связь только через оптопару. Ещё я посмотрел бы осциллографом шум на самой земле, т.е. между точками подключения минуса МК и минуса двигателя. Для чистоты осциллограф запитал бы от бесперебойника или от встроенного аккумулятора, если в нём такой имеется.

     

     

    Ну не может земля прыгать. Не может моторчик 50-100мА давать такие эффекты. Выкладывайте полную схему - от розетки и до моторчика.

    Лучше самому осциллографом ток померить в цепи и убедиться, что двигатель не шумит. Можно попробовать другой поставить и все остальные элементы методом замены перепробовать, чтобы быть уверенным в их нормальной работоспособности и при необходимости продолжать искать неисправность в разведке земель. Дальше следует вчитываться в методы обеспечения помехоустойчивости микроконтроллеров, в частности обратить внимание на разводку дорожек под кварцем, если частоты порядка десятков мегагерц.

  13. если уровень напряжения выше 11.5, то питание подается на устройство, если уровень падает ниже 10.5, то прекращается подача питания до тех пор, пока оно вновь не станет выше 11.5В .

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

    post-79085-1424725989_thumb.jpg

  14. Вот картинка из Агурова. Правильно я понимаю, что байты команд хоста во время инициализации можно увидеть в буфере нулевой конечной точки? Или они невидимы для программиста со стороны контроллера?

    post-79085-1424335558_thumb.jpg

  15. И не забудьте к циклам выполнения инструкции ядром добавить циклы доступа к носителю информации, на котором расположена выполняемая программа и данные, с которыми она работает. Например, если это внешняя SDRAM или Flash-память, то задержки могут быть довольно существенными, особенно при переходах на другие страницы SDRAM.

    В связи с этим знание количества циклов выполнения собственно ядром ничего не решает и нужно разве что из спортивного любопытства.

    Как-то измерял количество тактов для выполнения функции арктангенса и для вывода на дисплей. Считать слишком муторно было, поэтому пользовался обычным таймером с частотой тактирования 1:1. Перед функцикцией запускал, а после завершения сразу останавливал. В регистре счётчика таймера было количество тактов. Это если точность большая не нужна(+\- 10 тактов). Для бОльшей точности можно в пошаговом режиме отладки смотреть на счётчик циклов, а если в железе проверяется, то точками останова можно попользоваться.

     

  16. Выбираю ISP программатор для LPC1788. По-сути, как я понял, это просто преобразователь USB-UART с выведенными сигналами DTR И RTS.

     

    Стоит ли на это обращать внимание, если я хочу шить LPC1788 через Flash Magic?

    у меня LPC1778, прошиваю через JTAG, Flash Magic и самопальным способом. Вот вырезал кусок схемы, через которую Flash Magic работает. Думаю, что лишней не будет и придёшь к выводу, что проще самому спаялить, чем покупать.

    post-79085-1424333968_thumb.jpg

  17. Оставлю тут свой код загрузчика на всякий случай, а то на домашнем компе ненадёжно. Программа принимает файл от прикреплённой программы, написанной на DELPHI. Успеть отправить надо в течение минуты после сброса.

     

    #include "iolpc1778.h"
    #include "LPC17xx.h"
    
    #define IAP_LOCATION 0x1fff1ff1 //точка входа в IAP (страница 896 мануала)  
    unsigned int command[5];
    unsigned int result[2];
    typedef void (*IAP)(unsigned int[], unsigned int[]);  
    
    
    unsigned char DATA[30000];
    unsigned int command[5];
    unsigned int result[2];
    unsigned char RX;
    unsigned int index_RX;
    unsigned char RX_PAKET[18];
    unsigned char CHSUM, FlagRX;
    unsigned int indexM, pauza, i;
    unsigned int adr_copy, stek;
    unsigned int *adres_stek;
    unsigned char OutPortByte;
    int sektor;
    
    void Out_UART0(); //otpravka paketa po UART0
    
    
    void main(void)
    {  
       { //INIT 
    
       { //init UART0  
    IOCON_P1_25 = 0; //PIO
    FIO1DIR     = 0x2200000; //Выходы PIN1_25, PIN1_11
    PCONP      |= 0x8;
    IOCON_P0_02 = 0x1;
    IOCON_P0_03 = 0x1;
       }
    
    
    FIO0DIR     = 0x4+0x8;
    
    
    SCS        |= 0x20; //подключение осциллятора
    while(!(SCS&0x40)){} //ожидание запуска
    
    PLL0CON |= 0x01;
    PLL0CFG |= 0x09;
    PLL0FEED = 0xAA;   
    PLL0FEED = 0x55;    
    CCLKSEL |= 0x100;
    
    
    PCLKSEL    = 1;
    CLKSRCSEL |= 1;
    U0LCR     |= 0x83;   //razrecchenie dostupa k delitely
    U0DLL      = 0xC8;   //0xF0;//0xA0; //0x14;  //0x4E;  //nastrojka delitelya
    U0LCR     &=~0x80;   //zapret dostupa k delitely
    U0IER     |= 0x1+0x4;//Разрешение прерываний UART0
    
    //__enable_irq();              //Разрешение 
    //__set_FAULTMASK(0);            //всех прерываний
    //__set_BASEPRI(0);              //Отключение маскирования
    //__set_CONTROL(0);
    
    AIRCR = 0x05FA0200;
    IP1   = 0x00000800;
    } 
      NVIC_EnableIRQ(UART0_IRQn);    //Enable IRQ UART0 (ISER0=32)
      indexM = 0;
      index_RX = 1;
      
    
    while(1)
    {
        
      
      if (index_RX>5)
      { 
       if ((DATA[index_RX-1]==0x11)&(DATA[index_RX-2]==0x22)&(DATA[index_RX-3]==0x33)&(DATA[index_RX-4]==0x44)) самопальный признак конца файла HEX
      {  
        FlagRX = 0;
       
    
    //COPY_FLASH
          
    adr_copy = (unsigned int)&DATA[4096];
    IAP iap_entry;
    iap_entry = (IAP) IAP_LOCATION;
    
    
    for (sektor=1; sektor<5; sektor++)
    {
    //_______ПОДГОТОВИТЬ СЕКТОР К ЗАПИСИ_______//
    {
    
    command[0] = 50; //код команды
    command[1] = sektor;  //начальный номер сектора
    command[2] = sektor;  //конечный номер сектора
    
    iap_entry (command, result); 
    }
    //_______ПОДГОТОВИЛИ СЕКТОР К ЗАПИСИ______// 
    
    
    
    
    //_______СТЕРЕТЬ СЕКТОР_______//
    {
    
    command[0] = 52;     //код команды
    command[1] = sektor;      //начальный номер сектора
    command[2] = sektor;      //конечный номер сектора
    command[3] = 120000; //системная тактовая частота в кГц
    
    iap_entry (command, result); 
    }
    //_______СТЁРЛИ СЕКТОР______// 
    
    //_______ПОДГОТОВИТЬ СЕКТОР К ЗАПИСИ_______//
    {
    
    command[0] = 50; //код команды
    command[1] = sektor;  //начальный номер сектора
    command[2] = sektor;  //конечный номер сектора
    
    iap_entry (command, result); 
    }
    //_______ПОДГОТОВИЛИ СЕКТОР К ЗАПИСИ______// 
    
    
    
    
    //_______КОПИРОВАТЬ ОПЕРАТИВНУЮ ПАМЯТЬ ВО ФЛЕШ_______//
    {
    
    command[0] = 51;         //код команды
    command[1] = 0x1000*sektor;     //начальный адрес перезаписываемой флеш
    command[2] = adr_copy+4096*(sektor-1); //начальный адрес оперативной памяти, откуда нужно копировать 
    command[3] = 4096;        //число байт для копирования
    command[4] = 120000;     //системная тактовая частота в кГц
      
    iap_entry (command, result); 
    
    }
    //_______СКОПИРОВАЛИ СЕКТОР______// 
          
    
    
    
    
    //END_FLASH 
    }
    
    VTOR = 0x1000;
    adres_stek = (unsigned int*)0x1000;
    stek = (unsigned int)*adres_stek;
    __set_MSP(stek);
    
    asm("mov R1, #0x1004");
    asm("ldr R2, [R1]");
    asm("BX R2");
    
    
        
      }
      }  
    }
    
    }
    
    
    
    
    
    void Out_UART0()
    {
    while (!(U0LSR&0x20)); 
    U0THR=0xA0;                  //признак ответа  для программы на ПК
    }
    
    void UART0_IRQHandler(void)
    
    {
      DATA[index_RX] = U0RBR;
      index_RX++; 
      NVIC_ClearPendingIRQ(UART0_IRQn);
      return;
    }

    __________.rar

  18. Скачал Creator, поставил. Открыл им скачанный пример пректа Hello World. Могу редактировать исходник, но непонятно как его запустить. Неактивна кнопка запуска.

    Вот к сообщению прилепил самый первый пример проекта. В какой программе и какую последовательность действий нужно сделать с этим примером, чтобы появилось то самое окно с надписью?

    Hello.rar

  19. Не. Ну это уже слишком. В книжке по Microsoft Visual Studio тоже нет описания, как надо кликнуть на кнопку "Пуск", чтобы ее запустить.

    Согласен, но всё равно никак не нахожу редактор кода. Его вижу только через Форма->Показать код... , но там ничего менять нельзя и никакой подсветки синтаксиса.

  20. Во-первых, в QtCreator'e есть замечательная Справка. Для начала вам справки хватит выше крыши. Что касается чтива, то талмуд Шлее, имхо, лучший вариант.

    Вот открыл Шлее - в самом начале пример Hello World и ни слова о том, как открыть этот самый редактор для печатания примера. Версия 4.8.4

     

    Во-первых, в QtCreator'e есть замечательная Справка.

    А где искать QtCreator?

    В папке с программой его нет.

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