PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT 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

Ðề tài đã khoá
 
Ðiều Chỉnh Xếp Bài
Old 09-05-2007, 04:29 PM   #1
picpicpic
Đệ tử 2 túi
 
picpicpic's Avatar
 
Tham gia ngày: Jan 2006
Bài gửi: 36
:
Trích:
Nguyên văn bởi conanhung View Post
Code:
#include<16F876A.h>
#fuses NOLVP, NOWDT,PUT,HS,NOPROTECT
#use delay(clock=12000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#byte porta=0x5
#byte portb=0x6
#byte portc=0x7
#bit RB0=portb.0
#bit G1 = porta.0
#bit G2 = porta.1
#bit G3 = porta.2
#bit G4 = porta.3
#bit G5 = porta.4
#bit G6 = porta.5
#bit G7 = portc.0
#bit G8 = portc.1
#bit G9 = portc.2
#bit G10 = portc.3
#bit G11 = portc.4
#bit G12 = portc.5
#bit G13 = portc.6
#bit G14 = portc.7
#bit G15 = portb.1
#bit G16 = portb.2
#bit G17 = portb.3
#bit G18 = portb.4
#bit G19 = portb.5
#bit G20 = portb.6
#bit led = portb.7
main()
{
setup_adc( ADC_OFF );
set_tris_a(0);
set_tris_b(0b00000001);
set_tris_c(0);
while(true)
	{
G1=1;
G2=1;
G3=1;
G4=1;
G5=1;
G6=1;
G7=1;
G8=1;
G9=1;
G10=1;
G11=1;
G12=1;
G13=1;
G14=1;
G15=1;
G16=1;
G17=1;
G18=1;
G19=1;
G20=1;
	}
}
Mạch em mắc 20 đèn led vào 3 port thông qua 20 điện trở R=4k7 xuống GND, khi nạp cho PIC6F876A thì 19 đèn đều sáng, chỉ có đèn G5, tức là ở port RA4, mặc dù port này em đã kéo lên Vdd qua điện trở 4k7 rồi, mà đèn led nối ở RA4 vẫn ko sáng.

Ah, em đã thử thêm dòng lệnh

Code:
ADCON1 = 0x06;
vào hàm main() nhưng chương trình CSS C lại báo lỗi ADCON1 chưa khai báo và không dịch được.

Cho em hỏi chương trình em viết có thiếu gì không? và thiếu thì thêm như thế nào? Em xin cám ơn.
RA4 là chân ngõ vào cực thu hở, bạn cho nó lên mức cao (5V), bạn lại mắc con trở kéo lên nguồn (5V). Như thế thì đèn nào sáng cho được.

Bạn cho G5 = 0; thì đèn sáng thôi.
__________________
************************************************** **
The only wrong thing would be to deny what your heart truly feels!
************************************************** **
picpicpic vẫn chưa có mặt trong diễn đàn  
Old 09-05-2007, 05:53 PM   #2
conanhung
Nhập môn đệ tử
 
Tham gia ngày: Apr 2006
Bài gửi: 4
:
Em viết lại đoạn code này và cho chạy:
Code:
#include<16F876A.h>
#fuses NOLVP, NOWDT,PUT,HS,NOPROTECT
#use delay(clock=12000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#byte adcon1=0x9F
#byte porta=0x5
#byte portb=0x6
#byte portc=0x7

#bit G5 = porta.4
#bit G6 = porta.5

main()
{
adcon1=0x06;
set_tris_a(0);
set_tris_b(0b00000001);
set_tris_c(0);
while(true)
	{
      G5=1;
      G6=1;
      delay_ms(2000);
      G5=0;
      G6=0;
      delay_ms(2000);
	}
}
Nếu như anh picpicpic nói thì đèn G5 (chân RA4) phải nhấp nháy chứ, đằng này chỉ có đèn G6 nhấp nháy. Em không hiểu tại sao?

2 lệnh
Code:
#byte adcon1=0x9F
và
adcon1=0x6;
để cài đặt tất cả các chân của port A là digital viết vậy có đúng không?
conanhung vẫn chưa có mặt trong diễn đàn  
Old 09-05-2007, 09:05 PM   #3
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Trích:
Nguyên văn bởi conanhung View Post
Em viết lại đoạn code này và cho chạy:
Nếu như anh picpicpic nói thì đèn G5 (chân RA4) phải nhấp nháy chứ, đằng này chỉ có đèn G6 nhấp nháy. Em không hiểu tại sao?
Trên chân RA4 của bạn có 2 con điện trở, giữ nguyên con pull-up, bỏ con 4K7 mắc với LED xuống GND. Bạn để 2 con thế thành 10K, áp sụt trên con LED chừng 2V -> dòng qua LED chỉ có 0.3mA ko đủ cho led sáng.

Thông thường để hạn dòng bạn chỉ nên dùng 470 ohm.

Trích:
Nguyên văn bởi picpicpic
RA4 là chân ngõ vào cực thu hở, bạn cho nó lên mức cao (5V), bạn lại mắc con trở kéo lên nguồn (5V). Như thế thì đèn nào sáng cho được.

Bạn cho G5 = 0; thì đèn sáng thôi.
So với các chân RA khác, trong sơ đồ mạch vào ra của chân RA4 không có con MOSFET P bên trên, chỉ có con MOSFET N bên dưới. Bạn set bit RA4=0 thì con FET bên dưới dẫn, làm áp trên chân RA4 về 0 vậy làm sao LED sáng được. Khi set 1, con FET N tắt, nếu có pull-up thì áp trên chân RA4 cao.

Đã lỡ sửa bạn thì sửa luôn, không có ngõ vào cực thu hở chỉ có ngõ ra cực thu hở. Ở đây gọi chính xác là cực máng hở - Open Drain, cực thu hở - Open Collector chỉ trong các mạch logic TTL.
Trích:
2 lệnh
Code:
#byte adcon1=0x9F
và
adcon1=0x6;
để cài đặt tất cả các chân của port A là digital viết vậy có đúng không?
Bạn làm vậy đúng, nhưng CCS hỗ trợ hàm setup_adc_ports, dùng hàm này nhanh hơn.

thay đổi nội dung bởi: bien_van_khat, 09-05-2007 lúc 09:07 PM. Lý do: dư 2 chữ "của" :(
bien_van_khat vẫn chưa có mặt trong diễn đàn  
Old 11-05-2007, 12:58 AM   #4
conanhung
Nhập môn đệ tử
 
Tham gia ngày: Apr 2006
Bài gửi: 4
:
ok, thanks các bác nhiều, thật ra em dùng điện trở hạn dòng 330, còn điện trở kéo lên Vcc là 4k7 mà ghi nhầm, sory. Thanks các bác.
conanhung vẫn chưa có mặt trong diễn đàn  
Old 18-05-2007, 12:29 PM   #5
An Hiep
Đệ tử 1 túi
 
An Hiep's Avatar
 
Tham gia ngày: May 2007
Bài gửi: 15
:
Đo tấn số
Xin chào! Tôi là thành viên mới. Thấy anh em trong diễn đàn tao đổi hay quá, tôi xin tham gia cùng.
Tôi gửi chương trình làm với PIC6F876A cho anh em tham khảo cùng. Mạch này đo được tần số lên đến 50MHz. Tôi muốn anh em giúp tôi khi muốn đo tần số sóng mang trong tín hiệu đã điều chế biên độ thì làm thế nào?

Code:
/*==============================================================================
* Author        :DRAGON(Hungnv0401@gmail.com)
* File Name     :Do tan so den 50MHz va hien thi tren LCD
* Data          :16/5/2007
* Hardware      :PIC16F876A
* Compiler      :CCS C 3.249
* Description   :50MHz frequency Counter & Display on LCD, Input is PIN_C0(Pin11)
*=============================================================================*/

#include <16F876A.h>

#fuses HS,NOWDT,NOPROTECT,NOLVP


#bit TMR1IF = 0x0C.0
#use delay(clock=20000000)
#define RS PIN_C4
#define RW PIN_C5
#define CE PIN_C7

int8 ch_tr, tr, tr_ngh, van, ngh; // chuc trieu, trieu, tram nghin, van, nghin
int8 cycles8, cycles;
int16 freqc_high;
int16 freqc_low;
int32 freq;
//-----------------------------------------------------------------------------//

//* --------------------- Khoi tao cho LCD -----------------------------------*//
void lcd_init()
{
      output_low(RS);
      output_low(RW);
      output_low(CE);

      OUTPUT_b(0x0f);
      delay_us(100);
      output_high(CE);
      delay_us(100);
      output_low(CE);
}
//-----------------------------------------------------------------------------//

//*---------------------- Dua byte ra LCD -----------------------------------*//
void lcd_put(byte data)
{
      output_high(RS);
      output_low(RW);
      output_low(CE);

      OUTPUT_b(data);
      delay_us(500);
      output_high(CE);
      delay_us(500);
      output_low(CE);
}
//-----------------------------------------------------------------------------//

//*-------------------------- Chon 2 dong cho LCD ---------------------------*//
void lcd_2lines()
{
      output_low(RS);
      output_low(RW);
      output_low(CE);

      OUTPUT_b(0x38);
      delay_us(500);
      output_high(CE);
      delay_us(500);
      output_low(CE);
}
//-----------------------------------------------------------------------------//


//*----------------------------- Gui dia chi cho LCD ------------------------*//
void lcd_add(byte add)
{
      byte real_add;
      real_add = 0x80 + add;

      output_low(RS);
      output_low(RW);
      output_low(CE);

      OUTPUT_b(real_add);
      delay_us(500);
      output_high(CE);
      delay_us(500);
      output_low(CE);
}
//-----------------------------------------------------------------------------//



//*--------------------------- Chuong trinh chinh ---------------------------*//

void main()
{
lcd_init();
lcd_2lines();
   
while (TRUE)
   {
      cycles8=0;
      cycles=0;
      freqc_high=0;
      TMR1IF = 0;
      set_timer1(0);
      setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
      
//* -------------------------- Doi 1 giay ---------------------------------- *//
      while (cycles!=0xFF)			
       { 					
       cycles8=0; 				
       while (cycles8!=0xFF)
            { 
            if (TMR1IF)             
               {
               TMR1IF = 0;freqc_high++;
               }   
            else                                        
               {
               delay_cycles(5);
               }                       
            delay_cycles(62); 
            cycles8++; 
            }
            delay_cycles(216);	
            cycles++;		 	
        }
        delay_cycles(211);	
//*----------------------Ket thuc 1 giay ------------------------------------*//


//* ----------------Lay gia tri tu bo dem tan so ----------------------------*//

         freqc_low = get_timer1();	
         freq=(65536*freqc_high + freqc_low)/5;	//Vi thuc chat thach anh ta su dung 
                                                //o day la 4MHz = 1/5 cua 20MHz
         ch_tr = freq/10000000 + 48;
         tr = (freq%10000000)/1000000 + 48;
         tr_ngh = ((freq%10000000)%1000000)/100000 + 48;
         van = (((freq%10000000)%1000000)%100000)/10000 + 48;
         ngh=((((freq%10000000)%1000000)%100000)%10000)/1000 + 48;
         
         lcd_add(0x02);
         lcd_put('F'); lcd_put('r'); lcd_put('e');lcd_put('q'); lcd_put(32);
         lcd_put('C'); lcd_put('o'); lcd_put('u');lcd_put('n'); lcd_put('t');
         lcd_put('e'); lcd_put('r'); lcd_put(32);lcd_put(32); lcd_put(32);
                          
         lcd_add(0x42);
         lcd_put('F'); lcd_put('r'); lcd_put('e');lcd_put('q'); lcd_put(':');
         lcd_put(ch_tr); lcd_put(tr);   lcd_put('.');    lcd_put(tr_ngh);
         lcd_put(van);   lcd_put(ngh);   lcd_put(32);
         lcd_put('M');  lcd_put('H'); lcd_put('z');lcd_put(32);lcd_put(32);
         lcd_put(32);lcd_put(32);lcd_put(32);
         delay_ms(50);
 
     }
} //End

thay đổi nội dung bởi: falleaf, 18-05-2007 lúc 03:41 PM.
An Hiep vẫn chưa có mặt trong diễn đàn  
Old 18-05-2007, 02:54 PM   #6
An Hiep
Đệ tử 1 túi
 
An Hiep's Avatar
 
Tham gia ngày: May 2007
Bài gửi: 15
:
Chào anh nhh!
Cảm ơn anh đã post lên nhiều chương trình rất dễ hiểu. Anh cho hỏi: Tôi muốn vừa tiến hành đo điện áp và hiển thị lên LCD vừa định thời gian thì làm thế nào?. Cụ thể là tôi có bài tập tiến hành đo điện áp của 1 thiết bị sạc ác quy, vấn đề này thì không có gì, nhưng tôi muốn đo thời gian nó đã sạc nữa, đơn vị tính thời gian là phút. Mong anh nhh va các anh em trong diễn đàn giúp đỡ!
Thanks alot!
An Hiep vẫn chưa có mặt trong diễn đàn  
Old 19-05-2007, 03:29 AM   #7
necati
Nhập môn đệ tử
 
Tham gia ngày: Oct 2006
Bài gửi: 10
:
frequencymeter

Code:
#include <16f628.H>
#use   delay(clock=4000000)//
#fuses NOPROTECT,NOWDT,PUT,noBROWNOUT,noLVP,NOMCLR,xt
#BYTE     PORT_A=0X05
#BYTE     PORT_B=0X06
/***entegreterbiyecisi@yahoo.com***//***entegreterbiyecisi@yahoo.com***/
// LCD STUFF
#define LCD_RS      PIN_b0
#define LCD_EN      PIN_b1
#define LCD_D4      PIN_b2
#define LCD_D5      PIN_b3
#define LCD_D6      PIN_b4
#define LCD_D7      PIN_b5
#define FIRST_LINE  0x00
#define SECOND_LINE 0x40
#define CLEAR_DISP  0x01
#define CURS_ON     0x0e
#define CURS_OFF    0x0c
/***entegreterbiyecisi@yahoo.com***/
#use standard_io ( a )
#use standard_io ( b )
/***entegreterbiyecisi@yahoo.com***/
// proto statements
void LCD_Init        ( void );
void LCD_SetPosition ( unsigned int cX );
void LCD_PutChar     ( unsigned int cX );
void LCD_PutCmd      ( unsigned int cX );
void LCD_PulseEnable ( void );
void LCD_SetData     ( unsigned int cX );
/***entegreterbiyecisi@yahoo.com***//***entegreterbiyecisi@yahoo.com***/
/*************************entegreterbiyecisi@yahoo.com******************************/
int32 ab=0,hz=0;
int1 stept_say=0,data_bitti=0,step,aa=0;
int16 sayi=0,tr=20;
/*************************entegreterbiyecisi@yahoo.com******************************/
#int_timer1
tas(){
ab++;
}
#int_timer0
sn(){sayi=0;
 set_timer0(61);//(255-60)*195*20=1000000us=dahili 1sn icin
 if(tr){ tr--;}
 else{delay_us ( 698 );
      output_low(pin_a0);
      disable_interrupts (global);
      disable_interrupts(int_timer0);
      disable_interrupts(int_timer1);
      sayi=get_timer1();
      aa=1;
      hz=sayi+(65536*ab);
      tr=20;
                              }}
/*************************entegreterbiyecisi@yahoo.com******************************/
   void main() {

      setup_timer_1(t1_external|t1_div_by_1);
      setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_256);
      enable_interrupts(int_timer0); // timer0
      enable_interrupts(int_timer1);
      enable_interrupts(global);
      lcd_init();
      SET_TRIS_A(0b00100000);
      SET_TRIS_B(0b11000000);
      set_timer0(61);
      set_timer1(0);

      LCD_SetPosition(first_LINE+0);
      printf(lcd_putchar,"\NECATi KIYLIOGLU ");
      LCD_SetPosition(second_LINE+1);
      printf(lcd_putchar,"\ 0532 613 65 87");
      delay_ms (500);
      LCD_PutCmd ( CLEAR_DISP );
      sayi=0;
      hz=0;
/*************************entegreterbiyecisi@yahoo.com******************************/
while(true){
   if(aa==1){
      //LCD_PutCmd ( CLEAR_DISP );
      LCD_SetPosition(first_LINE+0);
      printf(lcd_putchar,"\FREQUENCYMETER     ");

    if(999>=hz){
      LCD_SetPosition(second_LINE+0);
      printf(lcd_putchar,"\FRQ=%ldHz          ",hz);}
      //////////////////////////////////////////
    if(hz>=1000){
    if(999999>=hz){
      LCD_SetPosition(second_LINE+0);
      printf(lcd_putchar,"\FRQ=%3.3wKhz         ",hz);}}
      /////////////////////////////////////////////
    if(hz>=1000000){
      LCD_SetPosition(second_LINE+0);
      printf(lcd_putchar,"\FRQ=%2.6wMhz          ",hz);}
      ////////////////////////////////////////////
      delay_ms (1);

      set_timer1(0);
      enable_interrupts(int_timer0);
      enable_interrupts(int_timer1);
      enable_interrupts (global);
      aa=0;
      ab=0;
      }
             }}
/*************************entegreterbiyecisi@yahoo.com******************************/
/***entegreterbiyecisi@yahoo.com***/ //lcd basla
void LCD_Init ( void ){
    LCD_SetData ( 0x00 );
    output_low ( LCD_RS );
    LCD_SetData ( 0x03 );   // init with specific nibbles to start 4-bit mode
    LCD_PulseEnable();
    LCD_PulseEnable();
    LCD_PulseEnable();
    LCD_SetData ( 0x02 );   // set 4-bit interface
    LCD_PulseEnable();      // send dual nibbles hereafter, MSN first
    LCD_PutCmd ( 0x2C );    // function set (all lines, 5x7 characters)
    LCD_PutCmd ( 0x0C );    // display ON, cursor off, no blink
    LCD_PutCmd ( 0x01 );    // clear display
    LCD_PutCmd ( 0x06 );    // entry mode set, increment
    }
/***entegreterbiyecisi@yahoo.com***/
void LCD_SetPosition ( unsigned int cX )
    {
    // this subroutine works specifically for 4-bit Port A
    LCD_SetData ( swap ( cX ) | 0x08 );
    LCD_PulseEnable();
    LCD_SetData ( swap ( cX ) );
    LCD_PulseEnable();
    }
/***entegreterbiyecisi@yahoo.com***/
void LCD_PutChar ( unsigned int cX )
    {
    // this subroutine works specifically for 4-bit Port A
    output_high ( LCD_RS );
    LCD_SetData ( swap ( cX ) );     // send high nibble
    LCD_PulseEnable();
    LCD_SetData ( swap ( cX ) );     // send low nibble
    LCD_PulseEnable();
    output_low ( LCD_RS );
    }
/***entegreterbiyecisi@yahoo.com***/
void LCD_PutCmd ( unsigned int cX )
    {
    // this subroutine works specifically for 4-bit Port A
    LCD_SetData ( swap ( cX ) );     // send high nibble
    LCD_PulseEnable();
    LCD_SetData ( swap ( cX ) );     // send low nibble
    LCD_PulseEnable();
    }
/***entegreterbiyecisi@yahoo.com***/
void LCD_PulseEnable ( void )
    {
    output_high ( LCD_EN );
    delay_us ( 100 );
    output_low ( LCD_EN );
    delay_ms ( 5 );
    }
/***entegreterbiyecisi@yahoo.com***/
void LCD_SetData ( unsigned int cX )
    {
    output_bit ( LCD_D4, cX & 0x01 );
    output_bit ( LCD_D5, cX & 0x02 );
    output_bit ( LCD_D6, cX & 0x04 );
    output_bit ( LCD_D7, cX & 0x08 );
    }
/***entegreterbiyecisi@yahoo.com***/ //lcd son
////////////////////////////////////////////////////////////////////////////

thay đổi nội dung bởi: namqn, 19-05-2007 lúc 08:30 PM.
necati vẫn chưa có mặt trong diễn đàn  
Old 21-05-2007, 10:07 AM   #8
An Hiep
Đệ tử 1 túi
 
An Hiep's Avatar
 
Tham gia ngày: May 2007
Bài gửi: 15
:
Cảm ơn bạn Necati đã Post lên chương trình mà tôi và nhiều anh em đang quan tâm. Tôi muốn hỏi thêm là nếu muốn đo 1 tần số sóng mang nằm trong tín hiệu điều chế thì giải quyết như thế nào. Giả sử có 1 tín hiệu cần điều chế có f = 2KHz độ rộng xung là 2us, tín hiệu sóng mang có f0 = 20MHz, nghĩa là trong 2us của tín hiệu điều chế sẽ có 20*2 = 40 chu kỳ xung của sóng mang trong đó. Bài toán ở đây là đo được tần số 20MHz từ tín hiệu đã điều chế đó.
Rất mong anh Necati và các anh em trong diễn đàn giúp đỡ!
Thanks alot!
An Hiep vẫn chưa có mặt trong diễn đàn  
Old 21-05-2007, 10:34 AM   #9
An Hiep
Đệ tử 1 túi
 
An Hiep's Avatar
 
Tham gia ngày: May 2007
Bài gửi: 15
:
Tôi đọc kỹ thì thấy chương trình của anh Necati cũng đo tần số liên tục, nhưng sử dụng thêm Timer0 để định thời 1 giây, và Timer1 cũng để lấy giá trị đếm số lần xuất hiện xung vào. Tất nhiên, chương trình viết rất chuyên nghiệp, đó cũng là điều mà tôi và nhiều anh em cần học hỏi thêm rất nhiều. Chân thành cảm ơn anh!
An Hiep vẫn chưa có mặt trong diễn đàn  
Old 22-05-2007, 05:18 PM   #10
suongrong17
Nhập môn đệ tử
 
suongrong17's Avatar
 
Tham gia ngày: May 2007
Nơi Cư Ngụ: Ho Chi Minh City
Bài gửi: 4
:
Send a message via Yahoo to suongrong17
Xin hỏi tại sao chương trình dùng ngắt timer0 em làm giống nhu hướng dẫn mà nó không chịu chạy?
__________________
Già vẫn học. Chọc thì cười.
suongrong17 vẫn chưa có mặt trong diễn đàn  
Old 23-05-2007, 11:37 AM   #11
An Hiep
Đệ tử 1 túi
 
An Hiep's Avatar
 
Tham gia ngày: May 2007
Bài gửi: 15
:
Giải thích như bạn thaithienanh là đúng đấy. Bạn phải khai báo thủ tục ngắt cho đúng và trong chương trình chính phải cho phép ngắt (hoặc không) đúng ý đồ thuật toán.
Tiện đây các bạn cho hỏi có cách nào đo được biên độ điện áp của xung vuông có độ rộng xung (thời gian tồn tại mức) nhỏ cỡ 0.4us không? Tôi định dùng ADC thông thường với xung clock nội (thạch anh 20MHz) và dùng thêm các chân phát hiện mức (sườn lên) của xung rồi cho phép lấy ADC nhưng không biết với độ rộng xung hẹp như vậy có khả thi không? Anh em nào biết phương pháp thì giúp tôi với.
Thanks!
-----------------------------------------------------------------------
An Hiệp
An Hiep vẫn chưa có mặt trong diễn đàn  
Old 23-05-2007, 09:23 PM   #12
tranvanthuong
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 45
:
cho em hỏi, em đang làm thí nghiệm pic16f84a, làm led chớp tắt theo ý muốn nhưng em muốn dùng 1 biến trở để chỉnh tốc độ delay thì phải làm sao? nhờ các anh chỉ giáo! và em muốn dùng time 0 được không?
(xin lỗi mấy anh, mục này mà em hỏi F84a)
__________________
Cổng trường Đại học cao vời vợi
Đồng ruộng mênh mong đón em về!
tranvanthuong vẫn chưa có mặt trong diễn đàn  
Old 23-05-2007, 11:07 PM   #13
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi tranvanthuong View Post
cho em hỏi, em đang làm thí nghiệm pic16f84a, làm led chớp tắt theo ý muốn nhưng em muốn dùng 1 biến trở để chỉnh tốc độ delay thì phải làm sao? nhờ các anh chỉ giáo! và em muốn dùng time 0 được không?
(xin lỗi mấy anh, mục này mà em hỏi F84a)
Người ta thường dùng bộ ADC trong PIC (tất nhiên đang nói đến những chip có module ADC) để đọc giá trị của biến trở rồi điều chỉnh thời gian/tốc độ chớp tắt. Với PIC16F84A (không có module ADC), bạn vẫn có thể làm được điều đó, nhưng dùng một cách khác, được đề cập đến trong app. note 863 của Microchip. Bạn tìm đọc app. note đó trên web site của Microchip.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn  
Old 24-05-2007, 10:28 PM   #14
phamthaihoa
Đệ tử 3 túi
 
Tham gia ngày: Jun 2005
Bài gửi: 56
:
Trích:
Nguyên văn bởi tranvanthuong View Post
cho em hỏi, em đang làm thí nghiệm pic16f84a, làm led chớp tắt theo ý muốn nhưng em muốn dùng 1 biến trở để chỉnh tốc độ delay thì phải làm sao? nhờ các anh chỉ giáo! và em muốn dùng time 0 được không?
(xin lỗi mấy anh, mục này mà em hỏi F84a)
Làm như anh namqn là ok roài, nhưng con 16F84A không có comparator nên bạn sẽ phải thêm một con comparator ngoài, ví dụ LM393
phamthaihoa vẫn chưa có mặt trong diễn đàn  
Old 24-05-2007, 07:15 PM   #15
suongrong17
Nhập môn đệ tử
 
suongrong17's Avatar
 
Tham gia ngày: May 2007
Nơi Cư Ngụ: Ho Chi Minh City
Bài gửi: 4
:
Send a message via Yahoo to suongrong17
quét led 7 segment.

Cảm ơn anh thaithienanh nhiều, mình đã làm được rồi.Đã OK phần ngắt. Chiều nay mới quét và hiển thị 2x7 segment leds. Cho nó đếm, đã dần hiểu đựoc7 lập trình vi điầu khiển. Mong đựoc7 các bác chỉ giáo nhiều hơn nữa.

đây là chưong7 trình mà mình mới viết, mai sẽ sử dụng ngắt và timer để làm lại.

Code:
#include<18F4550.h>
#fuses NOWDT,PUT,HS,NOPROTECT
#use delay(clock=10000000)
#use fast_io(b)
#use fast_io(a)
#byte portb=0x6

BYTE CONST LED_MAP[10] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x58,0x00,0x10};
int8 a,i,j;

void ngat()
{

a++;
  if(a>=100)
   a=0;
   }
void main()
{set_tris_a(0);
 a=0;
set_tris_b(0);
while(true)
{  i=0;while(i<=200)
 {i++;
 output_b(led_map[a/10]);
 output_high(PIN_B7);
   output_low(PIN_A0);
   delay_ms(3);
  output_high(PIN_A0);
  output_b(led_map[a%10]);
    output_low(PIN_A1);
    delay_ms(3);
  output_high(PIN_A1);
  }   
 ngat();
}
return;
}
__________________
Già vẫn học. Chọc thì cười.

thay đổi nội dung bởi: falleaf, 24-05-2007 lúc 07:24 PM.
suongrong17 vẫn chưa có mặt trong diễn đàn  
Ðề tài đã khoá


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

Similar Threads
Ðề tài Người gửi Chuyên mục Trả lời Bài mới
TUT về USART trong PIC16F877A mafd_47a MPASM 16 19-02-2025 05:32 AM
TUT ve I2C ( pic16f877a ) mafd_47a MPASM 28 28-01-2025 10:45 PM
Lập nhóm PIC16F877A nhh Cơ bản về vi điều khiển và PIC 285 08-03-2017 11:08 PM
Bộ so sánh và PWM cho PIC16F877A anhquangngai Cơ bản về vi điều khiển và PIC 24 08-09-2012 09:00 AM
Pic16f877a TỪ DỄ TỚi KhÓ ntc Cơ bản về vi điều khiển và PIC 373 23-05-2009 10:24 PM


Múi giờ GMT. Hiện tại là 10:52 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