Em patch được rồi, nhưng sao bản mới này cũng không support mạch nạp Jlink ARM-OB STM32 bác nhỉ .Thanks !
Thông báo
Collapse
No announcement yet.
STM32F103C8T6 mạch cho người mới làm quen ARM ( dev board ) chỉ có I/O
Collapse
X
-
Nguyên văn bởi dquy05 Xem bài viếtAnh Quế Dương ơi, em cài bản 3 của anh thì ok, đã gỡ để cài bản 4 thì không patch được anh à. Anh cho em hỏi là bản 4 cũng không hỗ trợ mạch nạp J link chế độ SW đúng không anh ? Cám ơn anh nhiềuNguyên văn bởi dquy05 Xem bài viếtEm patch được rồi, nhưng sao bản mới này cũng không support mạch nạp Jlink ARM-OB STM32 bác nhỉ .Thanks !Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com
Comment
-
Nguyên văn bởi queduong Xem bài viếtLỗi gì , sao không post lỗi lên ??? Nhà nhà , người người dùng có thấy lỗi đâu , mỗi của cậu lỗi ??? nên cần xem lại cờ rắc ( chưa cờ rắc thì nó báo demo limit ( chữ màu đỏ) , xem code chương trình .v..v đã chuẩn chưa !
Mạch của em đây, chắc là ko có vấn đề gì đâu nhỉ
Comment
-
Nguyên văn bởi edunguyen Xem bài viết
--- Đầu tiên về phần cứng : Mình cũng có làm 1 cách mạch thế này để " tự học " nên khẳng định là không có lỗi ( vì mạch đơn giản chỉ là I/O )
Mình cũng làm 1 cái như thế này để nghịch ... khẳng định là nó chạy tốt nút RESET . ( mạch mình làm cũng thủ công = bàn là với hàn tay thôi ... không có gì cao sang ! ) Mình để nguyên ảnh để bạn tự so với mạch của bạn !
http://qdec.neq3.com/IMG_0116.JPG
http://qdec.neq3.com/IMG_0118.JPG
--- Về phần mềm :
Chắc trong quá trình tạo code wizard ... bạn Chích vào chỗ " sử dụng All library ( Recomemnt )) nên ở trong hình nó mới click vào một đống thư viện thế kia .
Nó cũng chẳng là vấn đề gì ... nhưng nhìn " rối mắt " mà không biết là ta đã sài những cái gì , dùng những cái gì . Tốt nhất khi tạo code , hay làm project mới ... bạn sử dụng NOne ( không dùng thư viện ) . Sau đó vào trong muốn dùng USB , LCD, UART ..v..v dùng cái nào thì ta đánh dấu vào cái đó ... cho đỡ nhức mắt và dễ dàng kiểm soát . Khi dịch cũng sẽ nhanh hơn !
Theo như ở trên hình : Tất cả các dòng màu xanh, màu tím đều không thuộc về lỗi ( mà chỉ là thông tin hay cảnh báo )...
Bạn không dùng TFT thì bỏ nó đi , nó dịch ra kêu cảnh báo thế kia ... nhức mắt lắm .
Những cảnh báo đó không quá ảnh hưởng tới chương trình chạy . Ta chỉ quan sát những chỗ màu đỏ ( Lỗi ) .
Ở đây tôi đã nhìn thấy lỗi ở phần USB ... đây là lỗi của người dùng , lỗi thông báo rằng thiếu file mô tả USBdsc.c ( Mỗi một giao thức USB đều có phần mô tả ( descriptor ) cho biết nó làm việc theo kiểu nào : Interrupt USB hay Polling , HID hay Bulk , keyboard , mouse, device .v..v và trong file mô tả này có VID , PID hay thông tin của thiết bị .
Bạn đã Add file mô tả của bạn USBdsc.c vào Project của bạn chưa ??? Chắc chắn là chưa vì nhìn lỗi nó báo thiếu ( extern ) ở đó !
Đây là nội dung trong file USBdsc.c
Code:const unsigned int USB_VENDOR_ID = 0x1304; const unsigned int USB_PRODUCT_ID = 0x2244; const char USB_SELF_POWER = 0x80; // Self powered 0xC0, 0x80 bus powered const char USB_MAX_POWER = 50; // Bus power required in units of 2 mA const char HID_INPUT_REPORT_BYTES = 64; const char HID_OUTPUT_REPORT_BYTES = 64; const char USB_TRANSFER_TYPE = 0x03; //0x03 Interrupt const char EP_IN_INTERVAL = 1; const char EP_OUT_INTERVAL = 1; const char USB_INTERRUPT = 1; const char USB_HID_EP = 1; const char USB_HID_RPT_SIZE = 33; /* Device Descriptor */ const struct { char bLength; // bLength - Descriptor size in bytes (12h) char bDescriptorType; // bDescriptorType - The constant DEVICE (01h) unsigned int bcdUSB; // bcdUSB - USB specification release number (BCD) char bDeviceClass; // bDeviceClass - Class Code char bDeviceSubClass; // bDeviceSubClass - Subclass code char bDeviceProtocol; // bDeviceProtocol - Protocol code char bMaxPacketSize0; // bMaxPacketSize0 - Maximum packet size for endpoint 0 unsigned int idVendor; // idVendor - Vendor ID unsigned int idProduct; // idProduct - Product ID unsigned int bcdDevice; // bcdDevice - Device release number (BCD) char iManufacturer; // iManufacturer - Index of string descriptor for the manufacturer char iProduct; // iProduct - Index of string descriptor for the product. char iSerialNumber; // iSerialNumber - Index of string descriptor for the serial number. char bNumConfigurations; // bNumConfigurations - Number of possible configurations } device_dsc = { 0x12, // bLength 0x01, // bDescriptorType 0x0200, // bcdUSB 0x00, // bDeviceClass 0x00, // bDeviceSubClass 0x00, // bDeviceProtocol 0x40, // bMaxPacketSize0 USB_VENDOR_ID, // idVendor USB_PRODUCT_ID, // idProduct 0x0001, // bcdDevice 0x01, // iManufacturer 0x02, // iProduct 0x00, // iSerialNumber 0x01 // bNumConfigurations }; /* Configuration 1 Descriptor */ const char configDescriptor1[]= { // Configuration Descriptor 0x09, // bLength - Descriptor size in bytes 0x02, // bDescriptorType - The constant CONFIGURATION (02h) 0x29,0x00, // wTotalLength - The number of bytes in the configuration descriptor and all of its subordinate descriptors 1, // bNumInterfaces - Number of interfaces in the configuration 1, // bConfigurationValue - Identifier for Set Configuration and Get Configuration requests 0, // iConfiguration - Index of string descriptor for the configuration USB_SELF_POWER, // bmAttributes - Self/bus power and remote wakeup settings USB_MAX_POWER, // bMaxPower - Bus power required in units of 2 mA // Interface Descriptor 0x09, // bLength - Descriptor size in bytes (09h) 0x04, // bDescriptorType - The constant Interface (04h) 0, // bInterfaceNumber - Number identifying this interface 0, // bAlternateSetting - A number that identifies a descriptor with alternate settings for this bInterfaceNumber. 2, // bNumEndpoint - Number of endpoints supported not counting endpoint zero 0x03, // bInterfaceClass - Class code 0, // bInterfaceSubclass - Subclass code 0, // bInterfaceProtocol - Protocol code 0, // iInterface - Interface string index // HID Class-Specific Descriptor 0x09, // bLength - Descriptor size in bytes. 0x21, // bDescriptorType - This descriptor's type: 21h to indicate the HID class. 0x01,0x01, // bcdHID - HID specification release number (BCD). 0x00, // bCountryCode - Numeric expression identifying the country for localized hardware (BCD) or 00h. 1, // bNumDescriptors - Number of subordinate report and physical descriptors. 0x22, // bDescriptorType - The type of a class-specific descriptor that follows USB_HID_RPT_SIZE,0x00, // wDescriptorLength - Total length of the descriptor identified above. // Endpoint Descriptor 0x07, // bLength - Descriptor size in bytes (07h) 0x05, // bDescriptorType - The constant Endpoint (05h) USB_HID_EP | 0x80, // bEndpointAddress - Endpoint number and direction USB_TRANSFER_TYPE, // bmAttributes - Transfer type and supplementary information 0x40,0x00, // wMaxPacketSize - Maximum packet size supported EP_IN_INTERVAL, // bInterval - Service interval or NAK rate // Endpoint Descriptor 0x07, // bLength - Descriptor size in bytes (07h) 0x05, // bDescriptorType - The constant Endpoint (05h) USB_HID_EP, // bEndpointAddress - Endpoint number and direction USB_TRANSFER_TYPE, // bmAttributes - Transfer type and supplementary information 0x40,0x00, // wMaxPacketSize - Maximum packet size supported EP_OUT_INTERVAL // bInterval - Service interval or NAK rate }; const struct { char report[USB_HID_RPT_SIZE]; }hid_rpt_desc = { {0x06, 0x00, 0xFF, // Usage Page = 0xFF00 (Vendor Defined Page 1) 0x09, 0x01, // Usage (Vendor Usage 1) 0xA1, 0x01, // Collection (Application) // Input report 0x19, 0x01, // Usage Minimum 0x29, 0x40, // Usage Maximum 0x15, 0x00, // Logical Minimum (data bytes in the report may have minimum value = 0x00) 0x26, 0xFF, 0x00, // Logical Maximum (data bytes in the report may have maximum value = 0x00FF = unsigned 255) 0x75, 0x08, // Report Size: 8-bit field size 0x95, HID_INPUT_REPORT_BYTES,// Report Count 0x81, 0x02, // Input (Data, Array, Abs) // Output report 0x19, 0x01, // Usage Minimum 0x29, 0x40, // Usage Maximum 0x75, 0x08, // Report Size: 8-bit field size 0x95, HID_OUTPUT_REPORT_BYTES,// Report Count 0x91, 0x02, // Output (Data, Array, Abs) 0xC0} // End Collection }; //Language code string descriptor const struct { char bLength; char bDscType; unsigned int string[1]; } strd1 = { 4, 0x03, {0x0409} }; //Manufacturer string descriptor const struct{ char bLength; char bDscType; unsigned int string[16]; }strd2={ 34, //sizeof this descriptor string 0x03, {'M','i','k','r','o','e','l','e','k','t','r','o','n','i','k','a'} }; //Product string descriptor const struct{ char bLength; char bDscType; unsigned int string[18]; }strd3={ 38, //sizeof this descriptor string 0x03, {'U','S','B',' ','H','I','D',' ','L','i','b','r','a','r','y','-','e','x'} }; //Array of configuration descriptors const char* USB_config_dsc_ptr[1]; //Array of string descriptors const char* USB_string_dsc_ptr[3]; void USB_Init_Desc(){ USB_config_dsc_ptr[0] = &configDescriptor1; USB_string_dsc_ptr[0] = (const char*)&strd1; USB_string_dsc_ptr[1] = (const char*)&strd2; USB_string_dsc_ptr[2] = (const char*)&strd3; }
Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com
Comment
-
Nguyên văn bởi queduong Xem bài viết[MENTION=45602]edunguyen[/MENTION]
Cập nhật bản MikroC ARM mới 4.0.0
( thêm chip support , thư viện , fix versions ..v..v )
MikroC PRO ARM mới 4.0.0 EASY and POWER FULL. Thật tuyệt ... anh em cùng thưởng thức .
1) Download từ trang chủ : http://www.mikroe.com/downloads/get/...v400_setup.zip
2) Gỡ bỏ sạch các bản cũ đã cài ( nếu có )
3) Cài mới bản 4.0.0
4) Patch download here : http://qdec.neq3.com/mikroCARM440.7z
5) Giải nén Copy đè vào thư mục đã cài đặt mikroC ARM
6) Khời động chương trình và thưởng thức !
Cảm ơn mọi người trước.
Comment
-
Nguyên văn bởi dcn_dt Xem bài viếtEm đã làm như trên nhưng nó vẫn báo: NOT REGISTERED. Đã khởi động lại máy rồi a.Có ai gặp chung tình huống này thì chỉ cho em với.
Cảm ơn mọi người trước.
tốt nhất Uninstall sạch sẽ ( total uninstaller ) ... rồi cài . Cài xong copy Đè file patch vào là OK !Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com
Comment
-
Bác Dương ơi, Em thấy Bác giúp đỡ mọi người rất nhiệt tình và chi tiết, thay mặt AE trên diễn đàn cám ơn Bác rất nhiều, chúc Bác thành công trong sự nghiệp Điện tử.
Bác cho em hỏi thêm mấy cái của MikroC : Em dùng STM32
1. Hàm ADC, Code :
ADC_Set_Input_Channel(_ADC_CHANNEL_10 | _ADC_CHANNEL_11); // Set ADC channel 10 as an analog input
ADC1_Init(); // Initialize ADC module
adc_value1 = ADC1_Get_Sample(10);
adc_value2 = ADC1_Get_Sample(11);
==> khi em đọc giá trị adc_value1, adc_value2 về cùng 1 lúc rồi hiển thị lên LCD thì giá trị kênh này ảnh hưởng rất lớn đến kênh kia.
2. PWM, Code:
PWM_TIM1_Init(5000);
PWM_TIM1_Set_Duty(current_duty, _PWM_NON_INVERTED, _PWM_CHANNEL1); // Set current duty for PWM_TIM1
PWM_TIM1_Start(_PWM_CHANNEL1, &_GPIO_MODULE_TIM1_CH1_PE9);
==> Hàm Set_Duty chỉ xuất xung 1 lần mà không duy trì, ở AVR em chỉ set 1 lần là sẽ duy trì mãi.
3. Em tìm mà chưa thấy thư viện sẵn RTC nội của nó
4. Giờ có bản 4.2 rồi nhưng em không có thuốc nên chưa dùng được hết tính năng của nó.
Em rất mong Bác chỉ giúp em các vấn đề trên, vì em mới chuyển sang chip32. Thanks bác.Phạm Duy Quý
PN:0973291335
Dám nghĩ,dám nói,dám làm
Comment
-
Nguyên văn bởi dquy05 Xem bài viếtBác Dương ơi, Em thấy Bác giúp đỡ mọi người rất nhiệt tình và chi tiết, thay mặt AE trên diễn đàn cám ơn Bác rất nhiều, chúc Bác thành công trong sự nghiệp Điện tử.
Bác cho em hỏi thêm mấy cái của MikroC : Em dùng STM32
1. Hàm ADC, Code :
ADC_Set_Input_Channel(_ADC_CHANNEL_10 | _ADC_CHANNEL_11); // Set ADC channel 10 as an analog input
ADC1_Init(); // Initialize ADC module
adc_value1 = ADC1_Get_Sample(10);
adc_value2 = ADC1_Get_Sample(11);
==> khi em đọc giá trị adc_value1, adc_value2 về cùng 1 lúc rồi hiển thị lên LCD thì giá trị kênh này ảnh hưởng rất lớn đến kênh kia.
2. PWM, Code:
PWM_TIM1_Init(5000);
PWM_TIM1_Set_Duty(current_duty, _PWM_NON_INVERTED, _PWM_CHANNEL1); // Set current duty for PWM_TIM1
PWM_TIM1_Start(_PWM_CHANNEL1, &_GPIO_MODULE_TIM1_CH1_PE9);
==> Hàm Set_Duty chỉ xuất xung 1 lần mà không duy trì, ở AVR em chỉ set 1 lần là sẽ duy trì mãi.
3. Em tìm mà chưa thấy thư viện sẵn RTC nội của nó
4. Giờ có bản 4.2 rồi nhưng em không có thuốc nên chưa dùng được hết tính năng của nó.
Em rất mong Bác chỉ giúp em các vấn đề trên, vì em mới chuyển sang chip32. Thanks bác.
có thể dùng patch Bản 4.2.0 của mình ở dưới đây ( không có pass )
1) cài đặt bản 4.2.0
2) copy vào thư mục đã cài đặt
mikroCPROforARM42.zipModule RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com
Comment
-
Anh Duơng cho em hỏi tí. Em mới tập tành với MikroC, nhưng có những lỗi rất là khó hiểu, anh Duơng giải đáp giúp. Em có đoạn code sau lập trình trên pic6f1823
#define dkkey1 porta.b0
#define dkkey2 porta.b1
void quetphim(){
trisa.b0=0;trisa.b1=0;
porta=1;
//dkkey1=0;dkkey2=1;//1
//porta.b0=0;porta.b1=1;//2
delay_ms(100);
porta=2;
//dkkey1=1;dkkey2=0;//1
// porta.b0=1;porta.b1=0;//2
delay_ms(100);
}
Nếu em dùng đúng như trên thì sóng ngõ ra trên hai chan RA0 và RA1 đảo ngược nhau và dúng sóng vuông lêch nhau mức 1 và 0 là 100ms.
Nhưng nếu em dùng cặp lệnh //1 hay //2 thay cho porta=1 và porta=2; thì sóng ngõ ra rất là lộn xộn, thời gian tồn tại mức 1 và mức 0 ở hai chân RA0 và RA1 lệch nhau kinh khủng, cái thì dài ơi là dài cái thì ngắn ơi là ngắn.
Em không hiểu việc điều khiển từng chân như vậy có đúng không, vì em có làm như thế này với chip khác thì chưa thấy lỗi. ah với chip này em set chế độ dao động nội.
Một trường hợp nữa là em có load một ví dụng sử dụng mikroC trên net, em chạy mô phỏng với file hex của tác giả thì kết quả đúng như tác giả mô tả, nhưng khi em mở cái file MikroC và build lại thì kết quả lại chạy loạn lên, em không sửa bất kì lệnh nào. không bit sao nữa, em cố gắn remove cái mikroC và cài lại nhưng vẫn bị lỗi như vậy. ??? Không lẽ thuốc của em chưa đủ đô??
Mong anh tư vấn.
Comment
-
Nguyên văn bởi hocdi Xem bài viếtAnh Duơng cho em hỏi tí. Em mới tập tành với MikroC, nhưng có những lỗi rất là khó hiểu, anh Duơng giải đáp giúp. Em có đoạn code sau lập trình trên pic6f1823
#define dkkey1 porta.b0
#define dkkey2 porta.b1
void quetphim(){
trisa.b0=0;trisa.b1=0;
porta=1;
//dkkey1=0;dkkey2=1;//1
//porta.b0=0;porta.b1=1;//2
delay_ms(100);
porta=2;
//dkkey1=1;dkkey2=0;//1
// porta.b0=1;porta.b1=0;//2
delay_ms(100);
}
Nếu em dùng đúng như trên thì sóng ngõ ra trên hai chan RA0 và RA1 đảo ngược nhau và dúng sóng vuông lêch nhau mức 1 và 0 là 100ms.
Nhưng nếu em dùng cặp lệnh //1 hay //2 thay cho porta=1 và porta=2; thì sóng ngõ ra rất là lộn xộn, thời gian tồn tại mức 1 và mức 0 ở hai chân RA0 và RA1 lệch nhau kinh khủng, cái thì dài ơi là dài cái thì ngắn ơi là ngắn.
Em không hiểu việc điều khiển từng chân như vậy có đúng không, vì em có làm như thế này với chip khác thì chưa thấy lỗi. ah với chip này em set chế độ dao động nội.
Một trường hợp nữa là em có load một ví dụng sử dụng mikroC trên net, em chạy mô phỏng với file hex của tác giả thì kết quả đúng như tác giả mô tả, nhưng khi em mở cái file MikroC và build lại thì kết quả lại chạy loạn lên, em không sửa bất kì lệnh nào. không bit sao nữa, em cố gắn remove cái mikroC và cài lại nhưng vẫn bị lỗi như vậy. ??? Không lẽ thuốc của em chưa đủ đô??
Mong anh tư vấn.
Thêm lệnh ANSELA =0; ( tắt Analog ) đi là nó chạy được thôi .
Bài trên có nhiều kiểu viết ... và các cách là như nhau :
1)
Code:#define dkkey1 porta.b0 #define dkkey2 porta.b1 void main(){ trisa.b0=0;trisa.b1=0; ANSELA=0; while(1) { dkkey1=0;dkkey2=1;//1 delay_ms(100); dkkey1=1;dkkey2=0;//1 delay_ms(100); } }
Code:#define dkkey1 RA0_bit #define dkkey2 RA1_bit void main(){ trisa0_bit=0;trisa1_bit=0; ANSELA=0; while(1) { dkkey1=0;dkkey2=1;//1 delay_ms(100); dkkey1=1;dkkey2=0;//1 delay_ms(100); } }
TrisA0_bit cũng tương đương như trisa0_bit , trisa.b0 , trisa.F0 , v..v ( trong mikroC thường mặc định không phân biệt chữ hoa/ chữ thường với 1 số từ khóa .
Porta.b0 <=> PORTA.F0 <=> RA0_bit
---- Còn việc người ta đưa đề tài , project trên mạng mình lấy về , có mã nguồn thì mình cần tìm hiểu xem ... chứ có thể mã nguồn 1 kiểu mà file Hex lại là 1 kiểu ( phiên bản , version 1 ,2 ,3 .... ) ... ví như người ta thêm 1 số câu lệnh vào, dịch ... được file hex ... sau 1 thời gian khác sửa chữa lại có file hex khác ... Các project kiểu này có thể hay xảy ra ... hoặc cũng biết đâu người ta chẳng muốn cho ăn sẵn ( vì ăn sẵn hốt về lại làm hại người ta ) nên chỉ đưa ra cái cơ bản ( tạm chạy được ) còn cái tinh túy người ta dấu đi .
Có mã nguồn thì cứ nhìn vào đó mà suy luận !Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com
Comment
-
Dạ em cảm ơn anh Duơng.
Em có ví dụ định thời timer0 0.5ms trên píc6f877a. Nếu em sử dụng ngắt với chương trình như sau thì đúng 0.5ms.
void Interrupt() {
if (T0IF_bit){
RD0_bit=~RD0_bit;
}
T0IF_bit=0;
TMR0=5;
}
void main() {
TRISD.F0=0; //RD0 output
TRISD.F1=1;// RD1 input
PORTD.F0=0;
GIE_bit=1;
PEIE_bit=1;
T0IE_bit=1; // Cho phep ngat timer0
T0CS_bit=0; //Timer
PSA_bit=0; //Prescale
PS0_bit=0;
PS1_bit=0;
PS2_bit=0; // 1:2
TMR0=5;
T0IF_bit=0; // Xoa co ngat timer0
while(1){
}
}
Nhưng nếu em không dùng ngắt mà dùng như sau thì chuơng trình lại cho xung ngõ với chu kỳ 7.5us. Em không biết là ý tưởng em sai hay em lập trình sai, anh Dương xem giúp ạ
/*void Interrupt() {
if (T0IF_bit){
RD0_bit=~RD0_bit;
}
T0IF_bit=0;
TMR0=5;
} */
void main() {
TRISD.F0=0; //RD0 output
TRISD.F1=1;// RD1 input
PORTD.F0=0;
GIE_bit=1;
PEIE_bit=1;
T0IE_bit=1; // Cho phep ngat timer0
T0CS_bit=0; //Timer
PSA_bit=0; //Prescale
PS0_bit=0;
PS1_bit=0;
PS2_bit=0; // 1:2
TMR0=5;
T0IF_bit=0; // Xoa co ngat timer0
while(1){
TMR0=5;//dat gia tri ban dau
T0IF_bit=0;//xoa co ngat
while(!T0IF);//cho cho co ngat len 1 nghia la timer dem duoc 250xung, voi bo chi 1:2 thì nghĩa là timer0 dem duoc 500xung, với thạch anh 1MHZ<=>1us/tick
//500xung=500us=0.5ms
RD0_bit=~RD0_bit;
}
}
em sử dụng thạch anh 4MHZ
Comment
-
Nguyên văn bởi hocdi Xem bài viếtDạ em cảm ơn anh Duơng.
Em có ví dụ định thời timer0 0.5ms trên píc6f877a. Nếu em sử dụng ngắt với chương trình như sau thì đúng 0.5ms.
void Interrupt() {
if (T0IF_bit){
RD0_bit=~RD0_bit;
}
T0IF_bit=0;
TMR0=5;
}
void main() {
TRISD.F0=0; //RD0 output
TRISD.F1=1;// RD1 input
PORTD.F0=0;
GIE_bit=1;
PEIE_bit=1;
T0IE_bit=1; // Cho phep ngat timer0
T0CS_bit=0; //Timer
PSA_bit=0; //Prescale
PS0_bit=0;
PS1_bit=0;
PS2_bit=0; // 1:2
TMR0=5;
T0IF_bit=0; // Xoa co ngat timer0
while(1){
}
}
Nhưng nếu em không dùng ngắt mà dùng như sau thì chuơng trình lại cho xung ngõ với chu kỳ 7.5us. Em không biết là ý tưởng em sai hay em lập trình sai, anh Dương xem giúp ạ
/*void Interrupt() {
if (T0IF_bit){
RD0_bit=~RD0_bit;
}
T0IF_bit=0;
TMR0=5;
} */
void main() {
TRISD.F0=0; //RD0 output
TRISD.F1=1;// RD1 input
PORTD.F0=0;
GIE_bit=1;
PEIE_bit=1;
T0IE_bit=1; // Cho phep ngat timer0
T0CS_bit=0; //Timer
PSA_bit=0; //Prescale
PS0_bit=0;
PS1_bit=0;
PS2_bit=0; // 1:2
TMR0=5;
T0IF_bit=0; // Xoa co ngat timer0
while(1){
TMR0=5;//dat gia tri ban dau
T0IF_bit=0;//xoa co ngat
while(!T0IF);//cho cho co ngat len 1 nghia la timer dem duoc 250xung, voi bo chi 1:2 thì nghĩa là timer0 dem duoc 500xung, với thạch anh 1MHZ<=>1us/tick
//500xung=500us=0.5ms
RD0_bit=~RD0_bit;
}
}
em sử dụng thạch anh 4MHZ
Ở đây bạn dùng cách đếm vòng timer ( rolling ) nhưng lại vẫn enable ngắt timer ... điều này rất nguy hiểm ( có thể là lập trình mới nên ít kinh nghiệm , hoặc có thể thiếu cơ bản ( cái này thuộc về cơ bản nhiều hơn ) ...
Nếu để enable ngắt timer ... mà không clear kịp thời cờ tràn ( flag bit ) sẽ gặp trường hợp nhảy vào ngắt liên tục ( khi chưa kịp clear flag bit ) ( rất có thể bị đệ qui ) ... đây có thể là nguyên nhân đầu tiên dẫn đến đầu ra bị ngắt xung .
- thứ 2 : T0IF bên trong mikroC trình dịch được ngầm hiểu theo từng câu lệnh cụ thể , có thể là giá trị, biểu thức logic chứ không phải bit flag chung chung như 1 số trình dịch khác . Khi tác động trực tiếp đến 1 bit Cụ thể Trong 1 thanh ghi thì ghi trực tiếp là bit , hoặc Tên_thanh_ghi.B0 , . B1 , .B2 , .F0 , .F1 .v.v
Ở đây cụ thể là T0IF_bit
do vậy câu lệnh while(!T0IF); chẳng có ý nghĩa gì về mặt logic lệnh while ở đây mà phải viết while(!T0IF_bit); ( tức là trong khi bit T0IF chưa được set lên mức cao... thì đợi ở đó mà chẳng làm gì cả ) .
--- KL : Có thể bạn bỏ ngắt timer đi ( T0IE_bit =0; ) hoặc xóa hẳn dòng này ... trong lệnh while(T0IF); thay bằng while(!T0IF_bit); có thể nó sẽ chạy .
Tôi chưa test bạn có thể test thử xem có được không !Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com
Comment
-
Nguyên văn bởi khonggioihan Xem bài viếtbác queduong oi sao cái patch bản 4.2 của bác lại ko patch được nhỉ .khi dán vào trong chỗ cài chương trình thì trong đó cũng có 1 file giống y hệt như cái patchModule RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com
Comment
Bài viết mới nhất
Collapse
-
bởi Minhdai95Em chào mọi người, e đang sửa mạch tạo sóng siêu âm cho máy rửa mà chưa có tài liệu để tham khảo sửa, mọi người cho e xin tài liệu ạ...
-
Channel: Điện tử công suất
hôm nay, 11:37 -
-
bởi pia2k1Cùng câu hỏi và cần được giải đáp thêm ạ...
-
Channel: Hướng dẫn sử dụng diễn đàn
hôm nay, 11:28 -
-
bởi trun9Chào các bạn,
Tôi vừa làm 1 video Youtube đăng lên vào tối hôm qua, hiện tại có 4 lượt xem đều là của tôi vào xem có ai xem không
https://www.youtube.com/watch?v=_oFIBAcvoSY
Vào xem và chửi tôi để tôi bớt làm lại đi.-
Channel: Quảng cáo
hôm nay, 08:55 -
-
Trả lời cho Công thức điện tửbởi mèomướpDạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 21:21 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 20:31 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11Ok , thanks bác đã chỉ...
-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 15:06 -
-
bởi nguyendinhvanSau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !
Chập thì thay. Cháy thì tháo
Làm thì láo. Báo thì hay
May thì khoe. Rủi thì bỏ
Thành tích nhỏ. Báo thành to
Làm cho có. Báo chi li
Sai cả li. Báo...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 00:35 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11có chắc ko b, màn lcd phải có cao áp mới sáng, màn led thì ko có, ko có cáp chuyển đổi thì lắp thế nào đc ??...
-
Channel: Thiết bị điện tử cá nhân
25-11-2024, 22:31 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ ý chú là màn oled ấy ạ. Cùng chuẩn lvds cùng độ phân giải thì cắm được ạ. Còn nó mà khác thì hơi khó vì oled các điểm ảnh nó tự phát sáng chứ ko dùng đèn nền như lcd. Cháu chỉ biết đến vậy thôi ạ. Chú muốn nghịch phải tự tìm hiểu kỹ trước khi mua thôi, khó mà ông thợ nào tư vấn vụ này...
-
Channel: Thiết bị điện tử cá nhân
25-11-2024, 22:14 -
-
Trả lời cho Tự làm máy đo Cuộn cảmbởi bacthoHay đấy bạn ạ. Đây có thể hiểu là máy đo cuộn dây. Tiện đây xin cho hỏi bạn có hiểu rõ về máy nạp rôm pcb 45 của hãng thiên minh không giúp mình cách cài fw của nó với vì mình vừa được anh bạn cho nhưng lại không biết cài fw nên chưa dùng được. Nếu có thể thì bạn giúp mình với...
-
Channel: Điện tử dành cho người mới bắt đầu
25-11-2024, 21:48 -
Comment