Thông báo

Collapse
No announcement yet.

Thảo luận về ARM LPC 2138/2148

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • em moi tim hieu nen chag ranh VDK lam.gio em mun ket noi ARM2103 voi PC de truyen thong UART thi co can phai qua MAX232 j do ko? hay la cu ket noi thag.Em doc qua datasheet no keu: P0.0(TXD0),P0.1(RXD0). vay la mih ket noi:
    +TXD0-> Rx
    +RXD0->Tx cua COM port ha may pac? Em so ket noi nham no ma chit la em cug die wa.

    Comment


    • loay hoay cả ngày mà hok xong được UART các pác ơi.em đọc dữ liệu về bằng chương trình Terminal ma toàn ra cái j đâu ko a? mấy các jups em cái.đ
      code em nhờ các pác coi giuèm:
      /************************************************** **/
      /* Examples Program For "CP-JR ARM7 LPC2138" Board */
      /* Target MCU : Philips ARM7-LPC2138 */
      /* : X-TAL : 19.6608 MHz */
      /* : Run Speed 58.9824 MHz (With PLL) */
      /* : PLL Setup = M(3),P(2) */
      /* : VPB Clock = CPU Clock = 58.9824MHz */
      /* Keil Editor : uVision3 V3.03a */
      /* Compiler : Keil CARM V2.50a */
      /* Create By : Eakachai Makarn (WWW.ETT.CO.TH) */
      /* Last Update : 17/May/2006 */
      /* Function : Example Use UART0 */
      /************************************************** **/
      // Print Message to UART0 (9600,N,8,1)
      #include "LPC2103.H" // LPC2138 MPU Register
      /* pototype section */
      void init_serial0 (void); // Initil UART-0 // Get Char From Uart-0

      int main(void)
      {
      char c[] = "HELLO";
      int i = 0; // Char Buffer For UART
      init_serial0(); // Initilial UART0 = 9600,N,8,1
      while(1) // Loop Continue
      {
      U0THR = c[i];
      // phat cho toi khi gap null chacracter
      if( c[i] == '\n')
      {
      while (!(U0LSR & 0x20));
      U0THR = 0x0D;
      }
      while (!(U0LSR & 0x20)); // wait TXD buffer empty
      i++;
      }
      }

      /******************************/
      /* Initial UART0 = 9600,N,8,1 */
      /* VPB(pclk) = 58.9824 MHz/2 */
      /******************************/
      void init_serial0 (void)
      {
      PINSEL0 &= 0xFFFFFFF0; // Reset P0.0,P0.1 Pin Config
      PINSEL0 |= 0x00000001; // Select P0.0 = TxD(UART0)
      PINSEL0 |= 0x00000004; // Select P0.1 = RxD(UART0)

      U0LCR &= 0xFC; // Reset Word Select(1:0)
      U0LCR |= 0x03; // Data Bit = 8 Bit
      U0LCR &= 0xFB; // Stop Bit = 1 Bit
      U0LCR &= 0xF7; // Parity = Disable
      U0LCR &= 0xBF; // Disable Break Control
      U0LCR |= 0x80; // Enable Programming of Divisor Latches

      // U0DLM:U0DLL = 29.4912MHz / [16 x Baud]
      // = 29.4912MHz / [16 x 9600]
      // = 192 = 0x00C0
      U0DLM = 0x00; // Program Divisor Latch(192) for 9600 Baud
      U0DLL = 0xC0;

      U0LCR &= 0x7F; // Disable Programming of Divisor Latches

      U0FCR |= 0x01; // FIF0 Enable
      U0FCR |= 0x02; // RX FIFO Reset
      U0FCR |= 0x04; // TX FIFO Reset
      U0FCR &= 0x3F;
      }

      Comment


      • Delay chính xác dùng timer

        Mình dùng con lcp2103. Mình cần dùng timer để tạo delay chính xác. Bác biết về vụ này giúp mình tí.
        Đây là chương trình con tạo delay mình viết:
        Code:
        void delay_timer0 (U32 us)
        {
        	TIMER0_CTCR	= 0x00000000;    // TIMER0 = CHE DO TIMER
        	TIMER0_MR0	= us;		        // thoi gian delay = (1 us) * MR0
        	TIMER0_MCR	= 0x00000004;	// TAT timer0 sau khi match
        	TIMER0_PR	= 0x0000000E;		// CLOCK CUA TIMER0 = PCLK/(PR +1) = 15MHz/(14 + 1) = 1Mhz
        	TIMER0_TCR	= 0x00000002;	// RESET TIMER0
        	TIMER0_TCR	= 0x00000001;	// CHAY TIMER0
        	while ( (TIMER0_TCR & 0x01) == 0x01 );	// DOI TIMER0 MATCH
        }
        Có phải thời gian delay của CT con này là: t = (1us) * us (biến cần nhập vào) ko vậy? Sao mà mình để us = 1.000.000 thì delay nhiều hơn 1 giây.

        Comment


        • Lpc2148 <===> usb

          Có bác nào đã có kinh nghiệm về giao tiếp arm với usb xin chỉ giáo.

          Comment


          • Nguyên văn bởi hongtam Xem bài viết
            Mình dùng con lcp2103. Mình cần dùng timer để tạo delay chính xác. Bác biết về vụ này giúp mình tí.
            Đây là chương trình con tạo delay mình viết:
            Code:
            void delay_timer0 (U32 us)
            {
            	TIMER0_CTCR	= 0x00000000;    // TIMER0 = CHE DO TIMER
            	TIMER0_MR0	= us;		        // thoi gian delay = (1 us) * MR0
            	TIMER0_MCR	= 0x00000004;	// TAT timer0 sau khi match
            	TIMER0_PR	= 0x0000000E;		// CLOCK CUA TIMER0 = PCLK/(PR +1) = 15MHz/(14 + 1) = 1Mhz
            	TIMER0_TCR	= 0x00000002;	// RESET TIMER0
            	TIMER0_TCR	= 0x00000001;	// CHAY TIMER0
            	while ( (TIMER0_TCR & 0x01) == 0x01 );	// DOI TIMER0 MATCH
            }
            Có phải thời gian delay của CT con này là: t = (1us) * us (biến cần nhập vào) ko vậy? Sao mà mình để us = 1.000.000 thì delay nhiều hơn 1 giây.
            1.truoc het; bạn phai xem minh su dung thach anh nao 11.059 ; 19.6608 hay 12 MHZ
            2.sau do; xem lai start up : VPCLK bang bao nhieu (VPDIV =1 ;2;4) để xem có đúng không!Truong hop cua ban o tren minh đoán thach anh la 12 M va vpdiv=4 he so nhan la 5.
            3.Di nhien là se khong đugn chính xác vi con fai thuc hien cac lenh trong ham nua;

            Comment


            • Theo tối hầu như dòng arm hỗ trợ RTC với thạch anh ngoại 32kHz, nếu chưa dùng đến thì bạn có thể sử dụng RTC để viết chương trình delay luôn. Cách này tôi từng thử trên AVR, bạn thử tính toán cho phép RTC và đọc giá trị từ thanh CCR.

              Comment


              • http://www.mediafire.com/?sharekey=8...33b7a13f642d19
                Trên là toàn bộ code sample + use manual + hướng dẫn sử dụng keil arm do mình làm các mọi người tham khảo và cho ý kiến nha!
                Name: Nguyen Van Hai
                GMail:
                Faculty of Electrical - Electronics Engineering
                University of Technology VIETNAM NATIONAL UNIVERSITY
                Cellphone: (84) 91-5797-222

                Comment


                • mình cũng đang tìm hiểu về con LPC2468 thiết kế bộ loc fir. Bác nào biết thì hướng dẫn cho mình nha, mình đang bí. Thank

                  Comment


                  • Nguyên văn bởi phanngocvu Xem bài viết
                    mình cũng đang tìm hiểu về con LPC2468 thiết kế bộ loc fir. Bác nào biết thì hướng dẫn cho mình nha, mình đang bí. Thank
                    dễ thôi bạn vào matlab trong command window gõ sptool ->enter rồi tạo bộ lọc mới!
                    bạn chọng thông số của bộ lọc như fs ; fc ; stop band, pass band; bậc của bộ lọc (order). bấm OK. RỒI trong cữa sổ tạo NEW filter ( ban đầu) vào file-> GENERATTE to workspace. Rồi trong sau đó trong workspace kiểm tra các thông NUM, DEN cop vô file C và lập trình. Ví dụ minh lập trình như sau trong C ( IIR butterworth filter)
                    chép NUM va DEN từ matlab
                    #define num0_50Hz 0.4399008//0.239057 //0.24524
                    #define num1_50Hz 0.4399008//0.239057 //0.24523
                    #define den0_50Hz 1
                    #define den1_50Hz 0.1201983//0.521886 //0.50952
                    void Sample_Filter_20Hz(void)//butterworth digital filter
                    {
                    float temp_val;

                    //-------AccX filter----------------
                    //in data
                    temp_ax[1]=temp_ax[0];
                    temp_ax[0]=(float)read_adc1(Acc_X)-Bias_Ax;//new data
                    //out data
                    buff_ax[1]=buff_ax[0];
                    buff_ax[0]= (num0_20Hz*temp_ax[0]+num1_20Hz*temp_ax[1]+den1_20Hz*buff_ax[1])/den0_50Hz;
                    AccX=buff_ax[0];//outdata

                    }

                    Comment


                    • cho em hỏi về L3 interface cho CODEC UDA 1344,LPC2468

                      Chào các anh,hiện em đang làm luận văn về mã hóa thoại ,sử dụng kit ARM.
                      EM đang bị kẹt ở chỗ:lập trình giao diện l3 giao tiếp với CODEC UDA1344.Các b biết
                      xin chỉ dùm em(em bị kẹt ở chỗ này nửa thang nay).
                      mong sự giúp đỡ

                      Comment


                      • em đọc qua datasheet phần PWM của LPC2103 mà phức tạp quá.có cao thủ nào thử pót mấy chương trình mẫu cho em để em ngâm cứu cái.đọc english mệt rùi.help me/.

                        Comment


                        • Mình muốn giao tiếp LCD Graphic 128x64 với ARM lpc2103. Nhưng GPIO của ARM có 3.3V, còn LCD dùng 5V. Cho hỏi có IC nào chuyển đổi qua lại giữa 3.3V và 5V không? Thank ..........

                          Comment


                          • Nguyên văn bởi hongtam Xem bài viết
                            Mình muốn giao tiếp LCD Graphic 128x64 với ARM lpc2103. Nhưng GPIO của ARM có 3.3V, còn LCD dùng 5V. Cho hỏi có IC nào chuyển đổi qua lại giữa 3.3V và 5V không? Thank ..........
                            bạn có thể nối thẳng sang vì GPIO của ARM lpc2103 chịu dc 5V (trong datasheet keu vây và mình cũng đã thử với LCD16x2 cũng 5V nó chạy nình thường). (3v3 cũng nàm trong mức High mà ) cứ nối thẳng ko sao đâu!
                            Nếu cẩn thận hơn bạn có thể sử dụng 74HCT245 hoạc 74lvc245 hoặc 74hct244 hoặc 74lvc244

                            Comment


                            • PWM Modulator

                              Nguyên văn bởi teovubk Xem bài viết
                              em đọc qua datasheet phần PWM của LPC2103 mà phức tạp quá.có cao thủ nào thử pót mấy chương trình mẫu cho em để em ngâm cứu cái.đọc english mệt rùi.help me/.
                              Bộ tạo xung PWM được thiết kế dựa trên bộ Timer/Counter kết hợp với phần cứng, hoạt động theo xung PCLK.
                              Nguyên tắc hoạt động dựa trên các Match vents của 7 thanh ghi Match. Trong trường hợp sử dụng chức năng Timer, khi ghi giá trị mới vào thanh ghi Match lập tức giá này sẽ được sử dụng. Ngược lại đối với chức năng PWM, khi ghi giá trị mới vào thanh ghi Match thì giá trị này chỉ có tác dụng ở chu kỳ kế tiếp. Và nếu áp dụng cho các kênh điều xung thì tại một thời điểm trong chu kỳ giá trị tại các kênh điều xung là khác nhau.
                              Bộ tạo xung PWM sử dụng kỹ thuật shadow latch cho phép câp nhật giá trị PWM bất kỳ lúc nào nhưng giá trị mới này được sử dụng ở chu kỳ kế tiếp cho đến khi bit corresponding trên thanh ghi Latch Enable register(LER) được set lên 1. Sau đó giá trị này sẽ được truyền đến thanh ghi shadow latch để bắt đầu chu kỳ mới.
                              Về cơ bản, cấu trúc phần cứng của bộ PWM tương tự Timer nhưng khác nhau ở các chân ngõ ra.
                              Ở các chân ngõ ra của bộ PWM được điều khiển bởi các flip-flops SR. Các flip-flop và các bộ MUX cho phép bộ PWM điều xung single edge hay double edge. Các bộ MUX được điều khiển thông qua thanh ghi PWMSEL. (xem thêm datasheet của nó)

                              /*chuong trinh mau cho ca hai che do single edge hay double edge */
                              void main(void)
                              {
                              PINSEL0 |= 0x00028000; //Enable pin 0.7 as PWM2
                              PWMPR = 0x00000001; //Load prescaler
                              PWMPCR = 0x0000404; //PWM channel 2 double edge control, output enabled
                              PWMMCR = 0x00000003; //On match with timer reset the counter
                              PWMMR0 = 0x00000010; //set cycle rate to sixteen ticks
                              PWMMR1 = 0x00000002; //set rising edge of PWM2 to 2 ticks
                              PWMMR2 = 0x00000008; //set falling edge of PWM2 to 8 ticks
                              PWMLER = 0x00000007; //enable shadow latch for match 0 - 2
                              PWMEMR = 0x00000280; //Match 1 and Match 2 outputs set high
                              PWMTCR = 0x00000002; //Reset counter and prescaler
                              PWMTCR = 0x00000009; //enable counter and PWM, release counter from reset
                              while(1) // main loop
                              {
                              //........ //Modulate PWMMR1 and PWMMR2
                              }
                              }

                              Comment


                              • mấy pác coi em đoạn code này có sai j ko mà em mất cả ngày vẫn chưa hiểu tại sao sai nữa? LPC2103.EM test ngõ ra hiển thị trên dao dộng kí mà ko thấy jf hết.huhu.Mong các cao thủ chỉ giáo.
                                /* Function : Example Use Timer1 = PWM Mode */
                                /************************************************** ***/
                                // GPIO0.12 -> MAT1.0 = PWM0 = 10 mS/20mS
                                // GPIO0.13 -> MAT1.1 = PWM1 = 1 mS/20mS
                                // GPIO0.19 -> MAT1.2 = PWM2 = 15 mS/20mS
                                // GPIO0.20 -> MAT1.3 = Not Connect = PWM Period Count (20mS)
                                // fOSC=11.0592MHz,M=5,APBDIV =4;
                                #include <LPC2103.H>
                                int main(void)
                                {
                                // Initial Timer1 Pin Connect
                                PINSEL0 &= 0xFCFFFFFF;
                                PINSEL0 |= 0x02000000;
                                PINSEL0 &= 0xF3FFFFFF;
                                PINSEL0 |= 0x08000000;
                                PINSEL1 &= 0xFFFFFF3F;
                                PINSEL1 |= 0x00000080;
                                PINSEL1 &= 0xFFFFFCFF;
                                // Initial Timer Operate
                                T1TCR &= 0xFFFFFFFC; // Timer1 = Timer Mode Count By Rising PCLK Edge
                                T1TC = 0x00000000; // Timer Start = 0
                                T1PR = 0x00000000; // Prescale = 0
                                T1PC = 0x00000000; // Prescale Count = 0
                                // Initial Timer1 Match Operate
                                T1MCR &= 0xFFFE;
                                T1MCR &= 0xFFFD;
                                T1MCR &= 0xFFFB;
                                T1MCR &= 0xFFF7;
                                T1MCR &= 0xFFEF;
                                T1MCR &= 0xFFDF;
                                T1MCR &= 0xFFBF;
                                T1MCR &= 0xFF7F;
                                T1MCR &= 0xFEFF;
                                T1MCR &= 0xFDFF;
                                T1MCR |= 0x0400;
                                T1MCR &= 0xF7FF;
                                // Initial PWM Function
                                T1PWMCON |= 0x00000001; // Enable MAT1.0 = PWM
                                T1PWMCON |= 0x00000002; // Enable MAT1.1 = PWM
                                T1PWMCON |= 0x00000004; // Enable MAT1.2 = PWM
                                T1MR0 = 138240;
                                T1MR1 = 262656;
                                T1MR2 = 69120;
                                T1MR3 = 276480;
                                // Initial Timer-1 Control
                                T1TCR |= 0x01; // Timer-1 Enable (0000000x)
                                T1TCR |= 0x02; // Timer-1 Press Reset (000000x0)
                                T1TCR &= 0xFD;
                                while(1); // Loop Continue
                                }

                                Comment

                                Về tác giả

                                Collapse

                                emdaikho Tìm hiểu thêm về emdaikho

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X