CrossRoads:
@pito,
Turns out I Don't have pictures - only a shortcut to a desktop folder! Blew that one. Will get them soon.
Apparently that's my fault, sorry
I'll shoot a pic of my oven and post it.
CrossRoads:
@pito,
Turns out I Don't have pictures - only a shortcut to a desktop folder! Blew that one. Will get them soon.
Apparently that's my fault, sorry
I'll shoot a pic of my oven and post it.
Hello Robert!
What a beautiful card!!! Awesome
Very very nice work.
Thanks Leo. I translated another post, looking for "core files".
I have posted the changes I made to boards.txt and pins_arduino.c for the D0-D31 assignment to pins that I used, and to a SdFat library file also.
If folks there want to use the Sanguino files for the 644 that might be more straightforward.
hi, i'm erik and been following the great work in this topic for a while because this board is exactly what i need, please tell me how to buy a board.
erik
Eric, read the last paragraph of CrossRoads's post.
CrossRoads:
PM me for details where to send Paypal payment and address to send card to. All cards will have all IO lines tested, RS232 serial interface tested, RTC tested, and SD card tested. I expect to be bootloading and downloading sketches/testing all this week (and install a component or two more, think we were short a 16 MHz crystal and 4 header shields when we packed up).
Moderator edit: Trimmed the unnecessarily large quote.
Thanks Erik.
Let me investigate shipping costs to Europe.
Do I need to include a piece of paper in the shipment saying it is Not Leadfree?
Robert
This looks like a very nice board. I'm sure there's a market for boards based around the 644P/1284P. I only found this thread recently, by which time I had already got a design for a shield-compatible strip board version using the 644P.
Yes, a small market. Have delivered 4 of them so far.
Search for "Hacking the uno" for how it started...
Well unless one stumbles on this topic nobody knows of the existance of this Mega1284P Bobuino board, maybe a mail to http://hackaday.com/ would draw the needed attention.
Erik
I received my board from CrossRoads a couple weeks ago. I think it very well built, and it is loaded with features! To name 2, the RTC clock, and the memory card slot would normally have to be bought separately and would take more room on an Uno. It has so many I/O's that to me, it is almost like the Mega!
In summary, I am very happy with my purchase and I will put the Bobuino to good use. It is a excellent platform to learn with and use in a future project!
Mark
Crossroads,
Congrats on the board and the hackaday mention!
Thanks!
Bob,
Did you do anything with the software? Step by step instructions for modifying the IDE? Got my board working eventually, it's just a shame that there is no built in support. It looks a great bit of kit though.
What? I sent you an e-mail, same as the other folks who bought a board, with a document with directions needed to make it work - location of my zip file that has all the files I modified, example sketches, links to needed libraries. I sent it a 2nd time when I updated it slightly. I hadn't heard anything back from you, figured you were all set. The e-mails didn't bounce, so I assumed your e-mail was good.
Are there any links in web or is it closed source? |Thanks
Links for the Bobuino?
There are these 2
http://www.crossroadsfencing.com/BobuinoRev17/
The schematics & board layout have been posted in this thread several times as I worked stuff out.
I read whole thread, so much info to consume. Anyway I see you have used the core files from avr-developers which is based on version 20, but I think you can also use the latest core from github, which seems to be named as Arduino 1, because Arduino devs merged the updates from avr-developers core. I try that one when I receive the stencils :0 (not bobuino but a 1284p chip based board).
Please post how that works out, I am up for improvement if possible.
I made small modifications on version arduino-1.0-beta4 and it works well on my Atmega1284.
Board definition is;
atmega1284.name=Bobuino W/ ATmega1284P
atmega1284.upload.protocol=arduino
atmega1284.upload.maximum_size=131072
atmega1284.upload.speed=57600
atmega1284.bootloader.low_fuses=0xFF
atmega1284.bootloader.high_fuses=0xDC
atmega1284.bootloader.extended_fuses=0xFD
atmega1284.bootloader.path=sanguino
atmega1284.bootloader.file=ATmegaBOOT_168_atmega1284p.hex
atmega1284.bootloader.unlock_bits=0x3F
atmega1284.bootloader.lock_bits=0x0F
atmega1284.build.mcu=atmega1284p
atmega1284.build.f_cpu=16000000L
atmega1284.build.core=arduino
atmega1284.build.variant=Bobuino
pins_arduino.h file in folder "C:\arduino-1.0-beta4\hardware\arduino\variants\Bobuino"
/*
pins_arduino.h - pin definitions for the Arduino board
Part of Arduino / Wiring Lite
Copyright (c) 2005 David A. Mellis
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General
Public License along with this library; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
Boston, MA 02111-1307 USA
$Id: pins_arduino.c 254 2007-04-20 23:17:38Z mellis $
*/
#ifndef Pins_Arduino_h
#define Pins_Arduino_h
#include <avr/pgmspace.h>
#define NUM_DIGITAL_PINS 32
#define NUM_ANALOG_INPUTS 8
#define analogInputToDigitalPin(p) ((p < 8) ? (p) + 24 : -1)
#define analogInputPinToBit(p) ((P >= 24) ? (p) - 24 : -1)
#define digitalPinHasPWM(p) ((p) == 3 || (p) == 4 || (p) == 12 || (p) == 13 || (p) == 14 || (p) == 15)
const static uint8_t SS = 4;
const static uint8_t MOSI = 5;
const static uint8_t MISO = 6;
const static uint8_t SCK = 7;
const static uint8_t SDA = 17;
const static uint8_t SCL = 16;
const static uint8_t LED = 13;
const static uint8_t A0 = 24;
const static uint8_t A1 = 25;
const static uint8_t A2 = 26;
const static uint8_t A3 = 27;
const static uint8_t A4 = 28;
const static uint8_t A5 = 29;
const static uint8_t A6 = 30;
const static uint8_t A7 = 31;
// Bit 7 6 5 4 3 2 1 0
// PCMSK3 = PCINT31, PCINT30, PCINT29, PCINT28, PCINT27, PCINT26, PCINT25, PCINT24
// Dg.Pin 15 14 13 12 11 10 9 8 PCICRBit = 1
// PCMSK2 = PCINT23, PCINT22, PCINT21, PCINT20, PCINT19, PCINT18, PCINT17, PCINT16
// Dg.Pin 23 22 21 20 19 18 17 16 PCICRBit = 2
// PCMSK1 = PCINT15, PCINT14, PCINT13, PCINT12, PCINT11, PCINT10, PCINT9, PCINT8
// Dg.Pin 7 6 5 4 3 2 1 0 PCICRBit = 0
// PCMSK0 = PCINT7, PCINT6, PCINT5, PCINT4, PCINT3, PCINT2, PCINT1, PCINT0
// Dg.Pin 31 30 29 28 27 26 25 24 PCICRBit = 3
#define digitalPinToPCICR(p) (((p) >= 0 && (p) <= 31) ? (&PCICR) : ((uint8_t *)0))
#define digitalPinToPCICRbit(p) (((p) <= 7) ? 0 : (((p) <= 15) ? 1 : (((p) <= 23) ? 2 : 3)))
#define digitalPinToPCMSK(p) (((p) <= 7) ? (&PCMSK1):(((p) <= 15) ? (&PCMSK3):(((p) <= 23) ? (&PCMSK2):(((p) <= 31) ? (&PCMSK0):((uint8_t *)0)))))
#define digitalPinToPCMSKbit(p) (((p) <= 7) ? (p) : (((p) <= 15) ? ((p) - 8) : (((p) <= 23) ? ((p) - 16) : ((p) - 24))))
#ifdef ARDUINO_MAIN
// ATMEL ATMEGA1284
//
// +---\/---+
// (D 0) PB0 1| |40 PA0 (AI 0 / D24)
// (D 1) PB1 2| |39 PA1 (AI 1 / D25)
//INT2 (D 2) PB2 3| |38 PA2 (AI 2 / D26)
// PWM (D 3) PB3 4| |37 PA3 (AI 3 / D27)
// PWM (D 4) PB4 5| |36 PA4 (AI 4 / D28)
// MOSI (D 5) PB5 6| |35 PA5 (AI 5 / D29)
//PWM MISO (D 6) PB6 7| |34 PA6 (AI 6 / D30)
//PWM SCK (D 7) PB7 8| |33 PA7 (AI 7 / D31)
// RST 9| |32 AREF
// VCC 10| |31 GND
// GND 11| |30 AVCC
// XTAL2 12| |29 PC7 (D 23)
// XTAL1 13| |28 PC6 (D 22)
// RX0 (D 8) PD0 14| |27 PC5 (D 21) TDI
// TX0 (D 9) PD1 15| |26 PC4 (D 20) TDO
//INT0 RX1 (D 10) PD2 16| |25 PC3 (D 19) TMS
//INT1 TX1 (D 11) PD3 17| |24 PC2 (D 18) TCK
// PWM (D 12) PD4 18| |23 PC1 (D 17) SDA
// PWM (D 13) PD5 19| |22 PC0 (D 16) SCL
// PWM (D 14) PD6 20| |21 PD7 (D 15) PWM
// +--------+
//
// these arrays map port names (e.g. port B) to the
// appropriate addresses for various functions (e.g. reading
// and writing)
const uint16_t PROGMEM port_to_mode_PGM[] = {
NOT_A_PORT,
(uint16_t) &DDRA,
(uint16_t) &DDRB,
(uint16_t) &DDRC,
(uint16_t) &DDRD,
};
const uint16_t PROGMEM port_to_output_PGM[] = {
NOT_A_PORT,
(uint16_t) &PORTA,
(uint16_t) &PORTB,
(uint16_t) &PORTC,
(uint16_t) &PORTD,
};
const uint16_t PROGMEM port_to_input_PGM[] = {
NOT_A_PORT,
(uint16_t) &PINA,
(uint16_t) &PINB,
(uint16_t) &PINC,
(uint16_t) &PIND,
};
const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
// PORTLIST
// -------------------------------------------
PB, // PB 0 ** 0 ** D 0
PB, // PB 1 ** 1 ** D 1
PB, // PB 2 ** 2 ** D 2
PB, // PB 3 ** 3 ** D 3 PWM
PB, // PB 4 ** 4 ** D 4 PWM SS
PB, // PB 5 ** 5 ** D 5 MOSI
PB, // PB 6 ** 6 ** D 6 MISO
PB, // PB 7 ** 7 ** D 7 SCK
PD, // PD 0 ** 8 ** D 8 RX0
PD, // PD 1 ** 9 ** D 9 TX0
PD, // PD 2 ** 10 ** D 10 RX1
PD, // PD 3 ** 11 ** D 11 TX1
PD, // PD 4 ** 12 ** D 12 PWM
PD, // PD 5 ** 13 ** D 13 PWM
PD, // PD 6 ** 14 ** D 14 PWM
PD, // PD 7 ** 15 ** D 15 PWM
PC, // PC 0 ** 16 ** D 16 SCL
PC, // PC 1 ** 17 ** D 17 SDA
PC, // PC 2 ** 18 ** D 18 TCK
PC, // PC 3 ** 19 ** D 19 TMS
PC, // PC 4 ** 20 ** D 20 TDO
PC, // PC 5 ** 21 ** D 21 TDI
PC, // PC 6 ** 22 ** D 22
PC, // PC 7 ** 23 ** D 23
PA, // PA 0 ** 24 ** D 24 AI 0
PA, // PA 1 ** 25 ** D 25 AI 1
PA, // PA 2 ** 26 ** D 26 AI 2
PA, // PA 3 ** 27 ** D 27 AI 3
PA, // PA 4 ** 28 ** D 28 AI 4
PA, // PA 5 ** 29 ** D 29 AI 5
PA, // PA 6 ** 30 ** D 30 AI 6
PA // PA 7 ** 31 ** D 31 AI 7
};
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] =
{
_BV(0), /* 0, PB0 */
_BV(1), /* 1, PB1 */
_BV(2), /* 2, PB2 */
_BV(3), /* 3, PB3 */
_BV(4), /* 4, PB4 */
_BV(5), /* 5, PB5 */
_BV(6), /* 6, PB6 */
_BV(7), /* 7, PB7 */
_BV(0), /* 8, PD0 */
_BV(1), /* 9, PD1 */
_BV(2), /* 10, PD2 */
_BV(3), /* 11, PD3 */
_BV(4), /* 12, PD4 */
_BV(5), /* 13, PD5 */
_BV(6), /* 14, PD6 */
_BV(7), /* 15, PD7 */
_BV(0), /* 16, PC0 */
_BV(1), /* 17, PC1 */
_BV(2), /* 18, PC2 */
_BV(3), /* 19, PC3 */
_BV(4), /* 20, PC4 */
_BV(5), /* 21, PC5 */
_BV(6), /* 22, PC6 */
_BV(7), /* 23, PC7 */
_BV(0), /* 24, PA0 */
_BV(1), /* 25, PA1 */
_BV(2), /* 26, PA2 */
_BV(3), /* 27, PA3 */
_BV(4), /* 28, PA4 */
_BV(5), /* 29, PA5 */
_BV(6), /* 30, PA6 */
_BV(7) /* 31, PA7 */
};
const uint8_t PROGMEM digital_pin_to_timer_PGM[] =
{
NOT_ON_TIMER, /* 0 - PB0 */
NOT_ON_TIMER, /* 1 - PB1 */
NOT_ON_TIMER, /* 2 - PB2 */
TIMER0A, /* 3 - PB3 */
TIMER0B, /* 4 - PB4 */
NOT_ON_TIMER, /* 5 - PB5 */
TIMER3A, /* 6 - PB6 */
TIMER3B, /* 7 - PB7 */
NOT_ON_TIMER, /* 8 - PD0 */
NOT_ON_TIMER, /* 9 - PD1 */
NOT_ON_TIMER, /* 10 - PD2 */
NOT_ON_TIMER, /* 11 - PD3 */
TIMER1B, /* 12 - PD4 */
TIMER1A, /* 13 - PD5 */
TIMER2B, /* 14 - PD6 */
TIMER2A, /* 15 - PD7 */
NOT_ON_TIMER, /* 16 - PC0 */
NOT_ON_TIMER, /* 17 - PC1 */
NOT_ON_TIMER, /* 18 - PC2 */
NOT_ON_TIMER, /* 19 - PC3 */
NOT_ON_TIMER, /* 20 - PC4 */
NOT_ON_TIMER, /* 21 - PC5 */
NOT_ON_TIMER, /* 22 - PC6 */
NOT_ON_TIMER, /* 23 - PC7 */
NOT_ON_TIMER, /* 24 - PA0 */
NOT_ON_TIMER, /* 25 - PA1 */
NOT_ON_TIMER, /* 26 - PA2 */
NOT_ON_TIMER, /* 27 - PA3 */
NOT_ON_TIMER, /* 28 - PA4 */
NOT_ON_TIMER, /* 29 - PA5 */
NOT_ON_TIMER, /* 30 - PA6 */
NOT_ON_TIMER /* 31 - PA7 */
};
#endif
#endif
And I added the two lines for Atmega1284 to wiring_analog.c
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
if (pin >= 54) pin -= 54; // allow for channel or pin numbers
#elif defined(__AVR_ATmega1284P__)
if (pin >= 24) pin -= 24; // allow for channel or pin numbers
#else
if (pin >= 14) pin -= 14; // allow for channel or pin numbers
#endif
And two lines to wiring_private.h
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define EXTERNAL_NUM_INTERRUPTS 8
#elif defined(__AVR_ATmega1284P__)
#define EXTERNAL_NUM_INTERRUPTS 3
#else
#define EXTERNAL_NUM_INTERRUPTS 2
#endif
Ok, I could see using that - I'd have to make adjustments to make it match my usage:
// ATMEL ATMEGA1284P / BOBUINO
//
// +---\/---+
// INT0 (D 4) PB0 1| |40 PA0 (AI 0 / D14)
// INT1 (D 5) PB1 2| |39 PA1 (AI 1 / D15)
// INT2 (D 6) PB2 3| |38 PA2 (AI 2 / D16)
// PWM (D 7) PB3 4| |37 PA3 (AI 3 / D17)
// PWM (D 10) PB4 5| |36 PA4 (AI 4 / D18)
// MOSI (D 11) PB5 6| |35 PA5 (AI 5 / D19)
// MISO (D 12) PB6 7| |34 PA6 (AI 6 / D20)
// SCK (D 13) PB7 8| |33 PA7 (AI 7 / D21)
// RST 9| |32 AREF
// VCC 10| |31 GND
// GND 11| |30 AVCC
// XTAL2 12| |29 PC7 (D 29)
// XTAL1 13| |28 PC6 (D 28)
// RX0 (D 0) PD0 14| |27 PC5 (D 27) TDI
// TX0 (D 1) PD1 15| |26 PC4 (D 26) TDO
// RX1 (D 2) PD2 16| |25 PC3 (D 25) TMS
// TX1 (D 3) PD3 17| |24 PC2 (D 24) TCK
// PWM (D 30) PD4 18| |23 PC1 (D 23) SDA
// PWM (D 8 ) PD5 19| |22 PC0 (D 22) SCL
// PWM (D 9) PD6 20| |21 PD7 (D 31) PWM
// +--------+
//