có ai viết chương trình bằng vi điều khiển chỉ mình với.cach chay chữ bằng atmega32.thank
Thông báo
Collapse
No announcement yet.
Ai đã thất bại trong việc làm led matrix ....
Collapse
X
-
Nguyên văn bởi toandtvt Xem bài viếtEm làm thử 1 mạch led ma trận 8x64, dùng 74138 quét 8 hàng và 595 xuất cột. Nhưng phần quét em làm ko được nên nó chẳng xuất ra chữ gì cả.
Giúp em sửa lại code để xuất ký tự và dịch qua trái phải với...
#include <16F877A.h>
#include <def_877a.h>
#FUSES NOWDT, HS, NOPUT,NOBROWNOUT, NOLVP, NOCPD,NOWRT, NODEBUG, NOPROTECT
#use delay(clock=20000000)
#bit clk = 0x06.1 //RB1
#bit latch = 0x06.2 //RB2
#bit data = 0x06.3 //RB3
const unsigned char chuoi[8]= {
0x01, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF, 0xEF,
};
void send_2_595(int8 temp) {
#bit flag_bit = temp.7 // bien temp la du lieu 8-bit can gui
int8 i;
for(i=0;i<8;i++)
{
if(flag_bit)
data=1; //bit 1
else data=0; //bit 0
clk=1;
clk=0;
temp<<1; // Dich trai 1 bit
}
latch=1;
latch=0; //Chot du lieu
}
void hien_thi()
{
int8 i,j;
for(i=0;i<8;i++)
{
send_2_595(chuoi[i]);
PORTD = i;
delay_ms(1);
send_2_595(0xff);
}
}
void main()
{
int8 i,j;
TRISB = 0x00;
TRISD = 0x00;
//clk =1;
// latch =1;
while(1)
{
hien_thi();
}
}
- Chưa hiểu bạn đã hiểu và phân biệt được quét hàng và quét cột khác nhau như thế nào chưa và thực hiện quét như thế nào?
- Bạn đã thử với 1 mâtrix ok chưa? (cứ từ từ rùi khoai sẽ nhừ, đừng có mà đi tắt nhanh quá)
- Dữ liệu tạo theo hàng và theo cột khác nhau đấy, bạn xem lại đi,bạn quét hàng 8x64 mà có mỗi 8 hex dữ liệu
- Bạn lưu ý sườn lên của các chân 595 thì nó mới hoạt động như mong đợi, bạn xem lại cách hoạt động 595
- con pic877a có spi cứng đó, nếu bạn sử dụng nó sẽ cải thiện được tốc độ có thể được 5 Mbits/s
Có gì ko hiếu thì lại pót lên nhá!
Cứ làm từ từ đi, thế mới hiểu kỹ được!
chúc thành công!
Comment
-
sau khi đọc 2 topic về quang báo, mình thấy mông lung quá
http://www.dientuvietnam.net/forums/...909#post311909
thì mình muốn hỏi
topic theo link trên sử dụng AVR để điều khiển ma trận led theo kiểu quét cột
mà topic này sử dụng 89cxx thì khuyên nên sử dụng quét hàng để có thể mở rộng ma trận ???
và sử dụng AVR họ có thể mở rộng thành bảng dài cả mấy met rất đơn giản
liệu sử dụng 89C có thể mở rộng bảng ma trận được vậy không?|
Comment
-
Nguyên văn bởi COLE Xem bài viếtto: hoangphat
- mình đã thử chạy file 16x128 CHAY NGANG thì thấy khi chữ chạy qua thì có 1 sọc đen 1 hàng cứ chạy từ dưới lên, không biết khi ráp mạch thực tế thì chữ có bị sọc đen như vậy không?
- mình không thấy file mạch in của mạch 16x128, post lên hoạc mình chưa biết sử dụng Protues, nên hướng dẫn mình lấy mạch in đi
- nếu còn mạch dư không sử dụng thì cho biết giá để lại mình nha.
- mạch này mình có thể gắn thêm thành 32x192 được không? vì mình muốn hiện chữ "chuc mung năm mới"
thank topic hửu ích.
tiếp tục dự án đi các bạn ơi
mạch có thể mở rộng lên 32x128 (chưa ôn đinh nên chưa post dc)
mạch thì em vẽ pác tự làm thôi chứ em ko dư cái nào còn thiều nhìu :d8051 là con em viết thành thạo. em sẵn sàng giúp đỡ các pác nếu em có thể
liên lạc với em qua địa chi email: Mob: 01882.076.989
Comment
-
mấy bác giúp với làm đèn ống trang trí này như thế nào vậy. em rất mong mấy bác giúp đỡ
http://www.mediafire.com/?gc43gpz8usogp2p
Comment
-
chọn vdk là do người dùng, làm
thực ra con 89S/C ko thể so sánh với AVR và PIC (về tốc độ,hỗ trợ rom ,ADC , các chức năng khác rất lý tưởng cho matrix)
nếu pác xác định theo lĩnh vuvj này để phát triển thành sản phẩm thì nên theo AVR và PIC khỏi chê hỗ trợ tỷ lệ thuận với giá
em nhớ có pác nói nếu tích học đầy đủ cho 1 mạch CPU (rom,ADC..)cho 89S/C thì giá cũng ngang PIC và AVR (em thấy rẻ hơn )
nhưng 89S/C bít cách dùng thì ko thua 2 con kia đâu (thêm ram để xử lý nhanh ,rom 24cxx mở rọng bộ nhớ,ds1307 để chạy ngày giờ và ADC để đo nhiệt )
89S/C dùng cho SV ngâm cứu nên giá rẻ và mục đích lớn nhất cũng là bảng 16x64 để làm đồ án còn có pác làm lớn hơn để tặng gia đình,treo trong nhà 1 phân nhỏ để kinh doanh(cái này em ko mun đụng chạm nhưng chắc chắn sẽ có)
chính vì lý do đó em đặt ra giới hạn để phụ hợp với ý nghĩ trên
16x128 cũng ok rồi nhưng ngược lại ko bán dc vì hịu úng chưa có và giao tiếp pc
các pác đã ngâm cứu ai cũng bít 2 cái này khó nhất ko kém quét
em cũng ko mun mất lòng nên chỉ để các pác ngâm cứu để phát triển ok hơn chứ nói ra mà chưa làm dc thì tiu :d
nhưng các pác thật sự theo topic này thì sẽ có lúc em hé lộ 1 gốc nhỏ của PROJECT LED MATRIX DISPLAY giao tiếp PC như mục đích lập topic lúc đầu (em thành cong cho bảng nhỏ 8x64)
thứ nhất để các pác khỏi ỷ y là có sẵn chỉ làm theo nọp bài ko mất chút sức nào (ngược lại ko hỉu j hết và em là người bị thiệt thòi ) suốt time em lập topic mong các pác vui vẻ thao luận hợp tác cũng ngâm cứu để hoàn thành nhưng ko dc cuois cụng chỉ còn 1 mình (như ko rồi)em ngâm cứu 1 mình để chia sẻ nhưng ko ai theo em thậm chí ko quan tâm topic này nữa em chia sẻ cái riêng em chứ ko phải của chung (thiệt thòi chưa)
để lấy lại lửa em phải post bài tâm huyết 16x128 để topic sôi nổi hơn nhưng ko dc
đó là lời nói chân thành nhé đừng ai bắt bẻ hay trách móc trong topic ra yahoo gặp em nc để tránh loãng luồng
em sẽ phát triển trên 8x64 để các pác cùng ngâm cứu còn ai mun làm hơn thì tính sau
các pác cao thủ ra tay dc thì giúp em lun
thanks các pác mong topic hữu ích8051 là con em viết thành thạo. em sẵn sàng giúp đỡ các pác nếu em có thể
liên lạc với em qua địa chi email: Mob: 01882.076.989
Comment
-
Nguyên văn bởi hoangphat Xem bài viếtnếu chạy có sọc ngang chữ thì do phâh mềm tạo font chưa đăng ký nên nó choi vậy chứ ct vẽ j thì chạy vậy ko thêm bớt j đâu
mạch có thể mở rộng lên 32x128 (chưa ôn đinh nên chưa post dc)
mạch thì em vẽ pác tự làm thôi chứ em ko dư cái nào còn thiều nhìu :d
vì đang theo 89c để điều khiển led nên muốn theo cho rành trước khi sử dụng pic hay avr
không khéo tẩu hỏa nhậm ma, đang dành tiền mua linh kiện về ráp nên chưa thử thực tế chỉ tham khảo qua topic và tìm hiểu về 89c nên khi thực tế sẽ cần bạn giúp nhiều.
thanksLast edited by COLE; 05-12-2010, 20:12.|
Comment
-
Mình làm được hiển thị chữ trên led ma trận rồi,dùng pp quét hàng; nhưng phần dịch chữ trái phải vẫn chưa làm được. Mình dùng phương pháp ghép (byte1 >>1)|(byte2<<7).... nhưng vẫn ko được. Ai làm được thì post giải thuật hoặc code C cho mình tham khảo với. Thank!!!
Comment
-
Nguyên văn bởi danh Xem bài viếtgửi hoangphat, mình dùng Reads-51, MSC-51IDE, VIETNAM 8051, ASEM ... các chương trình này mình dùng và dịch thử các file ASM led matrix 16x64 rất tốt nhưng chỉ có file ASM 16x128 của bạn là các chương trình này báo rất nhiều lỗi ở phần code data và không dịch được, không biết mấy pác khác có dịch thử file ASM của bạn hoangphat chưa hay chỉ dùng file HEX của bạn hoangphat để mô phỏng thôi.
Bạn hoangphat ơi sao các chương trình của bạn (http://my.opera.com/Phankeyelectronic/links/) mình không download được mong bạn hướng dẫn nếu không thể công khai ở đây thì bạn gửi vào mail cho mình danh2304@yahoo.com.
mình nghĩ không phải riêng mình mà tất cả mọi người vào đây đều muốn nói lời cảm ơn bạn rất nhiều vì chủ đề của bạn mở ra giúp cho rất nhiều người đam mê lĩnh vực này nhưng không có điều kiện được trao đổi học hỏi thêm rất nhiều, rất tiếc là mình vẫn chưa dịch đc và làm thử, một lần nữa "thanhkiu vina miêu"
báo lỗi như vầy
còn khi sử dụng Prog-studio thì như vầy:
click ok là chương trình bị out.
mong các bạn hướng dẫn khúc này, đề tiếp tục projectLast edited by COLE; 09-12-2010, 21:40.|
Comment
-
Mình là dân ham chơi với led matrix và đã đọc 27 trang không thiếu trang nào nhưng và thấy rất cảm ơn người mở ra topic này nhưng thấy đây là topic danh cho những anh em asm nên không co ý kiến gì nhưng thấy bác hoang dai nói bảo nhìn asm toét mắt nên em có ý kiến đấy là ngôn ngữ của mỗi người. Bác đã làm 8515 thì post nên cho anh em xem đi. Minh cung mới chuyển sang avr nên cũng mông lung lắm. Mình làm cái Led matrix 16*64 nhưng la mua modul. Có mạch đầy đủ nhưng mình ko biết up lên đây kiểu gì copy tạm cái code cho mọi người xem và góp ý.Đang tập viết cái giao tiếp với PC mà khó quá.
#include <mega32.h>
#include <delay.h>
// SPI functions
#include <spi.h>
#define SCK PORTB.7 //Chan cap xung de dua data vào trong thanh ghi dich
#define DATA PORTB.5 //Chan dua data vào thanh ghi dich
#define SCL PORTB.3 //Khi data da vào trong thanh ghi dich, dua mot xung ra chân này de dua data tu thanh ghi dich ra các chân cua IC74HC595
//Bon chân sau day dieu khien viec cap nguon ra các hàng cua led ma tran
#define A PORTC.0;
#define B PORTC.1;
#define OE1 PORTC.3;
unsigned char r=0;
unsigned char i,k;
unsigned char flash VN[]={0 ,231,255,231,0 ,156,128,156,0 ,3 ,131,19 ,0 ,14,15,14,0 ,6,6,6,0 ,231,224,231,128,64,15 ,240,3 ,60 ,240,15,
231,231,231,231,240,128,128,152,240,3 ,131,49 ,207,14,14,14,63,6,6,6,60 ,224,224,102,192,4 ,30 ,224,7 ,120,120 ,7 ,
231,231,231,231,152,128,128,240,49 ,131,3 ,240,206,14,14,15,63,6,6,6,102,224,224,60 ,224,14,60 ,192,15,240,60 ,3 ,
231,255,231,0 ,156,128,156,0 ,19 ,131,3 ,0 ,78 ,15,14,0 ,38,6,6,0,231,224,231,0 ,224,31,120,128,30,224,30 ,1 ,
};
unsigned char DMem[128];
/*void Data_in(unsigned char k)
{ // k là bit du lieu vào có giá tri. là 0 hoac 1;
DATA=k; // DATA dua du lieu vào thanh ghi dich
SCK=0; // Tao ra mot xung o chân SCK
SCK=1;
}
*/
void LatchData()
{
SCL=0; // Sau khi dua du du lieu vào các thanh ghi dich
SCL=1; // Ta tao mot xung de dua du lieu tu thanh ghi dich ra các chân cua 74HC595
}
// Timer 1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
spi(DMem[r*32+31]);
spi(DMem[r*32+30]);
spi(DMem[r*32+29]);
spi(DMem[r*32+28]);
spi(DMem[r*32+27]);
spi(DMem[r*32+26]);
spi(DMem[r*32+25]);
spi(DMem[r*32+24]);
spi(DMem[r*32+23]);
spi(DMem[r*32+22]);
spi(DMem[r*32+21]);
spi(DMem[r*32+20]);
spi(DMem[r*32+19]);
spi(DMem[r*32+18]);
spi(DMem[r*32+17]);
spi(DMem[r*32+16]);
spi(DMem[r*32+15]);
spi(DMem[r*32+14]);
spi(DMem[r*32+13]);
spi(DMem[r*32+12]);
spi(DMem[r*32+11]);
spi(DMem[r*32+10]);
spi(DMem[r*32+9]);
spi(DMem[r*32+8]);
spi(DMem[r*32+7]);
spi(DMem[r*32+6]);
spi(DMem[r*32+5]);
spi(DMem[r*32+4]);
spi(DMem[r*32+3]);
spi(DMem[r*32+2]);
spi(DMem[r*32+1]);
spi(DMem[r*32]); //Byte 0
LatchData();
PORTC=r+8;
r++;
if (r==4) r=0;
}
#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7
#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)
// USART Receiver buffer
#define RX_BUFFER_SIZE 128
char rx_buffer[RX_BUFFER_SIZE];
#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif
// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;
// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
};
};
}
#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif
void main(void)
{
SCK=1;
SCL=1;
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0xFF;
DDRB=0xFF;
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 15.625 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x25;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x10;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x67;
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 4000.000 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0x50;
SPSR=0x00;
// Global enable interrupts
#asm("sei")
for (i=0;i<=127;i++)
{
DMem[i]=~VN[i];
}
while (1)
{
k=getchar();
}
}
Comment
-
Nguyên văn bởi COLE Xem bài viếtmình cũng không dịch đc bạn ơi, mình sử dụng Pinnacle:
báo lỗi như vầy
còn khi sử dụng Prog-studio thì như vầy:
click ok là chương trình bị out.
mong các bạn hướng dẫn khúc này, đề tiếp tục project
em chụp lại quy trình code và dịch pác xem kĩ nhé
nhấn nut dịch dc cái này
save đâu vào đó lấy file ra mà chạy mạch
GOOD LUCK!!!!8051 là con em viết thành thạo. em sẵn sàng giúp đỡ các pác nếu em có thể
liên lạc với em qua địa chi email: Mob: 01882.076.989
Comment
-
while(1)
{
for(k=0;k<8;k++){
dmem[k][0]dmem[k][0])<<1)|((dmem[k][1])>>7);
dmem[k][1]dmem[k][1])<<1)|((dmem[k][2])>>7);
dmem[k][2]dmem[k][2])<<1)|((dmem[k][3])>>7);
dmem[k][3]dmem[k][3])<<1)|((dmem[k][4])>>7);
dmem[k][4]dmem[k][4])<<1)|((dmem[k][5])>>7);
dmem[k][5]dmem[k][5])<<1)|((dmem[k][6])>>7);
dmem[k][6]dmem[k][6])<<1);
}
delay_ms(100);
_______________________
Có ai giúp mình cái code dịch chữ từ phải sang trái với, mình muốn nó dịch hết màn hình rồi chạy tiếp lần 2,lần 3,...Nhưng mình làm nó chỉ dịch được 1 lần rồi im luôn...Chán quá.
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677nhân tiện cho mình hỏi thêm về cái phần test hipot (cao áp),là để kiểm tra độ bền cách điện giưa các cuộn dây,mà thấy thông số test thường ở mức 4kvac,vậy nếu mấy con fail đó xài bình thường vẫn dduocj phải không ạ,vì điện mình làm gì lên tới mức đó
-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 08:52 -
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677máy đo số vòng thì cty có ,mà nó to quá,tưởng có máy nào gọn gọn bỏ túi được thì tiện hơn,vì đi lại nhiều...
-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 08:47 -
-
bởi tmcodonMình thấy diễn đàn có chuyên mục quảng cáo rồi mà. Bạn đóng góp để mở luồng riêng
-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 13:36 -
-
bởi Nicole08Xin chào mọi người, tôi đã sử dụng Flashforge Inventor 2 được gần 5 năm và rất hài lòng với nó, nhưng tuần trước đã xảy ra sự cố. Có vẻ như động cơ bước đưa sợi in vào đầu nóng đã bị hỏng. Mọi thứ khác có vẻ ổn trên máy...
-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 12:55 -
-
Trả lời cho Hỏi về test hipot cao ápbởi nguyendinhvanCách nghĩ của bạn là theo duy tâm thôi. Còn trong công việc thì phải theo duy lý.
Bạn vào goggle và gõ từ : tiêu chuẩn an toàn cách điện.
Bạn sẽ thấy vô vàn các quy định, VN cũng có , quốc tế cũng có. Mỗi vùng , mỗi khu vực,...-
Channel: Điện tử dành cho người mới bắt đầu
02-11-2024, 20:04 -
-
bởi lamvu0677Chào mọi người, ai làm về điện, đặc biệt biến áp xung, mâý con nho nhỏ gắn vào mạch nguồn, cho e hỏi tí ą, e cũng làm trong ty về biển áp thì đo kiểm thành phẩm sẽ kiểm cao áp, tức là kiểm xem có phóng điện giữa các cuộn dây với...
-
Channel: Điện tử dành cho người mới bắt đầu
01-11-2024, 21:05 -
Comment