I am new to Arduino and am not sure how to set up a register. Assuming I have an 8-bit register, called T0CON that I would like to set as 1000 1000 [in binary], can I just write T0CON = 1000 1000 ? Does the value need to be converted to decimal, or hex, or just leave it as binary?
chipKIT? that is the pic32-gcc stuff isn't it, so I think you will not have 8-bit registers. TOCON looks like a PIC18 register (from a quick google search).
Anyway if the toolchain has defined TOCON then a value can be assigned to it.
The AVR toolchain has the ADCSRA register defined, it has also defined the bits that can be set in it (ADEN, ADATE, and ADIE). It is fairly common practice to use those bit definitions in a way that documents the registers intended configuration.
ADEN is the bit position and 1<<ADEN will shift a 1 into that position which can be used with bitwise-or to set the bit. ADATE is another bit position and ~( 1<<ADATE) will clear it and set everything else to one which can be used with bitwise-and to clear the bit. They can also be combined, or you can assign a hex (e.g. 0x88) or binary literal (e.g. 0b1000100 in gcc anyway) and cause future you to look up their meanings again and again
chipKIT looks like a fork to me, and sometimes they get folded back into the main project (it is not common). Also, the PIC32 (e.g. MIPS) seems like it is a solid MCU for use with GCC. The other PIC devices have the wrong insides for use with GCC.
DrAzzy:
Also - what does this have to do with Arduino?
"Arduino" doesn't necessarily mean an arduino.cc or arduino.org product.
Chipkit offers an arduino environment for the pic32 processors.
While it used to require a fork of the IDE called MPIDE, the chipkit core can now be installed and used on recent IDEs using the board manager. http://chipkit.net/wiki/index.php?title=ChipKIT_core
The pic32 has lot more bang for the buck than the AVR and is available in DIP packages.
Here is a write up for how to use it on a bread board: http://chipkit.net/tag/breadboard/
@Ron sutherland:
I tried to insert the ADCSRA = ADCSRA | (1<<ADEN); under void setup()
However, I got error message saying 'ADCSRA' is not declared in this scope.
So I tried to include some libraries on the very top line of my codes: #include "Bridge" #include "p32mx795f512l.h" #include "xc.h" #include "stdio.h"
But apparently, this is not the right way to invoke library. Do you have any idea how to fix this issue?
I tried to insert the ADCSRA = ADCSRA | (1<<ADEN); under void setup()
However, I got error message saying 'ADCSRA' is not declared in this scope.
Well of course. ADCSRA is the name of a peripheral register on the AVRs. On the PIC32, you have entirely different peripherals from a different vendor, perhaps addressed in a different way ("ADC0->status" wouldn't surprise me.)
To address the peripherals at the register level, you'll need to become familiar with those peripherals by reading the chip datasheet(s) and related documentation. (NOT having to do this is one of the big advantages of an Arduino-like environment.) Here's some sample code I found in the pic32 cores/wiring_analog.c file.
// If no PWM are currently active, then init Timer2
if (pwm_active == 0)
{
T2CON = T2_PS_1_256;
TMR2 = 0;
PR2 = PWM_TIMER_PERIOD;
T2CONSET = T2_ON;
}
(If you're looking to do something specific, you might be able to get answers to questions like "how do I change the frequency used by digitalWrite() PWM on pin X?", but otherwise you're definitely in "read the datasheet" territory.)
Yep the ADCSAR is for AVR, sorry about that, it is all I really know at this point. But you can now look for some of those registers westfw has listed inside that p32mx795f512l.h file.
Looking in that I see AD1PCFG has bit PCFG0 defined so things like
AD1PCFG = AD1PCFG | (1<<PCFG0); should compile.
If you look at the datasheet it should tell you about the AD1PCFG register and the PCFG0 bit does. This is the first I've looked at these so I'm not going to be much help.