完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
你好,我是MPLABX IPE和IDE的新手。我使用PIC12F1822 8引脚微控制器。我只是想让LED闪光灯开始。如果我使用IPE,它会检测我的PIC并编程它(虽然程序没有按预期工作)。如果我使用IDE尝试编程我的PIC,它会给出错误信息:“没有找到目标设备(无法检测到目标电压VDD)。你必须连接到一个目标设备使用皮卡3。“最初我用我的PICtiT3作为程序员和电源,但我想可能这就是为什么我不能从IDE编程PIC的原因,所以我使用了一个单独的5V电源,确保我把单独的SU的场地绑好了。PPLE,PICTIT3和PIC一起。IDE仍然给出相同的错误信息,虽然它不可能导致无法找到PIC,但这里是我的代码:有人能指出我可能出错的地方吗?
以上来自于百度翻译 以下为原文 Hi, I am new to MPLABX IPE & IDE. I am using a PIC12F1822 8 pin microcontroller. I am just trying to get a LED flashing to start with. If I use the IPE it detects my PIC and programs it (although the program doesn't work as expected). If I use the IDE to try to program my PIC it gives the error message: "Target device was not found (could not detect target voltage VDD). You must connect to a target device to use PICkit 3." Initially I was using the my PICkit3 as the programmer and power source, but I thought that maybe that could have been why I couldn't program the PIC from the IDE, so I used a separate 5V supply and made sure I tied the grounds of the separate supply, the PICkit3 and the PIC together. Still the IDE gives the same error message. While it is not likely to be causing the inability to find the PIC here is my code: /* * File: newmain.c * Author: root * * Created on December 28, 2017, 8:04 AM */ // PIC12F1822 Configuration Bit Settings // 'C' source line config statements // CONFIG1 #pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin) #pragma config WDTE = ON // Watchdog Timer Enable (WDT enabled) #pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled) #pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR) #pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled) #pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled) #pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled) #pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin) #pragma config IESO = ON // Internal/External Switchover (Internal/External Switchover mode is enabled) #pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled) // CONFIG2 #pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off) #pragma config PLLEN = ON // PLL Enable (4x PLL enabled) #pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset) #pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.) #pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled) // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. #include #include #include #define _XTAL_FREQ 20000000 void main(void) { TRISA = 0b000100; // set RA2 as input, all others as outputs while(1){ PORTAbits.RA5 = 1; // using RA5 to flash LED __delay_ms(500); PORTAbits.RA5 = 0; __delay_ms(500); } return; } Can anyone suggest where I might be going wrong? |
|
相关推荐
19个回答
|
|
|
|
|
|
为了避免RMW效应,您应该总是写入LATX EGIST并从PORTX寄存器中读取。
以上来自于百度翻译 以下为原文 To avoid RMW effects you should always WRITE to the LATx egisters and READ from the PORTx registers. Change: PORTAbits.RA5 = 1; // using RA5 to flash LED __delay_ms(500); PORTAbits.RA5 = 0; __delay_ms(500); to: LATAbits.LATA5 = 1; // using RA5 to flash LED __delay_ms(500); LATAbits.LATA5 = 0; __delay_ms(500); |
|
|
|
PACTIT3检测电压的能力不取决于您是否使用IDE或IPE。最有可能的是,你有一种可以接通/断开的床接点。你可以很容易地测量PICTIT3 GND和VDD管脚之间的电压,看看它是否在那里。如果你看到电压,但是PICTIT3没有问题。
以上来自于百度翻译 以下为原文 The ability of PICkit3 to detect the voltage doesn't depend on whether you use IDE or IPE. Most likely, you have some sort of a bed contact which may connect/disconnect randomly. You can easily measure the voltage between PICkit3 GND and VDD pins to see if it's there. If you see the voltage, but PICkit3 doesn't the problem is in PICkit3. |
|
|
|
我从内存中写入,但是尝试检查它:转到MPLAB中的PACKIT属性。将其还原为工厂,并将固件从最新使用更改为从文件中选择。
以上来自于百度翻译 以下为原文 I write from memory, but try to check it: Go to pickit properties in MPLAB. Restore it to factory and change firmware from latest use to selected from file. |
|
|
|
|
|
|
|
你好,诺斯盖尔提供了一个很好的解决方案。您可以检查在针2和针3的针脚3之间是否存在电压,因为它们是VDD和VSS引脚。如果是这样,那肯定是你的电路出了毛病。检查是否在使用IPE下载程序后对电路进行任何更改。你也可以检查在使用IPE的时候断开的电线,但是在尝试使用IDE时断开连接。希望这有帮助。真诚的,原始的人类。
以上来自于百度翻译 以下为原文 Hello, NorthGuy offered a pretty good solution. You could check if there is a voltage between Pin 2 and Pin 3 of the PICkit 3 as they are the VDD and VSS pins. If that's there then there must be something wrong with your circuit. Check if you made any changes to your circuit after downloading the program using IPE. You can also check for broken wires that may be connected while you were using the IPE but disconnected while tried using the IDE. Hope this helps. Sincerely, PrimitiveHuman. |
|
|
|
我想我可能已经发现了这个问题的一部分。在IPE中,我选择了“从工具中的电源目标电路”,但是在IDE中,我找不到那个选项。我拔掉所有的接线线,重新布线所有的东西。我一定错过了将PICTIT3的Vdd和外部电源连接在一起。现在它通过IDE编程,但是LED不闪烁,而是在编程后继续打开。这是我正在使用的代码:
以上来自于百度翻译 以下为原文 I think I may have found (part of) the problem. In the IPE I selected "Power Target Circuit From Tool", however in the IDE I cannot find that option. I pulled out all of the hookup wires and rewired everything. I must have missed tieing together the Vdd of the PICkit3 and the external power supply. Now it programs through the IDE, however the LED doesn't flash, instead it turns ON after programming and stays on. Here is the code I am using: /* * File: newmain.c * Author: root * * Created on December 28, 2017, 8:04 AM */ // PIC12F1822 Configuration Bit Settings // 'C' source line config statements // CONFIG1 #pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin) #pragma config WDTE = ON // Watchdog Timer Enable (WDT enabled) #pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled) #pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR) #pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled) #pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled) #pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled) #pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin) #pragma config IESO = ON // Internal/External Switchover (Internal/External Switchover mode is enabled) #pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled) // CONFIG2 #pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off) #pragma config PLLEN = ON // PLL Enable (4x PLL enabled) #pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset) #pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.) #pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled) // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. #include #include #include #define _XTAL_FREQ 20000000 void main(void) { TRISA = 0b000100; // set RA2 as input, all others as outputs LATAbits.LATA0 = 0; LATAbits.LATA1 = 0; LATAbits.LATA4 = 0; while(1){ LATAbits.LATA5 = 1; // using RA5 to flash LED __delay_ms(500); LATAbits.LATA5 = 0; __delay_ms(500); } return; } |
|
|
|
关闭看门狗定时器。你可能也不需要LVP。
以上来自于百度翻译 以下为原文 Turn off the watchdog timer. You probably do not need lvp either. |
|
|
|
我关闭了WDT和LVP。没有变化,LED来了,但没有闪光。我试着把LED移动到波尔塔引脚4并相应地调整代码,以防万一输出引脚出现问题,但同样的结果。
以上来自于百度翻译 以下为原文 I turned off both the WDT and LVP. There is no change, the LED comes on, but doesn't flash. I tried moving the LED to PortA pin 4 and adjusting the code accordingly, just in case there was a problem with that output pin, but same result. |
|
|
|
您选择了内部振荡器,没有配置它。所以你的芯片没有运行在20MHz。要么配置振荡器,要么将XTaluFrq设置为PIC正在运行的频率。
以上来自于百度翻译 以下为原文 You have selected the internal oscillator and have not configured it. So your chip is not running at 20MHz. Either configure the oscillator or set xtal_freq to the frequency you pic is running at. |
|
|
|
您使用的是500千赫的默认时钟速度,但是启用了PLL,所以您运行在500×4=2MHz,但是您已经告诉编译器您运行在20MHz,因此延迟将花费您请求的时间的十倍。也许这也是你的问题。尽量不要在配置词中启用PLL。
以上来自于百度翻译 以下为原文 You are using the default clock speed of 500 kHz, but enabled the PLL so you are running at 500*4 = 2MHz, but you have told the compiler you are running at 20MHz, so the delays will take ten times as long as you request. Edit: I've never even tried running the PLL from a 500kHz clock. Maybe that is your problem too. Try NOT enabling the PLL in the config word. |
|
|
|
一旦我建立了OSCCon寄存器,我发现我仍然需要为工作延迟定义xxTalfFrq。谢谢您!
以上来自于百度翻译 以下为原文 Once I setup the OSCCON register, I found I still needed to define the _XTAL_FREQ for the delay to work. Its now blinking the LED as expected. Thank you! |
|
|
|
XxTaluFrq只是告诉编译器你的PIC运行速度有多快,它不控制PIC。
以上来自于百度翻译 以下为原文 _XTAL_FREQ just tells the compiler how fast your PIC is running. It does NOT control the PIC. |
|
|
|
在这里。PICDIT3VDD引脚没有连接到您的电路。因此,除非工具将自己的电压提供给它自己的引脚,否则该工具无法检测电压。
以上来自于百度翻译 以下为原文 Here it is. The PICkit3 VDD pin is not connected to your circuit. So, the tool cannot detect the voltage unless the tool supplies its own voltage to its own pin. |
|
|
|
YEP数据表状态PLL输入必须在4和8兆赫之间,可能不在这些极限之外工作。
以上来自于百度翻译 以下为原文 Yep datasheet states PLL input must be between 4 and 8 Mhz, might not work outside those limits. |
|
|
|
编辑:我应该澄清,我计划稍后添加一个按钮开关,但我目前在代码中手动控制模式。现在,LED闪烁,我试着改变代码,得到一个闪光灯去。我一定是在做振荡器的错误,但是我搞不清楚是什么。我一直在读数据表的振荡器部分,但是我必须丢失一些东西,或者可能是31 KHz的内部振荡器不能与γ-DelayyMs-()函数很好地配合。我想使用31 KHz时钟,因为我计划把它变成低功耗电池应用。我已经设置了PLLN配置字组为OFF,OSCCon寄存器为0B000 000,7位为PLL(虽然这被PLL配置字忽略),位6—3是频率选择位(000 0x= 3KHz),位2不被使用(根据数据表),位1-0是1X=使用内部振荡器B。锁。我正在用LED做一些闪光灯,闪烁率似乎有点差,我在“模式1”和“模式2”中得到了额外的闪烁,这里不应该有任何。这是我的当前代码:
以上来自于百度翻译 以下为原文 EDIT: I should have clarified that I plan to add a button switch later, but am currently controlling the Modes manually in the code. Now that the LED is blinking I tried changing the code to get a strobe going. I must be doing something wrong with the oscillator but I can't figure out what. I've been reading over the oscillator section of the datasheet, but I must be missing something, or maybe the 31kHz internal oscillator doesn't play well with the __delay_ms() function. I want to use the 31kHz clock because I plan to make this into a low power battery application. I've set the PLLEN config word set to OFF, the OSCCON register to 0b00000011 with bit 7 being PLL (although this is ignored due to the PLL config word), bits 6-3 are the frequency select bits (000x = 31kHz), bit 2 is not used (according to the datasheet), bits 1-0 are 1x = use internal oscillator block. I am doing some strobing with the LED and the blink rates seem to be a bit out and I'm getting extra blinks in "Mode 1" and "Mode 2" where there shouldn't be any. Here is my current code: /* * First PIC version of WatchOutLights * * File: main_1.c * * Author: root * * Created on December 14, 2017, 11:28 PM */ // PIC12F1822 Configuration Bit Settings // 'C' source line config statements // CONFIG1 #pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin) #pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled) #pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR) #pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled) #pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled) #pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled) #pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin) #pragma config IESO = ON // Internal/External Switchover (Internal/External Switchover mode is enabled) #pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled) // CONFIG2 #pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off) #pragma config PLLEN = OFF // PLL disable #pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset) #pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.) // #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF. #include #include #include #define _XTAL_FREQ 31000 // 31kHz long unsigned int lastDebounceTime = 0; long debounceDelay = 50; char strobeMode = 1; /******************************************** * Function Prototypes *********************************************/ void initPort(); void main(void) { initPort(); while(1) { switch(strobeMode) { case 0: LATAbits.LATA5 = 0; // turn off LED break; case 1: LATAbits.LATA5 = 1; __delay_ms(50); LATAbits.LATA5 = 0; __delay_ms(500); LATAbits.LATA5 = 1; __delay_ms(50); LATAbits.LATA5 = 0; __delay_ms(120); LATAbits.LATA5 = 1; __delay_ms(50); LATAbits.LATA5 = 0; __delay_ms(1000); break; case 2: for (int i=0; i<3; i++) { LATAbits.LATA5 = 1; __delay_ms(50); LATAbits.LATA5 = 0; __delay_ms(80); } LATAbits.LATA5 = 0; __delay_ms(400); break; case 3: LATAbits.LATA5 = 1; __delay_ms(500); LATAbits.LATA5 = 0; __delay_ms(500); break; } } return; } void initPort() { OSCCON = 0b00000011; // 31kHz TRISA = 0x04; // PortA 000100 RA5 is LED, RA2 is Power Button // Pin 2 as INT input, pin 5 as LED output LATAbits.LATA0 = 0; // tie unused pins to GND LATAbits.LATA1 = 0; LATAbits.LATA4 = 0; } |
|
|
|
错误(但不是现在的问题)配置字可以强制PLL(因此位7被忽略),如果配置设置关闭,那么位7现在控制PLL,所以它不被忽略。所有的OK。这可能是因为您还没有关闭WDT。默认是ON。我很好奇为什么它丢失了,因为您SE。EM使用MPLABX配置位编辑器来生成您的设置。
以上来自于百度翻译 以下为原文 Wrong (but not the problem now) The CONFIG word can force the PLL on (so bit 7 is ignored), if the CONFIG setting is off, then bit 7 now controls the PLL, so it is NOT ignored. All ok. Both are probably because you have not turned the WDT off. The default is on. I am curious why it is missing, as you seem to have used the MPLABX config bit editor to produce your settings. |
|
|
|
我误读了OSCCon的数据表7位,为WDTE=Office设置配置字,非常感谢!
以上来自于百度翻译 以下为原文 I had misread the data sheet re bit 7 of OSCCON. Setting up config word for WDTE = OFF did the trick, thank you very much! |
|
|
|
回首你的代码的第一个版本,你似乎已经删除了这两个行删除这些行不关闭它们。他们采取默认状态,在这两种情况下都是“ON”。保持线路,但改为“ON”到“OFF”。
以上来自于百度翻译 以下为原文 Looking back at the first version of your code, you seem to have deleted these two lines #pragma config WDTE = ON // Watchdog Timer Enable (WDT enabled) #pragma config LVP = ON // Low-Voltage Programming Enable (Low-voltage programming enabled) Deleting those lines does NOT turn them off. They take the default state, which in both cases is "on". Keep the lines, but change "ON" to "OFF". |
|
|
|
只有小组成员才能发言,加入小组>>
5082 浏览 9 评论
1954 浏览 8 评论
1889 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3118 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2189 浏览 5 评论
636浏览 1评论
512浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
375浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
540浏览 0评论
442浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-2 02:55 , Processed in 1.640642 second(s), Total 134, Slave 118 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号