Merge pull request #5 from 3d-gussner/Prusa_Merge_v1.0.2

PFW-1059: V1.0.2 inclunding bootloader and extra flags and timer 4 for Tone 2nd
This commit is contained in:
DRracer 2019-11-29 22:11:02 +01:00 committed by GitHub
commit 379dd39954
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
76 changed files with 6790 additions and 41 deletions

View File

@ -0,0 +1,35 @@
#!/bin/bash
# This bash script is used to prepare the "package_prusa3d_index.json"
#
# Supported OS: Windows 10, Linux64 bit
# Beta OS: Linux32 bit
#
# 30, jul 2019, 3d-gussner, Read version from "prusa3dboards.version" file. It reads the 1st line
# Get version from prusa3dboards.version file
VERSION=$(head -1 prusa3dboards.version|cut -d ' ' -f1)
# rename temporaray "prusa3dboards" folder to include version number
mv prusa3dboards prusa3dboards-$VERSION
# compress prusa3dboards-$VERSION folder
tar -cjf prusa3dboards-$VERSION.tar.bz2 prusa3dboards-$VERSION
# rename prusa3dboards-$VERSION back to prusa3dboards as it makes follow changes easier in Github, cimmits/blame/history
mv prusa3dboards-$VERSION prusa3dboards
# get size of the compressed file for JSO
SIZE=$(wc -c prusa3dboards-$VERSION.tar.bz2|cut -d ' ' -f1)
#get sha256 checksum
SHA256=$(sha256sum prusa3dboards-$VERSION.tar.bz2|cut -d ' ' -f1)
echo "Version : "$VERSION" to build"
echo ""
echo "Please don't forget to create new version file prusa3dboards-"$VERSION".MD"
sleep 5
echo "Please use following values to edit JSON file"
echo ""
echo "ArchiveFileName : prusa3dboards-"$VERSION".tar.bz2"
echo "SHA256 checksum : "$SHA256
echo "Size : "$SIZE
echo "online : prusa3dboards-"$VERSION".MD"

View File

@ -9,6 +9,47 @@
"online": "https://github.com/prusa3d/Arduino_Boards"
},
"platforms": [
{
"name": "Prusa Research AVR Boards",
"architecture": "avr",
"version": "1.0.2",
"category": "Contributed",
"url": "https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/prusa3dboards-1.0.2.tar.bz2",
"archiveFileName": "prusa3dboards-1.0.2.tar.bz2",
"checksum": "SHA-256:e7ff02ea51fba6a5dadfb7b14eb53f61f106f2412c0f0d95f64accc37945d82a",
"size": "101087",
"help": {
"online": "https://github.com/prusa3d/Arduino_Boards/blob/master/IDE_Board_Manager/prusa3dboards-1.0.2.md"
},
"boards": [
{
"name": "Original Prusa i3 MK3 Multi Material 2.0 upgrade"
},
{
"name": "Original Prusa i3 MK3/MK3S Einsy RAMBo"
}
],
"toolsDependencies": []
},
{
"name": "Prusa Research AVR MMU Boards",
"architecture": "avr",
"version": "1.0.1",
"category": "Contributed",
"url": "https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/prusa3dboards-1.0.1.tar.bz2",
"archiveFileName": "prusa3dboards-1.0.1.tar.bz2",
"checksum": "SHA-256:858cec0d14a549f637a558e51de29917796b37eaa9e1e8d6bd7449ba6bcd1ffd",
"size": "32469",
"help": {
"online": "https://github.com/prusa3d/Arduino_Boards/blob/master/IDE_Board_Manager/prusa3dboards-1.0.1.md"
},
"boards": [
{
"name": "Original Prusa i3 MK3 Multi Material 2.0 upgrade"
}
],
"toolsDependencies": []
},
{
"name": "Prusa Research AVR MMU Boards",
"architecture": "avr",
@ -19,7 +60,7 @@
"checksum": "SHA-256:df1061544109119ffaa2ea3fa9820aa6469f288213661e23405b7f190fd71b12",
"size": "32792",
"help": {
"online": "https://learn.sparkfun.com/tutorials/installing-arduino-ide/board-add-ons-with-arduino-board-manager"
"online": "https://github.com/prusa3d/Arduino_Boards/blob/master/IDE_Board_Manager/prusa3dboards-1.0.0.md"
},
"boards": [
{
@ -32,7 +73,7 @@
"tools":[]
},
{
"name": "PrusaResearchRambo",
"name": "PrusaResearchEinsyRAMBo",
"maintainer": "Prusa Research",
"websiteURL": "https://www.prusa3d.com/",
"email": "info@prusa3d.com",
@ -41,7 +82,7 @@
},
"platforms": [
{
"name": "Prusa Research AVR MK3 Einsy RAMBo",
"name": "Prusa Research AVR MK3/MK3S Einsy RAMBo",
"architecture": "avr",
"version": "1.0.1",
"category": "Contributed",
@ -50,7 +91,7 @@
"checksum": "SHA-256:68996c5de9e29603bdff3d8b7aba115f30e37383e7a3e9b89921799574d1cb31",
"size": "53425",
"help": {
"online": "https://learn.sparkfun.com/tutorials/installing-arduino-ide/board-add-ons-with-arduino-board-manager"
"online": "https://github.com/prusa3d/Arduino_Boards/blob/master/IDE_Board_Manager/prusa3dboards-1.0.1.md"
},
"boards": [
{
@ -69,6 +110,25 @@
"version": "6.3.0-arduino9"
}
]
},
{
"name": "Prusa Research AVR MK3 RAMBo EINSy",
"architecture": "avr",
"version": "1.0.0",
"category": "Contributed",
"url": "https://raw.githubusercontent.com/prusa3d/Arduino_Boards/master/IDE_Board_Manager/prusa3drambo-1.0.0.tar.bz2",
"archiveFileName": "prusa3drambo-1.0.0.tar.bz2",
"checksum": "SHA-256:73ec40b02ae2a13c6016057e3ba49731b8ccab71b5ed7c913f6d698819f24838",
"size": "53396",
"help": {
"online": "https://github.com/prusa3d/Arduino_Boards/blob/master/IDE_Board_Manager/prusa3dboards-1.0.1.md"
},
"boards": [
{
"name": "Original Prusa i3 MK3/MK3S EINSY RAMBo"
}
],
"toolsDependencies": []
}
],
"tools":[]

View File

@ -0,0 +1,24 @@
# Prusa Research Boards definition version 1.0.0
## Boards supported
- [Prusa MM control board](https://github.com/prusa3d/MM-control-2.0)
- including bootloader
Folder Structure:
.
├── IDE_Boards_Manager
│ └── ...
└── ...
Files:
.
├── IDE_Boards_Manager
│ ├── package_prusa3d_index.json
│ ├── prusa3dboards-<versions>.tar.bz2 actual used pacakges for Ardunio IDE Boards Manager
│ └── ...
├── LICENSE
├── README.md
└── ...

View File

@ -0,0 +1,39 @@
# Prusa Research Boards definition version 1.0.1
## Boards supported
- [Prusa MM control board](https://github.com/prusa3d/MM-control-2.0) using prusa3dboards-1.0.0.tar.bz2
- including bootloader
- [Einsy board](https://reprap.org/wiki/EinsyRambo) using prusa3drambo-1.0.1.tar.bz2
- [miniRAMbo](https://reprap.org/wiki/MiniRambo) using prusa3drambo-1.0.1.tar.bz2
## Specials/Limits
- Restricted to use avr-gcc version `4.9.2-atmel3.5.4-arduino2`
- Restricted to use avrdude version `6.3.0-arduino9`
Folder Structure:
.
├── IDE_Boards_Manager
│ ├── prusa3drambo-1.0.1
│ ├── cores
│ └── rambo
│ ├── variants
│ └── rambo
│ └── ...
└── ...
Files:
.
├── IDE_Boards_Manager
│ ├── prusa3drambo-1.0.1 Please don't change that folder name when you update your Github and post a PR.
│ ├── boards.txt contains definitions for the boards (board name, parameters for building and uploading sketches, etc.).
│ ├── platform.txt contains definitions for the CPU architecture used (compiler, build process parameters, tools used for upload, etc.).
│ ├── avrdude.conf
│ └── ...
│ ├── package_prusa3d_index.json
│ ├── prusa3dboards-<versions>.tar.bz2 actual used pacakges for Ardunio IDE Boards Manager
│ └── ...
├── LICENSE
├── README.md
└── ...

Binary file not shown.

View File

@ -0,0 +1,117 @@
# Prusa Research Boards definition version 1.0.2
## Boards supported
- [Prusa MM control board](https://github.com/prusa3d/MM-control-2.0) using prusa3dboards-1.0.2.tar.bz2
- including bootloader
- Einsy/miniRAMBo boards using prusa3dboards-1.0.2.tar.bz2
- including bootloader
- [Einsys](https://reprap.org/wiki/EinsyRambo)
- [miniRAMbo](https://reprap.org/wiki/MiniRambo)
## Specials/Limits
- Restricted cores version for the Einsy/miniRAMBo boards
Folder Structure:
.
└── prusa3dboards
├── bootloaders
│   ├── prusa_einsy_rambo
│   └── prusa_mm_control
├── cores
│   └── prusa_einsy_rambo
├── patches
├── tools
└── variants
├── prusa_einsy_rambo
└── prusa_mm_control
File Structure:
.
├── Prepare-new-version.sh
├── package_prusa3d_index.json
├── prusa3dboards
│   ├── avrdude.conf
│   ├── avrdude.md
│   ├── boards.txt
│   ├── bootloaders
│   │   ├── prusa_einsy_rambo
│   │   │   ├── License.txt
│   │   │   ├── Makefile
│   │   │   ├── avr_cpunames.h
│   │   │   ├── avrinterruptnames.h
│   │   │   ├── command.h
│   │   │   ├── lcd.c
│   │   │   ├── lcd.h
│   │   │   ├── settings.h
│   │   │   ├── stk500boot.c
│   │   │   ├── stk500boot.h
│   │   │   ├── stk500boot.hex
│   │   │   └── stk500boot_v2_mega2560.hex
│   │   └── prusa_mm_control
│   │   ├── Caterina-prusa_mm_control.hex
│   │   ├── Readme.txt
│   │   ├── build.txt
│   │   └── program.txt
│   ├── cores
│   │   └── prusa_einsy_rambo
│   │   ├── Arduino.h
│   │   ├── CDC.cpp
│   │   ├── Client.h
│   │   ├── HardwareSerial.cpp
│   │   ├── HardwareSerial.h
│   │   ├── HardwareSerial0.cpp
│   │   ├── HardwareSerial1.cpp
│   │   ├── HardwareSerial2.cpp
│   │   ├── HardwareSerial3.cpp
│   │   ├── HardwareSerial_private.h
│   │   ├── IPAddress.cpp
│   │   ├── IPAddress.h
│   │   ├── PluggableUSB.cpp
│   │   ├── PluggableUSB.h
│   │   ├── Print.cpp
│   │   ├── Print.h
│   │   ├── Printable.h
│   │   ├── Server.h
│   │   ├── Stream.cpp
│   │   ├── Stream.h
│   │   ├── Tone.cpp
│   │   ├── USBAPI.h
│   │   ├── USBCore.cpp
│   │   ├── USBCore.h
│   │   ├── USBDesc.h
│   │   ├── Udp.h
│   │   ├── WCharacter.h
│   │   ├── WInterrupts.c
│   │   ├── WMath.cpp
│   │   ├── WString.cpp
│   │   ├── WString.h
│   │   ├── abi.cpp
│   │   ├── binary.h
│   │   ├── hooks.c
│   │   ├── main.cpp
│   │   ├── new.cpp
│   │   ├── new.h
│   │   ├── wiring.c
│   │   ├── wiring_analog.c
│   │   ├── wiring_digital.c
│   │   ├── wiring_private.h
│   │   ├── wiring_pulse.S
│   │   ├── wiring_pulse.c
│   │   └── wiring_shift.c
│   ├── patches
│   ├── platform.txt
│   ├── tools
│   └── variants
│   ├── prusa_einsy_rambo
│   │   └── pins_arduino.h
│   └── prusa_mm_control
│   └── pins_arduino.h
├── prusa3dboards-1.0.0.md
├── prusa3dboards-1.0.0.tar.bz2
├── prusa3dboards-1.0.1.md
├── prusa3dboards-1.0.1.tar.bz2
├── prusa3dboards-1.0.2.tar.bz2
├── prusa3dboards.version
├── prusa3drambo-1.0.0.tar.bz2
└── prusa3drambo-1.0.1.tar.bz2

Binary file not shown.

View File

@ -0,0 +1,3 @@
1.0.2 # With bootloader and compiler.c.elf.extra_flags for Prusa Einsy/RAMBo Prusa Frimware
1.0.1 # Added Einsy/miniRAMBo boards
1.0.0 # Original Prusa i3 MK3 Multi Material 2.0 upgrade

View File

@ -0,0 +1,424 @@
#
# This is a basic minimal config file embedded into the avrdude-slic3r binary
# so that it can work in a standalone manner.
#
# Only the bits useful for Prusa3D devices were copied over from avrdude.conf
# If needed, more configuration can still be loaded into avrdude-slic3r
# via the -C command-line option.
#
programmer
id = "wiring";
desc = "Wiring";
type = "wiring";
connection_type = serial;
;
programmer
id = "arduino";
desc = "Arduino";
type = "arduino";
connection_type = serial;
;
programmer
id = "avr109";
desc = "Atmel AppNote AVR109 Boot Loader";
type = "butterfly";
connection_type = serial;
;
#------------------------------------------------------------
# ATmega2560
#------------------------------------------------------------
part
id = "m2560";
desc = "ATmega2560";
signature = 0x1e 0x98 0x01;
has_jtag = yes;
stk500_devcode = 0xB2;
# avr910_devcode = 0x43;
chip_erase_delay = 9000;
pagel = 0xD7;
bs2 = 0xA0;
reset = dedicated;
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
"x x x x x x x x x x x x x x x x";
chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
"x x x x x x x x x x x x x x x x";
timeout = 200;
stabdelay = 100;
cmdexedelay = 25;
synchloops = 32;
bytedelay = 0;
pollindex = 3;
pollvalue = 0x53;
predelay = 1;
postdelay = 1;
pollmethod = 1;
pp_controlstack =
0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02;
hventerstabdelay = 100;
progmodedelay = 0;
latchcycles = 5;
togglevtg = 1;
poweroffdelay = 15;
resetdelayms = 1;
resetdelayus = 0;
hvleavestabdelay = 15;
chiperasepulsewidth = 0;
chiperasepolltimeout = 10;
programfusepulsewidth = 0;
programfusepolltimeout = 5;
programlockpulsewidth = 0;
programlockpolltimeout = 5;
idr = 0x31;
spmcr = 0x57;
rampz = 0x3b;
allowfullpagebitstream = no;
ocdrev = 4;
memory "eeprom"
paged = no; /* leave this "no" */
page_size = 8; /* for parallel programming */
size = 4096;
min_write_delay = 9000;
max_write_delay = 9000;
readback_p1 = 0x00;
readback_p2 = 0x00;
read = " 1 0 1 0 0 0 0 0",
" x x x x a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
write = " 1 1 0 0 0 0 0 0",
" x x x x a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
" 0 0 0 0 0 a2 a1 a0",
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
" 0 0 x x a11 a10 a9 a8",
" a7 a6 a5 a4 a3 0 0 0",
" x x x x x x x x";
mode = 0x41;
delay = 10;
blocksize = 8;
readsize = 256;
;
memory "flash"
paged = yes;
size = 262144;
page_size = 256;
num_pages = 1024;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0x00;
readback_p2 = 0x00;
read_lo = " 0 0 1 0 0 0 0 0",
"a15 a14 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
"a15 a14 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
loadpage_lo = " 0 1 0 0 0 0 0 0",
" x x x x x x x x",
" x a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_hi = " 0 1 0 0 1 0 0 0",
" x x x x x x x x",
" x a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
writepage = " 0 1 0 0 1 1 0 0",
"a15 a14 a13 a12 a11 a10 a9 a8",
" a7 x x x x x x x",
" x x x x x x x x";
load_ext_addr = " 0 1 0 0 1 1 0 1",
" 0 0 0 0 0 0 0 0",
" 0 0 0 0 0 0 0 a16",
" 0 0 0 0 0 0 0 0";
mode = 0x41;
delay = 10;
blocksize = 256;
readsize = 256;
;
memory "lfuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
"x x x x x x x x i i i i i i i i";
read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "hfuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
"x x x x x x x x i i i i i i i i";
read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "efuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
"x x x x x x x x x x x x x i i i";
read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x x x o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "calibration"
size = 1;
read = "0 0 1 1 1 0 0 0 x x x x x x x x",
"0 0 0 0 0 0 0 0 o o o o o o o o";
;
memory "signature"
size = 3;
read = "0 0 1 1 0 0 0 0 x x x x x x x x",
"x x x x x x a1 a0 o o o o o o o o";
;
;
#------------------------------------------------------------
# ATmega32u4
#------------------------------------------------------------
part
id = "m32u4";
desc = "ATmega32U4";
signature = 0x1e 0x95 0x87;
usbpid = 0x2ff4;
has_jtag = yes;
# stk500_devcode = 0xB2;
# avr910_devcode = 0x43;
chip_erase_delay = 9000;
pagel = 0xD7;
bs2 = 0xA0;
reset = dedicated;
pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
"x x x x x x x x x x x x x x x x";
chip_erase = "1 0 1 0 1 1 0 0 1 0 0 0 0 0 0 0",
"x x x x x x x x x x x x x x x x";
timeout = 200;
stabdelay = 100;
cmdexedelay = 25;
synchloops = 32;
bytedelay = 0;
pollindex = 3;
pollvalue = 0x53;
predelay = 1;
postdelay = 1;
pollmethod = 1;
pp_controlstack =
0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
hventerstabdelay = 100;
progmodedelay = 0;
latchcycles = 5;
togglevtg = 1;
poweroffdelay = 15;
resetdelayms = 1;
resetdelayus = 0;
hvleavestabdelay = 15;
chiperasepulsewidth = 0;
chiperasepolltimeout = 10;
programfusepulsewidth = 0;
programfusepolltimeout = 5;
programlockpulsewidth = 0;
programlockpolltimeout = 5;
idr = 0x31;
spmcr = 0x57;
rampz = 0x3b;
allowfullpagebitstream = no;
ocdrev = 3;
memory "eeprom"
paged = no; /* leave this "no" */
page_size = 4; /* for parallel programming */
size = 1024;
min_write_delay = 9000;
max_write_delay = 9000;
readback_p1 = 0x00;
readback_p2 = 0x00;
read = " 1 0 1 0 0 0 0 0",
" x x x x x a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
write = " 1 1 0 0 0 0 0 0",
" x x x x x a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_lo = " 1 1 0 0 0 0 0 1",
" 0 0 0 0 0 0 0 0",
" 0 0 0 0 0 a2 a1 a0",
" i i i i i i i i";
writepage = " 1 1 0 0 0 0 1 0",
" 0 0 x x x a10 a9 a8",
" a7 a6 a5 a4 a3 0 0 0",
" x x x x x x x x";
mode = 0x41;
delay = 20;
blocksize = 4;
readsize = 256;
;
memory "flash"
paged = yes;
size = 32768;
page_size = 128;
num_pages = 256;
min_write_delay = 4500;
max_write_delay = 4500;
readback_p1 = 0x00;
readback_p2 = 0x00;
read_lo = " 0 0 1 0 0 0 0 0",
" 0 a14 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
read_hi = " 0 0 1 0 1 0 0 0",
" 0 a14 a13 a12 a11 a10 a9 a8",
" a7 a6 a5 a4 a3 a2 a1 a0",
" o o o o o o o o";
loadpage_lo = " 0 1 0 0 0 0 0 0",
" x x x x x x x x",
" x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
loadpage_hi = " 0 1 0 0 1 0 0 0",
" x x x x x x x x",
" x x a5 a4 a3 a2 a1 a0",
" i i i i i i i i";
writepage = " 0 1 0 0 1 1 0 0",
" a15 a14 a13 a12 a11 a10 a9 a8",
" a7 a6 x x x x x x",
" x x x x x x x x";
mode = 0x41;
delay = 6;
blocksize = 128;
readsize = 256;
;
memory "lfuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
"x x x x x x x x i i i i i i i i";
read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "hfuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
"x x x x x x x x i i i i i i i i";
read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "efuse"
size = 1;
write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
"x x x x x x x x x x x x i i i i";
read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
"x x x x x x x x o o o o o o o o";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "lock"
size = 1;
read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
"x x x x x x x x x x o o o o o o";
write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
"x x x x x x x x 1 1 i i i i i i";
min_write_delay = 9000;
max_write_delay = 9000;
;
memory "calibration"
size = 1;
read = "0 0 1 1 1 0 0 0 x x x x x x x x",
"0 0 0 0 0 0 0 0 o o o o o o o o";
;
memory "signature"
size = 3;
read = "0 0 1 1 0 0 0 0 x x x x x x x x",
"x x x x x x a1 a0 o o o o o o o o";
;
;

View File

@ -0,0 +1 @@
The [avrdude.conf](https://github.com/prusa3d/PrusaSlicer/tree/master/src/avrdude) is a copy of the PrusaSlicer github repository

View File

@ -0,0 +1,73 @@
# Prusa Research Board Contribution Configuration
#
# For more information see:
# * https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification
# * https://github.com/arduino/Arduino/wiki/Arduino-Hardware-Cores-migration-guide-from-1.0-to-1.6
#
menu.cpu=Processor
################################################################################
############################### Prusa MM control ###############################
################################################################################
prusa_mm_control.name=Original Prusa i3 MK3 Multi Material 2.0 upgrade
prusa_mm_control.vid.0=0x2c99
prusa_mm_control.pid.0=0x0004
prusa_mm_control.vid.1=0x2c99
prusa_mm_control.pid.1=0x0003
prusa_mm_control.upload.tool=avrdude
prusa_mm_control.upload.protocol=avr109
prusa_mm_control.upload.maximum_size=28672
prusa_mm_control.upload.maximum_data_size=2560
prusa_mm_control.upload.speed=57600
prusa_mm_control.upload.disable_flushing=true
prusa_mm_control.upload.use_1200bps_touch=true
prusa_mm_control.upload.wait_for_upload_port=true
prusa_mm_control.bootloader.tool=avrdude
prusa_mm_control.bootloader.low_fuses=0xff
prusa_mm_control.bootloader.high_fuses=0xd8
prusa_mm_control.bootloader.extended_fuses=0xcb
prusa_mm_control.bootloader.file=prusa_mm_control/Caterina-prusa_mm_control.hex
prusa_mm_control.bootloader.unlock_bits=0x3F
prusa_mm_control.bootloader.lock_bits=0x2F
prusa_mm_control.build.mcu=atmega32u4
prusa_mm_control.build.f_cpu=16000000L
prusa_mm_control.build.vid=0x2c99
prusa_mm_control.build.pid=0x0004
prusa_mm_control.build.usb_product="Original Prusa i3 MK3 Multi Material 2.0 upgrade"
prusa_mm_control.build.board=AVR_prusa_mm_control
prusa_mm_control.build.core=arduino:arduino
prusa_mm_control.build.variant=prusa_mm_control
prusa_mm_control.build.extra_flags={build.usb_flags}
########################################
########## Prusa Einsy RAMBo ###########
########################################
prusa_einsy_rambo.name=PrusaResearch Einsy RAMBo
prusa_einsy_rambo.vid.0=0x27b1
prusa_einsy_rambo.pid.0=0x0001
prusa_einsy_rambo.upload.tool=avrdude
prusa_einsy_rambo.upload.protocol=wiring
prusa_einsy_rambo.upload.maximum_size=253952
prusa_einsy_rambo.upload.speed=115200
prusa_einsy_rambo.bootloader.tool=avrdude
prusa_einsy_rambo.bootloader.low_fuses=0xFF
prusa_einsy_rambo.bootloader.high_fuses=0xD8
prusa_einsy_rambo.bootloader.extended_fuses=0xFD
prusa_einsy_rambo.bootloader.path=prusa_einsy_rambo
prusa_einsy_rambo.bootloader.file=prusa_einsy_rambo/stk500boot_v2_mega2560.hex
prusa_einsy_rambo.bootloader.unlock_bits=0x3F
prusa_einsy_rambo.bootloader.lock_bits=0x0F
prusa_einsy_rambo.build.mcu=atmega2560
prusa_einsy_rambo.build.f_cpu=16000000L
prusa_einsy_rambo.build.board=AVR_PRUSA_EINSY_RAMBO
prusa_einsy_rambo.build.core=prusa_einsy_rambo
prusa_einsy_rambo.build.variant=prusa_einsy_rambo
prusa_einsy_rambo.compiler.c.elf.extra_flags=-Wl,-u,vfprintf -lprintf_flt -lm

View File

@ -0,0 +1,280 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS

View File

@ -0,0 +1,587 @@
# ----------------------------------------------------------------------------
# Makefile to compile and link stk500boot bootloader
# Author: Peter Fleury
# based on WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
#
# Adjust F_CPU below to the clock frequency in Mhz of your AVR target
# Adjust BOOTLOADER_ADDRESS to your AVR target
#
#----------------------------------------------------------------------------
# On command line:
#
# make all = Make software.
#
# make clean = Clean out built project files.
#
# make coff = Convert ELF to AVR COFF.
#
# make extcoff = Convert ELF to AVR Extended COFF.
#
# make program = Download the hex file to the device, using avrdude.
# Please customize the avrdude settings below first!
#
# make debug = Start either simulavr or avarice as specified for debugging,
# with avr-gdb or avr-insight as the front end for debugging.
#
# make filename.s = Just compile filename.c into the assembler code only.
#
# make filename.i = Create a preprocessed source file for use in submitting
# bug reports to the GCC project.
#
# To rebuild project do "make clean" then "make all".
#----------------------------------------------------------------------------
# <MLS> = Mark Sproul msproul-at-skychariot.com
# MCU name
MCU = atmega2560
# Processor frequency.
# This will define a symbol, F_CPU, in all source code files equal to the
# processor frequency. You can then use this symbol in your source code to
# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
# automatically to create a 32-bit value in your source code.
F_CPU = 16000000
# Bootloader
# Please adjust if using a different AVR
# 0x0e00*2=0x1C00 for ATmega8 512 words Boot Size
# 0xFC00*2=0x1F800 for ATmega128 1024 words Boot Size
# 0xF800*2=0x1F000 for ATmega1280
# 0xF000*2=0x1E000 for ATmega1280
BOOTLOADER_ADDRESS = 3E000
# Output format. (can be srec, ihex, binary)
FORMAT = ihex
# Target file name (without extension).
TARGET = stk500boot
# List C source files here. (C dependencies are automatically generated.)
SRC = stk500boot.c lcd.c
# List Assembler source files here.
# Make them always end in a capital .S. Files ending in a lowercase .s
# will not be considered source files but generated files (assembler
# output from the compiler), and will be deleted upon "make clean"!
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
ASRC =
# Optimization level, can be [0, 1, 2, 3, s].
# 0 = turn off optimization. s = optimize for size.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s
# Debugging format.
# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
# AVR Studio 4.10 requires dwarf-2.
# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
DEBUG = dwarf-2
# List any extra directories to look for include files here.
# Each directory must be seperated by a space.
# Use forward slashes for directory separators.
# For a directory that has spaces, enclose it in quotes.
EXTRAINCDIRS =
# Compiler flag to set the C Standard level.
# c89 = "ANSI" C
# gnu89 = c89 plus GCC extensions
# c99 = ISO C99 standard (not yet fully implemented)
# gnu99 = c99 plus GCC extensions
CSTANDARD = -std=gnu99
# Place -D or -U options here
CDEFS = -DF_CPU=$(F_CPU)UL
# Place -I options here
CINCS =
#---------------- Compiler Options ----------------
# -g*: generate debugging information
# -O*: optimization level
# -f...: tuning, see GCC manual and avr-libc documentation
# -Wall...: warning level
# -Wa,...: tell GCC to pass this to the assembler.
# -adhlns...: create assembler listing
CFLAGS = -g$(DEBUG)
CFLAGS += $(CDEFS) $(CINCS)
CFLAGS += -O$(OPT)
CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -fno-jump-tables
CFLAGS += -Wall -Wstrict-prototypes
CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
CFLAGS += $(CSTANDARD)
#---------------- Assembler Options ----------------
# -Wa,...: tell GCC to pass this to the assembler.
# -ahlms: create listing
# -gstabs: have the assembler create line number information; note that
# for use in COFF files, additional information about filenames
# and function names needs to be present in the assembler source
# files -- see avr-libc docs [FIXME: not yet described there]
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs
#---------------- Library Options ----------------
# Minimalistic printf version
PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
# Floating point printf version (requires MATH_LIB = -lm below)
PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
# If this is left blank, then it will use the Standard printf version.
PRINTF_LIB =
#PRINTF_LIB = $(PRINTF_LIB_MIN)
#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
# Minimalistic scanf version
SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
# If this is left blank, then it will use the Standard scanf version.
SCANF_LIB =
#SCANF_LIB = $(SCANF_LIB_MIN)
#SCANF_LIB = $(SCANF_LIB_FLOAT)
MATH_LIB = -lm
#---------------- External Memory Options ----------------
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
# used for variables (.data/.bss) and heap (malloc()).
#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
# 64 KB of external RAM, starting after internal RAM (ATmega128!),
# only used for heap (malloc()).
#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
EXTMEMOPTS =
#---------------- Linker Options ----------------
# -Wl,...: tell GCC to pass this to linker.
# -Map: create map file
# --cref: add cross reference to map file
LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
LDFLAGS += $(EXTMEMOPTS)
LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
#--------------- bootloader linker Options -------
# BOOTLOADER_ADDRESS (=Start of Boot Loader section
# in bytes - not words) is defined above.
#LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS) -nostartfiles -nodefaultlibs
#LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS) -nostartfiles
LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS)
#---------------- Programming Options (avrdude) ----------------
# Programming hardware: alf avr910 avrisp bascom bsd
# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500
#
# Type: avrdude -c ?
# to get a full listing.
#
AVRDUDE_PROGRAMMER = stk500v2
# com1 = serial port. Use lpt1 to connect to parallel port.
AVRDUDE_PORT = com1 # programmer connected to serial device
AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
# Uncomment the following if you want avrdude's erase cycle counter.
# Note that this counter needs to be initialized first using -Yn,
# see avrdude manual.
#AVRDUDE_ERASE_COUNTER = -y
# Uncomment the following if you do /not/ wish a verification to be
# performed after programming the device.
#AVRDUDE_NO_VERIFY = -V
# Increase verbosity level. Please use this when submitting bug
# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
# to submit bug reports.
#AVRDUDE_VERBOSE = -v -v
AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
#---------------- Debugging Options ----------------
# For simulavr only - target MCU frequency.
DEBUG_MFREQ = $(F_CPU)
# Set the DEBUG_UI to either gdb or insight.
# DEBUG_UI = gdb
DEBUG_UI = insight
# Set the debugging back-end to either avarice, simulavr.
DEBUG_BACKEND = avarice
#DEBUG_BACKEND = simulavr
# GDB Init Filename.
GDBINIT_FILE = __avr_gdbinit
# When using avarice settings for the JTAG
JTAG_DEV = /dev/com1
# Debugging port used to communicate between GDB / avarice / simulavr.
DEBUG_PORT = 4242
# Debugging host used to communicate between GDB / avarice / simulavr, normally
# just set to localhost unless doing some sort of crazy debugging when
# avarice is running on a different computer.
DEBUG_HOST = localhost
#============================================================================
# Define programs and commands.
SHELL = sh
CC = avr-gcc
OBJCOPY = avr-objcopy
OBJDUMP = avr-objdump
SIZE = avr-size
NM = avr-nm
AVRDUDE = avrdude
REMOVE = rm -f
COPY = cp
WINSHELL = cmd
# Define Messages
# English
MSG_ERRORS_NONE = Errors: none
MSG_BEGIN = -------- begin --------
MSG_END = -------- end --------
MSG_SIZE_BEFORE = Size before:
MSG_SIZE_AFTER = Size after:
MSG_COFF = Converting to AVR COFF:
MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
MSG_FLASH = Creating load file for Flash:
MSG_EEPROM = Creating load file for EEPROM:
MSG_EXTENDED_LISTING = Creating Extended Listing:
MSG_SYMBOL_TABLE = Creating Symbol Table:
MSG_LINKING = Linking:
MSG_COMPILING = Compiling:
MSG_ASSEMBLING = Assembling:
MSG_CLEANING = Cleaning project:
# Define all object files.
OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)
# Define all listing files.
LST = $(SRC:.c=.lst) $(ASRC:.S=.lst)
# Compiler flags to generate dependency files.
GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d
# Combine all necessary flags and optional flags.
# Add target processor to flags.
ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
############################################################
# May 25, 2010 <MLS> Adding 1280 support
#mega1280: MCU = atmega1280
#mega1280: F_CPU = 16000000
#mega1280: BOOTLOADER_ADDRESS = 1E000
#mega1280: CFLAGS += -D_MEGA_BOARD_
#mega1280: begin gccversion sizebefore build sizeafter end
# mv $(TARGET).hex stk500boot_v2_mega1280.hex
############################################################
# Jul 6, 2010 <MLS> Adding 2560 support
mega2560: MCU = atmega2560
mega2560: F_CPU = 16000000
mega2560: BOOTLOADER_ADDRESS = 3E000
mega2560: CFLAGS += -D_MEGA_BOARD_
mega2560: begin gccversion sizebefore build sizeafter end
mv $(TARGET).hex stk500boot_v2_mega2560.hex
############################################################
#Initial config on Amber128 board
# avrdude: Device signature = 0x1e9702
# avrdude: safemode: lfuse reads as 8F
# avrdude: safemode: hfuse reads as CB
# avrdude: safemode: efuse reads as FF
# Jul 17, 2010 <MLS> Adding 128 support
############################################################
amber128: MCU = atmega128
#amber128: F_CPU = 16000000
amber128: F_CPU = 14745600
amber128: BOOTLOADER_ADDRESS = 1E000
amber128: CFLAGS += -D_BOARD_AMBER128_
amber128: begin gccversion sizebefore build sizeafter end
mv $(TARGET).hex stk500boot_v2_amber128.hex
############################################################
# Aug 23, 2010 <MLS> Adding atmega2561 support
m2561: MCU = atmega2561
m2561: F_CPU = 8000000
m2561: BOOTLOADER_ADDRESS = 3E000
m2561: CFLAGS += -D_ANDROID_2561_ -DBAUDRATE=57600
m2561: begin gccversion sizebefore build sizeafter end
mv $(TARGET).hex stk500boot_v2_android2561.hex
############################################################
# avrdude: Device signature = 0x1e9801
# avrdude: safemode: lfuse reads as EC
# avrdude: safemode: hfuse reads as 18
# avrdude: safemode: efuse reads as FD
# Aug 23, 2010 <MLS> Adding cerebot 2560 @ 8mhz
#avrdude -P usb -c usbtiny -p m2560 -v -U flash:w:/Arduino/WiringBootV2_upd1/stk500boot_v2_cerebotplus.hex
############################################################
cerebot: MCU = atmega2560
cerebot: F_CPU = 8000000
cerebot: BOOTLOADER_ADDRESS = 3E000
cerebot: CFLAGS += -D_CEREBOTPLUS_BOARD_ -DBAUDRATE=38400 -DUART_BAUDRATE_DOUBLE_SPEED=1
cerebot: begin gccversion sizebefore build sizeafter end
mv $(TARGET).hex stk500boot_v2_cerebotplus.hex
############################################################
# Aug 23, 2010 <MLS> Adding atmega2561 support
penguino: MCU = atmega32
penguino: F_CPU = 16000000
penguino: BOOTLOADER_ADDRESS = 7800
penguino: CFLAGS += -D_PENGUINO_ -DBAUDRATE=57600
penguino: begin gccversion sizebefore build sizeafter end
mv $(TARGET).hex stk500boot_v2_penguino.hex
# Default target.
all: begin gccversion sizebefore build sizeafter end
build: elf hex eep lss sym
#build: hex eep lss sym
elf: $(TARGET).elf
hex: $(TARGET).hex
eep: $(TARGET).eep
lss: $(TARGET).lss
sym: $(TARGET).sym
# Eye candy.
# AVR Studio 3.x does not check make's exit code but relies on
# the following magic strings to be generated by the compile job.
begin:
@echo
@echo $(MSG_BEGIN)
end:
@echo $(MSG_END)
@echo
# Display size of file.
HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
ELFSIZE = $(SIZE) --format=avr --mcu=$(MCU) $(TARGET).elf
sizebefore:
@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
2>/dev/null; echo; fi
sizeafter:
@if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
2>/dev/null; echo; fi
# Display compiler version information.
gccversion :
@$(CC) --version
# Program the device.
program: $(TARGET).hex $(TARGET).eep
$(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
# Generate avr-gdb config/init file which does the following:
# define the reset signal, load the target file, connect to target, and set
# a breakpoint at main().
gdb-config:
@$(REMOVE) $(GDBINIT_FILE)
@echo define reset >> $(GDBINIT_FILE)
@echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
@echo end >> $(GDBINIT_FILE)
@echo file $(TARGET).elf >> $(GDBINIT_FILE)
@echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)
ifeq ($(DEBUG_BACKEND),simulavr)
@echo load >> $(GDBINIT_FILE)
endif
@echo break main >> $(GDBINIT_FILE)
debug: gdb-config $(TARGET).elf
ifeq ($(DEBUG_BACKEND), avarice)
@echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
@$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
$(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
@$(WINSHELL) /c pause
else
@$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
$(DEBUG_MFREQ) --port $(DEBUG_PORT)
endif
@$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
COFFCONVERT=$(OBJCOPY) --debugging \
--change-section-address .data-0x800000 \
--change-section-address .bss-0x800000 \
--change-section-address .noinit-0x800000 \
--change-section-address .eeprom-0x810000
coff: $(TARGET).elf
@echo
@echo $(MSG_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-avr $< $(TARGET).cof
extcoff: $(TARGET).elf
@echo
@echo $(MSG_EXTENDED_COFF) $(TARGET).cof
$(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
# Create final output files (.hex, .eep) from ELF output file.
%.hex: %.elf
@echo
@echo $(MSG_FLASH) $@
$(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
%.eep: %.elf
@echo
@echo $(MSG_EEPROM) $@
-$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
--change-section-lma .eeprom=0 -O $(FORMAT) $< $@
# Create extended listing file from ELF output file.
%.lss: %.elf
@echo
@echo $(MSG_EXTENDED_LISTING) $@
$(OBJDUMP) -h -S $< > $@
# Create a symbol table from ELF output file.
%.sym: %.elf
@echo
@echo $(MSG_SYMBOL_TABLE) $@
$(NM) -n $< > $@
# Link: create ELF output file from object files.
.SECONDARY : $(TARGET).elf
.PRECIOUS : $(OBJ)
%.elf: $(OBJ)
@echo
@echo $(MSG_LINKING) $@
$(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
# Compile: create object files from C source files.
%.o : %.c
@echo
@echo $(MSG_COMPILING) $<
$(CC) -c $(ALL_CFLAGS) $< -o $@
# Compile: create assembler files from C source files.
%.s : %.c
$(CC) -S $(ALL_CFLAGS) $< -o $@
# Assemble: create object files from assembler source files.
%.o : %.S
@echo
@echo $(MSG_ASSEMBLING) $<
$(CC) -c $(ALL_ASFLAGS) $< -o $@
# Create preprocessed source for use in sending a bug report.
%.i : %.c
$(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
# Target: clean project.
clean: begin clean_list end
clean_list :
@echo
@echo $(MSG_CLEANING)
$(REMOVE) *.hex
$(REMOVE) *.eep
$(REMOVE) *.cof
$(REMOVE) *.elf
$(REMOVE) *.map
$(REMOVE) *.sym
$(REMOVE) *.lss
$(REMOVE) $(OBJ)
$(REMOVE) $(LST)
$(REMOVE) $(SRC:.c=.s)
$(REMOVE) $(SRC:.c=.d)
$(REMOVE) .dep/*
# Include the dependency files.
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
# Listing of phony targets.
.PHONY : all begin finish end sizebefore sizeafter gccversion \
build elf hex eep lss sym coff extcoff \
clean clean_list program debug gdb-config

View File

@ -0,0 +1,189 @@
//**************************************************************************************************
//*
//* Atmel AVR CPU name strings
//*
//**************************************************************************************************
//* Sep 19, 2010 <MLS> Started on avr_cpunames.h
//**************************************************************************************************
//#include "avr_cpunames.h"
//**************************************************************************************************
#if defined (__AVR_AT94K__)
#define _AVR_CPU_NAME_ "AT94k"
#elif defined (__AVR_AT43USB320__)
#elif defined (__AVR_AT43USB355__)
#elif defined (__AVR_AT76C711__)
#elif defined (__AVR_AT86RF401__)
#elif defined (__AVR_AT90PWM1__)
#elif defined (__AVR_AT90PWM2__)
#elif defined (__AVR_AT90PWM2B__)
#elif defined (__AVR_AT90PWM3__)
#elif defined (__AVR_AT90PWM3B__)
#elif defined (__AVR_AT90PWM216__)
#elif defined (__AVR_AT90PWM316__)
#elif defined (__AVR_ATmega32C1__)
#elif defined (__AVR_ATmega32M1__)
#elif defined (__AVR_ATmega32U4__)
#define _AVR_CPU_NAME_ "ATmega32U4"
#elif defined (__AVR_ATmega32U6__)
#define _AVR_CPU_NAME_ "ATmega32U6"
#elif defined (__AVR_ATmega128__)
#define _AVR_CPU_NAME_ "Atmega128"
#elif defined (__AVR_ATmega1280__)
#define _AVR_CPU_NAME_ "ATmega1280"
#elif defined (__AVR_ATmega1281__)
#define _AVR_CPU_NAME_ "ATmega1281"
#elif defined (__AVR_ATmega1284P__)
#define _AVR_CPU_NAME_ "ATmega1284"
#elif defined (__AVR_ATmega128RFA1__)
#define _AVR_CPU_NAME_ "ATmega128RFA1"
#elif defined (__AVR_ATmega2560__)
#define _AVR_CPU_NAME_ "ATmega2560"
#elif defined (__AVR_ATmega2561__)
#define _AVR_CPU_NAME_ "ATmega2561"
#elif defined (__AVR_AT90CAN32__)
#define _AVR_CPU_NAME_ "AT90CAN32"
#elif defined (__AVR_AT90CAN64__)
#define _AVR_CPU_NAME_ "AT90CAN64"
#elif defined (__AVR_AT90CAN128__)
#define _AVR_CPU_NAME_ "AT90CAN128"
#elif defined (__AVR_AT90USB82__)
#define _AVR_CPU_NAME_ "AT90USB82"
#elif defined (__AVR_AT90USB162__)
#define _AVR_CPU_NAME_ "AT90USB162"
#elif defined (__AVR_AT90USB646__)
#define _AVR_CPU_NAME_ "AT90USB646"
#elif defined (__AVR_AT90USB647__)
#define _AVR_CPU_NAME_ "AT90USB647"
#elif defined (__AVR_AT90USB1286__)
#define _AVR_CPU_NAME_ "AT90USB1286"
#elif defined (__AVR_AT90USB1287__)
#define _AVR_CPU_NAME_ "AT90USB1287"
#elif defined (__AVR_ATmega64__)
#define _AVR_CPU_NAME_ "ATmega64"
#elif defined (__AVR_ATmega640__)
#define _AVR_CPU_NAME_ "ATmega640"
#elif defined (__AVR_ATmega644__)
#define _AVR_CPU_NAME_ "ATmega644"
#elif defined (__AVR_ATmega644P__)
#define _AVR_CPU_NAME_ "ATmega644P"
#elif defined (__AVR_ATmega645__)
#define _AVR_CPU_NAME_ "ATmega645"
#elif defined (__AVR_ATmega6450__)
#define _AVR_CPU_NAME_ "ATmega6450"
#elif defined (__AVR_ATmega649__)
#define _AVR_CPU_NAME_ "ATmega649"
#elif defined (__AVR_ATmega6490__)
#define _AVR_CPU_NAME_ "ATmega6490"
#elif defined (__AVR_ATmega103__)
#define _AVR_CPU_NAME_ "ATmega103"
#elif defined (__AVR_ATmega32__)
#define _AVR_CPU_NAME_ "Atmega32"
#elif defined (__AVR_ATmega323__)
#define _AVR_CPU_NAME_ "ATmega323"
#elif defined (__AVR_ATmega324P__)
#define _AVR_CPU_NAME_ "ATmega324P"
#elif defined (__AVR_ATmega325__)
#define _AVR_CPU_NAME_ "ATmega325"
#elif defined (__AVR_ATmega325P__)
#define _AVR_CPU_NAME_ "ATmega325P"
#elif defined (__AVR_ATmega3250__)
#define _AVR_CPU_NAME_ "ATmega3250"
#elif defined (__AVR_ATmega3250P__)
#define _AVR_CPU_NAME_ "ATmega3250P"
#elif defined (__AVR_ATmega328P__)
#define _AVR_CPU_NAME_ "ATmega328P"
#elif defined (__AVR_ATmega329__)
#define _AVR_CPU_NAME_ "ATmega329"
#elif defined (__AVR_ATmega329P__)
#define _AVR_CPU_NAME_ "ATmega329P"
#elif defined (__AVR_ATmega3290__)
#define _AVR_CPU_NAME_ "ATmega3290"
#elif defined (__AVR_ATmega3290P__)
#define _AVR_CPU_NAME_ "ATmega3290P"
#elif defined (__AVR_ATmega32HVB__)
#define _AVR_CPU_NAME_ "ATmega32HVB"
#elif defined (__AVR_ATmega406__)
#define _AVR_CPU_NAME_ "ATmega406"
#elif defined (__AVR_ATmega16__)
#define _AVR_CPU_NAME_ "Atmega16"
#elif defined (__AVR_ATmega161__)
#define _AVR_CPU_NAME_ "ATmega161"
#elif defined (__AVR_ATmega162__)
#define _AVR_CPU_NAME_ "ATmega162"
#elif defined (__AVR_ATmega163__)
#define _AVR_CPU_NAME_ "ATmega163"
#elif defined (__AVR_ATmega164P__)
#define _AVR_CPU_NAME_ "ATmega164P"
#elif defined (__AVR_ATmega165__)
#define _AVR_CPU_NAME_ "ATmega165"
#elif defined (__AVR_ATmega165P__)
#define _AVR_CPU_NAME_ "ATmega165P"
#elif defined (__AVR_ATmega168__)
#define _AVR_CPU_NAME_ "ATmega168"
#elif defined (__AVR_ATmega168P__)
#define _AVR_CPU_NAME_ "ATmega168P"
#elif defined (__AVR_ATmega169__)
#define _AVR_CPU_NAME_ "Atmega169"
#elif defined (__AVR_ATmega169P__)
#define _AVR_CPU_NAME_ "ATmega169P"
#elif defined (__AVR_ATmega8HVA__)
#define _AVR_CPU_NAME_ "ATmega8HVA"
#elif defined (__AVR_ATmega16HVA__)
#define _AVR_CPU_NAME_ "ATmega16HVA"
#elif defined (__AVR_ATmega8__)
#define _AVR_CPU_NAME_ "ATmega8"
#elif defined (__AVR_ATmega48__)
#define _AVR_CPU_NAME_ "ATmega48"
#elif defined (__AVR_ATmega48P__)
#define _AVR_CPU_NAME_ "ATmega48P"
#elif defined (__AVR_ATmega88__)
#define _AVR_CPU_NAME_ "ATmega88"
#elif defined (__AVR_ATmega88P__)
#define _AVR_CPU_NAME_ "ATmega88P"
#elif defined (__AVR_ATmega8515__)
#define _AVR_CPU_NAME_ "ATmega8515"
#elif defined (__AVR_ATmega8535__)
#define _AVR_CPU_NAME_ "ATmega8535"
#elif defined (__AVR_AT90S8535__)
#elif defined (__AVR_AT90C8534__)
#elif defined (__AVR_AT90S8515__)
#elif defined (__AVR_AT90S4434__)
#elif defined (__AVR_AT90S4433__)
#elif defined (__AVR_AT90S4414__)
#elif defined (__AVR_ATtiny22__)
#elif defined (__AVR_ATtiny26__)
#elif defined (__AVR_AT90S2343__)
#elif defined (__AVR_AT90S2333__)
#elif defined (__AVR_AT90S2323__)
#elif defined (__AVR_AT90S2313__)
#elif defined (__AVR_ATtiny2313__)
#define _AVR_CPU_NAME_ "ATtiny2313"
#elif defined (__AVR_ATtiny13__)
#elif defined (__AVR_ATtiny13A__)
#elif defined (__AVR_ATtiny25__)
#elif defined (__AVR_ATtiny45__)
#elif defined (__AVR_ATtiny85__)
#elif defined (__AVR_ATtiny24__)
#elif defined (__AVR_ATtiny44__)
#elif defined (__AVR_ATtiny84__)
#elif defined (__AVR_ATtiny261__)
#elif defined (__AVR_ATtiny461__)
#elif defined (__AVR_ATtiny861__)
#elif defined (__AVR_ATtiny43U__)
#elif defined (__AVR_ATtiny48__)
#elif defined (__AVR_ATtiny88__)
#elif defined (__AVR_ATtiny167__)
#elif defined (__AVR_ATmega8U2__)
#define _AVR_CPU_NAME_ "ATmega8U2"
#else
#error cpu not defined
#endif
#if !defined (_AVR_CPU_NAME_)
// #define _AVR_CPU_NAME_ "UNKNOWN"
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,118 @@
//**** ATMEL AVR - A P P L I C A T I O N N O T E ************************
//*
//* Title: AVR068 - STK500 Communication Protocol
//* Filename: command.h
//* Version: 1.0
//* Last updated: 31.01.2005
//*
//* Support E-mail: avr@atmel.com
//*
//**************************************************************************
// *****************[ STK message constants ]***************************
#define MESSAGE_START 0x1B //= ESC = 27 decimal
#define TOKEN 0x0E
// *****************[ STK general command constants ]**************************
#define CMD_SIGN_ON 0x01
#define CMD_SET_PARAMETER 0x02
#define CMD_GET_PARAMETER 0x03
#define CMD_SET_DEVICE_PARAMETERS 0x04
#define CMD_OSCCAL 0x05
#define CMD_LOAD_ADDRESS 0x06
#define CMD_FIRMWARE_UPGRADE 0x07
// *****************[ STK ISP command constants ]******************************
#define CMD_ENTER_PROGMODE_ISP 0x10
#define CMD_LEAVE_PROGMODE_ISP 0x11
#define CMD_CHIP_ERASE_ISP 0x12
#define CMD_PROGRAM_FLASH_ISP 0x13
#define CMD_READ_FLASH_ISP 0x14
#define CMD_PROGRAM_EEPROM_ISP 0x15
#define CMD_READ_EEPROM_ISP 0x16
#define CMD_PROGRAM_FUSE_ISP 0x17
#define CMD_READ_FUSE_ISP 0x18
#define CMD_PROGRAM_LOCK_ISP 0x19
#define CMD_READ_LOCK_ISP 0x1A
#define CMD_READ_SIGNATURE_ISP 0x1B
#define CMD_READ_OSCCAL_ISP 0x1C
#define CMD_SPI_MULTI 0x1D
// *****************[ STK PP command constants ]*******************************
#define CMD_ENTER_PROGMODE_PP 0x20
#define CMD_LEAVE_PROGMODE_PP 0x21
#define CMD_CHIP_ERASE_PP 0x22
#define CMD_PROGRAM_FLASH_PP 0x23
#define CMD_READ_FLASH_PP 0x24
#define CMD_PROGRAM_EEPROM_PP 0x25
#define CMD_READ_EEPROM_PP 0x26
#define CMD_PROGRAM_FUSE_PP 0x27
#define CMD_READ_FUSE_PP 0x28
#define CMD_PROGRAM_LOCK_PP 0x29
#define CMD_READ_LOCK_PP 0x2A
#define CMD_READ_SIGNATURE_PP 0x2B
#define CMD_READ_OSCCAL_PP 0x2C
#define CMD_SET_CONTROL_STACK 0x2D
// *****************[ STK HVSP command constants ]*****************************
#define CMD_ENTER_PROGMODE_HVSP 0x30
#define CMD_LEAVE_PROGMODE_HVSP 0x31
#define CMD_CHIP_ERASE_HVSP 0x32
#define CMD_PROGRAM_FLASH_HVSP ` 0x33
#define CMD_READ_FLASH_HVSP 0x34
#define CMD_PROGRAM_EEPROM_HVSP 0x35
#define CMD_READ_EEPROM_HVSP 0x36
#define CMD_PROGRAM_FUSE_HVSP 0x37
#define CMD_READ_FUSE_HVSP 0x38
#define CMD_PROGRAM_LOCK_HVSP 0x39
#define CMD_READ_LOCK_HVSP 0x3A
#define CMD_READ_SIGNATURE_HVSP 0x3B
#define CMD_READ_OSCCAL_HVSP 0x3C
// *****************[ STK Prusa3D specific command constants ]*****************
#define CMD_SET_UPLOAD_SIZE_PRUSA3D 0x71
// *****************[ STK status constants ]***************************
// Success
#define STATUS_CMD_OK 0x00
// Warnings
#define STATUS_CMD_TOUT 0x80
#define STATUS_RDY_BSY_TOUT 0x81
#define STATUS_SET_PARAM_MISSING 0x82
// Errors
#define STATUS_CMD_FAILED 0xC0
#define STATUS_CKSUM_ERROR 0xC1
#define STATUS_CMD_UNKNOWN 0xC9
// *****************[ STK parameter constants ]***************************
#define PARAM_BUILD_NUMBER_LOW 0x80
#define PARAM_BUILD_NUMBER_HIGH 0x81
#define PARAM_HW_VER 0x90
#define PARAM_SW_MAJOR 0x91
#define PARAM_SW_MINOR 0x92
#define PARAM_VTARGET 0x94
#define PARAM_VADJUST 0x95
#define PARAM_OSC_PSCALE 0x96
#define PARAM_OSC_CMATCH 0x97
#define PARAM_SCK_DURATION 0x98
#define PARAM_TOPCARD_DETECT 0x9A
#define PARAM_STATUS 0x9C
#define PARAM_DATA 0x9D
#define PARAM_RESET_POLARITY 0x9E
#define PARAM_CONTROLLER_INIT 0x9F
// *****************[ STK answer constants ]***************************
#define ANSWER_CKSUM_ERROR 0xB0

View File

@ -0,0 +1,718 @@
/*****************************************************************************
Title : HD44780 Library
Author : SA Development
Version: 1.11
*****************************************************************************/
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#include <avr/pgmspace.h>
#include "lcd.h"
#include <avr/sfr_defs.h>
#if (USE_ADELAY_LIBRARY==1)
#include "adelay.h"
#else
#define Delay_ns(__ns) \
if((unsigned long) (F_CPU/1000000000.0 * __ns) != F_CPU/1000000000.0 * __ns)\
__builtin_avr_delay_cycles((unsigned long) ( F_CPU/1000000000.0 * __ns)+1);\
else __builtin_avr_delay_cycles((unsigned long) ( F_CPU/1000000000.0 * __ns))
#define Delay_us(__us) \
if((unsigned long) (F_CPU/1000000.0 * __us) != F_CPU/1000000.0 * __us)\
__builtin_avr_delay_cycles((unsigned long) ( F_CPU/1000000.0 * __us)+1);\
else __builtin_avr_delay_cycles((unsigned long) ( F_CPU/1000000.0 * __us))
#define Delay_ms(__ms) \
if((unsigned long) (F_CPU/1000.0 * __ms) != F_CPU/1000.0 * __ms)\
__builtin_avr_delay_cycles((unsigned long) ( F_CPU/1000.0 * __ms)+1);\
else __builtin_avr_delay_cycles((unsigned long) ( F_CPU/1000.0 * __ms))
#define Delay_s(__s) \
if((unsigned long) (F_CPU/1.0 * __s) != F_CPU/1.0 * __s)\
__builtin_avr_delay_cycles((unsigned long) ( F_CPU/1.0 * __s)+1);\
else __builtin_avr_delay_cycles((unsigned long) ( F_CPU/1.0 * __s))
#endif
#if !defined(LCD_BITS) || (LCD_BITS!=4 && LCD_BITS!=8)
#error LCD_BITS is not defined or not valid.
#endif
#if !defined(WAIT_MODE) || (WAIT_MODE!=0 && WAIT_MODE!=1)
#error WAIT_MODE is not defined or not valid.
#endif
#if !defined(RW_LINE_IMPLEMENTED) || (RW_LINE_IMPLEMENTED!=0 && RW_LINE_IMPLEMENTED!=1)
#error RW_LINE_IMPLEMENTED is not defined or not valid.
#endif
#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED!=1)
#error WAIT_MODE=1 requires RW_LINE_IMPLEMENTED=1.
#endif
#if !defined(LCD_DISPLAYS) || (LCD_DISPLAYS<1) || (LCD_DISPLAYS>4)
#error LCD_DISPLAYS is not defined or not valid.
#endif
// Constants/Macros
#define PIN(x) (*(&x - 2)) // Address of Data Direction Register of Port X
#define DDR(x) (*(&x - 1)) // Address of Input Register of Port X
//PORT defines
#define lcd_rs_port_low() LCD_RS_PORT&=~_BV(LCD_RS_PIN)
#if RW_LINE_IMPLEMENTED==1
#define lcd_rw_port_low() LCD_RW_PORT&=~_BV(LCD_RW_PIN)
#endif
#define lcd_db0_port_low() LCD_DB0_PORT&=~_BV(LCD_DB0_PIN)
#define lcd_db1_port_low() LCD_DB1_PORT&=~_BV(LCD_DB1_PIN)
#define lcd_db2_port_low() LCD_DB2_PORT&=~_BV(LCD_DB2_PIN)
#define lcd_db3_port_low() LCD_DB3_PORT&=~_BV(LCD_DB3_PIN)
#define lcd_db4_port_low() LCD_DB4_PORT&=~_BV(LCD_DB4_PIN)
#define lcd_db5_port_low() LCD_DB5_PORT&=~_BV(LCD_DB5_PIN)
#define lcd_db6_port_low() LCD_DB6_PORT&=~_BV(LCD_DB6_PIN)
#define lcd_db7_port_low() LCD_DB7_PORT&=~_BV(LCD_DB7_PIN)
#define lcd_rs_port_high() LCD_RS_PORT|=_BV(LCD_RS_PIN)
#if RW_LINE_IMPLEMENTED==1
#define lcd_rw_port_high() LCD_RW_PORT|=_BV(LCD_RW_PIN)
#endif
#define lcd_db0_port_high() LCD_DB0_PORT|=_BV(LCD_DB0_PIN)
#define lcd_db1_port_high() LCD_DB1_PORT|=_BV(LCD_DB1_PIN)
#define lcd_db2_port_high() LCD_DB2_PORT|=_BV(LCD_DB2_PIN)
#define lcd_db3_port_high() LCD_DB3_PORT|=_BV(LCD_DB3_PIN)
#define lcd_db4_port_high() LCD_DB4_PORT|=_BV(LCD_DB4_PIN)
#define lcd_db5_port_high() LCD_DB5_PORT|=_BV(LCD_DB5_PIN)
#define lcd_db6_port_high() LCD_DB6_PORT|=_BV(LCD_DB6_PIN)
#define lcd_db7_port_high() LCD_DB7_PORT|=_BV(LCD_DB7_PIN)
#define lcd_rs_port_set(value) if (value) lcd_rs_port_high(); else lcd_rs_port_low();
#if RW_LINE_IMPLEMENTED==1
#define lcd_rw_port_set(value) if (value) lcd_rw_port_high(); else lcd_rw_port_low();
#endif
#define lcd_db0_port_set(value) if (value) lcd_db0_port_high(); else lcd_db0_port_low();
#define lcd_db1_port_set(value) if (value) lcd_db1_port_high(); else lcd_db1_port_low();
#define lcd_db2_port_set(value) if (value) lcd_db2_port_high(); else lcd_db2_port_low();
#define lcd_db3_port_set(value) if (value) lcd_db3_port_high(); else lcd_db3_port_low();
#define lcd_db4_port_set(value) if (value) lcd_db4_port_high(); else lcd_db4_port_low();
#define lcd_db5_port_set(value) if (value) lcd_db5_port_high(); else lcd_db5_port_low();
#define lcd_db6_port_set(value) if (value) lcd_db6_port_high(); else lcd_db6_port_low();
#define lcd_db7_port_set(value) if (value) lcd_db7_port_high(); else lcd_db7_port_low();
//PIN defines
#define lcd_db0_pin_get() (((PIN(LCD_DB0_PORT) & _BV(LCD_DB0_PIN))==0)?0:1)
#define lcd_db1_pin_get() (((PIN(LCD_DB1_PORT) & _BV(LCD_DB1_PIN))==0)?0:1)
#define lcd_db2_pin_get() (((PIN(LCD_DB2_PORT) & _BV(LCD_DB2_PIN))==0)?0:1)
#define lcd_db3_pin_get() (((PIN(LCD_DB3_PORT) & _BV(LCD_DB3_PIN))==0)?0:1)
#define lcd_db4_pin_get() (((PIN(LCD_DB4_PORT) & _BV(LCD_DB4_PIN))==0)?0:1)
#define lcd_db5_pin_get() (((PIN(LCD_DB5_PORT) & _BV(LCD_DB5_PIN))==0)?0:1)
#define lcd_db6_pin_get() (((PIN(LCD_DB6_PORT) & _BV(LCD_DB6_PIN))==0)?0:1)
#define lcd_db7_pin_get() (((PIN(LCD_DB7_PORT) & _BV(LCD_DB7_PIN))==0)?0:1)
//DDR defines
#define lcd_rs_ddr_low() DDR(LCD_RS_PORT)&=~_BV(LCD_RS_PIN)
#if RW_LINE_IMPLEMENTED==1
#define lcd_rw_ddr_low() DDR(LCD_RW_PORT)&=~_BV(LCD_RW_PIN)
#endif
#define lcd_db0_ddr_low() DDR(LCD_DB0_PORT)&=~_BV(LCD_DB0_PIN)
#define lcd_db1_ddr_low() DDR(LCD_DB1_PORT)&=~_BV(LCD_DB1_PIN)
#define lcd_db2_ddr_low() DDR(LCD_DB2_PORT)&=~_BV(LCD_DB2_PIN)
#define lcd_db3_ddr_low() DDR(LCD_DB3_PORT)&=~_BV(LCD_DB3_PIN)
#define lcd_db4_ddr_low() DDR(LCD_DB4_PORT)&=~_BV(LCD_DB4_PIN)
#define lcd_db5_ddr_low() DDR(LCD_DB5_PORT)&=~_BV(LCD_DB5_PIN)
#define lcd_db6_ddr_low() DDR(LCD_DB6_PORT)&=~_BV(LCD_DB6_PIN)
#define lcd_db7_ddr_low() DDR(LCD_DB7_PORT)&=~_BV(LCD_DB7_PIN)
#define lcd_rs_ddr_high() DDR(LCD_RS_PORT)|=_BV(LCD_RS_PIN)
#if RW_LINE_IMPLEMENTED==1
#define lcd_rw_ddr_high() DDR(LCD_RW_PORT)|=_BV(LCD_RW_PIN)
#endif
#define lcd_db0_ddr_high() DDR(LCD_DB0_PORT)|=_BV(LCD_DB0_PIN)
#define lcd_db1_ddr_high() DDR(LCD_DB1_PORT)|=_BV(LCD_DB1_PIN)
#define lcd_db2_ddr_high() DDR(LCD_DB2_PORT)|=_BV(LCD_DB2_PIN)
#define lcd_db3_ddr_high() DDR(LCD_DB3_PORT)|=_BV(LCD_DB3_PIN)
#define lcd_db4_ddr_high() DDR(LCD_DB4_PORT)|=_BV(LCD_DB4_PIN)
#define lcd_db5_ddr_high() DDR(LCD_DB5_PORT)|=_BV(LCD_DB5_PIN)
#define lcd_db6_ddr_high() DDR(LCD_DB6_PORT)|=_BV(LCD_DB6_PIN)
#define lcd_db7_ddr_high() DDR(LCD_DB7_PORT)|=_BV(LCD_DB7_PIN)
#define lcd_rs_ddr_set(value) if (value) lcd_rs_ddr_high(); else lcd_rs_ddr_low();
#if RW_LINE_IMPLEMENTED==1
#define lcd_rw_ddr_set(value) if (value) lcd_rw_ddr_high(); else lcd_rw_ddr_low();
#endif
#define lcd_db0_ddr_set(value) if (value) lcd_db0_ddr_high(); else lcd_db0_ddr_low();
#define lcd_db1_ddr_set(value) if (value) lcd_db1_ddr_high(); else lcd_db1_ddr_low();
#define lcd_db2_ddr_set(value) if (value) lcd_db2_ddr_high(); else lcd_db2_ddr_low();
#define lcd_db3_ddr_set(value) if (value) lcd_db3_ddr_high(); else lcd_db3_ddr_low();
#define lcd_db4_ddr_set(value) if (value) lcd_db4_ddr_high(); else lcd_db4_ddr_low();
#define lcd_db5_ddr_set(value) if (value) lcd_db5_ddr_high(); else lcd_db5_ddr_low();
#define lcd_db6_ddr_set(value) if (value) lcd_db6_ddr_high(); else lcd_db6_ddr_low();
#define lcd_db7_ddr_set(value) if (value) lcd_db7_ddr_high(); else lcd_db7_ddr_low();
#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1)
static unsigned char PrevCmdInvolvedAddressCounter=0;
#endif
#if (LCD_DISPLAYS>1)
static unsigned char ActiveDisplay=1;
#endif
static inline void lcd_e_port_low()
{
#if (LCD_DISPLAYS>1)
switch (ActiveDisplay)
{
case 2 : LCD_E2_PORT&=~_BV(LCD_E2_PIN);
break;
#if (LCD_DISPLAYS>=3)
case 3 : LCD_E3_PORT&=~_BV(LCD_E3_PIN);
break;
#endif
#if (LCD_DISPLAYS==4)
case 4 : LCD_E4_PORT&=~_BV(LCD_E4_PIN);
break;
#endif
default :
#endif
LCD_E_PORT&=~_BV(LCD_E_PIN);
#if (LCD_DISPLAYS>1)
}
#endif
}
static inline void lcd_e_port_high()
{
#if (LCD_DISPLAYS>1)
switch (ActiveDisplay)
{
case 2 : LCD_E2_PORT|=_BV(LCD_E2_PIN);
break;
#if (LCD_DISPLAYS>=3)
case 3 : LCD_E3_PORT|=_BV(LCD_E3_PIN);
break;
#endif
#if (LCD_DISPLAYS==4)
case 4 : LCD_E4_PORT|=_BV(LCD_E4_PIN);
break;
#endif
default :
#endif
LCD_E_PORT|=_BV(LCD_E_PIN);
#if (LCD_DISPLAYS>1)
}
#endif
}
static inline void lcd_e_ddr_low()
{
#if (LCD_DISPLAYS>1)
switch (ActiveDisplay)
{
case 2 : DDR(LCD_E2_PORT)&=~_BV(LCD_E2_PIN);
break;
#if (LCD_DISPLAYS>=3)
case 3 : DDR(LCD_E3_PORT)&=~_BV(LCD_E3_PIN);
break;
#endif
#if (LCD_DISPLAYS==4)
case 4 : DDR(LCD_E4_PORT)&=~_BV(LCD_E4_PIN);
break;
#endif
default :
#endif
DDR(LCD_E_PORT)&=~_BV(LCD_E_PIN);
#if (LCD_DISPLAYS>1)
}
#endif
}
static inline void lcd_e_ddr_high()
{
#if (LCD_DISPLAYS>1)
switch (ActiveDisplay)
{
case 2 : DDR(LCD_E2_PORT)|=_BV(LCD_E2_PIN);
break;
#if (LCD_DISPLAYS>=3)
case 3 : DDR(LCD_E3_PORT)|=_BV(LCD_E3_PIN);
break;
#endif
#if (LCD_DISPLAYS==4)
case 4 : DDR(LCD_E4_PORT)|=_BV(LCD_E4_PIN);
break;
#endif
default :
#endif
DDR(LCD_E_PORT)|=_BV(LCD_E_PIN);
#if (LCD_DISPLAYS>1)
}
#endif
}
/*************************************************************************
loops while lcd is busy, returns address counter
*************************************************************************/
#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1)
static uint8_t lcd_read(uint8_t rs);
static void lcd_waitbusy(void)
{
register uint8_t c;
unsigned int ul1=0;
while ( ((c=lcd_read(0)) & (1<<LCD_BUSY)) && ul1<((F_CPU/16384>=16)?F_CPU/16384:16)) // Wait Until Busy Flag is Cleared
ul1++;
}
#endif
/*************************************************************************
Low-level function to read byte from LCD controller
Input: rs 1: read data
0: read busy flag / address counter
Returns: byte read from LCD controller
*************************************************************************/
#if RW_LINE_IMPLEMENTED==1
static uint8_t lcd_read(uint8_t rs)
{
uint8_t data;
#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1)
if (rs)
lcd_waitbusy();
if (PrevCmdInvolvedAddressCounter)
{
Delay_us(5);
PrevCmdInvolvedAddressCounter=0;
}
#endif
if (rs)
{
lcd_rs_port_high(); // RS=1: Read Data
#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1)
PrevCmdInvolvedAddressCounter=1;
#endif
}
else lcd_rs_port_low(); // RS=0: Read Busy Flag
lcd_rw_port_high(); // RW=1: Read Mode
#if LCD_BITS==4
lcd_db7_ddr_low(); // Configure Data Pins as Input
lcd_db6_ddr_low();
lcd_db5_ddr_low();
lcd_db4_ddr_low();
lcd_e_port_high(); // Read High Nibble First
Delay_ns(500);
data=lcd_db4_pin_get() << 4 | lcd_db5_pin_get() << 5 |
lcd_db6_pin_get() << 6 | lcd_db7_pin_get() << 7;
lcd_e_port_low();
Delay_ns(500);
lcd_e_port_high(); // Read Low Nibble
Delay_ns(500);
data|=lcd_db4_pin_get() << 0 | lcd_db5_pin_get() << 1 |
lcd_db6_pin_get() << 2 | lcd_db7_pin_get() << 3;
lcd_e_port_low();
lcd_db7_ddr_high(); // Configure Data Pins as Output
lcd_db6_ddr_high();
lcd_db5_ddr_high();
lcd_db4_ddr_high();
lcd_db7_port_high(); // Pins High (Inactive)
lcd_db6_port_high();
lcd_db5_port_high();
lcd_db4_port_high();
#else //using 8-Bit-Mode
lcd_db7_ddr_low(); // Configure Data Pins as Input
lcd_db6_ddr_low();
lcd_db5_ddr_low();
lcd_db4_ddr_low();
lcd_db3_ddr_low();
lcd_db2_ddr_low();
lcd_db1_ddr_low();
lcd_db0_ddr_low();
lcd_e_port_high();
Delay_ns(500);
data=lcd_db7_pin_get() << 7 | lcd_db6_pin_get() << 6 |
lcd_db5_pin_get() << 5 | lcd_db4_pin_get() << 4 |
lcd_db3_pin_get() << 3 | lcd_db2_pin_get() << 2 |
lcd_db1_pin_get() << 1 | lcd_db0_pin_get();
lcd_e_port_low();
lcd_db7_ddr_high(); // Configure Data Pins as Output
lcd_db6_ddr_high();
lcd_db5_ddr_high();
lcd_db4_ddr_high();
lcd_db3_ddr_high();
lcd_db2_ddr_high();
lcd_db1_ddr_high();
lcd_db0_ddr_high();
lcd_db7_port_high(); // Pins High (Inactive)
lcd_db6_port_high();
lcd_db5_port_high();
lcd_db4_port_high();
lcd_db3_port_high();
lcd_db2_port_high();
lcd_db1_port_high();
lcd_db0_port_high();
#endif
lcd_rw_port_low();
#if (WAIT_MODE==0 || RW_LINE_IMPLEMENTED==0)
if (rs)
Delay_us(40);
else Delay_us(1);
#endif
return data;
}
uint8_t lcd_getc()
{
return lcd_read(1);
}
#endif
/*************************************************************************
Low-level function to write byte to LCD controller
Input: data byte to write to LCD
rs 1: write data
0: write instruction
Returns: none
*************************************************************************/
static void lcd_write(uint8_t data,uint8_t rs)
{
#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1)
lcd_waitbusy();
if (PrevCmdInvolvedAddressCounter)
{
Delay_us(5);
PrevCmdInvolvedAddressCounter=0;
}
#endif
if (rs)
{
lcd_rs_port_high(); // RS=1: Write Character
#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1)
PrevCmdInvolvedAddressCounter=1;
#endif
}
else
{
lcd_rs_port_low(); // RS=0: Write Command
#if (WAIT_MODE==1 && RW_LINE_IMPLEMENTED==1)
PrevCmdInvolvedAddressCounter=0;
#endif
}
#if LCD_BITS==4
lcd_db7_port_set(data&_BV(7)); //Output High Nibble
lcd_db6_port_set(data&_BV(6));
lcd_db5_port_set(data&_BV(5));
lcd_db4_port_set(data&_BV(4));
Delay_ns(100);
lcd_e_port_high();
Delay_ns(500);
lcd_e_port_low();
lcd_db7_port_set(data&_BV(3)); //Output High Nibble
lcd_db6_port_set(data&_BV(2));
lcd_db5_port_set(data&_BV(1));
lcd_db4_port_set(data&_BV(0));
Delay_ns(100);
lcd_e_port_high();
Delay_ns(500);
lcd_e_port_low();
lcd_db7_port_high(); // All Data Pins High (Inactive)
lcd_db6_port_high();
lcd_db5_port_high();
lcd_db4_port_high();
#else //using 8-Bit_Mode
lcd_db7_port_set(data&_BV(7)); //Output High Nibble
lcd_db6_port_set(data&_BV(6));
lcd_db5_port_set(data&_BV(5));
lcd_db4_port_set(data&_BV(4));
lcd_db3_port_set(data&_BV(3)); //Output High Nibble
lcd_db2_port_set(data&_BV(2));
lcd_db1_port_set(data&_BV(1));
lcd_db0_port_set(data&_BV(0));
Delay_ns(100);
lcd_e_port_high();
Delay_ns(500);
lcd_e_port_low();
lcd_db7_port_high(); // All Data Pins High (Inactive)
lcd_db6_port_high();
lcd_db5_port_high();
lcd_db4_port_high();
lcd_db3_port_high();
lcd_db2_port_high();
lcd_db1_port_high();
lcd_db0_port_high();
#endif
#if (WAIT_MODE==0 || RW_LINE_IMPLEMENTED==0)
if (!rs && data<=((1<<LCD_CLR) | (1<<LCD_HOME))) // Is command clrscr or home?
Delay_us(1640);
else Delay_us(40);
#endif
}
/*************************************************************************
Send LCD controller instruction command
Input: instruction to send to LCD controller, see HD44780 data sheet
Returns: none
*************************************************************************/
void lcd_command(uint8_t cmd)
{
lcd_write(cmd,0);
}
/*************************************************************************
Set cursor to specified position
Input: pos position
Returns: none
*************************************************************************/
void lcd_goto(uint8_t pos)
{
lcd_command((1<<LCD_DDRAM)+pos);
}
/*************************************************************************
Clear screen
Input: none
Returns: none
*************************************************************************/
void lcd_clrscr()
{
lcd_command(1<<LCD_CLR);
}
/*************************************************************************
Return home
Input: none
Returns: none
*************************************************************************/
void lcd_home()
{
lcd_command(1<<LCD_HOME);
}
/*************************************************************************
Display character
Input: character to be displayed
Returns: none
*************************************************************************/
void lcd_putc(char c)
{
lcd_write(c,1);
}
/*************************************************************************
Display string
Input: string to be displayed
Returns: none
*************************************************************************/
void lcd_puts(const char *s)
{
register char c;
while ((c=*s++))
lcd_putc(c);
}
/*************************************************************************
Display string from flash
Input: string to be displayed
Returns: none
*************************************************************************/
void lcd_puts_P(const char *progmem_s)
{
register char c;
while ((c=pgm_read_byte(progmem_s++)))
lcd_putc(c);
}
/*************************************************************************
Initialize display
Input: none
Returns: none
*************************************************************************/
void lcd_init()
{
//Set All Pins as Output
lcd_e_ddr_high();
lcd_rs_ddr_high();
#if RW_LINE_IMPLEMENTED==1
lcd_rw_ddr_high();
#endif
lcd_db7_ddr_high();
lcd_db6_ddr_high();
lcd_db5_ddr_high();
lcd_db4_ddr_high();
#if LCD_BITS==8
lcd_db3_ddr_high();
lcd_db2_ddr_high();
lcd_db1_ddr_high();
lcd_db0_ddr_high();
#endif
//Set All Control Lines Low
lcd_e_port_low();
lcd_rs_port_low();
#if RW_LINE_IMPLEMENTED==1
lcd_rw_port_low();
#endif
//Set All Data Lines High
lcd_db7_port_high();
lcd_db6_port_high();
lcd_db5_port_high();
lcd_db4_port_high();
#if LCD_BITS==8
lcd_db3_port_high();
lcd_db2_port_high();
lcd_db1_port_high();
lcd_db0_port_high();
#endif
//Startup Delay
Delay_ms(DELAY_RESET);
//Initialize Display
lcd_db7_port_low();
lcd_db6_port_low();
Delay_ns(100);
lcd_e_port_high();
Delay_ns(500);
lcd_e_port_low();
Delay_us(4100);
lcd_e_port_high();
Delay_ns(500);
lcd_e_port_low();
Delay_us(100);
lcd_e_port_high();
Delay_ns(500);
lcd_e_port_low();
Delay_us(40);
//Init differs between 4-bit and 8-bit from here
#if (LCD_BITS==4)
lcd_db4_port_low();
Delay_ns(100);
lcd_e_port_high();
Delay_ns(500);
lcd_e_port_low();
Delay_us(40);
lcd_db4_port_low();
Delay_ns(100);
lcd_e_port_high();
Delay_ns(500);
lcd_e_port_low();
Delay_ns(500);
#if (LCD_DISPLAYS==1)
if (LCD_DISPLAY_LINES>1)
lcd_db7_port_high();
#else
unsigned char c;
switch (ActiveDisplay)
{
case 1 : c=LCD_DISPLAY_LINES; break;
case 2 : c=LCD_DISPLAY2_LINES; break;
#if (LCD_DISPLAYS>=3)
case 3 : c=LCD_DISPLAY3_LINES; break;
#endif
#if (LCD_DISPLAYS==4)
case 4 : c=LCD_DISPLAY4_LINES; break;
#endif
}
if (c>1)
lcd_db7_port_high();
#endif
Delay_ns(100);
lcd_e_port_high();
Delay_ns(500);
lcd_e_port_low();
Delay_us(40);
#else
#if (LCD_DISPLAYS==1)
if (LCD_DISPLAY_LINES<2)
lcd_db3_port_low();
#else
unsigned char c;
switch (ActiveDisplay)
{
case 1 : c=LCD_DISPLAY_LINES; break;
case 2 : c=LCD_DISPLAY2_LINES; break;
#if (LCD_DISPLAYS>=3)
case 3 : c=LCD_DISPLAY3_LINES; break;
#endif
#if (LCD_DISPLAYS==4)
case 4 : c=LCD_DISPLAY4_LINES; break;
#endif
}
if (c<2)
lcd_db3_port_low();
#endif
lcd_db2_port_low();
Delay_ns(100);
lcd_e_port_high();
Delay_ns(500);
lcd_e_port_low();
Delay_us(40);
#endif
//Display Off
lcd_command(_BV(LCD_DISPLAYMODE));
//Display Clear
lcd_clrscr();
//Entry Mode Set
lcd_command(_BV(LCD_ENTRY_MODE) | _BV(LCD_ENTRY_INC));
//Display On
lcd_command(_BV(LCD_DISPLAYMODE) | _BV(LCD_DISPLAYMODE_ON));
}
#if (LCD_DISPLAYS>1)
void lcd_use_display(int ADisplay)
{
if (ADisplay>=1 && ADisplay<=LCD_DISPLAYS)
ActiveDisplay=ADisplay;
}
#endif

View File

@ -0,0 +1,65 @@
/*****************************************************************************
Title : HD44780 Library
Author : SA Development
Version: 1.11
*****************************************************************************/
#ifndef HD44780_H
#define HD44780_H
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#include "settings.h"
#include "inttypes.h"
//LCD Constants for HD44780
#define LCD_CLR 0 // DB0: clear display
#define LCD_HOME 1 // DB1: return to home position
#define LCD_ENTRY_MODE 2 // DB2: set entry mode
#define LCD_ENTRY_INC 1 // DB1: 1=increment, 0=decrement
#define LCD_ENTRY_SHIFT 0 // DB0: 1=display shift on
#define LCD_DISPLAYMODE 3 // DB3: turn lcd/cursor on
#define LCD_DISPLAYMODE_ON 2 // DB2: turn display on
#define LCD_DISPLAYMODE_CURSOR 1 // DB1: turn cursor on
#define LCD_DISPLAYMODE_BLINK 0 // DB0: blinking cursor
#define LCD_MOVE 4 // DB4: move cursor/display
#define LCD_MOVE_DISP 3 // DB3: move display (0-> cursor)
#define LCD_MOVE_RIGHT 2 // DB2: move right (0-> left)
#define LCD_FUNCTION 5 // DB5: function set
#define LCD_FUNCTION_8BIT 4 // DB4: set 8BIT mode (0->4BIT mode)
#define LCD_FUNCTION_2LINES 3 // DB3: two lines (0->one line)
#define LCD_FUNCTION_10DOTS 2 // DB2: 5x10 font (0->5x7 font)
#define LCD_CGRAM 6 // DB6: set CG RAM address
#define LCD_DDRAM 7 // DB7: set DD RAM address
#define LCD_BUSY 7 // DB7: LCD is busy
void lcd_init();
void lcd_command(uint8_t cmd);
void lcd_clrscr();
void lcd_home();
void lcd_goto(uint8_t pos);
#if RW_LINE_IMPLEMENTED==1
uint8_t lcd_getc();
#endif
void lcd_putc(char c);
void lcd_puts(const char *s);
void lcd_puts_P(const char *progmem_s);
#if (LCD_DISPLAYS>1)
void lcd_use_display(int ADisplay);
#endif
#endif

View File

@ -0,0 +1,83 @@
#ifndef HD44780_SETTINGS_H
#define HD44780_SETTINGS_H
//#define F_CPU 8000000 // Set Clock Frequency
#define EINSYBOARD
#define USE_ADELAY_LIBRARY 0 // Set to 1 to use my ADELAY library, 0 to use internal delay functions
#define LCD_BITS 4 // 4 for 4 Bit I/O Mode, 8 for 8 Bit I/O Mode
#define RW_LINE_IMPLEMENTED 0 // 0 for no RW line (RW on LCD tied to ground), 1 for RW line present
#define WAIT_MODE 0 // 0=Use Delay Method (Faster if running <10Mhz)
// 1=Use Check Busy Flag (Faster if running >10Mhz) ***Requires RW Line***
#define DELAY_RESET 15 // in mS
#if (LCD_BITS==8) // If using 8 bit mode, you must configure DB0-DB7
#define LCD_DB0_PORT PORTC
#define LCD_DB0_PIN 0
#define LCD_DB1_PORT PORTC
#define LCD_DB1_PIN 1
#define LCD_DB2_PORT PORTC
#define LCD_DB2_PIN 2
#define LCD_DB3_PORT PORTC
#define LCD_DB3_PIN 3
#endif
#ifdef EINSYBOARD
#define LCD_DB4_PORT PORTF // If using 4 bit mode, yo umust configure DB4-DB7
#define LCD_DB4_PIN PF5
#else
#define LCD_DB4_PORT PORTD // If using 4 bit mode, yo umust configure DB4-DB7
#define LCD_DB4_PIN PB2
#endif
#define LCD_DB5_PORT PORTG
#define LCD_DB5_PIN PG4
#define LCD_DB6_PORT PORTH
#define LCD_DB6_PIN PK7
#define LCD_DB7_PORT PORTG
#define LCD_DB7_PIN PA3
#define LCD_RS_PORT PORTD // Port for RS line
#define LCD_RS_PIN PK5 // Pin for RS line
#define LCD_RW_PORT PORTC // Port for RW line (ONLY used if RW_LINE_IMPLEMENTED=1)
#define LCD_RW_PIN PC6 // Pin for RW line (ONLY used if RW_LINE_IMPLEMENTED=1)
#define LCD_DISPLAYS 1 // Up to 4 LCD displays can be used at one time
// All pins are shared between displays except for the E
// pin which each display will have its own
// Display 1 Settings - if you only have 1 display, YOU MUST SET THESE
#define LCD_DISPLAY_LINES 2 // Number of Lines, Only Used for Set I/O Mode Command
#ifdef EINSYBOARD
#define LCD_E_PORT PORTF // Port for E line
#define LCD_E_PIN PF7 // Pin for E line
#else
#define LCD_E_PORT PORTD // Port for E line
#define LCD_E_PIN PD3 // Pin for E line
#endif
#if (LCD_DISPLAYS>=2) // If you have 2 displays, set these and change LCD_DISPLAYS=2
#define LCD_DISPLAY2_LINES 2 // Number of Lines, Only Used for Set I/O Mode Command
#define LCD_E2_PORT PORTC // Port for E line
#define LCD_E2_PIN 5 // Pin for E line
#endif
#if (LCD_DISPLAYS>=3) // If you have 3 displays, set these and change LCD_DISPLAYS=3
#define LCD_DISPLAY3_LINES 2 // Number of Lines, Only Used for Set I/O Mode Command
#define LCD_E3_PORT PORTC // Port for E line
#define LCD_E3_PIN 5 // Pin for E line
#endif
#if (LCD_DISPLAYS>=4) // If you have 4 displays, set these and change LCD_DISPLAYS=4
#define LCD_DISPLAY4_LINES 2 // Number of Lines, Only Used for Set I/O Mode Command
#define LCD_E4_PORT PORTC // Port for E line
#define LCD_E4_PIN 5 // Pin for E line
#endif
#endif

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,4 @@
#ifndef STK500BOOT_H
#define STK500BOOT_H
extern void sendchar(char c);
#endif // STK500BOOT_H

View File

@ -0,0 +1,216 @@
:020000023000CC
:10E000000D9472F00D949BF00D949BF00D949BF089
:10E010000D949BF00D949BF00D949BF00D949BF050
:10E020000D949BF00D949BF00D949BF00D949BF040
:10E030000D949BF00D949BF00D949BF00D949BF030
:10E040000D949BF00D949BF00D949BF00D949BF020
:10E050000D949BF00D949BF00D949BF00D949BF010
:10E060000D949BF00D949BF00D949BF00D949BF000
:10E070000D949BF00D949BF00D949BF00D949BF0F0
:10E080000D949BF00D949BF00D949BF00D949BF0E0
:10E090000D949BF00D949BF00D949BF00D949BF0D0
:10E0A0000D949BF00D949BF00D949BF00D949BF0C0
:10E0B0000D949BF00D949BF00D949BF00D949BF0B0
:10E0C0000D949BF00D949BF00D949BF00D949BF0A0
:10E0D0000D949BF00D949BF00D949BF00D949BF090
:10E0E0000D949BF011241FBECFEFD1E2DEBFCDBF58
:10E0F00001E00CBF12E0A0E0B2E0EAEEFCEE03E0CB
:10E100000BBF02C007900D92A235B107D9F712E0FC
:10E11000A2E5B2E001C01D92A435B107E1F70F946A
:10E12000C0F00D9473F601E20EBF0FEF0DBF112486
:10E130001FBE0D94C0F00D9400F020E030E040EDE3
:10E1400057E005C0FA013197F1F72F5F3F4F2817CD
:10E150003907C0F30895E0ECF0E0808182608083AD
:10E1600020E12093C40098E19093C100E0EDF0E03D
:10E170008081826080832093D4009093D1000895A1
:10E180002F923F924F925F926F927F928F929F92C7
:10E19000AF92BF92CF92DF92EF92FF920F931F93B5
:10E1A000DF93CF93CDB7DEB7C053D1400FB6F8940D
:10E1B000DEBF0FBECDBF01E20EBF0FEF0DBF94B7A4
:10E1C000F894A89514BE80916000886180936000E7
:10E1D00010926000789493FF05C0E0915202F09194
:10E1E00053021995279A2F9A8091C00082608093DC
:10E1F000C00080E18093C40088E18093C1000000EA
:10E200000F94ABF00F94D2F50F94CAF587E10F94F9
:10E21000CEF580E092E00F94B6F58DE20F94CEF546
:10E220008EE092E00F94B6F5EE24FF248701F4E02F
:10E23000AF2EB12CCC24DD2424C0C5010197F1F709
:10E240000894E11CF11C011D111D21E2E2162EE4CF
:10E25000F20620E0020720E0120718F0E1E0CE2EDF
:10E26000D12CC801B70127EC3BE140E050E00F940E
:10E2700043F6611571058105910519F485B1805842
:10E2800085B98091C00087FD03C0C114D104A9F2F3
:10E29000A6014F5F5F4FC25EDE4F59834883CE5168
:10E2A000D140C25EDE4F88819981CE51D140019725
:10E2B00009F0CDC3CD5DDE4F19821882C352D14023
:10E2C000A0E0CE5DDE4F1882C252D14044245524D6
:10E2D00022243324C05EDE4F19821882C052D140FE
:10E2E000882499245401CB5DDE4F188219821A824A
:10E2F0001B82C552D140ABBEF40127913691C15D5E
:10E30000DE4F39832883CF52D1409DC3C25EDE4F9A
:10E3100048815981CE51D1404130510509F52091B4
:10E32000C600C25EDE4F19821882CE51D14022C093
:10E330002F5F3F4F4F4F5F4F213082E138078AE711
:10E34000480780E0580780F0C15DDE4FE881F98121
:10E35000CF52D140EF5FFF4F19F0EE27FF2709940E
:10E3600020E030E040E050E08091C00087FFE0CF47
:10E370002091C600933011F1943028F4913089F047
:10E380009230B8F408C0953061F19530F0F09630D5
:10E3900009F048C043C02B3109F0B8CF91E0ABE1A0
:10E3A000B5CFA227CE5DDE4F2883C252D14092E086
:10E3B000ADCF722F60E0A22793E0A8CF822F90E02C
:10E3C000682B792BA22794E0A1CF2E3009F05AC3F5
:10E3D000A22795E0CD5DDE4F19821882C352D1404D
:10E3E00095CFE1E0F0E0EC0FFD1FCD5DDE4F488101
:10E3F0005981C352D140E40FF51F20834F5F5F4F17
:10E40000CD5DDE4F59834883C352D140A2274617C2
:10E41000570709F07BCFBA0196E078CF2A1709F0A9
:10E4200031C303C0973009F071CF0894411C511CCF
:10E430005BE04516510408F45DC00894211C311CB2
:10E4400086E02816310410F02224332480E00F9453
:10E45000CEF5C05EDE4FA881B981C052D140AB2B52
:10E46000B1F484E10F94CEF580E292E00F94B6F51A
:10E470008DE20F94CEF584E392E00F94B6F5E1E0DF
:10E48000F0E0C05EDE4FF983E883C052D1408BE5F7
:10E490000F94CEF588E492E00F94B6F5F2E02F16D3
:10E4A0003104E9F023E02216310440F42114310450
:10E4B00091F031E023163104D9F413C044E024165E
:10E4C000310469F054E02516310438F085E028164F
:10E4D000310471F406C08CE505C08FE503C08EE5FC
:10E4E00001C08DE50F94CEF58FE492E00F94B6F560
:10E4F000442455249981933109F40EC19431C0F418
:10E50000963009F4DCC0973048F4923069F19330CA
:10E5100009F470C0913009F017C256C0913109F466
:10E520007AC0923108F0C0C0903109F00DC21CC011
:10E53000983109F488C0993150F4953109F4ECC050
:10E54000953108F49AC1963109F0FEC196C19A310D
:10E5500009F471C09A3108F496C09B3109F460C087
:10E560009D3109F0F1C102C090E056C09D81903309
:10E5700059F48F81882311F49EE11CC0813011F081
:10E5800091E018C098E916C0892F807591F09035F8
:10E5900039F489E0E0E0F0E08093570094910AC0FC
:10E5A000983539F4E3E0F0E089E0809357009491E6
:10E5B00001C090E01A821B828D818C831D829E8314
:10E5C0001F8227E030E0C4C11A8288E08B8381E497
:10E5D0008C8386E58D8382E58E8389E48F8383E552
:10E5E000888780E589878FE58A8782E38B872BE0A0
:10E5F00030E0AEC18A81813941F0823941F0803901
:10E6000011F48FE005C080E003C082E001C08AE021
:10E610001A828B8346C091E01A8222E030E099C1D1
:10E620008D81882311F48EE128C0813011F081E0C2
:10E6300024C088E922C01A8289E0E1E0F0E08093FA
:10E64000570084911BC08B81803589F48C81883080
:10E6500039F4E2E0F0E089E08093570084910DC046
:10E6600089E0E0E0F0E080935700849106C0E3E0A9
:10E67000F0E089E08093570084911A828B831C829A
:10E6800024E030E065C18D81836C99E0E1E0F0E049
:10E69000082E90935700E89507B600FCFDCF1A822C
:10E6A0001B8223E030E054C180EC8A83CB5DDE4FD7
:10E6B000188219821A821B82C552D14047C18A81B1
:10E6C00090E0A0E0B0E0B82EAA24992488248B81A1
:10E6D00090E0A0E0B0E0DC0199278827882A992AF9
:10E6E000AA2ABB2A8D8190E0A0E0B0E0882A992A6E
:10E6F000AA2ABB2A8C8190E0A0E0B0E0BA2FA92F13
:10E70000982F8827882A992AAA2ABB2A880C991C1C
:10E71000AA1CBB1C1A821AC1FA81C65DDE4FF8839F
:10E72000CA52D140C75DDE4F1882C952D1408B8199
:10E73000C82EDD24C75DDE4F28813981C952D14002
:10E74000C22AD32A933109F06DC0CB5DDE4F888198
:10E750009981AA81BB81C552D1408030E0EC9E07EF
:10E76000E3E0AE07E0E0BE07F0F423E0FC01A09395
:10E770005B0020935700E89507B600FCFDCFCB5D0A
:10E78000DE4F88819981AA81BB81C552D1408050DA
:10E790009F4FAF4FBF4FCB5DDE4F88839983AA83D6
:10E7A000BB83C552D140B501A401DE011B968C91FB
:10E7B00011962C9111971296C45DDE4F2883CC528E
:10E7C000D140C55DDE4F1882CB52D14090E0C55D8F
:10E7D000DE4FE881F981CB52D1408E2B9F2B21E077
:10E7E0000C01FA0160935B0020935700E895112417
:10E7F0004E5F5F4F6F4F7F4F8EEF9FEFC80ED91E5A
:10E80000C114D104A1F695E0F401A0925B009093AD
:10E810005700E89507B600FCFDCF81E180935700D3
:10E82000E89527C0D501C401B695A795979587951A
:10E830007C0186012BE0622E712C6C0E7D1E0BC0BC
:10E84000D3016D913D01C7010F9465F60894E11C59
:10E85000F11C015010400115110591F7A60160E06F
:10E8600070E0440F551F661F771F480D591D6A1D24
:10E870007B1D1A824A015B0169C0BA81C25DDE4F0D
:10E88000B883CE52D140C35DDE4F1882CD52D14005
:10E890008B81C82EDD24C35DDE4FE881F981CD5226
:10E8A000D140CE2ADF2A1A8289818431D1F496019F
:10E8B000BE016D5F7F4FABBEF40187919691DB0186
:10E8C0008C9311969C936E5F7F4F82E090E0A0E066
:10E8D000B0E0880E991EAA1EBB1E2250304059F788
:10E8E0002DC0A5019401BE016D5F7F4F0894C10842
:10E8F000D108760100E010E00894C11CD11C0894F6
:10E90000E11CF11C011D111DE80CF91C0A1D1B1D49
:10E9100021BDBB27A52F942F832F82BD2F5F3F4F93
:10E920004F4F5F4FF89A80B5DB018D93BD012E15D7
:10E930003F054007510761F749015A0196012D5FD4
:10E940003F4FFB01108204C080EC8A8322E030E05C
:10E9500090E0FBE1F093C6008091C00086FFFCCF01
:10E960008091C00080648093C000CE5DDE4F4881FE
:10E97000C252D1404093C6008091C00086FFFCCFB8
:10E980008091C00080648093C000532F3093C600F4
:10E990008091C00086FFFCCF8091C000806480938E
:10E9A000C000422F2093C6008091C00086FFFCCF9C
:10E9B0008091C00080648093C0008EE08093C60088
:10E9C0008091C00086FFFCCF8091C000806480935E
:10E9D000C000A5E1CE5DDE4F8881C252D140A8279C
:10E9E000A427A527FE01319610C040814093C600A0
:10E9F0008091C00086FFFCCF31968091C00080647A
:10EA00008093C000A427215030402115310569F7BB
:10EA1000A093C6008091C00086FFFCCF8091C0000B
:10EA200080648093C00085B1805885B9992379F4BA
:10EA3000CE5DDE4F9881C252D1409F5FCE5DDE4FEA
:10EA40009883C252D14090E060E070E05FCC27989C
:10EA50002F9880E090E020ED37E0F9013197F1F751
:10EA6000019684369105C9F700008091C0008D7F22
:10EA70008093C00081E180935700E895EE27FF273F
:10EA80000994FFCF90E042CC282F662311F05D9AC5
:10EA900001C05D9827FF02C0A39A01C0A398922FDE
:10EAA00026FF04C080910201806803C080910201AA
:10EAB0008F778093020195FF02C0A49A01C0A498A9
:10EAC00094FF02C05A9A01C05A9800C05B9A82E033
:10EAD0008A95F1F700C05B9893FF02C0A39A01C02A
:10EAE000A39892FF04C080910201806803C08091C6
:10EAF00002018F778093020191FF02C0A49A01C0A6
:10EB0000A49890FF02C05A9A01C05A9800C05B9A1C
:10EB100092E09A95F1F700C05B98A39A8091020168
:10EB2000806880930201A49A5A9A662341F42430A3
:10EB300030F48FE999E10197F1F700C003C095ED3A
:10EB40009A95F1F70000089561E00F9444F5089557
:10EB5000CF93DF93EC0102C00F94A4F5FE01219640
:10EB600084918823C9F7DF91CF910895CF93DF93E4
:10EB7000EC0102C00F94A4F589918823D9F7DF91A5
:10EB8000CF91089560E00F9444F5089582E00F94CA
:10EB9000C2F5089581E00F94C2F5089580580F944E
:10EBA000C2F50895539A559A9B9AE1E0F1E080816D
:10EBB000806880839C9A529A5B985D98A39AE2E061
:10EBC000F1E0808180688083A49A5A9A8FE59AEE5A
:10EBD0000197F1F700C00000A39880818F778083B0
:10EBE00000C05B9A92E09A95F1F700C05B988FE0C5
:10EBF00090E40197F1F700C000005B9A92E09A95CB
:10EC0000F1F700C05B988FE891E00197F1F700C041
:10EC100000005B9A92E09A95F1F700C05B9885ED51
:10EC20008A95F1F700005A9800C05B9A92E09A9595
:10EC3000F1F700C05B9885ED8A95F1F700005A98CE
:10EC400000C05B9A92E09A95F1F700C05B9882E071
:10EC50008A95F1F700C0A39A00C05B9A92E09A955A
:10EC6000F1F700C05B9885ED8A95F1F7000088E028
:10EC70000F94C2F50F94CAF586E00F94C2F58CE0AC
:10EC80000F94C2F50895A1E21A2EAA1BBB1BFD0129
:10EC90000DC0AA1FBB1FEE1FFF1FA217B307E4077B
:10ECA000F50720F0A21BB30BE40BF50B661F771FD3
:10ECB000881F991F1A9469F76095709580959095B3
:10ECC0009B01AC01BD01CF010895262FF999FECF1C
:10ECD0001FBA92BD81BD20BD0FB6F894FA9AF99A79
:0AECE0000FBE01960895F894FFCFCF
:10ECEA0020334420205072696E74657273002020AC
:10ECFA00204F726967696E616C205072757361008A
:10ED0A0020446F206E6F7420646973636F6E6E6542
:10ED1A006374210020557067726164696E672066AA
:10ED2A0069726D77617265007C202020207C002A40
:02ED3A000000D7
:040000033000E000E9
:00000001FF

View File

@ -0,0 +1,285 @@
:020000023000CC
:10E000000D9472F00D949BF00D949BF00D949BF089
:10E010000D949BF00D949BF00D949BF00D949BF050
:10E020000D949BF00D949BF00D949BF00D949BF040
:10E030000D949BF00D949BF00D949BF00D949BF030
:10E040000D949BF00D949BF00D949BF00D949BF020
:10E050000D949BF00D949BF00D949BF00D949BF010
:10E060000D949BF00D949BF00D949BF00D949BF000
:10E070000D949BF00D949BF00D949BF00D949BF0F0
:10E080000D949BF00D949BF00D949BF00D949BF0E0
:10E090000D949BF00D949BF00D949BF00D949BF0D0
:10E0A0000D949BF00D949BF00D949BF00D949BF0C0
:10E0B0000D949BF00D949BF00D949BF00D949BF0B0
:10E0C0000D949BF00D949BF00D949BF00D949BF0A0
:10E0D0000D949BF00D949BF00D949BF00D949BF090
:10E0E0000D949BF011241FBECFEFD1E2DEBFCDBF58
:10E0F00001E00CBF12E0A0E0B2E0E4E2F1EF03E0E7
:10E100000BBF02C007900D92A836B107D9F712E0F5
:10E11000A8E6B2E001C01D92A837B107E1F70F945D
:10E12000FEF00D9490F801E20EBF0FEE0DBF11242A
:10E130001FBE0D94FEF00D9400F020E030E040EDA5
:10E1400057E005C0FA013197F1F72F5F3F4F2817CD
:10E150003907C0F308952091760230917702211596
:10E16000310561F48093C6008091C00086FFFCCF2A
:10E170008091C00080648093C000089522303105F2
:10E1800059F48093D6008091D00086FFFCCF809117
:10E19000D00080648093D0000895E0ECF0E08081AE
:10E1A0008260808320E12093C40098E19093C100B5
:10E1B000E0EDF0E08081826080832093D400909332
:10E1C000D1000895019719F480E885B9089515B82C
:10E1D000089581B1806F81B982B1806F82B96D9AE3
:10E1E00075989D9AA598E1E0F1E08081886280832E
:10E1F000E2E0F1E080818862808308952F923F926F
:10E200004F925F926F927F928F929F92AF92BF9246
:10E21000CF92DF92EF92FF920F931F93DF93CF93F2
:10E22000CDB7DEB7C053D1400FB6F894DEBF0FBEF6
:10E23000CDBF94B7F894A89514BE80916000886112
:10E240008093600010926000789493FFC0C080912A
:10E25000FC1F9091FD1FA091FE1FB091FF1F8A5AD5
:10E260009545AA4AB54509F0D6C52091F41F3091CD
:10E27000F51F4091F61F5091F71F79018A01F3E0D5
:10E280008F2E9924939475E061E199C08091FB1FD2
:10E2900080FF09C0F70100935B0080925700E8956A
:10E2A00007B600FCFDCFA12CE1E0BE2EC12CD12C85
:10E2B000AE0CBF1CC01ED11E8091FB1F81FD4DC046
:10E2C00065C08091FB1F82FF0DC08091F01F90916F
:10E2D000F11FA091F21FB091F31FABBFFC0187911A
:10E2E00096910BC08091F01F9091F11FA091F21FA9
:10E2F000B091F31FFC01808191810C01F9014093E1
:10E300005B0090925700E89511242E5F3F4F4F4FCE
:10E310005F4F8091F01F9091F11FA091F21FB0917B
:10E32000F31F0296A11DB11D8093F01F9093F11F62
:10E33000A093F21FB093F31F8091F81F9091F91FE3
:10E340008330910530F002979093F91F8093F81F66
:10E3500004C01092F91F1092F81F8091F81F90913D
:10E36000F91F892B31F02A153B054C055D0508F492
:10E37000A8CFF70100935B0070935700E89507B6AC
:10E3800000FCFDCF60935700E89517C020503F4F29
:10E390004F4F5F4F8091F81F9091F91FF1E081304E
:10E3A0009F0738F0805091409093F91F8093F81F99
:10E3B00004C01092F91F1092F81F86017501809118
:10E3C000F81F9091F91F892B09F060CF24C5109296
:10E3D000770210927602279A2F9A8091C00082606D
:10E3E0008093C00080E18093C40088E18093C100E5
:10E3F00000000F94E9F080E885B90F94CDF00F94F8
:10E40000A9F70F94A1F780E00F94A5F781E40F948A
:10E41000A5F780E092E00F948DF787E10F94A5F7C0
:10E4200082E192E00F948DF785E60F94A5F781E2E3
:10E4300092E00F948DF715B8A0907602B090770215
:10E44000EE24FF24870134E0832E912CCC24DD249C
:10E4500024C0C4010197F1F70894E11CF11C011DCF
:10E46000111D21E2E2162EE4F20620E0020720E070
:10E47000120718F021E0C22ED12CC801B70127ECF9
:10E480003BE140E050E00F944CF8611571058105C7
:10E49000910519F485B1805885B98091C00087FD38
:10E4A00007C08091D00087FD03C0C114D10489F258
:10E4B0008091D00087FF03C092E0A92EB12C960175
:10E4C0002F5F3F4FB0927702A09276022130310544
:10E4D00009F094C422243324CC24CC5DDE4F18826E
:10E4E000C452D140882499245401CB5DDE4F188258
:10E4F00019821A821B82C552D140CE5DDE4F19822D
:10E500001882C252D1404424552400E010E0ABBE32
:10E51000F40187919691C15DDE4F99838883CF5234
:10E52000D14064C420E030E02130310551F120E0D9
:10E5300030E040E050E0109721F48091C00087FD6A
:10E5400020C0A230B10521F48091D00087FD1CC00D
:10E550002F5F3F4F4F4F5F4F2130E2E13E07EAE729
:10E560004E07E0E05E0738F3C15DDE4F2881398158
:10E57000CF52D1402F5F3F4FD1F2EE27FF270994B2
:10E58000D6CF2091C60002C02091D600933011F161
:10E59000943028F4913089F09230B8F407C0953067
:10E5A00041F19530F0F09630D1F535C02B3109F0BE
:10E5B000B9CF91E08BE1C82EB5CFC226CC5DDE4F3E
:10E5C0002883C452D14092E0ADCF722F60E0C226C2
:10E5D00093E0A8CF822F90E0682B792BC22694E09D
:10E5E000A1CF2E3009F025C4C22695E02224332481
:10E5F00099CFE5E0F0E0EC0FFD1FE20DF31D208365
:10E600000894211C311CC2262616370609F08ACF31
:10E61000B10196E087CF2C1509F00BC403C09730E9
:10E6200009F080CF012B81F40F94A1F784E10F94BE
:10E63000A5F785E292E00F948DF78DE20F94A5F790
:10E6400089E392E00F948DF78091680290916902BE
:10E65000A0916A02B0916B020097A105B10599F5EE
:10E66000CE5DDE4FA881B981C252D1401196CE5DF8
:10E67000DE4FB983A883C252D1401B9720F1089482
:10E68000411C511CB6E04B16510410F04424552493
:10E690008BE50F94A5F78DE492E00F948DF7E4E0FD
:10E6A0004E16510418F4842D845A02C082E684194F
:10E6B0000F94A5F78AE20F947BF7CE5DDE4F1982A7
:10E6C0001882C252D1408091680290916902A09153
:10E6D0006A02B0916B020097A105B10509F461C00F
:10E6E0008091740290917502009709F45AC00197C5
:10E6F00039F488E50F94A5F784E592E00F948DF73F
:10E700008091740290917502029739F487E50F9415
:10E71000A5F78BE592E00F948DF760916C027091F4
:10E720006D0280916E0290916F0224E630E040E02D
:10E7300050E00F941AF820916802309169024091DC
:10E740006A0250916B020F944CF880916302909191
:10E750006402A0916502B091660289839A83AB83BB
:10E76000BC83FE0133961216130674F4C9016AE0E5
:10E7700070E00F9439F8805D8083C9016AE070E031
:10E780000F9439F89B0102C080E280833197EC1727
:10E79000FD0749F7CE0101960F948DF785E20F949E
:10E7A0007BF76D81643109F432C26531F0F4663073
:10E7B00009F4E7C0673048F4623091F1633009F43E
:10E7C00077C0613009F0C5C25CC0613109F481C015
:10E7D000623120F4603109F0BCC222C0623109F418
:10E7E000C5C0633109F0B5C205C1693109F4ACC0D7
:10E7F0006A3150F4663109F40AC2663108F4FAC08D
:10E80000683109F0A6C27FC06B3109F469C06B3171
:10E8100008F471C06D3131F0613709F09AC2DDC082
:10E82000DD2459C09985903359F48B85882311F4E0
:10E830009EE11CC0813011F091E018C098E916C02B
:10E84000892F807591F0903539F489E0E0E0F0E0AF
:10E850008093570094910AC0983539F4E3E0F0E0D2
:10E8600089E080935700949101C090E01E821F823E
:10E870008985888719869A871B86F7E0EF2EF12C09
:10E880006DC21E8288E08F8381E4888786E5898750
:10E8900082E58A8789E48B8783E58C8780E58D878D
:10E8A0008FE58E8782E38F87EBE0EE2EF12C56C248
:10E8B0008E81813941F0823941F0803911F48FE045
:10E8C00005C080E003C082E001C08AE01E828F8321
:10E8D00049C0DD24D3941E8272E0E72EF12C3FC2A2
:10E8E0008985882311F48EE128C0813011F081E000
:10E8F00024C088E922C01E82E1E0F0E089E0809334
:10E90000570084911BC08F81803589F488858830B9
:10E9100039F4E2E0F0E089E08093570084910DC083
:10E9200089E0E0E0F0E080935700849106C0E3E0E6
:10E93000F0E089E08093570084911E828F831886CF
:10E9400064E0E62EF12C0AC28985836C99E0E1E04F
:10E95000F0E0082E90935700E89507B600FCFDCF35
:10E960001E821F8253E0E52EF12CF8C180EC8E83CD
:10E97000CB5DDE4F188219821A821B82C552D140AC
:10E98000EAC18E8190E0A0E0B0E0B82EAA249924DC
:10E9900088248F8190E0A0E0B0E0DC0199278827EF
:10E9A000882A992AAA2ABB2A898590E0A0E0B0E0AB
:10E9B000882A992AAA2ABB2A888590E0A0E0B0E09C
:10E9C000BA2FA92F982F8827882A992AAA2ABB2AE2
:10E9D000880C991CAA1CBB1C0BC08E8180936802FA
:10E9E0008F8180936902888580936A0210926B02FE
:10E9F0001E82B1C1FE81C65DDE4FF883CA52D1408E
:10EA0000C75DDE4F1882C952D1408F81C82EDD24E8
:10EA1000C75DDE4F28813981C952D140C22AD32A2D
:10EA2000633109F0C9C08091680290916902A09198
:10EA30006A02B0916B020097A105B10509F443C0C9
:10EA400081149104A104B10491F4C601A0E0B0E0E6
:10EA500080936C0290936D02A0936E02B0936F024C
:10EA600081E090E0909375028093740224C08091BD
:10EA7000700290917102A0917202B0917302881697
:10EA80009906AA06BB06B9F0960140E050E08091D5
:10EA90006C0290916D02A0916E02B0916F02820F94
:10EAA000931FA41FB51F80936C0290936D02A093D7
:10EAB0006E02B0936F028092700290927102A092E7
:10EAC0007202B0927302CB5DDE4F88819981AA8178
:10EAD000BB81C552D1408030E0EE9E07E3E0AE0737
:10EAE000E0E0BE07F0F423E0FC01A0935B0020937C
:10EAF0005700E89507B600FCFDCFCB5DDE4F88815F
:10EB00009981AA81BB81C552D14080509F4FAF4FA0
:10EB1000BF4FCB5DDE4F88839983AA83BB83C552E9
:10EB2000D14090E0891690EE990693E0A90690E016
:10EB3000B90618F0B501A40166C0B501A401DE0153
:10EB40001F968C9111962C9111971296C45DDE4FF1
:10EB50002883CC52D140C55DDE4F1882CB52D140C4
:10EB600090E0C55DDE4FE881F981CB52D1408E2B1C
:10EB70009F2B21E00C01FA0160935B00209357006A
:10EB8000E89511244E5F5F4F6F4F7F4F8EEF9FEFE1
:10EB9000C80ED91EC114D104A1F695E0F401A092CB
:10EBA0005B0090935700E89507B600FCFDCF81E12C
:10EBB00080935700E89527C0D501C401B695A79565
:10EBC000979587957C018601AFE06A2E712C6C0EBB
:10EBD0007D1E0BC0D3016D913D01C7010F9482F8DA
:10EBE0000894E11CF11C015010400115110591F72A
:10EBF000A60160E070E0440F551F661F771F480DA7
:10EC0000591D6A1D7B1D1E824A015B01A4C0BE8185
:10EC1000C25DDE4FB883CE52D140C35DDE4F188255
:10EC2000CD52D1408F81C82EDD24C35DDE4FE881F7
:10EC3000F981CD52D140CE2ADF2A1E828D818431C6
:10EC400009F052C08091680290916902A0916A0215
:10EC5000B0916B020097A105B10561F18114910497
:10EC6000A104B10481F4809174029091750201971E
:10EC700051F482E090E09093750280937402C60193
:10EC8000A0E0B0E00FC0960140E050E080916C023F
:10EC900090916D02A0916E02B0916F02820F931F4E
:10ECA000A41FB51F80936C0290936D02A0936E0217
:10ECB000B0936F029601BE01695F7F4FABBEF40156
:10ECC00087919691DB018C9311969C936E5F7F4F99
:10ECD00082E090E0A0E0B0E0880E991EAA1EBB1E64
:10ECE0002250304059F72DC0A5019401BE01695F43
:10ECF0007F4F0894C108D108760100E010E0089425
:10ED0000C11CD11C0894E11CF11C011D111DE80C53
:10ED1000F91C0A1D1B1D21BDBB27A52F942F832F76
:10ED200082BD2F5F3F4F4F4F5F4FF89A80B5DB0199
:10ED30008D93BD012E153F054007510761F749012D
:10ED40005A0133E0E32EF12CEC0CFD1CFB01108288
:10ED500005C080EC8E8322E0E22EF12CDD248BE1D5
:10ED60000F94ABF0CC5DDE4F8881C452D1400F943C
:10ED7000ABF08F2D0F94ABF08E2D0F94ABF08EE097
:10ED80000F94ABF095E1C92ECC5DDE4FF881C452F3
:10ED9000D140CF26CE24CF2485E0682E712C6C0E76
:10EDA0007D1E0AC0D3011D913D01812F0F94ABF050
:10EDB000C1260894E108F108E114F10499F78C2DBB
:10EDC0000F94ABF085B1805885B9DD20B9F4CC5DE6
:10EDD000DE4FB881C452D140BF5FCC5DDE4FB883F7
:10EDE000C452D14001E010E020E030E0A091760272
:10EDF000B091770290E060E070E096CB27982F9872
:10EE000080E090E020ED37E0F9013197F1F70196CD
:10EE100084369105C9F700008091C0008D7F8093F2
:10EE2000C00081E180935700E895EE27FF27099401
:10EE3000FFCF90E077CB282F662311F05D9A01C0B9
:10EE40005D9827FF02C0A39A01C0A398922F26FFC6
:10EE500004C080910201806803C0809102018F7715
:10EE60008093020195FF02C0A49A01C0A49894FF68
:10EE700002C08D9A01C08D9800C08F9A82E08A9559
:10EE8000F1F700C08F9893FF02C0A39A01C0A39826
:10EE900092FF04C080910201806803C0809102014A
:10EEA0008F778093020191FF02C0A49A01C0A498B9
:10EEB00090FF02C08D9A01C08D9800C08F9A92E099
:10EEC0009A95F1F700C08F98A39A8091020180680B
:10EED00080930201A49A8D9A662341F4243030F481
:10EEE0008FE999E10197F1F700C003C095ED9A957C
:10EEF000F1F70000089561E00F941BF70895CF9398
:10EF0000DF93EC0102C00F947BF7FE012196849100
:10EF10008823C9F7DF91CF910895CF93DF93EC0158
:10EF200002C00F947BF789918823D9F7DF91CF91A5
:10EF3000089560E00F941BF7089582E00F9499F70D
:10EF4000089581E00F9499F7089580580F9499F7E8
:10EF50000895879A559A9B9AE1E0F1E08081806854
:10EF600080839C9A859A8F985D98A39AE2E0F1E05D
:10EF7000808180688083A49A8D9A8FE59AEE0197AC
:10EF8000F1F700C00000A39880818F77808300C0D4
:10EF90008F9A92E09A95F1F700C08F988FE090E4F5
:10EFA0000197F1F700C000008F9A92E09A95F1F76F
:10EFB00000C08F988FE891E00197F1F700C0000042
:10EFC0008F9A92E09A95F1F700C08F9885ED8A9517
:10EFD000F1F700008D9800C08F9A92E09A95F1F7B2
:10EFE00000C08F9885ED8A95F1F700008D9800C0DC
:10EFF0008F9A92E09A95F1F700C08F9882E08A95F7
:10F00000F1F700C0A39A00C08F9A92E09A95F1F7A9
:10F0100000C08F9885ED8A95F1F7000088E00F9485
:10F0200099F70F94A1F786E00F9499F78CE00F946D
:10F0300099F70895629FD001739FF001829FE00DC0
:10F04000F11D649FE00DF11D929FF00D839FF00D67
:10F05000749FF00D659FF00D9927729FB00DE11D13
:10F06000F91F639FB00DE11DF91FBD01CF011124F0
:10F07000089597FB092E07260AD077FD04D02ED0DD
:10F0800006D000201AF4709561957F4F0895F6F729
:10F09000909581959F4F0895A1E21A2EAA1BBB1B44
:10F0A000FD010DC0AA1FBB1FEE1FFF1FA217B30754
:10F0B000E407F50720F0A21BB30BE40BF50B661F6A
:10F0C000771F881F991F1A9469F76095709580952E
:10F0D00090959B01AC01BD01CF010895AA1BBB1BFC
:10F0E00051E107C0AA1FBB1FA617B70710F0A61B48
:10F0F000B70B881F991F5A95A9F780959095BC0169
:10F10000CD010895262FF999FECF1FBA92BD81BD7A
:10F1100020BD0FB6F894FA9AF99A0FBE0196089599
:04F12000F894FFCF91
:10F124004F726967696E616C2050727573612069F2
:10F134003300507275736120526573656172636840
:10F14400002E2E2E0020446F206E6F74206469738D
:10F15400636F6E6E6563742100205570677261641D
:10F16400696E67206669726D77617265007C202024
:10F1740020207C0077726974652000766572696668
:08F1840079200020202000008A
:040000033000E000E9
:00000001FF

View File

@ -0,0 +1,259 @@
:107000005FC0000080C000007EC000007CC00000A7
:107010007AC0000078C0000076C0000074C0000094
:1070200072C0000070C00000C0C400006CC000004E
:107030006AC0000068C0000066C0000064C00000B4
:1070400062C00000CDC000005EC000005CC0000057
:107050005AC0000058C0000056C0000054C00000D4
:1070600052C0000050C000004EC000004CC00000E4
:107070004AC0000048C0000046C0000044C00000F4
:1070800042C0000040C000003EC000003CC0000004
:107090003AC0000038C0000036C0000034C0000014
:1070A00032C0000030C000002EC00000443E5D3EF3
:1070B000043F5D3E043F953EB73E043FD73EE93E68
:1070C00011241FBECFEFDAE0DEBFCDBF8091FE0AF4
:1070D0009091FF0A90935D0280935C0212E0A0E021
:1070E000B1E0EAEAFEE702C005900D92A032B107D6
:1070F000D9F722E0A0E2B2E001C01D92AC35B207A0
:10710000E1F718D3C4C67CCF84E08093E900809176
:10711000E80085FD0DC08091E8008B778093E80042
:107120008091E80082FDF3CF8EB38111F9CF02C0C8
:107130008091F100089593E09093E9009091E80028
:1071400095FF03C08093F10008959091E8009E7729
:107150009093E8009091E80090FDF4CF9EB39111D8
:10716000F9CF0895F89481E085BF15BE0C94000016
:10717000089520912602309127022F5F3F4F3093D0
:10718000270220932602832F37FF02C08EEF831B36
:10719000880F821710F45D9808955D9A089584B75A
:1071A000877F84BF90E880E00FB6F89490936100E9
:1071B000809361000FBE81E085BF82E085BF559A54
:1071C000E1E6F0E0908310825D98109289009AEFDA
:1071D0009093880080936F0083E080938100CDC3FB
:1071E0001F920F920FB60F9211242F938F939F939C
:1071F000EF93FF931092850010928400E0E0F0E09E
:1072000085919491019649F08091200290912102FC
:1072100001969093210280932002FF91EF919F911C
:107220008F912F910F900FBE0F901F90189542E0F5
:1072300061EC82E037D342E161E883E033D342E19D
:1072400060E884E02FC380915402982F9F77913299
:1072500039F590915502903291F0913209F5813AC9
:10726000F9F48091E800877F8093E80067E070E0A0
:1072700082E091E04BD48091E8008B770FC081329F
:1072800079F48091E800877F8093E80067E070E000
:1072900082E091E098D48091E8008E778093E800B6
:1072A00008954F925F926F927F92AF92BF92CF926A
:1072B000DF92EF92FF920F931F93CF93DF9384E0BF
:1072C0008093E9008091E80082FF25C21DDFC82F6E
:1072D000853481F48CE49DE1909321028093200217
:1072E00007B600FCFDCFF999FECF81E180935700EE
:1072F000E89503C0843521F407DF8DE01CDFE2C18F
:107300008C34D9F38035C9F3843721F484E413DF56
:1073100080E0F4CF813611F489E5F0CF813491F427
:10732000F3DEC82FF1DE90E0880F991F2C2F30E09C
:10733000322F2227330F822B932B092E000CAA0BFE
:10734000BB0B94C1803711F483E5D8CF833549F462
:10735000C7E1D2E01C2F195F8991EDDE1C13FCCF31
:10736000B1C1863521F481E3E6DE80E3C7CF833700
:1073700031F487E8E0DE85E9DEDE8EE1BFCF8536D9
:10738000F1F4E0E0F0E083E095E007B600FCFDCF2B
:10739000F999FECF80935700E89507B600FCFDCF22
:1073A000F999FECF90935700E89507B600FCFDCF02
:1073B000E058FF4FE11540E7F40739F79ECF8237D9
:1073C00019F4E1E0F0E00EC0863419F4E0E0F0E0FA
:1073D00009C08E3419F4E3E0F0E004C0813539F4DB
:1073E000E2E0F0E089E080935700849187CF823615
:1073F00031F489E5A0DE80E09EDE80E87FCF823434
:1074000019F0873609F016C110922102109220025D
:107410007BDE082F79DED82F77DE182F8BEB810FDC
:10742000823010F08FE36ACF2D2F30E0302B109296
:107430006F00C73609F048C007B600FCFDCFF999C8
:10744000FECF81E180935700E895E90100E0BB247D
:10745000B394209709F4EAC0C0902202D09023028E
:10746000E0902402F09025021634B9F4E02FF0E009
:10747000EC29FD2984915FDE002369F052E0C50EFE
:10748000D11CE11CF11CC0922202D0922302E09296
:107490002402F09225020B2515C0D701C601B6952E
:1074A000A79597958795DDD446DE82E0C80ED11C5E
:1074B000E11CF11CC0922202D0922302E09224022D
:1074C000F09225022197C5CFC0902202D0902302CE
:1074D000E0902402F0902502163421F5D701C60170
:1074E0008F779927AA27BB27C114E0E7DE06E104BE
:1074F000F104C0F4892B8A2B8B2BA1F48FB7F8945D
:1075000007B600FCFDCFF999FECF93E0F60190930A
:107510005700E89507B600FCFDCF91E19093570026
:10752000E8958FBFE901B12C00E0AA24A39420972D
:1075300009F454C0163469F5002339F107B600FC8C
:10754000FDCFF999FECF4090220250902302609027
:10755000240270902502D8DD2B2D30E0A901582B94
:10756000F2010A01A0925700E8951124B301A2018B
:107570004E5F5F4F6F4F7F4F409322025093230225
:10758000609324027093250202C0BEDDB82E0A2546
:1075900023C0BADD682F8091220290912302A0912E
:1075A0002402B0912502B695A7959795879561D449
:1075B0004091220250912302609124027091250291
:1075C0004E5F5F4F6F4F7F4F4093220250932302D5
:1075D00060932402709325022197A9CF163421F5D8
:1075E000D701C6018F779927AA27BB27C114F0E7D7
:1075F000DF06E104F104C0F4892B8A2B8B2BA1F464
:107600008FB7F89407B600FCFDCFF999FECF95E04F
:10761000F60190935700E89507B600FCFDCF91E185
:1076200090935700E8958FBF8DE085DD82E08093D1
:107630006F0048C0843419F567DD682F80912202FD
:1076400090912302A0912402B0912502B695A795AE
:10765000979587950ED48091220290912302A09154
:107660002402B09125020296A11DB11D8093220231
:1076700090932302A0932402B09325023ECE843639
:10768000F1F4C0902202D0902302E0902402F09006
:107690002502D701C601B695A79597958795E1D3A1
:1076A0004ADDF2E0CF0ED11CE11CF11CC092220297
:1076B000D0922302E0922402F092250203C08B3183
:1076C00009F0B0CE83E08093E9009091E8008091CA
:1076D000E8008E778093E80095FD11C08091E80066
:1076E00080FD04C08EB38111F9CF15C08091E800F0
:1076F0008E778093E80003C08EB3882361F0809179
:10770000E80080FFF9CF84E08093E9008091E800F1
:107710008B778093E800DF91CF911F910F91FF90BD
:10772000EF90DF90CF90BF90AF907F906F905F9081
:107730004F9008951092FF0A1092FE0A84B714BE6B
:107740000FB6F894A89590916000986190936000AE
:10775000109260000FBE81FD1DC080FF07C0E0E0F9
:10776000F0E0259134912F3F3F4F99F483FF12C0F1
:1077700020915C0230915D028091000190910101A5
:107780002817390739F0E0E0F0E0859194910196EF
:1077900009F0E8DC04DD78941092210210922002B6
:1077A00080DD48D3809120029091210281349F4155
:1077B00010F4DFDCF5CF8091E00081608093E00081
:1077C0009BE088E10FB6F894A895809360000FBE07
:1077D00090936000FFCFCF93292F30E02230310506
:1077E00061F02330310571F02130310509F051C0CD
:1077F00082E190E025E032E050C08EE390E027EC9B
:1078000031E04BC0882309F435C0813009F437C01A
:10781000823009F439C0833009F03BC09AE290937A
:10782000280280932902AAE2B2E090E0C1E22FB7D9
:10783000F894E92FE695F0E03E968C2F87BF84916F
:107840002FBF90FF82958F70682F70E08A3018F0FC
:1078500027E330E002C020E330E0260F371F2D93EE
:107860003D939F5F943119F78091280290E028E2C0
:1078700032E013C084E090E023EC31E00EC08CE7EE
:1078800090E025E431E009C08AE390E029E031E0AE
:1078900004C080E090E020E030E0FA0131832083F2
:1078A000CF9108958093E900EBEEF0E08081816054
:1078B0008083EDEEF0E010826093EC0040838091D5
:1078C000EE00881F8827881F08958091540287FF43
:1078D0000FC08091E80082FD04C08EB38111F9CF02
:1078E00010C08091E8008B770AC08EB3882349F0DE
:1078F0008091E80080FFF9CF8091E8008E77809337
:10790000E80008950F931F93CF93DF9341D048D0A1
:10791000C8EDD0E088818F778883888180688883EC
:1079200088818F7D888319BC1EBA1092520200EEA6
:1079300010E0F80180818B7F80838881816088835B
:1079400042E060E080E0AEDFE1EEF0E080818E7F3B
:107950008083E2EEF0E080818160808380818860B6
:107960008083F80180818E7F808388818061888315
:10797000DF91CF911F910F910895E7EDF0E08081A5
:10798000816080838AE482BF81E080935302BACF12
:10799000E8EDF0E080818E7F80831092E200089510
:1079A0001092DA001092E10008951F920F920FB624
:1079B0000F9211242F933F934F935F936F937F9375
:1079C0008F939F93AF93BF93EF93FF938091DA00D0
:1079D00080FF1BC08091D80080FF17C08091DA0023
:1079E0008E7F8093DA008091D90080FF0BC080E108
:1079F00089BD82E189BD09B400FEFDCF81E08EBB67
:107A000018D203C019BC1EBA14D28091E10080FFC5
:107A100017C08091E20080FF13C08091E2008E7F4A
:107A20008093E2008091E20080618093E200809187
:107A3000D80080628093D80019BC85E08EBBF9D154
:107A40008091E10084FF2CC08091E20084FF28C077
:107A500080E189BD82E189BD09B400FEFDCF80913E
:107A6000D8008F7D8093D8008091E1008F7E809335
:107A7000E1008091E2008F7E8093E2008091E2003D
:107A800081608093E20080915202811106C0809152
:107A9000E30087FD02C081E001C084E08EBBC9D154
:107AA0008091E10083FF21C08091E20083FF1DC02F
:107AB0008091E100877F8093E10082E08EBB10928D
:107AC00052028091E1008E7F8093E1008091E2007C
:107AD0008E7F8093E2008091E20080618093E200DB
:107AE00042E060E080E0DEDEA4D1FF91EF91BF9143
:107AF000AF919F918F917F916F915F914F913F9146
:107B00002F910F900FBE0F901F90189520915A0241
:107B100030915B022617370748F06115710539F47B
:107B20002091E8002E772093E80001C0B90140E0E1
:107B300061157105A1F12EB3222309F440C025304F
:107B400009F43FC02091E80023FD37C02091E800F0
:107B500022FD2DC02091E80020FFEACF4091F300E4
:107B60002091F20030E0342BFC01CF01611571054A
:107B700059F02830310540F481918093F100615033
:107B800071092F5F3F4FF1CF41E02830310509F0F7
:107B900040E02091E8002E772093E800C9CF411102
:107BA000CACF05C08EB3882351F0853051F0809143
:107BB000E80082FFF7CF80E0089581E0089582E039
:107BC000089583E008956115710529F42091E80076
:107BD0002B772093E800FC016115710531F18EB31C
:107BE000882359F1853059F18091E80083FD23C045
:107BF0008091E80082FFF0CF2091F3008091F200A5
:107C000090E0922B892B31F08091F10081936150AB
:107C1000710991F78091E8008B778093E800DCCFC1
:107C20008EB3882351F0853051F08091E80080FFB9
:107C3000F7CF80E0089581E0089582E0089583E021
:107C400008950F931F93CF93DF9300D0CDB7DEB786
:107C5000E4E5F2E088E08E0F9091F10091938E13AD
:107C6000FBCFF1DA8091E80083FFCEC0809154020F
:107C700090915502492F50E04A30510508F0C4C098
:107C8000FA01EA5AF74CE7C0823809F0BDC080918A
:107C9000580287708093E9008091EB001092E90010
:107CA0009091E800977F9093E80085FB882780F902
:107CB0008093F1001092F10085C0282F2D7F09F0EC
:107CC000A3C0823009F0A0C080915602811127C064
:107CD00080915802877009F497C08093E900209141
:107CE000EB0020FF1CC0933021F48091EB008062F8
:107CF00014C09091EB0090619093EB0021E030E094
:107D0000A90102C0440F551F8A95E2F74093EA008B
:107D10001092EA008091EB0088608093EB00109253
:107D2000E9008091E800877F50C081116DC01091FB
:107D300056021F770FB7F8948091E800877F8093F1
:107D4000E800C3DD8091E80080FFFCCF8091E30074
:107D50008078812B8093E30080688093E300111189
:107D600002C082E001C083E08EBB0FBF4DC08058CF
:107D7000823008F049C0AE014F5F5F4F60915802FA
:107D8000809156029091570226DDBC01892B09F49F
:107D90003BC09091E800977F9093E80089819A8199
:107DA000B5DE8091E8008B778093E8002DC08038A5
:107DB00059F58091E800877F8093E8008091520216
:107DC0008093F1008091E8008E778093E8007DDD5C
:107DD0001BC0811119C0909156029230A8F4809175
:107DE000E800877F8093E800909352026EDD8091D7
:107DF0005202811106C08091E30087FD02C081E03C
:107E000001C084E08EBB13DA8091E80083FF0AC0D2
:107E10008091EB0080628093EB008091E800877F87
:107E20008093E8000F900F90DF91CF911F910F91F9
:107E300008950895CF938EB3882359F0C091E90037
:107E4000C7701092E9008091E80083FDFADEC093CC
:107E5000E900CF910895EE0FFF1F0590F491E02DFA
:107E60000994F999FECF92BD81BDF89A992780B502
:107E70000895262FF999FECF1FBA92BD81BD20BD6E
:107E80000FB6F894FA9AF99A0FBE01960895F894ED
:027E9000FFCF22
:107E920008950895089508950895089508950895F8
:087EA200089508950895089564
:107EAA007777000000000000083A0350007200755E
:107EBA0000730061002000520065007300650061D4
:107ECA0000720063006800200028007000720075CC
:107EDA000073006100330064002E0063006F006DC0
:107EEA0000290000007C034F0072006900670069E6
:107EFA00006E0061006C0020005000720075007373
:107F0A0000610020006900330020004D004B00335F
:107F1A000020004D0075006C007400690020004DBF
:107F2A00006100740065007200690061006C002045
:107F3A000032002E003000200075007000670072C9
:107F4A00006100640065002000280062006F006F75
:107F5A000074006C006F0061006400650072002903
:107F6A000000000403090409023E000201008032F5
:107F7A000904000001020201000524001001042482
:107F8A0002040524060001070582030800FF09040C
:107F9A000100020A0000000705040210000107059B
:107FAA0083021000011201100102000008992C033B
:107FBA00000100020103014341544552494E410068
:107FE00058CF58CF58CF58CF58CF58CF58CF58CF59
:087FF00058CF58CF58CF58CFED
:087FF8000070000000DFFBDC5B
:040000030000700089
:00000001FF

View File

@ -0,0 +1,14 @@
Notes on building the improved 32u4 Caterina bootloader:
1. Must download LUFA-111009 and extract to this directory.
This should be in a folder named LUFA-111009/
2. Make sure avr-gcc is installed. It make come with tools, but
if not maybe wingnu32 make, and core tools can be downloaded and used.
3. Try using powershell if you get "...died before initialization" errors.
4. The "build.txt" file and "program.txt" files can be renamed
to .bat files and run to build and program the boards listed
herein (Windows only, unfortunately).

View File

@ -0,0 +1,24 @@
make clean
make PID=0x9209 F_CPU=16000000
copy Caterina.hex Caterina-wiflyin.hex
make clean
make PID=0x9207 F_CPU=8000000
copy Caterina.hex Caterina-lilypadusb.hex
make clean
make PID=0x9205 F_CPU=16000000
copy Caterina.hex Caterina-promicro16.hex
make clean
make PID=0x9203 F_CPU=8000000
copy Caterina.hex Caterina-promicro8.hex
make clean
make PID=0x2B74 F_CPU=16000000
copy Caterina.hex Caterina-makey.hex
make clean
make PID=0xF100 F_CPU=8000000
copy Caterina.hex Caterina-fio.hex
make clean
make PID=0x920B F_CPU=16000000
copy Caterina.hex Caterina-minibench.hex
make clean
make PID=0x0110 F_CPU=8000000
copy Caterina.hex Caterina-lilypadusbplus.hex

View File

@ -0,0 +1,9 @@
@ECHO OFF
IF "%1"=="" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina.hex -U efuse:w:0xcb:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m
IF "%1"=="lilypadusb" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina-lilypadusb.hex -U efuse:w:0xfe:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m
IF "%1"=="fio" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina-fio.hex -U efuse:w:0xfe:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m
IF "%1"=="promicro8" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina-promicro8.hex -U efuse:w:0xfe:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m
IF "%1"=="promicro16" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina-promicro16.hex -U efuse:w:0xcb:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m
IF "%1"=="makey" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina-makey.hex -U efuse:w:0xcb:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m
IF "%1"=="wiflyin" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina-wiflyin.hex -U efuse:w:0xcb:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m
IF "%1"=="minibench" avrdude -p m32u4 -P usb -c avrispmkii -U flash:w:Caterina-minibench.hex -U efuse:w:0xcb:m -U hfuse:w:0xd8:m -U lfuse:w:0xff:m

View File

@ -91,9 +91,9 @@ volatile uint8_t timer5_pin_mask;
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define AVAILABLE_TONE_PINS 1
#define USE_TIMER2
#define USE_TIMER4
const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 2 /*, 3, 4, 5, 1, 0 */ };
const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 4 /*, 3, 5 */ };
static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255, 255, 255, 255, 255 */ };
#elif defined(__AVR_ATmega8__)

View File

@ -5,7 +5,7 @@
# For more info:
# https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification
name=Arduino AVR Boards
name=Prusa Research AVR Boards
version=1.6.20
# AVR compile variables
@ -21,7 +21,7 @@ compiler.warning_flags.all=-Wall -Wextra
compiler.path={runtime.tools.avr-gcc.path}/bin/
compiler.c.cmd=avr-gcc
compiler.c.flags=-c -g -Os {compiler.warning_flags} -std=gnu11 -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects
compiler.c.elf.flags={compiler.warning_flags} -Os -Wl,-u,vfprintf -lprintf_flt -lm -g -flto -fuse-linker-plugin -Wl,--gc-sections
compiler.c.elf.flags={compiler.warning_flags} -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections
compiler.c.elf.cmd=avr-gcc
compiler.S.flags=-c -g -x assembler-with-cpp -flto -MMD
compiler.cpp.cmd=avr-g++

View File

@ -0,0 +1,380 @@
/*
pins_arduino.h - Pin definition functions for Arduino
Part of Arduino - http://www.arduino.cc/
Copyright (c) 2007 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: wiring.h 249 2007-02-03 16:52:51Z mellis $
*/
#ifndef Pins_Arduino_h
#define Pins_Arduino_h
#include <avr/pgmspace.h>
// Workaround for wrong definitions in "iom32u4.h".
// This should be fixed in the AVR toolchain.
#undef UHCON
#undef UHINT
#undef UHIEN
#undef UHADDR
#undef UHFNUM
#undef UHFNUML
#undef UHFNUMH
#undef UHFLEN
#undef UPINRQX
#undef UPINTX
#undef UPNUM
#undef UPRST
#undef UPCONX
#undef UPCFG0X
#undef UPCFG1X
#undef UPSTAX
#undef UPCFG2X
#undef UPIENX
#undef UPDATX
#undef TCCR2A
#undef WGM20
#undef WGM21
#undef COM2B0
#undef COM2B1
#undef COM2A0
#undef COM2A1
#undef TCCR2B
#undef CS20
#undef CS21
#undef CS22
#undef WGM22
#undef FOC2B
#undef FOC2A
#undef TCNT2
#undef TCNT2_0
#undef TCNT2_1
#undef TCNT2_2
#undef TCNT2_3
#undef TCNT2_4
#undef TCNT2_5
#undef TCNT2_6
#undef TCNT2_7
#undef OCR2A
#undef OCR2_0
#undef OCR2_1
#undef OCR2_2
#undef OCR2_3
#undef OCR2_4
#undef OCR2_5
#undef OCR2_6
#undef OCR2_7
#undef OCR2B
#undef OCR2_0
#undef OCR2_1
#undef OCR2_2
#undef OCR2_3
#undef OCR2_4
#undef OCR2_5
#undef OCR2_6
#undef OCR2_7
#define NUM_DIGITAL_PINS 31
#define NUM_ANALOG_INPUTS 12
#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0)
#define TXLED0 PORTD |= (1<<5)
#define TXLED1 PORTD &= ~(1<<5)
#define RXLED0 PORTB |= (1<<0)
#define RXLED1 PORTB &= ~(1<<0)
static const uint8_t SDA = 2;
static const uint8_t SCL = 3;
#define LED_BUILTIN 13
#define LED_BUILTIN_RX 17
#define LED_BUILTIN_TX 30
// Map SPI port to 'new' pins D14..D17
static const uint8_t SS = 17;
static const uint8_t MOSI = 16;
static const uint8_t MISO = 14;
static const uint8_t SCK = 15;
// Mapping of analog pins as digital I/O
// A6-A11 share with digital pins
static const uint8_t A0 = 18;
static const uint8_t A1 = 19;
static const uint8_t A2 = 20;
static const uint8_t A3 = 21;
static const uint8_t A4 = 22;
static const uint8_t A5 = 23;
static const uint8_t A6 = 24; // D4
static const uint8_t A7 = 25; // D6
static const uint8_t A8 = 26; // D8
static const uint8_t A9 = 27; // D9
static const uint8_t A10 = 28; // D10
static const uint8_t A11 = 29; // D12
#define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0))
#define digitalPinToPCICRbit(p) 0
#define digitalPinToPCMSK(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0))
#define digitalPinToPCMSKbit(p) ( ((p) >= 8 && (p) <= 11) ? (p) - 4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4))))))
// __AVR_ATmega32U4__ has an unusual mapping of pins to channels
extern const uint8_t PROGMEM analog_pin_to_channel_PGM[];
#define analogPinToChannel(P) ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) )
#define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT)))))
#ifdef ARDUINO_MAIN
// On the Arduino board, digital pins are also used
// for the analog output (software PWM). Analog input
// pins are a separate set.
// ATMEL ATMEGA32U4 / ARDUINO LEONARDO
//
// D0 PD2 RXD1/INT2
// D1 PD3 TXD1/INT3
// D2 PD1 SDA SDA/INT1
// D3# PD0 PWM8/SCL OC0B/SCL/INT0
// D4 A6 PD4 ADC8
// D5# PC6 ??? OC3A/#OC4A
// D6# A7 PD7 FastPWM #OC4D/ADC10
// D7 PE6 INT6/AIN0
//
// D8 A8 PB4 ADC11/PCINT4
// D9# A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5
// D10# A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6
// D11# PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7
// D12 A11 PD6 T1/#OC4D/ADC9
// D13# PC7 PWM10 CLK0/OC4A
//
// A0 D18 PF7 ADC7
// A1 D19 PF6 ADC6
// A2 D20 PF5 ADC5
// A3 D21 PF4 ADC4
// A4 D22 PF1 ADC1
// A5 D23 PF0 ADC0
//
// New pins D14..D17 to map SPI port to digital pins
//
// MISO D14 PB3 MISO,PCINT3
// SCK D15 PB1 SCK,PCINT1
// MOSI D16 PB2 MOSI,PCINT2
// SS D17 PB0 RXLED,SS/PCINT0
//
// Connected LEDs on board for TX and RX
// TXLED D30 PD5 XCK1
// RXLED D17 PB0
// HWB PE2 HWB
// 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,
NOT_A_PORT,
(uint16_t) &DDRB,
(uint16_t) &DDRC,
(uint16_t) &DDRD,
(uint16_t) &DDRE,
(uint16_t) &DDRF,
};
const uint16_t PROGMEM port_to_output_PGM[] = {
NOT_A_PORT,
NOT_A_PORT,
(uint16_t) &PORTB,
(uint16_t) &PORTC,
(uint16_t) &PORTD,
(uint16_t) &PORTE,
(uint16_t) &PORTF,
};
const uint16_t PROGMEM port_to_input_PGM[] = {
NOT_A_PORT,
NOT_A_PORT,
(uint16_t) &PINB,
(uint16_t) &PINC,
(uint16_t) &PIND,
(uint16_t) &PINE,
(uint16_t) &PINF,
};
const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
PD, // D0 - PD2
PD, // D1 - PD3
PD, // D2 - PD1
PD, // D3 - PD0
PD, // D4 - PD4
PC, // D5 - PC6
PD, // D6 - PD7
PE, // D7 - PE6
PB, // D8 - PB4
PB, // D9 - PB5
PB, // D10 - PB6
PB, // D11 - PB7
PD, // D12 - PD6
PC, // D13 - PC7
PB, // D14 - MISO - PB3
PB, // D15 - SCK - PB1
PB, // D16 - MOSI - PB2
PB, // D17 - SS - PB0
PF, // D18 - A0 - PF7
PF, // D19 - A1 - PF6
PF, // D20 - A2 - PF5
PF, // D21 - A3 - PF4
PF, // D22 - A4 - PF1
PF, // D23 - A5 - PF0
PD, // D24 / PD5
PD, // D25 / D6 - A7 - PD7
PB, // D26 / D8 - A8 - PB4
PB, // D27 / D9 - A9 - PB5
PB, // D28 / D10 - A10 - PB6
PD, // D29 / D12 - A11 - PD6
PD, // D30 / TX Led - PD5
};
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
_BV(2), // D0 - PD2
_BV(3), // D1 - PD3
_BV(1), // D2 - PD1
_BV(0), // D3 - PD0
_BV(4), // D4 - PD4
_BV(6), // D5 - PC6
_BV(7), // D6 - PD7
_BV(6), // D7 - PE6
_BV(4), // D8 - PB4
_BV(5), // D9 - PB5
_BV(6), // D10 - PB6
_BV(7), // D11 - PB7
_BV(6), // D12 - PD6
_BV(7), // D13 - PC7
_BV(3), // D14 - MISO - PB3
_BV(1), // D15 - SCK - PB1
_BV(2), // D16 - MOSI - PB2
_BV(0), // D17 - SS - PB0
_BV(7), // D18 - A0 - PF7
_BV(6), // D19 - A1 - PF6
_BV(5), // D20 - A2 - PF5
_BV(4), // D21 - A3 - PF4
_BV(1), // D22 - A4 - PF1
_BV(0), // D23 - A5 - PF0
_BV(4), // D24 / D4 - A6 - PD4
_BV(7), // D25 / D6 - A7 - PD7
_BV(4), // D26 / D8 - A8 - PB4
_BV(5), // D27 / D9 - A9 - PB5
_BV(6), // D28 / D10 - A10 - PB6
_BV(6), // D29 / D12 - A11 - PD6
_BV(5), // D30 / TX Led - PD5
};
const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
TIMER0B, /* 3 */
NOT_ON_TIMER,
TIMER3A, /* 5 */
TIMER4D, /* 6 */
NOT_ON_TIMER,
NOT_ON_TIMER,
TIMER1A, /* 9 */
TIMER1B, /* 10 */
TIMER0A, /* 11 */
NOT_ON_TIMER,
TIMER4A, /* 13 */
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
NOT_ON_TIMER,
};
const uint8_t PROGMEM analog_pin_to_channel_PGM[] = {
7, // A0 PF7 ADC7
6, // A1 PF6 ADC6
5, // A2 PF5 ADC5
4, // A3 PF4 ADC4
1, // A4 PF1 ADC1
0, // A5 PF0 ADC0
8, // A6 D4 PD4 ADC8
10, // A7 D6 PD7 ADC10
11, // A8 D8 PB4 ADC11
12, // A9 D9 PB5 ADC12
13, // A10 D10 PB6 ADC13
9 // A11 D12 PD6 ADC9
};
#endif /* ARDUINO_MAIN */
// These serial port names are intended to allow libraries and architecture-neutral
// sketches to automatically default to the correct port name for a particular type
// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
// the first hardware serial port whose RX/TX pins are not dedicated to another use.
//
// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor
//
// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial
//
// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library
//
// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins.
//
// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX
// pins are NOT connected to anything by default.
#define SERIAL_PORT_MONITOR Serial
#define SERIAL_PORT_USBVIRTUAL Serial
#define SERIAL_PORT_HARDWARE Serial1
#define SERIAL_PORT_HARDWARE_OPEN Serial1
// Alias SerialUSB to Serial
#define SerialUSB SERIAL_PORT_USBVIRTUAL
#ifndef MAGIC_KEY
#define MAGIC_KEY 0x7777
#endif
#ifndef MAGIC_KEY_POS
#define MAGIC_KEY_POS 0x0800
#endif
#ifndef NEW_LUFA_SIGNATURE
#define NEW_LUFA_SIGNATURE 0xDCFB
#endif
#endif /* Pins_Arduino_h */

View File

@ -1,31 +0,0 @@
# See: https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification
##############################################################
menu.cpu=Processor
########################################
## RAMBo
########################################
rambo.name=PrusaResearch EINSY RAMBo
rambo.vid.0=0x27b1
rambo.pid.0=0x0001
rambo.upload.tool=arduino:avrdude
rambo.upload.protocol=wiring
rambo.upload.maximum_size=253952
rambo.upload.speed=115200
rambo.bootloader.low_fuses=0xFF
rambo.bootloader.high_fuses=0xD8
rambo.bootloader.extended_fuses=0xFD
rambo.bootloader.path=stk500v2
#rambo.bootloader.file=stk500boot_v2_mega2560.hex
rambo.bootloader.unlock_bits=0x3F
rambo.bootloader.lock_bits=0x0F
rambo.build.mcu=atmega2560
rambo.build.f_cpu=16000000L
rambo.build.board=AVR_RAMBO
rambo.build.core=rambo
rambo.build.variant=rambo

175
README.md
View File

@ -1,2 +1,173 @@
# Arduino_Boards
Board definitions for Arduino compatible boards manufactured by Prusa Research
# Prusa Research AVR Boards
Prusa Research AVR Boards definitions for Arduino compatible boards manufactured/used by Prusa Research
- [Prusa MM Control board](https://github.com/prusa3d/MM-control-2.0)
- Prusa Einsy and miniRAMBo boards by Ultimachine [Einsy](https://github.com/ultimachine/Einsy-Rambo) and [miniRAMBo](https://github.com/ultimachine/Mini-Rambo)
# Table of contents
<!--ts-->
* [Linux build](#linux)
* Windows build
* [Using Linux subsystem](#using-linux-subsystem-under-windows-10-64-bit)
* [Using Git-bash](#using-git-bash-under-windows-10-64-bit)
* [How-to change code and dependencies](#2-How-to-modify)
* [Prepare new version](#3-Prepare-new-version)
<!--te-->
# 1-Build environment
## Linux
## Windows
Please make sure if you modify code, files, etc. that the line endings are UNIX conform (LF and not CRLF).
### Using Linux subsystem under Windows 10 64-bit
_notes: Script and instructions contributed by 3d-gussner. Use at your own risk. Script downloads Arduino executables outside of Prusa control. Report problems [there.](https://github.com/3d-gussner/Arduino_Boards/issues)._
- follow the [Microsoft guide](https://docs.microsoft.com/en-us/windows/wsl/install-win10)
- Tested versions are at this moment
- Ubuntu other may different
- After the installation and reboot please open your Ubuntu bash and do following steps
- run command `apt-get update`
- run command `apt-get upgrade` to update your OS.
#### Some Tips for Ubuntu
- Linux is case sensetive so please don't forget to use capital letters where needed, like changing to a directory
- To change the path to your Prusa-Firmware location you downloaded and unzipped
- Example: You files are under `C:\Users\<your-username>\Downloads\Arduino_Boards`
- use under Ubuntu the following command `cd /mnt/c/Users/<your-username>/Downloads/Arduino_Boards`
to change to the right folder
- Unix and windows have different line endings (LF vs CRLF), try dos2unix to convert
- This should fix the `"$'\r': command not found"` error
- to install run `apt-get install dos2unix`
#### Modify Arduino_Boards with Ubuntu Linux subsystem installed
- open Ubuntu bash
- change to your source code folder (case sensitive)
- Read How-to-modify below
- run `./Prepare-new-version.sh`
- Read How-to-modify part `package_prusa3d_index.json` below
### Using Git-bash under Windows 10 64-bit
_notes: Script and instructions contributed by 3d-gussner. Use at your own risk. Script downloads Arduino executables outside of Prusa control. Report problems [there.](https://github.com/3d-gussner/Prusa-Firmware/issues) Multi language build is supported._
- Download and install the [64bit Git version](https://git-scm.com/download/win)
- Also follow these [instructions](https://gist.github.com/evanwill/0207876c3243bbb6863e65ec5dc3f058)
#### Compile Prusa-firmware with Git-bash installed
- open Git-bash
- Read How-to-modify below
- change to your source code folder
- run `bash Prepare-new-version.sh`
- Read How-to-modify `package_prusa3d_index.json` below
# 2-How-to-modify
Folder Structure:
.
+-- IDE_Boards_Manager
¦ +-- prusa3dboards Please don't change that folder name when you update your Github and post a PR.
¦ +-- bootloaders
¦ +-- prusa_einsy_rambo Which is a clone of https://github.com/prusa3d/stk500v2-prusa
¦ +-- prusa_mm_control
¦ +-- cores
¦ +-- prusa_einsy_rambo
¦ +-- variants
¦ +-- prusa_einsy_rambo
¦ +-- prusa_mm_control
¦ +-- ...
+-- ...
Files:
.
+-- IDE_Boards_Manager
¦ +-- prusa3dboards Please don't change that folder name when you update your Github and post a PR.
¦ +-- boards.txt contains definitions for the boards (board name, parameters for building and uploading sketches, etc.).
¦ +-- platform.txt contains definitions for the CPU architecture used (compiler, build process parameters, tools used for upload, etc.).
¦ +-- avrdude.conf
¦ +-- ...
¦ +-- package_prusa3d_index.json
¦ +-- prusa3dboards.version contains the release version numbers and is used in `Prepare-new-version.sh`. The first line is used.
¦ +-- prusa3dboards-<versions>.tar.bz2 actual used pacakges for Ardunio IDE Boards Manager
¦ +-- prusa3dboards-<versions>.md Info about the version
¦ +-- ...
+-- LICENSE
+-- README.md
+-- ...
More information about [boards.txt](https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification#boardstxt)
More information about [platforms.txt](https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5-3rd-party-Hardware-specification#platformtxt)
More information about [package_prusa3d_index.json](https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.6.x-package_index.json-format-specification)
Naming convention for version:
- <`major:#1`.`minor:#2`.`maintenance:#2`"-`devel status:0-4`-`devel build:#6`" where `-devel status` and `devel build` are optional
- `#1` = numbers 0-9
- `#2` = numbers 0-99
- `0-4`= only numbers between 0 and 4. 0=devel, 1=alpha, 2=beta, 3=pre-release, 4=release candidate
- `#6` = numbers 0-999999
Few examples:
- 1.0.0-0-235 Is a version in development and devel build 235.
- 1.0.0 Is the frist stable version
- 1.0.1 Is a stable version that was maintaind...like adding a bootloader or changing tools to existing boards
- 1.1.0-3 Is a pre-release version including new boards
- 1.1.0 Is the first stable version including new boards
After modifying the source code please follow these steps:
- add the new version (following the naming conention) in the first line of `prusa3dboards.version`
- run `Prepare-new-version.sh` to generate `prusa3dboards-<version>tar.bz2` and to show `sha256checksum` and `size` needed in the `package_prusa3d_index.json`
- open `package_prusa3d_index.json`in your prefered editor (like notepad++)
- Directly under
```
{
"packages": [
{
"name": "PrusaResearch",
"maintainer": "Prusa Research",
"websiteURL": "https://www.prusa3d.com/",
"email": "info@prusa3d.com",
"help": {
"online": "https://github.com/3d-gussner/Arduino_Boards"
},
"platforms": [
```
you will find the latest Prusa Research AVR Boards definition ... something like this
```
{
"name": "Prusa Research AVR Boards",
"architecture": "avr",
"version": "1.0.2",
"category": "Contributed",
"url": "https://raw.githubusercontent.com/3d-gussner/Arduino_Boards/V1.0.2/IDE_Board_Manager/prusa3dboards-1.0.2.tar.bz2",
"archiveFileName": "prusa3dboards-1.0.2.tar.bz2",
"checksum": "SHA-256:7d49c48d86644513bd2f2222024934e827783f9f5be160c8a1ae14e177d0393a",
"size": "120855",
"help": {
"online": "https://learn.sparkfun.com/tutorials/installing-arduino-ide/board-add-ons-with-arduino-board-manager"
},
"boards": [
{
"name": "Original Prusa i3 MK3 Multi Material 2.0 upgrade"
},
{
"name": "Original Prusa i3 MK3/MK3S Einsy RAMBo"
}
],
"toolsDependencies": []
},
```
- Copy and paste this section twice
- Modify the top one with new values
- change `"version": "1.0.2",` `"version": "<version shown by Prepare-new-version.sh>",
- change in `"url":` and `"archiveFileName":` the "ArchiveFileName" parts you got from `Prepare-new-version.sh`
- if you have your own github for of this repository and you made a new worktree/branch to test your code you should not forget to modify the `"url":` to your `branch`
- change in `"checksum": ` the "SHA256 checksum" you got from `Prepare-new-version.sh`
- change in `"size":` the "Size" you got from `Prepare-new-version.sh`
- double check the syntax/format of the JSON file. In Notepad++ makes it is quite easy by using the [+] and [-] to see if your changes are correct.
When you have an own github and work localy use `git status` to verify your status.
- You may need to use `git add IDE_Board_Manager/prusa3dboards-<version>.tar.bz2`
- You need to commit your changes with `git commit -a`. Please try to document your changes as detailed as possible.