Hướng dẫn Hướng dẫn nghịch DSPIC đêm khuya

Thai Phan

Sinh viên đại học
#31
Tiếp tục về dsPIC đi chủ thớt. Ủng hộ chủ thớt viết mấy bài kiểu này.
Phần tranh luận của các bạn khác về chủ đề "ai giỏi lập trình vđk hơn ai?" thì hay là ra ngoài tạo topic khác tranh luận, biết đâu vỡ ra được nhiều cái kinh nghiệm cho mọi người học hỏi.
 

Thai Phan

Sinh viên đại học
#32
#1 : Linh ta linh tinh về trình biên dịch, configure bit và F_OSC
  • Để lập trình Dspic thì mình sẽ hướng dẫn trên DSPIC33FJ12GP201 , datasheet thì lên trang chủ tự download nhé, refrence các kiểu đều có trên đó, down về tham khảo nhé.
  • Trên trang chủ cũng có sẵn mplabx IDE dùng để lập trình, compile xc16 để dịch
  • Mình đi thẳng luôn vào phần configure bit nhé:
  • Mã:
    #pragma config BWRP = WRPROTECT_OFF     // Boot Segment Write Protect (Boot Segment may be written)
    #pragma config BSS = NO_FLASH           // Boot Segment Program Flash Code Protection (No Boot program Flash segment)
    
    // FGS
    #pragma config GWRP = OFF               // General Code Segment Write Protect (User program memory is not write-protected)
    #pragma config GSS = OFF                // General Segment Code Protection (User program memory is not code-protected)
    /*chỗ này lưu ý để cấu hình thạch anh ngoài với bộ PLL*/
    // FOSCSEL
    #pragma config FNOSC = PRIPLL           // Oscillator Mode (Primary Oscillator (XT, HS, EC) w/ PLL)
    #pragma config IESO = ON                // Internal External Switch Over Mode (Start-up device with FRC, then automatically switch to user-selected oscillator source when ready)
    
    // FOSC
    #pragma config POSCMD = HS              // Primary Oscillator Source (HS Oscillator Mode)
    #pragma config OSCIOFNC = OFF           // OSC2 Pin Function (OSC2 pin has clock out function)
    #pragma config IOL1WAY = ON             // Peripheral Pin Select Configuration (Allow Only One Re-configuration)
    #pragma config FCKSM = CSDCMD           // Clock Switching and Monitor (Both Clock Switching and Fail-Safe Clock Monitor are disabled)
    
    // FWDT
    #pragma config WDTPOST = PS32768        // Watchdog Timer Postscaler (1:32,768)
    #pragma config WDTPRE = PR128           // WDT Prescaler (1:128)
    #pragma config WINDIS = OFF             // Watchdog Timer Window (Watchdog Timer in Non-Window mode)
    #pragma config FWDTEN = OFF             // Watchdog Timer Enable (Watchdog timer enabled/disabled by user software)
    
    // FPOR
    #pragma config FPWRT = PWR128           // POR Timer Value (128ms)
    #pragma config ALTI2C = OFF             // Alternate I2C  pins (I2C mapped to SDA1/SCL1 pins)
    
    // FICD
    #pragma config ICS = PGD1               // Comm Channel Select (Communicate on PGC1/EMUC1 and PGD1/EMUD1)
    #pragma config JTAGEN = OFF             // JTAG Port Enable (JTAG is Disabled)
Góp ý chút xíu về chỗ config nha bạn. Dùng cái #pragma cũng được chứ không phải không nhưng mình xin thêm một cách để thiết lập nữa đơn giản hơn:

Mã:
_FOSC( 0x8307);
_FWDT( 0x003F);
_FBORPOR(PWRT_OFF & BORV45 & PBOR_OFF & MCLR_EN & PWMxH_ACT_HI & RST_PWMPIN);
_FGS( GWRP_OFF & CODE_PROT_OFF);
Dòng 1&2 là ghi trực tiếp giá trị lên thanh ghi config luôn, cái này là trực tiếp nhất.
Dòng 3&4 là dùng kiểu AND các bit config lại với nhau, kết quả cuối cùng thì ra giá trị để ghi lên thanh ghi config.
Còn kiểu pragma là dạng IDE nó hỗ trợ macro để mình làm, kiểu này thì tiện cho người mới sử dụng hơn nhưng nếu không rành thì dòm cũng rắc rối không kém đâu.
Vài ý nhỏ.
 
#33
Góp ý chút xíu về chỗ config nha bạn. Dùng cái #pragma cũng được chứ không phải không nhưng mình xin thêm một cách để thiết lập nữa đơn giản hơn:

Mã:
_FOSC( 0x8307);
_FWDT( 0x003F);
_FBORPOR(PWRT_OFF & BORV45 & PBOR_OFF & MCLR_EN & PWMxH_ACT_HI & RST_PWMPIN);
_FGS( GWRP_OFF & CODE_PROT_OFF);
Dòng 1&2 là ghi trực tiếp giá trị lên thanh ghi config luôn, cái này là trực tiếp nhất.
Dòng 3&4 là dùng kiểu AND các bit config lại với nhau, kết quả cuối cùng thì ra giá trị để ghi lên thanh ghi config.
Còn kiểu pragma là dạng IDE nó hỗ trợ macro để mình làm, kiểu này thì tiện cho người mới sử dụng hơn nhưng nếu không rành thì dòm cũng rắc rối không kém đâu.
Vài ý nhỏ.
Thanks bạn !!!
cái này ngày trước ai dùng MPLAB hoặc CCS các phiên bản cũ thì sẽ quen thuộc, nhưng mà cái config mình dùng là do trình biên dịch tự sinh code trong option chứ k phải do mình viết như thế, nên nếu mà người mới học vào option click chọn rồi IDE tự sinh code ra thì nghe chừng sẽ dễ hơn.
 

nghiabk94

Học sinh phổ thông
#34
anh ơi viết tiếp về adc đi anh :3 cãi nhau làm gì mất 3 trang mà kiến thức k có
 

matlabviet

Học sinh phổ thông
#36
Lướt một lượt qua các comment của các bạn thì có đôi lời với các bạn. Sau cũng có vài lời chia sẽ đến các bạn.

1. Đa phần mọi người làm, yêu thích, sử dụng, thành thạo 1 cách làm việc nào đó thì có vẽ không quan tâm và có ý đã kích những cái khác, thôi thì thở một hơi dài và xem xem bọn khác mình nó đang làm gì, có gì hay không, có gì mình có hể học hỏi thêm không.

2. tất cả các dòng chip mà mọi người nêu ra đều có những đặc điểm riêng, và đều tồn tại cho đến ngày nay, tất cả đều sống khỏe sống tốt, tùy vào mục đích sử dụng và tính chất công việc của mình mà lựa chọn chip hoặc cách thức sử dụng thôi.Tiếp thu thêm thì có sao đâu ,phải không mọi người???

Đôi lời chia sẽ kinh nghiệm:

1. Việc nên sử dụng thư viện có sẵn hay tìm hiểu cấu trúc, chức năng thanh ghi? -> theo cá nhân mình thì nên kết hợp cả hai: tìm hiểu thanh ghi để biết chức năng của nó là gì, chủ động hơn trong công việc, sài thư viện có sẵn để công việc được nhanh chóng. Mỗi phương pháp đều có ưu nhược điểm:

a. Sài thư viện:

- đôi khi không hiểu chúng làm việc như thế nào, sử dụng những tài nguyên nào, có thể khi config nhiều chức năng dẫn đến xung đột -> không hoạt động, nhiều bạn lên diễn đàn hõi những câu hỏi rất basic mà lẽ ra bạn nên tìm hiểu và fix nó.

- Đôi khi chính thư viện code chưa ổn định, chưa bao quát hết các trường hợp xãy ra, ví dụ mình sử dụng thư viện UART bị lỗi chính thư viện mà nếu không tìm hiểu chức năng thanh ghi thì mình đã không thể fix được lỗi.

- Cách này phù hợp cho các bạn đang tập trung cho phát triển một ứng dụng nào đó, không quan tâm về con chip miễn sao chạy được là ok.

b. Tìm hiểu sâu về thanh ghi.

- Tìm hiểu chức năng của thanh ghi cũng như chức năng các bit config, status của nó. Nếu bạn đang là người phát triển ứng dụng thì việc này xem ra lãng phí và không giúp được gì cho bạn, nhưng nếu bạn đang là 1 người design driver cho chip chạy hệ điều hành thì nó rất quan trọng. Ví dụ công ty bạn đang phát triển một sản phẩm sử dụng chíp arm chạy linux OS thì không hiểu chức năng thanh ghi thì bạn đừng mơ phát triển được 1 driver.

2. Mình thấy có bạn hỏi sao không code bằng mplab, mplab chỉ là một IDE , nó chỉ là môi trường để bạn phát triển ứng dụng thôi, nó như một editor vậy tuy nhiên nó có tích hợp thêm các công cụ nạp, debug, config linker, config compiler, còn ccs hay mikroc, hitechC, xC… nó là compiler, IDE tự động tạo make file và file liên kết các file để build. MPLAB X là phiên bản mới của mplad, nó hỗ trợ nhiều tính năng mới mà mình thấy rất hay để cạnh tranh với sự phát triển mạnh mẽ của stm trên phương diện user friendly, IDE mới này hỗ trợ download các compiler online, các addin liên tục cập nhật, nay microchip đã có add in tự động sinh code config như code vision hay stm cube rồi nhé các bạn, nhưng chỉ với các dòng cao cấp và trung bình thôi nhé. Ngoài ra IDE mới này còn hỗ trợ các tiện ích nhắc nhở, ví dụ bạn define MICROCHIP 1000 ở 1 file *.h nào đó, khi bạn code ở đâu đó, bạn gõ MI rồi bấm tab thì nó sẽ hiện ra danh sách các define đã có, giúp bạn code nhanh hơn và tranh sai sót, hay chức năng comment hay uncomment 1 khối code cùng lúc.. Còn nhiều tính năng nữa rảnh mình nói tiếp sau, giờ đi ngủ đã!
 
Sửa lần cuối:

Thai Phan

Sinh viên đại học
#37
Hôm trước mình đọc có bạn bảo "giờ mà còn làm việc với mplab" là mình cũng thấy buồn, rồi sau đó cười rồi. Mplab có gì mà không làm việc với nó được? Nó chỉ là một IDE, hỗ trợ dev viết code thôi. Cũng giống như việc sử dụng thư viện hỗ trợ phần cứng hay là dùng trực tiếp thanh ghi, thì cũng có người không thích sử dụng một IDE nào mà chỉ thích thuần tuý viết code trên một text editor nào đó. Tuy nhiên đó là lựa chọn của mỗi người, và chỉ là phương tiện. Cái quan trọng cuối cùng là dùng phương tiện này để làm gì? Thôi, cho cái thớt này được quay trở về mục đích ban đầu rất trong sáng và hữu ích của chủ thớt đi.
 

đức treo

Học sinh phổ thông
#39
mọi người ơi có ai có ý tưởng thiết kế bộ chuyển đổi tín hiệu kĩ thuật số từ PT100 sang tín hiệu điện 4-20mA và 0-10V không ạ. help me.
 

kh_coi

Học sinh phổ thông
#40
Bạn đừng nên chỉ phán đoán 1 cách phiến diện và chủ quan như vậy. Nghe bạn ns vậy thì mình tin là b chưa từng xài mplab x Còn về chuyện cái mới mà b ns thì mình cũng k tin là kỹ sư việt k đủ khả năng để theo đuổi và nắm bắt đâu b anh.
Thời đại nào mà mấy ông kỹ thuật ở VN vẫn còn giảng và truyền mấy cái MPLAB, lần từng thanh ghi ... ???
Chắc đúng chỉ là dành cho mấy cháu trung học chuyên nghiệp với sinh viên nghiên cứu cơ bản thì còn được .... hiểu qua cơ bản rồi thì phải đi tìm hướng mới, đào sâu cái khác để mà theo kịp thời gian .... trong khi thế giới người ta chuyển qua hết fast food, ứng dụng ... rồi đến flow , visual design, ngôn ngữ mô tả, tập trung vào ý tưởng thực tiễn, giải thuật ... thì vẫn còn nghiền ngẫm cái câu cú ( chủ yếu do thằng phát triển trình dịch đưa ra ) nên cứ theo phải theo chúng hoài .... Nên càng ngày điện tử của VN càng tụt hậu ( phải nói thẳng là càng ngày càng ngu đi ).
Một ngày có đủ chủng loại công nghệ mới ... chíp mới ra đời ... nghiên cứu xong được mấy cái đó xong thì lại trở thành đồ phế liệu rồi cũng nên . :D
Bạn thử so sánh xem MPLAB có những ưu điểm gì hơn những cái khác ??? :))
Chắc là Prồ vượt bậc hơn hẳn chăng ? :))
Về cơ bản muốn sử dụng luôn cho những ứng dụng cụ thể thì nên sử dụng những trình dịch hỗ trợ những hàm khác. Xong thiết nghĩ là một kỹ sư, thì nên hiểu bản chất vấn đề. Hiểu cấu tạo con chíp và cách can thiệp nó. Vì vậy khi bạn sử dụng được ASM. bạn có thể dễ dàng sử dụng các ngôn ngữ bậc cao khác. và hiểu được bản chất vấn đề khi gặp rắc rối. Đặc biệt là những chương trình đòi hỏi sự phức tạp và chính xác cao.....
 

Quảng cáo Google