Chao các bác, em đang làm cái led ma trận như của anh Nghaiha hướng dẫn, rất hay, làm thử mô phỏng trên protues khá tốt nên quyết định làm mạch thật nhìn cho đã
Đây là sơ đồ của nó, em sửa đổi một tí là không dùng Tran để chốt nguồn dương mà dùng IC 74LS125, với lại ma trận của em chỉ là 8*8 thôi :
Còn đây là code của nó, đây là thử mạch nên em chỉ để cho có 2 led giữa sáng kiểu dấu 2 chấm xem thế nào đã
Làm xong , lắp mạch chạy thử thì chả có em nào sáng cả, lấy đồng hồ ra đo thì thấy:
hoá ra các chân A.1 A.2 A.3 nối vào các chân A B C của 74LS138 đều không có áp, dẫn đến các chấn output của nó đều dương cả, làm cho 74ls125 đệm dòng thành trở kháng cao hết, làm gì có áp cho led sáng .
Mà rõ ràng các chân 6 của 74ls138 đã cho lên dương, hai chân 4 ,5 đều xuống âm cả. không hiểu sao cả. Mà con atmega 16 em chỉ nạp chương trình thôi, chứ chưa fuse bit gì cả, vẫn chạy dao động nội .
Các bác xem bệnh giúp em với
Đây là sơ đồ của nó, em sửa đổi một tí là không dùng Tran để chốt nguồn dương mà dùng IC 74LS125, với lại ma trận của em chỉ là 8*8 thôi :
Còn đây là code của nó, đây là thử mạch nên em chỉ để cho có 2 led giữa sáng kiểu dấu 2 chấm xem thế nào đã
PHP Code:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.5a Evaluation
Automatic Program Generator
© Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 5/22/2012
Author : Freeware, for evaluation and
non-commercial use only
Company :
Comments:
Chip type : ATmega16L
Program type : Application
AVR Core Clock frequency: 1.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include <delay.h>
#define B PORTA.1
#define C PORTA.2
#define A PORTA.0
#define SCL PORTB.3
unsigned char Pattern1[8]={0,1,2,3,4,5,6,7};
unsigned char flash chao[]={0xFF,
0xFF,
0xFF,
0xE7,
0xE7,
0xFF,
0xFF,
0xFF};
unsigned char Dmen[8];
// SPI functions
#include <spi.h>
unsigned char r=0;
unsigned char i;
void LatchData(){
SCL=0;
SCL=1;
}
// Timer1 output compare A interrupt service routine
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
spi(Dmen[r]);
LatchData();
PORTA=Pattern1[r]+8;
r++ ;
if(r==7) r=0;
// Place your code here
}
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A 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
PORTA=0x00;
DDRA=0xFF;
// 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=0x00;
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=0xFF
// 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
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0B;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0xB9;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// 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;
// USART initialization
// USART disabled
UCSRB=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 250.000 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: LSB First
SPCR=0x74;
SPSR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
for (i=0;i<=7;i++){
Dmen[i]=chao[i]; }
// Global enable interrupts
#asm("sei")
while (1)
{
// Place your code here
}
}
hoá ra các chân A.1 A.2 A.3 nối vào các chân A B C của 74LS138 đều không có áp, dẫn đến các chấn output của nó đều dương cả, làm cho 74ls125 đệm dòng thành trở kháng cao hết, làm gì có áp cho led sáng .
Mà rõ ràng các chân 6 của 74ls138 đã cho lên dương, hai chân 4 ,5 đều xuống âm cả. không hiểu sao cả. Mà con atmega 16 em chỉ nạp chương trình thôi, chứ chưa fuse bit gì cả, vẫn chạy dao động nội .
Các bác xem bệnh giúp em với
Comment