Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - abt123

#1
ร้างราไม่ได้ทำงานด้านนี้ไปนาน กลับมาเคาะสนิมดูหน่อย ว่างๆ
ปีหน้ามีแพลนจะอัพเกรท ระบบโซล่าเซล ก็เลยกลายมาเป็นโปรเจคนี้เอง

Hardware:
*ET-PIC16/32 START KIT (PIC24fj128gb110 + ENC28j60)
Software:
*FreeRTOS v9.0.0 ย้าย tick timer -> TMR5; TMR1 TCPIP stack ใช้อยู่
*Microchip TCPIP Stack v5.42.08

Compiler c30/xc16 ตามสะดวก

ยังใช้ MPLAB IDE8 อยู่นะ  ;D Hardware มันก็ทิ้งให้ฝุ่นจับเฉยๆ เอามาทำประโยชน์ซะหน่อย

ไม่เคยเอา FreeRTOS มาใช้งานจริงจังสักที เคยทำแต่ไฟกระพริบเทพ คราวนี้เลยลองดูสักตั้ง

ไฟล์ทีแจกนี้จะเป็นโครงให้ต่อยอดต่อกันเองนะ มีเว็บอินเตอเฟสบางส่วนเป็นตัวอย่างนิดหน่อย
ตามคลิปเลยนะครับ
ส่วนที่ยังไม่ได้ทำก็ส่วน MPPT, PWM, Data acqisitions etc.

https://drive.google.com/file/d/0B51QRvupWZQZcktUeFRnVVYwb1k

https://www.youtube.com/v/Qa-_D25xtH4
#2
Microchip PIC / Re: PIC24EP256MC202-I/SP
August 01, 2013, 10:54:07 AM
Quote from: ph_sarawut on July 26, 2013, 03:03:27 AM
แล้วใช้ Library DSP ได้ด้วยไหมครับ

lib dsp ของไมโครชิพจะใช้ instruction dsp ต่างหากครับ คิดซะว่ามันเป็น extension ของ PIC24F CORE
แต่ว่ามันสร้างคามแตกต่างได้พอสมควรเช่น
A = A + x^2 มันจะทำเสร็จภายใน 1 cycle (FIXED-POINT)
ถ้าคำสั่งธรรมดาน่าจะ 3-4 คำสั่ง(cycle) ยังไม่รวม rounding นู่นนี่นั่น
และ ACC A/B ของ dsp มัน40bit รวมไปได้เรื่อยๆ แล้วทำ rounding ทีเดียวจบ


ปล. มีของแรงมาทำให้ใขว้เขวอีกล่ะ  :P
#3
ทันไม่ทันถามตัวเองก่อนว่า encoder จะต้องหมุนเร็วแค่ใหน ถ้าต่อตรงกับมอเตอร์รอบสูงๆ ก็ข้ามไป dsPIC ไปเลย
ถ้าต่อกับล้อโดยตรง(1:1) แล้วมันไม่ไ้ด้วิ่งเร็วมากๆ สมมุติ ล้อ 1 รอบ 20 ซม 1กม = 500 รอบ, encoder 500 p/r
ถ้าวิ่ง 10กม/ชม 10*500*500/60/60 = 694 Hz. =  1.44 ms แล้วดู interrupt routine ของตัวเองว่าใหวรึเปล่า
ต้องทำอย่างอื่นอีกใหม ถ้าแค่ +/- ตัวแปร แล้วออกมา มันก็ไม่น่าเกิน 5 us
#4
อธิบายมาขนาดนี้ น่าจะยังไม่เห็นภาพกระมัง ผมน่ะเห็นแล้ว แต่ไม่รู้จะอธิบายยังไงดี :/

1/4 1/8 1/16 ... มันก็คือ Duty cycle ของ LED มันนั่นล่ะ ทำไมเค้าออกแบบแล้วใช้ 1/4 ก็เพราะ มันสว่างกว่า
ปกติทั่วๆไปมักจะ เป็น 1/8 เคยทำแบบ 1/8 มาก่อนรึเปล่าล่ะ?

แถมซูโดโค้ดนิดนึง
//16*32 pixel
//1bit per pixel
//16*32/8 = 64bytes display buffer
//1/4 Duty cycle
//16/4 = 4 scanline simultaneously on

byte displaybuffer[16*32/8];

sub scanLine(linenum) { //linenum = 0~3
    byte *pdp = displaybuffer+linenum;
    for (int i=0;i<16;i++) { //16row
shiftout(*pdp);
pdp+=4; //32col/8=4bytes
    }
    strobeLatchETC();
}

sub scanDisplay() {
    for (int i=0;i<4;i++) {
        disableROW(lastrow); //Anti ghosting
        scanLine(i);
        enableROW(i);
        delayOrSomething();
lastrow = i;
    }
}


ดูดีๆใช้ตรงๆอาจทำให้ภาพกลับหัวกลับหาง :P
#5
http://ww1.microchip.com/downloads/en/DeviceDoc/70183D.pdf

16.2.1 ADC Result Buffer
For devices with DMA, the ADC module contains a single-word result buffer, ADC1BUF0. For
devices without DMA, the ADC module contains a 16-word dual-port RAM, to buffer the results.
The 16 buffer locations are referred to as ADC1BUF0, ADC1BUF1, ADC1BUF2, ..., ADC1BUFE
and ADC1BUFF.

ไม่ใช้ DMA ก็ได้แต่จะ Convert ได้ทีละครั้ง
#6
MDDFS ไม่มี RTC ก็ใช้ได้นะดูคอนฟิกต่อไปนี้

USEREALTIMECLOCK
USERDEFINEDCLOCK
INCREMENTTIMESTAMP

อันแรกคอมเม้นออก สองอันหลังเลือกเอา