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
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi bqvietCuối năm bàn thêm chuyện to hơn chút, đấy là 2 vụ rơi đám 737 đời mới và trục trặc ở cả tá chiếc khác. Ngay cả những thứ tưởng như cao siêu sang xịn thật thì vẫn có thể gặp trường hợp oái oăm như thường. Từ hồi đó bqv đã thấy khó hiểu làm sao lại đẻ ra đám MCAS quái thai đến thế được. Rồi...
-
Channel: Điện tử công suất
24-01-2025, 19:40 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi bqvietBqv phải vào ngay để tán đồng với bài viết trên của bạn. Chỉ bàn về kỹ thuật, thiết bị máy móc của hãng dù danh tiếng vẫn có thể xảy ra những chuyện ngoài dự kiến, thậm chí những chuyện tưởng như không bao giờ có thể xảy ra....
-
Channel: Điện tử công suất
24-01-2025, 19:31 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80(ĐT chia sẻ MPPT này, với mong muốn rằng, chúng ta hãy tự tin lên, hãy tự hào là người VN, đừng quá tin vào người khác, đừng quá thần tượng họ, cần kiểm tra thực chứng chứ không nên cứ cho các thiết bị thông minh, cao siêu là hoàn hảo)
-
Channel: Điện tử công suất
24-01-2025, 12:08 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80Dưới đây là hình ảnh thực:
(bị phạm con tụ pi C17 (phía trên IC U3/DIP08: văng mất xác!)
(hàn vào vị trí C17 tụ pi 27nF ( giá trị phỏng đoán từ 10-100nF!), mạch vẫn chạy như trước khi cạy keo)...-
Channel: Điện tử công suất
24-01-2025, 12:05 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80ĐT đã mạnh dạn mail thử cho hãng SRNE, họ trả lời là nó dùng nhiệt điện trở ở bên trong mạch như sau:
"Our street light controller product triggers high temperature protection based on internal thermistor sampling''
Thấy hơi lo lắng vì kiến thức điện tử...-
Channel: Điện tử công suất
24-01-2025, 11:39 -
-
Trả lời cho tìm mua đồng hồ vạn năngbởi mèomướpDạ chú mua cái kẹp dòng ấy ạ. Chị hàng xóm nhà cháu có 1 cái thấy lâu lâu rùi chưa hỏng ạ. Ví dụ như mẫu này trên shoppee đầy ạ...
https://vn.shp.ee/dWYVgq7-
Channel: Điện tử dành cho người mới bắt đầu
21-01-2025, 12:48 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi vi van phamBác Đinh Vặn sai rồi,bây giờ con nít mẫu giáo đã giải phương trình 2 ẩn số rồi.
Tôi chứng minh bác lên youtube đầy video đơn giản tựa rất hot, chỉ 1 transistor hay 1 con diode và hướng dẩn cách làm, tác giả không vẽ sơ đồ mạch điện...-
Channel: Điện tử công suất
21-01-2025, 11:55 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi nguyendinhvanBây giờ mới có tháng giêng, bao giờ mới đến tháng mười ?
Các cháu mẫu giáo mới lên lớp 1 được có 4 tháng. Nên đừng lấy lý do chúng nó đã đi học rồi để bắt nó viết một bài luận văn, hay là giải bài toán hàm. Phải kiên nhẫn...-
Channel: Điện tử công suất
21-01-2025, 00:47 -
-
Trả lời cho tìm mua đồng hồ vạn năngbởi nguyendinhvanKhông có loại nào đủ một vạn chức năng đâu. Nó chỉ được 2345678 , hoặc khủng lắm thì được 10 chức năng.
-
Channel: Điện tử dành cho người mới bắt đầu
21-01-2025, 00:16 -
-
bởi since0501Cảm ơn bác đã chia sẻ!...
-
Channel: Điện tử dành cho người mới bắt đầu
19-01-2025, 19:00 -
Comment