PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 18-09-2013, 11:10 PM   #1
Dragon_00
Nhập môn đệ tử
 
Tham gia ngày: Jan 2013
Bài gửi: 3
:
Xin giúp đỡ code Led 8x8x8

Mong nhận Được sự giúp đỡ của mọi người trong Forum để hoàn thiện nốt phần hiệu ứng.
--Hiệu Ứng Sóng :mô tả một điểm dao động theo hàm sin làm mặt phẳng xung quanh dao động theo gây nên cảm giác sóng.
--Thuật toán copy ở http://www.dientuvietnam.net/ như sau :
Gọi chu kỳ sóng là T, bước sóng L, biên độ A.

Chọn một điểm trong mặt phẳng xy làm gốc, đặt tên là O
Quét tất cả mọi điểm trong mặt phẳng xy, gọi từng điểm là A
Tính khoảng cách AO theo định lý Pytago, gọi là R
Dùng công thức sóng u = A*Cos (2*PI*t/T - 2*PI*R/L)
Add từng điểm vào mảng sáng
Vs 8x8x8, L là 7, A là 3.5, tọa độ O là (3.5, 3.5), còn T là 1s. Việc lấy t ở đây dùng timer.

Code C :
HTML Code:
float L = 7; // Bước sóng
float T = 1; // Chu kỳ
float A = 3.5; // Biên độ
float xo = 3.5; // Tọa độ điểm gốc O
float yo = 3.5;

for (byte y = 0; y < 8; y++) // Quét Y
{
    for (byte x = 0; x < 8; x++) // Quét X
    {
        float r = Sqrt(Pow(x - xo, 2) + Pow(y - yo, 2)); // Lấy bán kính, Sqrt là căn bậc 2, Pow(x, y) là x mũ y
        float t = get_time(); // Lấy thời gian
        byte z = (byte)(A * Cos(2*PI*t/T - 2*PI*r/L) + 3.5); // Lấy cao độ z, 3.5 là vị trí cân bằng
        Add(x, y, z); // Lưu vị trí LED sáng
    }
}
Phần cứng em dùng 8 con 74HC595 ĐK 64 cột và 1 con còn lại ĐK 8 lớp . muốn bật 1 cột và lớp bất kì xuất ra bit 1. Mấy Hiệu ứng Linh Tinh em viết đã chạy còn cái này thì ko. Dưới đây là code em chuyển sang cho Pic hàm Add(x,y,z) <--> Send_0xyz(x,y,z)

HTML Code:
#include <main.h>
#include <math.h>

#define rowClk PIN_D0  //Clock
#define rowDat PIN_D1  //Data
#define rowLat PIN_D2  //latch

#define colClk PIN_D3
#define colDat PIN_D4
#define colLat PIN_D5

int1 buffer_xy[64];//Mang 64 bit luu trang thai cua 64 cot
int1 buffer_z[8];  //Mang 8 Bit Luu Trang Thai Cua 8 lop
int8 x,y,z;
int8 Count,time;

#USE FAST_IO (d)
//****************************************************************************//
void interrupt_config()
{

disable_interrupts(INT_EXT);      //Khong cho phep ngat ngoai hoat dong (mac dinh)
disable_interrupts(INT_RB);      //Khong cho phep ngat RB hoat dong (mac dinh)
disable_interrupts(INT_CCP1);  //Khong cho phep ngat CCP1 hoat dong (mac dinh)
disable_interrupts(INT_TBE);  //Khong cho phep ngat TBE hoat dong (mac dinh)
disable_interrupts(INT_RDA);  //Khong cho phep ngat RDA hoat dong (mac dinh)
disable_interrupts(INT_SSP);  //Khong cho phep ngat SSP hoat dong (mac dinh)
disable_interrupts(INT_PSP);  //Khong cho phep ngat PSP hoat dong (mac dinh)
disable_interrupts(INT_BUSCOL);  //Khong cho phep ngat BUSCOL hoat dong (mac dinh)
disable_interrupts(INT_COMP);  //Khong cho phep ngat COMPARATOR hoat dong (mac dinh)
enable_interrupts(GLOBAL);  //Cho phep cac ngat co the hoat dong
}

void timer0_config()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_BIT);      //  T_tm0=T_osc*4*256
enable_interrupts(INT_TIMER0);  //Cho phep ngat tran timer0 hoat dong

}

//****************************************************************************//
// Ngat Timer 0 De lay Gia Tri Time
#INT_RTCC     
void  ngat_timer0(void)
{
set_timer0(2);
  Count++;
  if(Count==46)
  {
  // dinh thoi 0.5s
  disable_interrupts(GLOBAL);
  Count=0;                         
  if(time==99) time=0;
  else time++;
  enable_interrupts(GLOBAL);
  }
}
//****************************************************************************//

void Send_Oxy() //Day 64 Bit vao * IC74HC595
{
  int i;
  //send 64 bit vao 74HC595
  for(i=0;i<64;i++)
      {
        output_bit(colDat,buffer_xy[i]);
        delay_us(1);
        output_high(colClk);
        output_low(colClk);
      }
  // Chot xuat 64 bit ra led
  output_high(colLat);
  output_low(colLat);
}

void Send_Oz() //Day 8 Bit Vao IC74HC595
{
  int8 i;
  //
  for(i=0;i<8;i++)
      {
        output_bit(rowDat,buffer_z[i]);
        delay_us(1);
        output_high(rowClk);
        output_low(rowClk);
      }
  // Chot xuat Du Lieu ra led
  output_high(rowLat);
  output_low(rowLat);
}
//********************************************************************/
//Ham Bat 1 bong led co toa do (x,y,z) trong khoi
void Send_Oxyz(int8 x,int8 y,int8 z)
{

buffer_xy[x+y*8]=1;//cho bit co toa do (x,y) =1
buffer_z[z]=1;    //cho bit co toa do Z =1
Send_Oxy();        //
Send_Oz();        //

}

void OFF_ALL()
{
int8 i;
for(i=0;i<8;i++)
      {
        buffer_z[i]=0;
      }

for(i=0;i<64;i++)
      {
        buffer_xy[i]= 0;
      }

Send_Oxy();
Send_Oz();

}

//****************************************************************************//
//Ham Song  lay t Tu Timer 0
void effect_wave()
{
int8 L = 7; // Buoc song
int8 T = 1; // Chu ki
float A,xo,yo;
A = 3.5; // Bien do
xo = 3.5; // Toa do diem goc O

for ( y = 0; y < 8; y++) // Quét Y
{
    for ( x = 0; x < 8; x++) // Quét X
    {
        float r = Sqrt(Pow(x - xo, 2) + Pow(y - yo, 2)); // Lay bán kính, Sqrt là can bac 2, Pow(x, y) là x mu y
 
        byte z = (byte)(A * Cos(2*PI*time/T - 2*PI*r/L) + 3.5); // Lay cao do z, 3.5 là vi tri can bang
        Send_Oxyz(x, y, z); // Luu vi tri LED sáng
        delay_ms(1);
        OFF_ALL();
    }
}
}


void main()
{
  interrupt_config();
  timer0_config();

set_tris_d(0x00);

while(true)
{
effect_wave();
}
}
Mong Được mọi Người Giúp chỉ ra vì sao nó không chạy mặc dù code ko bị lỗi. File Code https://docs.google.com/file/d/0B3P8...it?usp=sharing
Dragon_00 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 08:41 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam