Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Patch v1.0.1 #1

Merged
merged 7 commits into from
Mar 17, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# ATmega328PB Testing

Patch v1.0.1 17/03/2016 - modified and debugged by Astrobeed, gpb01, PaoloP.

## Hardware
* [Wattuino Pro Mini PB with ATmega328PB](http://www.watterott.com/en/Wattuino-pro-mini-PB-5V-16MHz)
* [Atmel ATmega328PB Xplained Mini](http://www.watterott.com/en/Atmel-Xplained-Mini-Evalution-Kit)
Expand Down
111 changes: 84 additions & 27 deletions hardware/atmega328pb/avr/boards.txt
Original file line number Diff line number Diff line change
@@ -1,29 +1,86 @@
##############################################################

menu.speed=Speed

atmega328pb.name=ATmega328PB
atmega328pb.menu.speed.16mhz=16 MHz
atmega328pb.menu.speed.16mhz.build.f_cpu=16000000L
atmega328pb.menu.speed.8mhz=8 MHz
atmega328pb.menu.speed.8mhz.build.f_cpu=8000000L
atmega328pb.menu.speed.4mhz=4 MHz
atmega328pb.menu.speed.4mhz.build.f_cpu=4000000L
atmega328pb.menu.speed.1mhz=1 MHz
atmega328pb.menu.speed.1mhz.build.f_cpu=1000000L
atmega328pb.menu.speed.20mhz=20 MHz
atmega328pb.menu.speed.20mhz.build.f_cpu=20000000L
atmega328pb.bootloader.tool=avrdude
atmega328pb.bootloader.low_fuses=0xFF
atmega328pb.bootloader.high_fuses=0xD6
atmega328pb.bootloader.extended_fuses=0xFD
atmega328pb.bootloader.file=optiboot_m328pb.hex
atmega328pb.bootloader.unlock_bits=0x3F
atmega328pb.bootloader.lock_bits=0xCF
atmega328pb.upload.tool=avrdude
atmega328pb.upload.protocol=arduino
atmega328pb.upload.maximum_size=32256
atmega328pb.upload.maximum_data_size=2048
atmega328pb.upload.speed=57600
atmega328pb.build.mcu=atmega328pb
atmega328pb.build.board=AVR_UNO
atmega328pb.build.core=arduino:arduino
atmega328pb.build.variant=standard
atmega328pbcc.name=Atmel ATmega328PB Crystal Clock
atmega328pbcc.bootloader.file=optiboot_m328pb.hex
atmega328pbcc.bootloader.unlock_bits=0x3F
atmega328pbcc.bootloader.lock_bits=0xCF
atmega328pbcc.upload.tool=avrdude
atmega328pbcc.upload.protocol=arduino
atmega328pbcc.upload.maximum_size=32256
atmega328pbcc.upload.maximum_data_size=2048
atmega328pbcc.upload.speed=57600
atmega328pbcc.build.mcu=atmega328pb
atmega328pbcc.build.board=AVR_UNO
atmega328pbcc.build.core=arduino:arduino
atmega328pbcc.build.variant=atmega328pb
atmega328pbcc.bootloader.tool=avrdude
atmega328pbcc.bootloader.low_fuses=0xFF
atmega328pbcc.bootloader.high_fuses=0xDC
atmega328pbcc.bootloader.extended_fuses=0xF5
atmega328pbcc.menu.speed.16mhz=16 MHz
atmega328pbcc.menu.speed.16mhz.build.f_cpu=16000000L
atmega328pbcc.menu.speed.8mhz=8 MHz
atmega328pbcc.menu.speed.8mhz.build.f_cpu=8000000L
atmega328pbcc.menu.speed.4mhz=4 MHz
atmega328pbcc.menu.speed.4mhz.build.f_cpu=4000000L
atmega328pbcc.menu.speed.1mhz=1 MHz
atmega328pbcc.menu.speed.1mhz.build.f_cpu=1000000L
atmega328pbcc.menu.speed.20mhz=20 MHz
atmega328pbcc.menu.speed.20mhz.build.f_cpu=20000000L

atmega328pbec.name=Atmel ATmega328PB External Clock
atmega328pbec.bootloader.file=optiboot_m328pb.hex
atmega328pbec.bootloader.unlock_bits=0x3F
atmega328pbec.bootloader.lock_bits=0xCF
atmega328pbec.upload.tool=avrdude
atmega328pbec.upload.protocol=arduino
atmega328pbec.upload.maximum_size=32256
atmega328pbec.upload.maximum_data_size=2048
atmega328pbec.upload.speed=57600
atmega328pbec.build.mcu=atmega328pb
atmega328pbec.build.board=AVR_UNO
atmega328pbec.build.core=arduino:arduino
atmega328pbec.build.variant=atmega328pb
atmega328pbec.bootloader.tool=avrdude
atmega328pbec.bootloader.low_fuses=0xE0
atmega328pbec.bootloader.high_fuses=0xDC
atmega328pbec.bootloader.extended_fuses=0xF5
atmega328pbec.menu.speed.16mhz=16 MHz
atmega328pbec.menu.speed.16mhz.build.f_cpu=16000000L
atmega328pbec.menu.speed.8mhz=8 MHz
atmega328pbec.menu.speed.8mhz.build.f_cpu=8000000L
atmega328pbec.menu.speed.4mhz=4 MHz
atmega328pbec.menu.speed.4mhz.build.f_cpu=4000000L
atmega328pbec.menu.speed.1mhz=1 MHz
atmega328pbec.menu.speed.1mhz.build.f_cpu=1000000L
atmega328pbec.menu.speed.20mhz=20 MHz
atmega328pbec.menu.speed.20mhz.build.f_cpu=20000000L

atmega328pbic.name=Atmel ATmega328PB Internal Clock
atmega328pbic.bootloader.file=optiboot_m328pb.hex
atmega328pbic.bootloader.unlock_bits=0x3F
atmega328pbic.bootloader.lock_bits=0xCF
atmega328pbic.upload.tool=avrdude
atmega328pbic.upload.protocol=arduino
atmega328pbic.upload.maximum_size=32256
atmega328pbic.upload.maximum_data_size=2048
atmega328pbic.upload.speed=57600
atmega328pbic.build.mcu=atmega328pb
atmega328pbic.build.board=AVR_UNO
atmega328pbic.build.core=arduino:arduino
atmega328pbic.build.variant=atmega328pb
atmega328pbic.bootloader.tool=avrdude
atmega328pbic.menu.speed.8mhz=8 MHz
atmega328pbic.menu.speed.8mhz.build.f_cpu=8000000L
atmega328pbic.menu.speed.8mhz.bootloader.low_fuses=0xE2
atmega328pbic.menu.speed.8mhz.bootloader.high_fuses=0xDC
atmega328pbic.menu.speed.8mhz.bootloader.extended_fuses=0xF5
atmega328pbic.menu.speed.1mhz=1 MHz
atmega328pbic.menu.speed.1mhz.build.f_cpu=1000000L
atmega328pbic.menu.speed.1mhz.bootloader.low_fuses=0x62
atmega328pbic.menu.speed.1mhz.bootloader.high_fuses=0xDC
atmega328pbic.menu.speed.1mhz.bootloader.extended_fuses=0xF5

##############################################################
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
/*
SCP1000 Barometric Pressure Sensor Display

Shows the output of a Barometric Pressure Sensor on a
Uses the SPI library. For details on the sensor, see:
http://www.sparkfun.com/commerce/product_info.php?products_id=8161
http://www.vti.fi/en/support/obsolete_products/pressure_sensors/

This sketch adapted from Nathan Seidle's SCP1000 example for PIC:
http://www.sparkfun.com/datasheets/Sensors/SCP1000-Testing.zip

Circuit:
SCP1000 sensor attached to pins 6, 7, 10 - 13:
DRDY: pin 6
CSB: pin 7
MOSI: pin 11
MISO: pin 12
SCK: pin 13

created 31 July 2010
modified 14 August 2010
by Tom Igoe
*/

// the sensor communicates using SPI, so include the library:
#include <SPI.h>

//Sensor's memory register addresses:
const int PRESSURE = 0x1F; //3 most significant bits of pressure
const int PRESSURE_LSB = 0x20; //16 least significant bits of pressure
const int TEMPERATURE = 0x21; //16 bit temperature reading
const byte READ = 0b11111100; // SCP1000's read command
const byte WRITE = 0b00000010; // SCP1000's write command

// pins used for the connection with the sensor
// the other you need are controlled by the SPI library):
const int dataReadyPin = 6;
const int chipSelectPin = 7;

void setup() {
Serial.begin(9600);

// start the SPI library:
SPI.begin();

// initalize the data ready and chip select pins:
pinMode(dataReadyPin, INPUT);
pinMode(chipSelectPin, OUTPUT);

//Configure SCP1000 for low noise configuration:
writeRegister(0x02, 0x2D);
writeRegister(0x01, 0x03);
writeRegister(0x03, 0x02);
// give the sensor time to set up:
delay(100);
}

void loop() {
//Select High Resolution Mode
writeRegister(0x03, 0x0A);

// don't do anything until the data ready pin is high:
if (digitalRead(dataReadyPin) == HIGH) {
//Read the temperature data
int tempData = readRegister(0x21, 2);

// convert the temperature to celsius and display it:
float realTemp = (float)tempData / 20.0;
Serial.print("Temp[C]=");
Serial.print(realTemp);


//Read the pressure data highest 3 bits:
byte pressure_data_high = readRegister(0x1F, 1);
pressure_data_high &= 0b00000111; //you only needs bits 2 to 0

//Read the pressure data lower 16 bits:
unsigned int pressure_data_low = readRegister(0x20, 2);
//combine the two parts into one 19-bit number:
long pressure = ((pressure_data_high << 16) | pressure_data_low) / 4;

// display the temperature:
Serial.println("\tPressure [Pa]=" + String(pressure));
}
}

//Read from or write to register from the SCP1000:
unsigned int readRegister(byte thisRegister, int bytesToRead) {
byte inByte = 0; // incoming byte from the SPI
unsigned int result = 0; // result to return
Serial.print(thisRegister, BIN);
Serial.print("\t");
// SCP1000 expects the register name in the upper 6 bits
// of the byte. So shift the bits left by two bits:
thisRegister = thisRegister << 2;
// now combine the address and the command into one byte
byte dataToSend = thisRegister & READ;
Serial.println(thisRegister, BIN);
// take the chip select low to select the device:
digitalWrite(chipSelectPin, LOW);
// send the device the register you want to read:
SPI.transfer(dataToSend);
// send a value of 0 to read the first byte returned:
result = SPI.transfer(0x00);
// decrement the number of bytes left to read:
bytesToRead--;
// if you still have another byte to read:
if (bytesToRead > 0) {
// shift the first byte left, then get the second byte:
result = result << 8;
inByte = SPI.transfer(0x00);
// combine the byte you just got with the previous one:
result = result | inByte;
// decrement the number of bytes left to read:
bytesToRead--;
}
// take the chip select high to de-select:
digitalWrite(chipSelectPin, HIGH);
// return the result:
return (result);
}


//Sends a write command to SCP1000

void writeRegister(byte thisRegister, byte thisValue) {

// SCP1000 expects the register address in the upper 6 bits
// of the byte. So shift the bits left by two bits:
thisRegister = thisRegister << 2;
// now combine the register address and the command into one byte:
byte dataToSend = thisRegister | WRITE;

// take the chip select low to select the device:
digitalWrite(chipSelectPin, LOW);

SPI.transfer(dataToSend); //Send register location
SPI.transfer(thisValue); //Send value to record into register

// take the chip select high to de-select:
digitalWrite(chipSelectPin, HIGH);
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
Digital Pot Control

This example controls an Analog Devices AD5206 digital potentiometer.
The AD5206 has 6 potentiometer channels. Each channel's pins are labeled
A - connect this to voltage
W - this is the pot's wiper, which changes when you set it
B - connect this to ground.

The AD5206 is SPI-compatible,and to command it, you send two bytes,
one with the channel number (0 - 5) and one with the resistance value for the
channel (0 - 255).

The circuit:
* All A pins of AD5206 connected to +5V
* All B pins of AD5206 connected to ground
* An LED and a 220-ohm resisor in series connected from each W pin to ground
* CS - to digital pin 10 (SS pin)
* SDI - to digital pin 11 (MOSI pin)
* CLK - to digital pin 13 (SCK pin)

created 10 Aug 2010
by Tom Igoe

Thanks to Heather Dewey-Hagborg for the original tutorial, 2005

*/


// inslude the SPI library:
#include <SPI.h>


// set pin 10 as the slave select for the digital pot:
const int slaveSelectPin = 10;

void setup() {
// set the slaveSelectPin as an output:
pinMode(slaveSelectPin, OUTPUT);
// initialize SPI:
SPI.begin();
}

void loop() {
// go through the six channels of the digital pot:
for (int channel = 0; channel < 6; channel++) {
// change the resistance on this channel from min to max:
for (int level = 0; level < 255; level++) {
digitalPotWrite(channel, level);
delay(10);
}
// wait a second at the top:
delay(100);
// change the resistance on this channel from max to min:
for (int level = 0; level < 255; level++) {
digitalPotWrite(channel, 255 - level);
delay(10);
}
}

}

void digitalPotWrite(int address, int value) {
// take the SS pin low to select the chip:
digitalWrite(slaveSelectPin, LOW);
// send in the address and value via SPI:
SPI.transfer(address);
SPI.transfer(value);
// take the SS pin high to de-select the chip:
digitalWrite(slaveSelectPin, HIGH);
}
Loading