Compare commits

..

2837 Commits

Author SHA1 Message Date
Scott Lahteine dee6322bf0 Merged 1.1.0-RC6 Version changes 2016-04-24 20:34:42 -07:00
Scott Lahteine df2d0eb37c Merge pull request #3608 from thinkyhead/rcbugfix_merge_rc
Merge RC => RCBugFix changes since RC5
2016-04-24 20:28:25 -07:00
esenapaj db56ff5881 follow-up to commit 200b248(Update README.md)
follow-up to commit 200b2487c2

Update release date in another place
2016-04-24 20:16:37 -07:00
Jochen Groppe 0ed43ec34b Update README.md
Oops! at least 1.6.0
2016-04-24 20:16:37 -07:00
Jochen Groppe b899338c32 Update README.md
* Description for RC5
* Hint for deprecated Arduino versions
2016-04-24 20:16:36 -07:00
Scott Lahteine 30c9893be7 Updated README.md 2016-04-24 19:59:52 -07:00
Scott Lahteine 735f1f5bfa Merge pull request #3606 from thinkyhead/rc_step_sec_comments
Patch steps rate comment in trapezoid function
2016-04-24 19:48:41 -07:00
Scott Lahteine fce1e843b9 Patch steps rate comment in trapezoid function 2016-04-24 19:38:58 -07:00
Scott Lahteine 8757463b46 Apply RC6 label to the version 2016-04-24 19:33:26 -07:00
Scott Lahteine 266ae90861 Merge pull request #3594 from jbrazio/feature/rework-versioning
Rework Marlin's versioning system
2016-04-24 17:42:45 -07:00
João Brázio aa7a65e613 Updated travis config 2016-04-24 05:57:14 +01:00
João Brázio 7de0161204 Updated example config files 2016-04-24 05:21:17 +01:00
João Brázio 3b6f75511f Updated multiple pins files 2016-04-24 05:21:17 +01:00
João Brázio 170f7e8a45 Rework Marlin's versioning system 2016-04-24 05:21:17 +01:00
Scott Lahteine c86d092ef3 Merge pull request #3598 from esenapaj/patch1
Cleanup for language files
2016-04-22 21:55:42 -07:00
esenapaj 8d0b2f358a Cleanup for language files
・Remove abolished strings (MSG_NOZZLE1, MSG_NOZZLE2)
・Remove duplicated strings 
・Arrange the strings in unified order
・Adjust spacing
・Remove some comments in Japanese files(follow-up the PR #3560)

The most part of these changes were salvaged from closed my PR#3550.
2016-04-23 13:27:05 +09:00
Scott Lahteine 2bb56ef6de Merge pull request #3597 from thinkyhead/rc_fix_g29_debug
Move G29 debug output before matrix.set_to_identity()
2016-04-22 21:21:00 -07:00
João Brázio a901555da4 Moved G29 debug output before matrix.set_to_identity() 2016-04-22 20:57:22 -07:00
Scott Lahteine d28db67ca9 Merge pull request #3596 from thinkyhead/rc_fix_typo_in_mbl
Fix a typo in #3586 to fix MBL
2016-04-22 20:16:28 -07:00
Scott Lahteine 88c6693b9e Fix a typo in #3586 to fix MBL 2016-04-22 20:04:08 -07:00
Scott Lahteine 8620024130 Merge pull request #3588 from thinkyhead/rc_z_safe_homing_deps
Allow Z_SAFE_HOMING to compile without a probe
2016-04-21 17:51:18 -07:00
Scott Lahteine aaf9d19954 Allow Z_SAFE_HOMING to compile without a probe 2016-04-21 15:55:49 -07:00
Scott Lahteine 92ab2c7dd8 Merge pull request #3587 from thinkyhead/rc_z_safe_homing_deps
Define dependencies for Z_SAFE_HOMING if left out
2016-04-21 15:46:24 -07:00
Scott Lahteine 63142eef40 Define dependencies for Z_SAFE_HOMING if left out 2016-04-21 15:22:19 -07:00
Scott Lahteine 173334e535 Merge pull request #3418 from jbrazio/translate/danish
Missing Danish translation
2016-04-21 14:56:43 -07:00
João Brázio fe4fc88494 Closes #3351: missing Danish translation 2016-04-21 21:31:47 +01:00
Scott Lahteine ce141deba2 Merge pull request #3586 from thinkyhead/rc_revert_mbl_menu_hack
Revert MBL menus to "known" working point
2016-04-21 13:30:08 -07:00
Scott Lahteine 003aab6dfd Revert MBL menus to "known" working point 2016-04-21 12:59:55 -07:00
Scott Lahteine 6fac4d9211 Merge pull request #3579 from thinkyhead/rc_fix_dogm_and_mbl_menus
Fix menu redraw for DOGLCD, improve MBL
2016-04-20 20:52:56 -07:00
Scott Lahteine 7ddaa79ffe Merge pull request #3578 from thinkyhead/rc_fix_twibus_less_debug_code
Reduce PROGMEM usage by TWIBus, stopwatch
2016-04-20 20:52:16 -07:00
Scott Lahteine cfd10fcba1 Merge pull request #3577 from thinkyhead/rc_fix_G92_set_e_twice
Fix G92 setting E twice
2016-04-20 20:52:09 -07:00
Scott Lahteine fa81b01033 Merge pull request #3576 from thinkyhead/rc_heres_your_z_safe_homing
Z Safe Homing for all
2016-04-20 20:52:01 -07:00
Scott Lahteine dc2281d2f4 Add nextMenu, nextEncoderPosition to change menus after handler loop 2016-04-20 20:19:12 -07:00
Scott Lahteine 7fa2bda1b9 Give the "alive dot" its own blink 2016-04-20 18:57:17 -07:00
Scott Lahteine 9d5e1f32fd Use axis_homed in _lcd_level_bed_homing, item in Prepare before homing 2016-04-20 18:53:33 -07:00
Scott Lahteine 0c2aa92b07 Z Safe Homing for all
The `Z_SAFE_HOMING` feature is coupled with probes and not leveling, so
make it available for general use.
2016-04-20 17:04:52 -07:00
Scott Lahteine 9bcb72e7f8 Further patches to MBL - break up into more handlers 2016-04-20 16:37:35 -07:00
Scott Lahteine 3f6ae85748 Fix some MBL display issues for DOGLCD 2016-04-20 16:36:45 -07:00
Scott Lahteine 71b4f189bf lcd_implementation_drawedit can take 1 arg 2016-04-20 16:36:45 -07:00
Scott Lahteine 1caa2628da Use sync_plan_position_e function elsewhere 2016-04-20 13:02:19 -07:00
Scott Lahteine c7df961144 Fix G92 so it only sets the plan position once 2016-04-20 13:01:58 -07:00
Scott Lahteine 1addb50b62 Shrink debug code in TWIBus and disable by default 2016-04-20 12:44:30 -07:00
Scott Lahteine 21a6b66807 Shrink debug code in Stopwatch and disable by default 2016-04-20 12:44:30 -07:00
Scott Lahteine e523a0dc61 Fix bug in TWIBus ctor declaration 2016-04-20 12:37:46 -07:00
Scott Lahteine ee9bd66a68 Add comments to debug bit flags 2016-04-20 12:37:22 -07:00
Scott Lahteine 3db5a75f30 Merge pull request #3568 from thinkyhead/rc_various_fixes
General code cleanup, improved naming, etc.
2016-04-19 20:53:38 -07:00
Scott Lahteine 8a2587f017 Read size for MAX6675 from sizeof(max6675_temp) 2016-04-19 19:57:32 -07:00
Scott Lahteine ac69fad96d lowercase "stop" function 2016-04-19 19:43:54 -07:00
Scott Lahteine 39ee9c526b setTargetedHotend => get_target_extruder_from_command 2016-04-19 19:43:54 -07:00
Scott Lahteine cafa8b8ce3 Rename filament runout items 2016-04-19 19:43:39 -07:00
Scott Lahteine 27b2e2e786 Document some variables 2016-04-19 19:43:39 -07:00
Scott Lahteine a4062a47ac Rename baricuda variables 2016-04-19 19:43:38 -07:00
Scott Lahteine 78747b1328 min_pos/max_pos => sw_endstop_min/sw_endstop_max 2016-04-19 19:43:38 -07:00
Scott Lahteine 3b0bf88233 Merge pull request #3571 from thinkyhead/rc_m303_with_pidtempbed
Allow setting PIDTEMP and PIDTEMPBED together or apart
2016-04-19 18:26:59 -07:00
Scott Lahteine ba84d8d091 Allow setting PIDTEMP and PIDTEMPBED together or apart 2016-04-19 18:09:29 -07:00
Scott Lahteine 5cb8ec68ae Merge pull request #3566 from thinkyhead/rc_babystep_show_steps
Show steps done in the babystep display
2016-04-18 21:52:55 -07:00
Scott Lahteine 3083ee49f3 Merge pull request #3567 from thinkyhead/rc_mf_bash_scripts
Git helper shell scripts for MarlinFirmware
2016-04-18 21:41:24 -07:00
Scott Lahteine 00d36d10e2 Merge pull request #3560 from thinkyhead/rc_better_graphical_lcd
Aesthetic, functional improvements for Graphical Display
2016-04-18 21:38:02 -07:00
Scott Lahteine dd94ce5bd5 Merge pull request #3565 from thinkyhead/rc_look_at_3563
Output error message for M303 if PIDTEMP is disabled
2016-04-18 21:22:50 -07:00
Scott Lahteine 9a12054e0e Git helper shell scripts for MarlinFirmware 2016-04-18 21:18:35 -07:00
Scott Lahteine 4f04bf7fe8 Show steps done in the babystep display 2016-04-18 20:52:38 -07:00
Scott Lahteine d988708ceb Merge pull request #3559 from esenapaj/patch-1
Update and change Japanese translation
2016-04-18 20:17:54 -07:00
Scott Lahteine 026ae8f2f0 Call lcd_setFont only when needed 2016-04-18 20:09:04 -07:00
Scott Lahteine 90c97c8185 Add _draw_axis_label function to reduce source 2016-04-18 20:09:04 -07:00
Scott Lahteine 34b17d4a8a Reduce heater status code if no bed 2016-04-18 20:09:04 -07:00
Scott Lahteine fc30aa9d88 Aesthetic and functional improvements for graphical LCD 2016-04-18 20:09:04 -07:00
Scott Lahteine b281001329 Use MSG_X, etc., on Hitachi LCD 2016-04-18 20:09:04 -07:00
Scott Lahteine f90a8661cb Uppercase XYZE on Graphical LCD 2016-04-18 20:09:03 -07:00
Scott Lahteine 3613c550fa Rename README file for fonts 2016-04-18 20:09:03 -07:00
esenapaj 1110814ecf Update and change Japanese translation
Update and change Japanese translation

・Follow-up the PR #3411(Update Readme.fonts about Kana), Remove "who really..." strings. I had forgotten it.
・Add readable translated strings in comment
・Add Japanese translation.
  MSG_LCD_ENDSTOPS "エンドストップ"
  (utf8 version only. Because non-utf8 version ("エンドストップ") over 8 characters)
・Change translation.
  MSG_ACC "カソクド mm/s2"
  MSG_ACC "\xb6\xbf\xb8\xc4\xde mm/s2" ("カソクド mm/s2")
2016-04-19 11:28:26 +09:00
Scott Lahteine a26d70e932 Apply indentation to gcode_M303, PID_autotune 2016-04-18 19:04:45 -07:00
Scott Lahteine ba66336503 Output error for disabled M303 2016-04-18 19:03:45 -07:00
Scott Lahteine eda821ca1c Merge pull request #3556 from philfifi/fix_pullup
Fix bug in pullups handling for Z_MIN_PROBE
2016-04-18 18:04:26 -07:00
Scott Lahteine 25b1556a94 Merge pull request #3552 from tnw513/fix_endstops_witbox
Endstop settings modified (witbox). Issue #3547
2016-04-18 18:03:22 -07:00
Scott Lahteine 3479a07cb5 Merge pull request #3546 from thinkyhead/rc_oxivanisher_kossel_config
Update Kossel XL config for 1.1.x
2016-04-18 17:59:12 -07:00
Scott Lahteine 2bc2485313 Update font remarks in Conditionals.h 2016-04-18 17:33:41 -07:00
Philippe LUC 86c868771b Fix bug in pullups handling for Z_MIN_PROBE 2016-04-18 21:16:23 +02:00
Silvio Didonna 91de69bb6e Endstop settings modified. Witbox have max endstops for X and Y. 2016-04-18 16:46:19 +02:00
Scott Lahteine f2558b1f2c Additional delta config updates 2016-04-17 20:04:52 -07:00
Marc Urben 9a661bdd59 Updated Kossel XL config files for the latest Marlin 2016-04-17 20:04:19 -07:00
Scott Lahteine 09c6323b68 Merge pull request #3543 from thinkyhead/rc_better_bootscreen
Better splash screen consolidation
2016-04-17 17:20:13 -07:00
Scott Lahteine 5905ec5ba8 Merge pull request #3541 from thinkyhead/rc_mbl_one_last_lift
Add a final lift, if configured, in Manual Bed Leveling
2016-04-17 17:20:02 -07:00
Scott Lahteine af1711365b Merge pull request #3538 from jbrazio/bugfix/endtop-hit-redeclared
_ENDSTOP_HIT redeclared
2016-04-17 17:12:56 -07:00
Scott Lahteine daade35253 Merge pull request #3544 from manianac/RCBugFix
Fixed Positional_Shift array overrun
2016-04-17 17:07:29 -07:00
Scott Lahteine ed622ac796 Better splash screen consolidator 2016-04-17 17:06:07 -07:00
Jeff K 90c49f5a14 Fixed invalid addressing (overflow) of position_shift / software endstops
Signed-off-by: Jeff K
2016-04-17 19:28:50 -04:00
João Brázio bcf1e027bb Fix the redeclaration of _ENDSTOP_HIT 2016-04-17 18:37:37 +01:00
Scott Lahteine c242bee449 Add a final lift, if configured, in Manual Bed Leveling 2016-04-17 00:12:46 -07:00
Scott Lahteine b6227932f5 Merge pull request #3530 from thinkyhead/rc_set_rcbugfix_for_now
Set version for RCBugFix
2016-04-16 21:40:55 -07:00
Scott Lahteine 19741a0ba6 Merge pull request #3503 from thinkyhead/rc_lcd_endstop_msg
Show all endstops on LCD in checkHitEndstops
2016-04-16 21:32:25 -07:00
Scott Lahteine 7aaff371b0 Set version for RCBugFix 2016-04-16 21:30:52 -07:00
Scott Lahteine db86aaf385 Merge pull request #3528 from thinkyhead/rc_fix_bed_level_equation_oopsie
Fix borked set_bed_level_equation_lsq
2016-04-16 21:01:06 -07:00
Scott Lahteine 5847738bf9 Merge pull request #3527 from thinkyhead/rc_sd_readblock_cleanup
Improve code in Sd2Card::readBlock
2016-04-16 20:50:37 -07:00
Scott Lahteine 837df6108c Fix borked set_bed_level_equation_lsq 2016-04-16 20:35:42 -07:00
Scott Lahteine 7c16e774ca Show all endstops on LCD in checkHitEndstops 2016-04-16 20:08:42 -07:00
Scott Lahteine 40050db210 Improve code in Sd2Card::readBlock 2016-04-16 20:03:39 -07:00
Scott Lahteine 8429ae6beb Merge pull request #3525 from thinkyhead/rc_fix_pid_params_per_extruder
Fix broken PID_PARAMS_PER_EXTRUDER
2016-04-16 19:49:42 -07:00
Scott Lahteine c7353d7929 Merge pull request #3526 from thinkyhead/rc_lcd_config_comments
Configuration.h LCD & SDCard section rewrite
2016-04-16 19:39:53 -07:00
Scott Lahteine 339b5b3e34 Patch more configs with new changes 2016-04-16 19:35:02 -07:00
Scott Lahteine ef2fd620e9 Suggested fixups for LCD/SD config comments 2016-04-16 19:35:02 -07:00
João Brázio 7b5d6ba315 Rebase & feedback 2016-04-16 19:35:02 -07:00
João Brázio d7cc2c0847 Moved some conditionals to Conditionals.h 2016-04-16 19:32:41 -07:00
João Brázio 36a49eab1c Improved the LCD and SD comments blocks in Configuration.h 2016-04-16 19:32:41 -07:00
Scott Lahteine d4a848c72a Fix broken PID_PARAMS_PER_EXTRUDER
As noted by @FalloutBe in #3519
2016-04-16 19:19:40 -07:00
Scott Lahteine 0fc84b75f4 Merge pull request #3522 from esenapaj/patch-1
Follow-up and fix for the PR #3453(ELAPSED / PENDING for rollover-safe time checking)
2016-04-16 19:03:27 -07:00
Scott Lahteine 04fdb4de7d Merge pull request #3524 from thinkyhead/rc_fix_mbl_oopsie_1
Oops! Fix MBL move Z to MESH_HOME_SEARCH_Z between probes
2016-04-16 18:47:32 -07:00
Scott Lahteine 4b75b11a53 Wrap defines in parentheses in configs, M48 2016-04-16 18:21:09 -07:00
esenapaj 832e1c1f2a Follow-up and fix for the PR #3453(ELAPSED / PENDING for rollover-safe time checking)
・Add more "UL" suffix
・Restore removed "UL" suffix
2016-04-17 07:50:02 +09:00
Scott Lahteine 234987ee2f Fix MBL lift 2016-04-16 14:17:06 -07:00
Scott Lahteine a5452902a6 Merge pull request #3516 from thinkyhead/rc_lcd_alert_only_on_error
Don't use LCD alert unless error or alert level is reset later
2016-04-15 19:56:24 -07:00
Scott Lahteine e0830bf8f1 Don't use LCD alert unless error or alert level is reset later 2016-04-15 18:48:49 -07:00
Scott Lahteine 773229b020 Merge pull request #3515 from thinkyhead/rc_wider_splash
On wider screens show a wider splash page, if possible
2016-04-15 17:26:01 -07:00
Scott Lahteine 86467c24be On wider screens show a wider splash page, if possible 2016-04-15 16:42:29 -07:00
Scott Lahteine a8e4d7c135 Merge pull request #3477 from alephobjects/BedTempHysteresis
Implementation of M190 bed temp hysteresis
2016-04-15 16:20:58 -07:00
Scott Lahteine e06931495a Merge pull request #3514 from esenapaj/patch-1
Fix for PR #3502(General cleanup of arc code)
2016-04-15 16:14:04 -07:00
esenapaj 5ecd75eeb3 Fix for PR #3502(General cleanup of arc code) 2016-04-16 07:22:07 +09:00
gralco 8ec8d59df8 Use #if TEMP_RESIDENCY_TIME > 0 rather than #ifdef TEMP_RESIDENCY_TIME 2016-04-15 11:20:32 -06:00
Scott Lahteine 404c36c3bd Merge pull request #3505 from thinkyhead/rc_more_than_this
Fix minor spelling in comments
2016-04-14 21:42:32 -07:00
Scott Lahteine 1cc622b167 Fix minor spelling in comments 2016-04-14 20:06:59 -07:00
Scott Lahteine 866c5be395 Merge pull request #3500 from thinkyhead/rc_shrink_menu_macros
Reduce redundancy in MENU_ITEM code
2016-04-14 19:09:14 -07:00
Scott Lahteine 6e52b0b723 Merge pull request #3504 from thinkyhead/rc_fix_debugging
Fix debugging of vector_3
2016-04-14 19:08:30 -07:00
Scott Lahteine 88367a37f7 Merge pull request #3227 from thinkyhead/rc_home_offsets_and_limits
Relating current_position, min_pos, max_pos, and home_offset
2016-04-14 18:50:43 -07:00
Scott Lahteine b20bf1826d Fix debugging of vector_3 2016-04-14 18:45:26 -07:00
Scott Lahteine 4fb8013be1 Reduce redundancy in MENU_ITEM code 2016-04-14 18:42:06 -07:00
Scott Lahteine b243844690 Merge pull request #3502 from thinkyhead/rc_fix_arcs_bugs
General cleanup of arc code
2016-04-14 18:19:44 -07:00
Scott Lahteine f2abfd6d48 Merge pull request #3501 from thinkyhead/rc_config_comment_cleanup
Update some comments in Configuration.h
2016-04-14 18:19:29 -07:00
Scott Lahteine 5da7de8431 Merge pull request #3488 from thinkyhead/rc_more_manual_level_fix
Mesh Bed Leveling – Add lift between probes, comments, cleanup
2016-04-14 17:59:16 -07:00
Scott Lahteine 2129db581e Simplify MBL movement, zigzag 2016-04-14 16:58:42 -07:00
Scott Lahteine 0493fccc0b mbl.active is a bool now 2016-04-14 16:58:42 -07:00
Scott Lahteine b05f448317 Comments on MBL menu items 2016-04-14 16:58:42 -07:00
Scott Lahteine e08dd0d831 Merge pull request #3498 from thinkyhead/rc_preheat_abs_both_3489
Fix bug in lcd_preheat_pla0123 and lcd_preheat_abs0123
2016-04-14 16:57:38 -07:00
Scott Lahteine 9e95f30de0 Merge pull request #3495 from jbrazio/bugfix/followup-3485
Throw an error if ENCODER_PULSES_PER_STEP < -1
2016-04-14 16:56:36 -07:00
Scott Lahteine 8e5099fa0c Update software endstop positions with M206, M428, G92, etc. 2016-04-14 16:47:22 -07:00
Scott Lahteine 5cfb2533d6 Initial cleaning up of arc code 2016-04-14 16:43:49 -07:00
Scott Lahteine de8c0baf8b Update some comments in Configuration.h 2016-04-14 16:41:20 -07:00
Scott Lahteine fda8f96f00 Fix bug in lcd_preheat_pla0123 and lcd_preheat_abs0123
Trying to preheat a non-existent extruder causes a crash.
2016-04-14 15:48:43 -07:00
João Brázio 9a3f676709 Throw an error if ENCODER_PULSES_PER_STEP < -1 2016-04-14 16:20:17 +01:00
gralco 69c00aea4c Include bed hysteresis setting in the example configs 2016-04-14 08:03:38 -06:00
Scott Lahteine 9ce4264fda Merge pull request #3490 from thinkyhead/rc_mbl_adjustments
Document some movement functions, rename a local
2016-04-13 20:55:20 -07:00
Scott Lahteine f8e10ff1d8 Merge pull request #3491 from thinkyhead/rc_mechanical_probe
Support for "mechanical probe" with Allen Key as a special case
2016-04-13 20:55:14 -07:00
Scott Lahteine 50d083c3e6 Merge pull request #3492 from thinkyhead/rc_config_comment_cleanup
Update some comments in Configuration.h
2016-04-13 20:55:09 -07:00
Scott Lahteine 7eb476597f Update some comments in Configuration.h 2016-04-13 20:34:42 -07:00
esenapaj 2eb1b102f8 Support for "mechanical probe" with Allen Key as a special case 2016-04-13 20:34:12 -07:00
Scott Lahteine cfcd3d7b3e Rename z_offset local to zoffset 2016-04-13 20:09:20 -07:00
Scott Lahteine 5fd20ecac3 Comments on some movement functions 2016-04-13 20:09:20 -07:00
Scott Lahteine c1b953d38f Merge pull request #3487 from thinkyhead/rc_redo_esenpaj_3479
Apply esenapaj 3479 and delta/scara position bugfix
2016-04-13 18:11:33 -07:00
Scott Lahteine bb56b1e74c Merge pull request #3435 from thinkyhead/rc_lcd_leveling_home_etc
More fine-grained control of LCD redraw
2016-04-13 17:59:19 -07:00
Scott Lahteine a781a6f955 Apply esenapaj 3479 and delta/scara position bugfix 2016-04-13 17:41:20 -07:00
Scott Lahteine 2ae7394640 More fine-grained control of LCD redraw 2016-04-12 21:34:34 -07:00
Scott Lahteine 525d8256d4 Merge pull request #3481 from thinkyhead/rc_extruder_offset_array
Fix: gcode_T using non-existent Z offset
2016-04-12 18:23:08 -07:00
Scott Lahteine b9301e6c62 Merge pull request #3482 from thinkyhead/rc_fix_HAS_Z_MIN_PROBE
Patch conditions for HAS_Z_MIN_PROBE
2016-04-12 18:23:02 -07:00
Scott Lahteine dc0a3e37be Patch conditions for HAS_Z_MIN_PROBE 2016-04-12 18:11:36 -07:00
Scott Lahteine 46881c846c Add comments for extruder offset options 2016-04-12 17:16:58 -07:00
Scott Lahteine edf376ce0d Fix: gcode_T using non-existent Z offset
As noted by @snowzach in #3461
2016-04-12 17:15:10 -07:00
gralco 178aeb79c8 Implementation of M190 bed temp hysteresis 2016-04-12 08:56:14 -06:00
Scott Lahteine 0439483bc8 Merge pull request #3476 from thinkyhead/rc_debug_leveling_gcode_t
Add DEBUG_LEVELING output for gcode_T
2016-04-11 21:03:15 -07:00
Scott Lahteine c03e5f5efd Merge pull request #3475 from thinkyhead/rc_language_cleanup
General cleanup of language files
2016-04-11 20:50:57 -07:00
Scott Lahteine 910d3648bb Merge pull request #3474 from thinkyhead/rc_russian_apr2016
Additional Russian translations
2016-04-11 20:50:50 -07:00
Scott Lahteine 63d8893f5d Add DEBUG_LEVELING output for gcode_T 2016-04-11 20:45:10 -07:00
Scott Lahteine 081cfc5cf3 Merge pull request #3472 from thinkyhead/fix_issue_3375
Initialize stepper counts for Delta/SCARA
2016-04-11 19:59:12 -07:00
Scott Lahteine fe0fe184aa Replace some tabs with spaces 2016-04-11 19:42:20 -07:00
Scott Lahteine e773d081c0 General language file cleanup 2016-04-11 19:42:09 -07:00
Scott Lahteine b63c79b5ff Merge pull request #3473 from thinkyhead/rc_one_more_elapse
Fix a messed up ELAPSED instance
2016-04-11 19:30:59 -07:00
Scott Lahteine 068bc980ce Additional Russian translations
Thanks to @gans-AD – #3363
2016-04-11 19:30:14 -07:00
Scott Lahteine f840c7de4d Initialize stepper counts for Delta/SCARA 2016-04-11 19:02:35 -07:00
Scott Lahteine c5a8755cc0 Fix a messed up ELAPSED instance 2016-04-11 18:48:27 -07:00
Scott Lahteine bc33016efc Merge pull request #3471 from thinkyhead/rc_follow_3431
Fix Deutsch string errors, redundancies
2016-04-11 18:46:50 -07:00
Scott Lahteine 81918657f4 Fix Deutsch string errors, redundancies 2016-04-11 18:12:32 -07:00
Scott Lahteine 56acaf3594 Merge pull request #3469 from thinkyhead/rc_aleph_cooldownfix
Fix for M109 and M190 cooldown
2016-04-11 18:01:01 -07:00
gralco c218db136a Fix for M109 and M190 cooldown
Also removes the re-definition of now inside M190's while loop
2016-04-11 17:12:23 -07:00
Scott Lahteine e2a197ab71 Merge pull request #3467 from AnHardt/Fix-Servo-without-endstop-probe
Fix-Servo-without-endstop/probe
2016-04-11 17:04:54 -07:00
Scott Lahteine 3a1ac14bbc Merge pull request #3437 from thinkyhead/rc_lcd_encoder_movement
More bits when encoderPosition is cast as signed
2016-04-11 17:03:23 -07:00
Scott Lahteine c5a2ce4366 Merge pull request #3446 from thinkyhead/rc_fixup_M206_and_mesh
Fix home_offset handling and account for it in G29
2016-04-11 16:49:01 -07:00
Scott Lahteine b1bb1c7989 Merge pull request #3466 from thinkyhead/rc_look_for_leveling_bug
Add CORE support to st_set_position and plan_set_position
2016-04-11 16:45:00 -07:00
AnHardt 9cc571b312 Fix-Servo-without-endstop-probe
Sorry for not having realized someone (me) redefined not existing servo pinns to -1, some lines above.
This is a simple error - not a feature.
2016-04-12 01:01:11 +02:00
Scott Lahteine 3e5312f116 CORE support for st_set_position & plan_set_position 2016-04-11 15:13:42 -07:00
Scott Lahteine e087a99a10 Some cleanup of st_get_pos functions 2016-04-11 15:13:42 -07:00
Roxy-3DPrintBoard 47e3564bbd Merge pull request #3462 from jbrazio/bugfix/old-ide-warning-followup
Versions of Arduino IDE prior to 1.6.0 are no longer supported
2016-04-11 15:58:05 -05:00
João Brázio ca6c6ec4ca Versions of Arduino IDE prior to 1.6.0 are no longer supported 2016-04-11 19:03:06 +01:00
Scott Lahteine fdee2be49c More logging of matrix behavior 2016-04-11 00:06:33 -07:00
Scott Lahteine 7f265db3ef Move sync_plan_position after DEBUG_LEVELING 2016-04-10 23:40:11 -07:00
Scott Lahteine 02550af7c3 Merge pull request #3453 from thinkyhead/rc_jbrazio_m190
ELAPSED / PENDING for rollover-safe time checking
2016-04-10 20:25:02 -07:00
Scott Lahteine 7c770f039c Merge pull request #3456 from thinkyhead/rc_MSG_ERR_REDUNDANT_TEMP
Remove redundant text from MSG_ERR_REDUNDANT_TEMP
2016-04-10 20:23:55 -07:00
Scott Lahteine 925cc305ce Merge pull request #3455 from michos-conradt/RCBugFix
Add missing translations for German
2016-04-10 19:18:42 -07:00
Scott Lahteine 011f4736f1 Remove redundant text from MSG_ERR_REDUNDANT_TEMP 2016-04-10 19:14:46 -07:00
Scott Lahteine 906c1c066f Merge pull request #3423 from jbrazio/translate/pt_BR
Added missing pt_BR translation
2016-04-10 19:13:52 -07:00
Scott Lahteine b30e4528f1 Merge pull request #3454 from thinkyhead/rc_host_timeout_mods
Add a case for M113 to process_next_command
2016-04-10 19:00:40 -07:00
Scott Lahteine 803845ec18 Add a case for M113 to process_next_command 2016-04-10 18:53:03 -07:00
Michael Conradt f3a7a5c99b Merge branch 'RCBugFix' into translations 2016-04-11 03:50:23 +02:00
Michael Conradt 8b923039e2 Add missing german translations. 2016-04-11 03:20:21 +02:00
Scott Lahteine 386140f361 Test time difference in safe way 2016-04-10 18:09:31 -07:00
Scott Lahteine 1b7356b3a1 Account for home_offset in G29 handler 2016-04-10 15:35:02 -07:00
Scott Lahteine f3562dd895 Have M206 alter current_position, M428 use new function 2016-04-10 15:35:01 -07:00
Scott Lahteine 562e281c73 Merge pull request #3443 from thinkyhead/rc_host_timeout_tweak
Adjust timeout code in host_keepalive
2016-04-09 17:45:36 -07:00
Scott Lahteine 2925eb0b59 Merge pull request #3440 from floyd871/patch-1
Wrong Pin Assignment Megatronics 3
2016-04-09 17:01:23 -07:00
Scott Lahteine 6d465321b5 Adjust timeout code in host_keepalive 2016-04-09 16:58:17 -07:00
Scott Lahteine 8198cc30b5 More bits when encoderPosition is cast as signed 2016-04-09 14:22:12 -07:00
Michael Neumann 95acba2cfa Wrong Pin Assignment Megatronics 3
SERVO2 is doubled defined and causes compiler errors
2016-04-09 11:23:22 +02:00
Scott Lahteine 50c3140040 Merge pull request #3414 from thinkyhead/rc_host_timeout_mods
Host Keepalive configurable timeout with 2s default
2016-04-08 21:45:45 -07:00
Scott Lahteine 6bd20371f0 Merge pull request #3438 from thinkyhead/rc_M109_residency_loop_fix
Fix bug which can cause an infinite M109 loop
2016-04-08 21:36:30 -07:00
Scott Lahteine 96e37bb70a Merge pull request #3419 from DavidBjerreBjoerklund/patch-2
Update language_da.h
2016-04-08 21:35:58 -07:00
Scott Lahteine 13d758c651 Merge pull request #3420 from DavidBjerreBjoerklund/patch-3
Update language_da.h
2016-04-08 21:31:14 -07:00
Scott Lahteine 518068a5a8 Merge pull request #3425 from tnw513/FixLangIt
Optimized Italian strings to fit in 16 character display
2016-04-08 21:29:28 -07:00
Scott Lahteine 1b81e5adc7 Merge pull request #3431 from AnHardt/lang-de
de-language additions
2016-04-08 21:25:00 -07:00
Scott Lahteine 1acf901b63 Adjustments to residency_start_ms handling 2016-04-08 21:20:23 -07:00
gralco 907aed57db Fix bug which can cause an infinite M109 loop
Since residency_start_ms is -1 when entering the heatup while loop whilst the hotend temp is close to the target them already then it may not escape.

Hence "Start the TEMP_RESIDENCY_TIME timer when we reach target temp for the first time."
2016-04-08 21:20:23 -07:00
Scott Lahteine 3ecf38d32e Merge pull request #3436 from thinkyhead/rc_experimental_twibus
M155 and M156, a generic TWI/I2C interface for Marlin
2016-04-08 20:35:53 -07:00
jbrazio dd3a06a95a Implemented M155 and M156, a generic TWI/I2C interface for Marlin 2016-04-08 20:14:37 -07:00
Scott Lahteine 843aa90b5a Merge pull request #3434 from thinkyhead/rc_more_debug_leveling
Additional debug leveling output
2016-04-08 18:57:18 -07:00
Scott Lahteine a644ab1de4 Minor patch ups to G29
This may fix a subtle bug caused by doing `G29` more than once without
`G28` between.
2016-04-08 17:53:15 -07:00
Scott Lahteine cba2698871 Additional DEBUG_LEVELING output 2016-04-08 17:53:15 -07:00
AnHardt c3d1b7db2d de-language additions 2016-04-08 22:51:04 +02:00
Scott Lahteine 4e17187c96 Merge pull request #3426 from thinkyhead/rc_no_unhomed_lcd_move_on_delta_scara
No LCD Move for unhomed Delta/SCARA
2016-04-07 19:29:45 -07:00
Scott Lahteine 5e18d650c4 Merge pull request #3427 from thinkyhead/rc_better_SERIAL_ECHOPAIR
No casting needed for SERIAL_ECHOPAIR
2016-04-07 19:29:18 -07:00
Scott Lahteine e0b0d1eb6b Add M113 to get/set Host Keepalive 2016-04-07 19:25:56 -07:00
Scott Lahteine 85883da90c Implement basic HOST_KEEPALIVE_INTERVAL 2016-04-07 19:25:56 -07:00
Scott Lahteine 2eca8d63b3 Add DEFAULT_KEEPALIVE_INTERVAL setting 2016-04-07 19:25:56 -07:00
Scott Lahteine 098fb8f8c9 Merge pull request #3413 from thinkyhead/rc_probe_G30_position
Report the probe position in G30
2016-04-07 19:25:33 -07:00
Scott Lahteine 3460d01441 Merge pull request #3422 from jbrazio/translate/pt_PT
Update pt_PT translation
2016-04-07 19:18:56 -07:00
Scott Lahteine c9c7c66b95 Merge pull request #3421 from jbrazio/bugfix/m109-EXTRUDE_MINTEMP-expansion
M109: Protect against EXTRUDE_MINTEMP expansion
2016-04-07 19:18:34 -07:00
Scott Lahteine d7cbb2eec9 Merge pull request #3403 from jbrazio/feature/stopwatch
Print job timer rework
2016-04-07 19:18:03 -07:00
Scott Lahteine f834bcd43a Merge pull request #3415 from thinkyhead/rc_filwidth_issue
Fix FILAMENT_WIDTH_SENSOR measurement
2016-04-07 19:08:42 -07:00
Scott Lahteine 047c412df6 Merge pull request #3428 from thinkyhead/rc_consolidate_reprap_keypad
Consolidate REPRAPWORLD_KEYPAD, disallow moves for unhomed Delta/SCARA
2016-04-07 19:06:57 -07:00
Scott Lahteine 5fc6daba2b Disallow REPRAPWORLD_KEYPAD moves on Delta/SCARA until homed 2016-04-07 18:40:54 -07:00
Scott Lahteine 7bb15a1c57 Consolidate REPRAPWORLD_KEYPAD definitions 2016-04-07 18:40:54 -07:00
Scott Lahteine dc19b69697 No casting needed for SERIAL_ECHOPAIR 2016-04-07 16:33:21 -07:00
Scott Lahteine 165e73794a Tweak encoderPosition non-zero test 2016-04-07 16:09:42 -07:00
Scott Lahteine 479d307a44 Disable LCD Move XYZ for unhomed Delta/SCARA 2016-04-07 16:09:42 -07:00
Silvio Didonna 9088802da1 Optimized Italian strings to fit in 16 character display 2016-04-07 19:18:22 +02:00
Silvio cc4bb5aa09 Merge pull request #2 from MarlinFirmware/RCBugFix
Rc bug fix
2016-04-07 19:14:17 +02:00
João Brázio 801cd48a72 Added missing pt_BR translation 2016-04-07 13:07:57 +01:00
João Brázio 013f19054b Update pt_PT translation 2016-04-07 13:00:08 +01:00
João Brázio 471d30cc1c M109: Protected against EXTRUDE_MINTEMP expansion 2016-04-07 12:50:57 +01:00
DavidBjerreBjoerklund 5f840d2e30 Update language_da.h
Corrected:
MSG_KILLED
MSG_NO_MOVE
MSG_STOPPED
MSG_PRINT_ABORTED
MSG_ON
MSG_OFF
2016-04-07 13:42:27 +02:00
João Brázio 7c7e30f4cc Adherence to the new OOP coding standards 2016-04-07 12:41:09 +01:00
DavidBjerreBjoerklund b80b40a578 Update language_da.h
Added translation mentioned in issue #3351:
Homing would be best tranlated homing, or "Kører til udgangsposition".

#define MSG_SET_HOME_OFFSETS
#define MSG_LEVEL_BED_HOMING
#define MSG_LEVEL_BED_WAITING 
#define MSG_LEVEL_BED_DONE
#define MSG_LEVEL_BED_CANCEL 
#define MSG_HOME_OFFSETS_APPLIED
2016-04-07 12:52:31 +02:00
Scott Lahteine 573d772c92 Merge pull request #3416 from paulusjacobus/RCBugFix
Optimised Ducth messages to fit in 16 Char display Update language_nl.h
2016-04-06 20:41:14 -07:00
paulusjacobus 3f7ae9a7ce Update language_nl.h
Optimised all added messages to fit within 16 Characters
2016-04-07 13:15:00 +10:00
Scott Lahteine 865dcf3fb4 Fix FILAMENT_WIDTH_SENSOR measurement
Only measure and store filament width when E is going forward.
2016-04-06 19:48:04 -07:00
Scott Lahteine 2f6c5fe2da Report the probe position in G30 2016-04-06 16:55:21 -07:00
Scott Lahteine 74effedbf5 Merge pull request #3412 from paulusjacobus/RCBugFix
rebased my fork with RCBugFix release in order to push language_nl.h
2016-04-06 16:53:35 -07:00
Scott Lahteine bba1f16589 Merge pull request #3411 from esenapaj/patch-1
Update Readme.fonts about Kana
2016-04-06 16:19:19 -07:00
Scott Lahteine c506743f63 Merge pull request #3406 from tnw513/FixLangIt
Update to language_it.h
2016-04-06 16:18:58 -07:00
Paul de Groot 48a4410f02 rebased my fork with RCBugFix release in order to push language_nl.h 2016-04-07 08:17:59 +10:00
esenapaj ff9511b870 Update Readme.fonts about Kana
I think that that sentence has been completed its part. 
Because Kana fonts were revised by me the other day(PR #3289), who am a native Japanese.

And for @AnHardt,
I'd like to take this opportunity to express one's heartfelt gratitude as a far eastern person,
about you has been maintaining the resource of Japanese despite you are a far western person.
2016-04-07 07:13:46 +09:00
Silvio Didonna e215c7100d fixed mistranslations and minor changes for consistency between "it" and "en" files. 2016-04-06 16:45:04 +02:00
Silvio Didonna 6208db3b00 fixed mistranslations and minor changes for consistency between "it" and "en" files. 2016-04-06 16:40:01 +02:00
Silvio 62612580ef Merge pull request #1 from MarlinFirmware/RCBugFix
Rc bug fix
2016-04-06 16:04:09 +02:00
João Brázio e48d0263bf Bugfix: M32 was still using the old print timer 2016-04-06 04:41:36 +01:00
João Brázio e8b80d8c20 Implemented M75, M76, M77 to control the print timer 2016-04-06 04:38:42 +01:00
João Brázio eb61051556 Rework the print job timer to use the stopwatch class 2016-04-06 04:34:03 +01:00
João Brázio 399101fff3 Implemented the stopwatch class and methods 2016-04-06 04:23:45 +01:00
Scott Lahteine 2988147880 Merge pull request #3400 from thinkyhead/rc_sensor_per_extruder
Add more leveling-debug output
2016-04-05 19:38:03 -07:00
Scott Lahteine 98f2e9fc83 Reduce string storage required for DEBUG_LEVELING 2016-04-05 19:04:42 -07:00
Scott Lahteine 1af5d7b35f Add more leveling-debug output 2016-04-05 18:31:10 -07:00
Scott Lahteine d5b19a49f6 Merge pull request #3384 from thinkyhead/rc_adjust_M111_output
Final tweaks to M111 output
2016-04-05 16:48:59 -07:00
Scott Lahteine 9536e28978 Merge pull request #3398 from thinkyhead/rc_sensor_per_extruder
Catch a TEMP_SENSOR error before a pins issue
2016-04-05 16:36:50 -07:00
Scott Lahteine da2ff4a6d3 Catch a TEMP_SENSOR error before a pins issue 2016-04-05 16:17:28 -07:00
Scott Lahteine 90f6f02aca Merge pull request #3397 from thinkyhead/rc_menu_issues_fixer
Revert #3388, clean up lcd_move code
2016-04-05 15:45:35 -07:00
Scott Lahteine fb38d698db Add feedback after "Click to Begin" 2016-04-05 15:35:05 -07:00
Scott Lahteine d5f0db26dc Merge pull request #3390 from jbrazio/docs/update-source-url
Update DEFAULT_SOURCE_URL comment
2016-04-05 15:17:07 -07:00
Scott Lahteine ce58d1d4d5 Merge pull request #3392 from barus93/patch-2
Update language_it.h
2016-04-05 15:16:24 -07:00
Scott Lahteine bd5ca62290 Merge pull request #3393 from gege2b/RCBugFix
Some omitted french translation
2016-04-05 15:14:48 -07:00
Scott Lahteine 582b58e660 Add audio feedback to edit items 2016-04-05 14:51:11 -07:00
Scott Lahteine a70c3ffc21 Minor syntax tweak with encoderPosition 2016-04-05 14:51:11 -07:00
Scott Lahteine 0f247187b8 Drop extra setting of currentMenu 2016-04-05 14:51:11 -07:00
Scott Lahteine 24cde86a4f Fix syntax highlighting of menu_edit_type lines 2016-04-05 14:51:11 -07:00
Scott Lahteine 86372cd394 Add underscore to internal lcd move function names 2016-04-05 14:51:11 -07:00
Scott Lahteine aa97328cd3 Use min_pos/max_pos for _lcd_move 2016-04-05 14:51:10 -07:00
Scott Lahteine f936df9507 Small cleanup of feedrate dead-zone 2016-04-05 14:51:10 -07:00
Scott Lahteine f5c2fb27cd Handle defer_return_to_status in lcd_goto_menu 2016-04-05 14:51:10 -07:00
Scott Lahteine 8459f7fa5c Use ms where possible. 2016-04-05 14:51:10 -07:00
Scott Lahteine 34ce9c4c1c Restore save previous for menu edit items 2016-04-05 14:26:36 -07:00
Gege2B 03d5c9a482 Merge remote-tracking branch 'upstream/RCBugFix' into RCBugFix 2016-04-05 12:14:15 +02:00
Gege2B 4ea45d5c56 Some omitted french translation 2016-04-05 12:04:29 +02:00
barus93 f43e37bb0c Update language_it.h
New messages translated:
#define MSG_LEVEL_BED_HOMING "Homing XYZ"
#define MSG_LEVEL_BED_WAITING "Click to Begin"
#define MSG_LEVEL_BED_DONE "Leveling Done!"
#define MSG_LEVEL_BED_CANCEL "Cancel"
. . .
#define MSG_HOME_OFFSETS_APPLIED "Offsets applied"
2016-04-05 07:24:07 +02:00
João Brázio 9240682630 Followup #3326: Update DEFAULT_SOURCE_URL comment 2016-04-05 02:21:23 +01:00
Scott Lahteine 6c48b4e006 Merge pull request #3387 from thinkyhead/travis_readability
Comments for legibility, include DEBUG_LEVELING, SDSUPPORT
2016-04-04 17:05:58 -07:00
Scott Lahteine 4b8a71055e Merge pull request #3388 from thinkyhead/rc_fix_move_menu_bug
Fix: menu edit items saving position twice
2016-04-04 17:05:15 -07:00
Scott Lahteine 1220dfd5d6 Fix: menu edit items saving position twice 2016-04-04 16:36:04 -07:00
Scott Lahteine ad61a8684a Comments for legibility, test DEBUG_LEVELING 2016-04-04 16:31:37 -07:00
Scott Lahteine b5920837ea Merge pull request #3370 from esenapaj/patch-1
Drop DISABLE_M(IN|AX)_ENDSTOPS, replace with individual endstop flags
2016-04-04 16:12:50 -07:00
Scott Lahteine 53b397ab14 Merge pull request #3364 from jbrazio/script/find-missing-translations
Added a script to check all language files for missing translations
2016-04-04 16:10:36 -07:00
Scott Lahteine d6fe454a13 Merge pull request #3386 from thinkyhead/rc_spanish_rebase
Add Missing Spanish translation
2016-04-04 16:07:34 -07:00
Scott Lahteine 2abea41c41 Merge pull request #3385 from thinkyhead/rc_dutch_translation
Update language_nl.h
2016-04-04 16:02:11 -07:00
RicardoGA 1bfaf57ee5 Add Missing Spanish translation
Add the missing translation (Spanish) issue #3353
2016-04-04 15:55:59 -07:00
paulusjacobus 4a4b797dca Update language_nl.h
Added these messages with Dutch translation
#define MSG_BED_Z
#define MSG_A_TRAVEL
#define MSG_HEATING_FAILED_LCD
#define MSG_ERR_REDUNDANT_TEMP
#define MSG_THERMAL_RUNAWAY
#define MSG_ERR_MAXTEMP
#define MSG_ERR_MINTEMP
#define MSG_ERR_MAXTEMP_BED
#define MSG_ERR_MINTEMP_BED
#define MSG_HEATING
#define MSG_HEATING_COMPLETE
#define MSG_BED_HEATING
#define MSG_BED_DONE
2016-04-04 15:46:50 -07:00
Scott Lahteine 1ee903f30d Merge pull request #3376 from gege2b/RCBugFix
French translation
2016-04-04 15:40:00 -07:00
Scott Lahteine c5ff2c7d32 Merge pull request #3377 from clexpert/patch-1
Update language_cz.h
2016-04-04 15:39:44 -07:00
Scott Lahteine 99898ea652 Merge pull request #3379 from barus93/patch-2
Update language_it.h
2016-04-04 15:39:15 -07:00
Scott Lahteine 56e8e2b0eb Final tweaks to M111 output 2016-04-04 15:36:07 -07:00
Scott Lahteine d5ccc9c70a Merge pull request #3374 from jbrazio/bugfix/m111-corrupted-output
M111: Add static keyword to PROGMEM debug variables
2016-04-04 15:31:57 -07:00
barus93 040a0c49db Update language_it.h
ADD missing translation
2016-04-04 20:22:34 +02:00
Petr Zahradnik 8b843e997a Update language_cz.h 2016-04-04 17:26:19 +02:00
Petr Zahradnik 3cd2beb750 Update language_cz.h 2016-04-04 16:54:26 +02:00
Gege2B 34bf9530c0 French translation 2016-04-04 16:45:06 +02:00
João Brázio d819a4aff9 Fixes #3346, followup #3343: variables must defined with the static keyword to work with PROGMEM when defined inside functions 2016-04-04 15:02:18 +01:00
esenapaj 1326dc7258 Drop DISABLE_M(IN|AX)_ENDSTOPS, replace with individual endstop flags
This is follow-up the commit e5771346a4.
Update unnoticed files.
2016-04-04 17:49:25 +09:00
Scott Lahteine 0433df3835 Merge pull request #3366 from jbrazio/translate/pt_PT
Added missing translations for pt_PT
2016-04-03 21:02:13 -07:00
Scott Lahteine 1d6f90b0b1 Merge pull request #3365 from thinkyhead/fix_fancy_new_endstop_config
Fix bug in new endstop pullups handling
2016-04-03 20:58:52 -07:00
João Brázio dff6adfbca Fixes #3361: Added missing translations for pt_PT 2016-04-04 04:57:32 +01:00
Scott Lahteine c0e7257932 Fix bug in new endstop pullups handling 2016-04-03 20:52:32 -07:00
João Brázio f94900ee79 Added a script to check all language files for missing translations 2016-04-04 04:46:04 +01:00
Scott Lahteine de39056f68 Merge pull request #3343 from thinkyhead/rc_fix_m111_output
Fix M111 output using pgm_read_word, as required
2016-04-03 17:44:38 -07:00
Scott Lahteine e0bef7dfcc Merge pull request #3342 from esenapaj/patch-1
Update Japanese translation
2016-04-03 17:38:28 -07:00
Scott Lahteine fd0ac371b0 Fix M111 output using pgm_read_word as required
As noted by @taratata2016 in https://github.com/MarlinFirmware/Marlin/issues/3300#issuecomment-204687275
2016-04-03 17:33:06 -07:00
esenapaj c4d7e0307c Update Japanese translation 2016-04-04 09:11:23 +09:00
Scott Lahteine c045ec8cb3 Merge pull request #3065 from thinkyhead/rc_doc_tweaks
Simplified endstop configuration
2016-04-03 17:05:47 -07:00
Scott Lahteine d771174797 Merge pull request #3337 from esenapaj/patch-2
suppress warnings
2016-04-03 17:01:22 -07:00
Scott Lahteine f2032cfcf6 Merge pull request #3341 from thinkyhead/rc_english_patch
Fix English definition for MSG_LEVEL_BED_CANCEL
2016-04-03 16:58:51 -07:00
Scott Lahteine fa97ba6230 Merge pull request #3340 from thinkyhead/japanese_accent_sanitize
Update Japanese translation
2016-04-03 16:48:30 -07:00
Scott Lahteine 09c6f80c1e Fix MSG_LEVEL_BED_CANCEL english 2016-04-03 16:41:27 -07:00
esenapaj afe7d26543 Update Japanese translation 2016-04-03 16:39:37 -07:00
Scott Lahteine 3aee89b93a Merge pull request #3338 from thinkyhead/rc_patches_april_3
Add history to LCD Menus, fix up Manual Bed Leveling
2016-04-03 16:37:39 -07:00
Scott Lahteine 22a43980e8 Merge pull request #3339 from thinkyhead/rc_has_temp_hotend
Add HAS_TEMP_HOTEND, account for MAX31855 in conditionals
2016-04-03 16:35:54 -07:00
Scott Lahteine 7a2f73c6db Remove extra comma from LCDHandlerAction 2016-04-03 16:27:30 -07:00
Scott Lahteine 3fbf67e5ce Patch MBL feedback and event handling 2016-04-03 16:27:30 -07:00
Scott Lahteine ef2fbaec98 Headings for menu sub-items, actions, etc. 2016-04-03 16:27:29 -07:00
Scott Lahteine dc109ac4e2 Move MBL code to its logical place 2016-04-03 16:27:29 -07:00
Scott Lahteine 6730408ec1 Move lcd_autostart_sd to its logical place 2016-04-03 16:27:29 -07:00
Scott Lahteine 056b80dc53 Have "back" menu items go to the previous item 2016-04-03 16:27:29 -07:00
Scott Lahteine c94482168b Add MSG_LEVEL_BED_CANCEL for MBL 2016-04-03 16:27:29 -07:00
Scott Lahteine 877fb1f588 Account for MAX31855 in conditionals 2016-04-03 16:19:17 -07:00
Scott Lahteine d24f14a799 Add HAS_TEMP_HOTEND define 2016-04-03 16:18:49 -07:00
esenapaj f9e1a0ee6c suppress warnings 2016-04-04 06:48:53 +09:00
Scott Lahteine cf9a171aa9 Merge pull request #3330 from thinkyhead/rc_mbl_lcdDrawUpdate
Improvements to MBL, general LCD menu handling
2016-04-02 19:20:23 -07:00
Scott Lahteine 783e0122d6 Merge pull request #3331 from thinkyhead/rc_default_info
Split DEFAULT_MACHINE_NAME from DEFAULT_SOURCE_URL
2016-04-02 19:11:48 -07:00
Scott Lahteine 2b01649533 Move default machine info to pins files 2016-04-02 18:53:05 -07:00
Scott Lahteine 4f24323817 Split DEFAULT_MACHINE_NAME from DEFAULT_SOURCE_URL
Addressing #3325 – Avoid undefined symbol errors in the compiler.
2016-04-02 18:41:01 -07:00
Scott Lahteine 771ee1c1a9 Update MBL menu sub-function names 2016-04-02 18:20:47 -07:00
Scott Lahteine d659777e70 Fix MBL to handle re-entrant calls 2016-04-02 18:14:49 -07:00
Scott Lahteine 5719fcba51 Add MSG_LEVEL_BED_DONE and MSG_LEVEL_BED_WAITING 2016-04-02 18:14:49 -07:00
Scott Lahteine 80b8fd1cad Add MSG_HOME_OFFSETS_APPLIED 2016-04-02 18:14:49 -07:00
Scott Lahteine d1c45ff80b More user interaction in MBL 2016-04-02 18:14:49 -07:00
Scott Lahteine 240b71ee1c Give names to lcdDrawUpdate values 2016-04-02 18:14:48 -07:00
Scott Lahteine b0a3c7a91c Add feedback sounds to MBL items 2016-04-02 17:08:43 -07:00
Scott Lahteine 782c598e66 Use ftostr43 with '+' option in MBL Z adjuster 2016-04-02 17:08:43 -07:00
Scott Lahteine f08b0d034f Merge pull request #3328 from RicardoGA/RC_Babystepping_fix
Babystepping Fix
2016-04-02 16:48:45 -07:00
Scott Lahteine 09437466b1 Merge pull request #3324 from tnw513/fix_filament_dia
changed DEFAULT_NOMINAL_FILAMENT_DIA for consistency between example config files
2016-04-02 16:40:24 -07:00
Scott Lahteine 2b4c42610c Adjust SanityCheck messages 2016-04-02 16:39:23 -07:00
Scott Lahteine a617d12f70 Account for Z_DUAL_ENDSTOPS in sanity checking of endstops 2016-04-02 16:39:23 -07:00
Scott Lahteine 868eebfdee Simplify configuration of Z2 endstops 2016-04-02 16:39:23 -07:00
Scott Lahteine e5771346a4 Drop DISABLE_M(IN|AX)_ENDSTOPS, replace with individual endstop flags 2016-04-02 16:39:23 -07:00
Scott Lahteine 071c742b8a Move STRINGIFY to macros.h, use in language.h 2016-04-02 16:38:43 -07:00
Scott Lahteine 2ee599d873 Merge pull request #3321 from tnw513/fix_max_endstop
Max endstops disabled for stock Prusa i3 Hephestos.
2016-04-02 16:38:10 -07:00
Scott Lahteine 4e1bbdb89f Merge pull request #3320 from alhirzel/RCBugFix
Fix manual Y movement on delta (regression).
2016-04-02 16:37:14 -07:00
Scott Lahteine 5fb88a2754 Merge pull request #3314 from jbrazio/bugfix/followup-3235
Fixes missing icons from status screen
2016-04-02 16:36:18 -07:00
Scott Lahteine 3c14c01a3a Merge pull request #3310 from esenapaj/patch-2
Follow-up the commit a393941
2016-04-02 16:35:31 -07:00
Scott Lahteine 93f690afdb Merge pull request #3317 from jbrazio/bugfix/followup-3305
Wrong board def in pins.h
2016-04-02 16:34:39 -07:00
RicardoGA 6b1d2263a2 Babystepping Fix 2016-04-02 14:53:57 -06:00
Silvio Didonna dfe891fe11 changed filament diameter for consistency between all example config files. 2016-04-02 21:05:25 +02:00
Alexander Hirzel 6e0d627c8c Unbreak the Delta radius clipping 2016-04-02 12:58:39 -04:00
Silvio Didonna 6c528e63eb max endstops disabled. Stock Prusa i3 Hephestos have min endstops. 2016-04-02 16:54:59 +02:00
Alexander Hirzel 949172606f Fix manual Y movement on delta (regression). 2016-04-02 10:48:13 -04:00
João Brázio 55a248d6b4 Fixes #3313 : Wrong board def in pins.h 2016-04-02 09:28:58 +01:00
João Brázio 04b2abb6aa Fixes #3312: Missing all icons from status screen 2016-04-02 06:50:02 +01:00
esenapaj 81593cb3cb Follow-up the commit a393941 2016-04-02 11:23:33 +09:00
Scott Lahteine 4d0d37aab7 Merge pull request #3309 from thinkyhead/rc_release_RC5
Release 1.1.0-RC5
2016-04-01 19:23:30 -07:00
Scott Lahteine 6a245fe4f7 Release 1.1.0-RC5 2016-04-01 19:14:49 -07:00
Scott Lahteine e8f8a46ef5 Merge pull request #3303 from thinkyhead/rc_various_fixes
Various patches for LCD menu issues
2016-04-01 18:02:25 -07:00
Scott Lahteine b98f72b483 Small optimization for ftostr43 2016-04-01 17:54:16 -07:00
Scott Lahteine a393941d2d Combine "XYZ" with MSG_LEVEL_BED_HOMING 2016-04-01 17:51:03 -07:00
Scott Lahteine 097cc75ba8 Patch _lcd_level_bed draw to fix flicker, show proper offset 2016-04-01 17:51:03 -07:00
Scott Lahteine 1e1a18e091 Remove extra semicolon in ultralcd.cpp 2016-04-01 17:51:03 -07:00
Scott Lahteine 0b4f65dca8 Always limit blink to ~1 second intervals 2016-04-01 17:51:03 -07:00
Scott Lahteine 8e05b0037b Merge pull request #3307 from thinkyhead/rc_host_keepalive_comment
Fix comment about host keepalive interval
2016-04-01 17:48:17 -07:00
Scott Lahteine ffe054c129 Fix comment about host keepalive interval 2016-04-01 17:28:08 -07:00
Scott Lahteine 0d6609c3c5 lcd_goto_menu should set lcdDrawUpdate to 2 2016-04-01 17:07:40 -07:00
Scott Lahteine af89ccf96a Use flag to defer lcd return-to-status 2016-04-01 17:07:39 -07:00
Scott Lahteine 641b30217e Patch prevEncoderPosition compile issue
Thanks to @jbrazio #3301
2016-04-01 17:07:39 -07:00
Scott Lahteine 41aa4bdf1f Use XYZ translated strings in dogm 2016-04-01 17:07:39 -07:00
Scott Lahteine 92882fcc51 Allow lcd_implementation_drawedit to draw a message 2016-04-01 17:04:33 -07:00
Scott Lahteine 0114cf1101 RCBugFix version string 2016-04-01 17:04:33 -07:00
Scott Lahteine 9c43369ebb Merge pull request #3306 from thinkyhead/rc_fix_num2str
Clean up num2str functions, extend ftostr43
2016-04-01 17:04:03 -07:00
Scott Lahteine 6791401ca7 Merge pull request #3305 from thinkyhead/rc_emart_patch_3297
Support for MKS v1.3/1.4 and Sainsmart RAMPS 1.4 variants
2016-04-01 17:03:54 -07:00
Scott Lahteine 1da9d10173 Support for MKS v1.3/1.4 and Sainsmart RAMPS 1.4 variants 2016-04-01 16:54:35 -07:00
Scott Lahteine fcedfd6e99 Clean up num2str functions, extend ftostr43 2016-04-01 16:52:59 -07:00
Scott Lahteine 2512d8fd5e Merge pull request #3304 from thinkyhead/rc_slow_buttons
Macros for buttons, some cleanup for slow buttons
2016-04-01 15:31:54 -07:00
Scott Lahteine f543aaa54e Apply standard pin test to buttons
This is the easiest way to make button pin testing consistent without
renaming all the button pins. Just make a macro especially for testing
if button pins are set, since they are named consistently in the pins
files.
2016-04-01 15:12:12 -07:00
Scott Lahteine f2ffc8b28b Rename local slow_buttons for clarity 2016-04-01 15:06:33 -07:00
Scott Lahteine 26279fa43c Merge pull request #3289 from esenapaj/patch-1
Update Kana font
2016-04-01 14:31:32 -07:00
Scott Lahteine 0bee67e5f1 Merge pull request #3294 from jbrazio/bugfix/mandatory-extrude-mintemp
Fix an error when EXTRUDE_MINTEMP is not defined
2016-04-01 14:23:32 -07:00
João Brázio 709dd5aa4d Fix an error when EXTRUDE_MINTEMP is not defined 2016-03-31 16:25:48 +01:00
Scott Lahteine 4f85226106 Merge pull request #3288 from thinkyhead/rc_servo_plus_delta
Fix servo deploy/stow issues with G29 and Delta
2016-03-30 19:01:00 -07:00
Scott Lahteine bc86ee0271 Simplify homeaxis with some macros 2016-03-30 18:44:05 -07:00
esenapaj cc5059478a Update Kana font 2016-03-31 10:02:47 +09:00
Scott Lahteine 82ef101ed5 Deploy & Stow in G29 for Delta + Z Servo Endstop 2016-03-30 16:41:16 -07:00
Scott Lahteine 33a9d32800 Merge pull request #3285 from thinkyhead/rc_fix_drawedit
Fix string issues in ultralcd.cpp
2016-03-30 13:01:07 -07:00
Scott Lahteine 6a4d394fff Fix pointer-to-string issues with set_home_offsets and _lcd_level_bed_homing 2016-03-30 12:32:25 -07:00
Scott Lahteine de333c4fea Merge pull request #3279 from thinkyhead/rc_filament_width_sensor
FILAMENT_SENSOR -> FILAMENT_WIDTH_SENSOR
2016-03-30 12:16:27 -07:00
Scott Lahteine 0f835c0c4e Merge pull request #3259 from jbrazio/bugfix/old-ide-warning
Show a warning message when Arduino IDE is prior to 1.5
2016-03-30 12:15:51 -07:00
Scott Lahteine 8def2c31db Merge pull request #3284 from thinkyhead/rc_stop_watchheat_lcdset0
Fix temperature checking conditions (backwards!)
2016-03-30 12:10:39 -07:00
Scott Lahteine b919a6f182 Merge pull request #3280 from esenapaj/patch-1
Update U8glib URL
2016-03-30 12:06:53 -07:00
Scott Lahteine 8bf5f7c676 Merge pull request #3282 from jbrazio/bugfix/m104-timer-wont-start
M104 not starting the print timer
2016-03-30 11:54:16 -07:00
Scott Lahteine 31450ad498 Fix temperature checking conditions (backwards!) 2016-03-30 11:52:03 -07:00
João Brázio 187c183c20 M104 was not starting the print timer 2016-03-30 11:33:24 +01:00
esenapaj 352294b5f5 Update U8glib URL 2016-03-30 14:26:28 +09:00
Scott Lahteine 507aef055f Patch broken M404 2016-03-29 20:54:31 -07:00
Scott Lahteine 1a79b13b7a FILAMENT_SENSOR -> FILAMENT_WIDTH_SENSOR 2016-03-29 20:54:31 -07:00
Scott Lahteine 7f81aa7ff3 Pins should always be defined (even for disabled features) 2016-03-29 20:44:14 -07:00
Scott Lahteine 5f32184254 Merge pull request #3278 from thinkyhead/rc_cleanup_m111_redo
Echo all debug levels in M111, default to DEBUG_NONE
2016-03-29 20:34:31 -07:00
Scott Lahteine 05765fb570 Add DEBUGGING macro 2016-03-29 19:50:01 -07:00
Scott Lahteine 4402760739 Echo all debug levels in M111, default to DEBUG_NONE
Redo of #3268 by @jbrazio
2016-03-29 19:18:45 -07:00
Scott Lahteine f0b96f5cae Merge pull request #3276 from thinkyhead/rc_sdprint_and_lcd_sleuth
Refinements, fixes, reduced stack usage in CardReader
2016-03-29 18:30:18 -07:00
Scott Lahteine 12c0bf9521 Merge pull request #3277 from jbrazio/bugfix/m190-temp-never-reached
M190 bed temp is never reached
2016-03-29 18:28:51 -07:00
João Brázio c6577aea60 M190 bed temp was never reached 2016-03-30 01:03:20 +01:00
Scott Lahteine ce0a9d3dc6 A picky fix of indentation in cardreader.cpp 2016-03-29 16:23:12 -07:00
Scott Lahteine 4ed8351e3d Revert use of enqueue_and_echo_command_now 2016-03-29 16:23:12 -07:00
Scott Lahteine 70d1d4de5f Small code spacing adjustments 2016-03-29 03:19:27 -07:00
Scott Lahteine 0385acea7a Fix workDirParents -> getAbsFilename relationship 2016-03-29 03:18:53 -07:00
Scott Lahteine 27d70599d4 Change openFile default to "not-push" instead of "do-replace" 2016-03-29 03:16:35 -07:00
Scott Lahteine 372f93cc7a Rename "filenames" to "proc_filenames" 2016-03-29 03:15:01 -07:00
Scott Lahteine 6b01cf07c2 Use only as much stack as needed for the M23 command 2016-03-29 02:34:33 -07:00
Scott Lahteine 9e520ae319 Merge pull request #3272 from thinkyhead/rc_filament_sensor_scope
Minor cleanup to filament sensor code
2016-03-28 20:51:46 -07:00
Scott Lahteine f83c03f594 Merge pull request #3271 from thinkyhead/rc_blink_limiter
Keep blinking limited to LCD_UPDATE_INTERVAL
2016-03-28 20:05:56 -07:00
Scott Lahteine 3252df7998 Minor cleanup to filament sensor code 2016-03-28 20:04:34 -07:00
Scott Lahteine b60ea95adf Keep blinking limited to LCD_UPDATE_INTERVAL 2016-03-28 19:41:13 -07:00
Scott Lahteine e0ab06cfae Merge pull request #3267 from thinkyhead/rc_command_args_null_oooops
Cleanup, simplification of command dispatcher code
2016-03-28 18:54:00 -07:00
Scott Lahteine 0b8ef5eba6 Split get_command into units, rename to get_available_commands 2016-03-28 06:00:04 -07:00
Scott Lahteine 545f7997ea Continue on empty lines instead of returning 2016-03-28 05:37:36 -07:00
Scott Lahteine 3dcf6d42ff Don't store escaped serial characters if comment_mode 2016-03-28 05:37:36 -07:00
Scott Lahteine 5f8e52aefb Minor cleanup to command dispatcher 2016-03-28 05:37:36 -07:00
jbrazio 0880fecbd4 Show a warning message when Arduino IDE is prior to 1.5 2016-03-28 11:55:42 +01:00
Scott Lahteine f1ed310322 Add NUMERIC compare macros to simplify code 2016-03-28 03:52:49 -07:00
Scott Lahteine 4b697938e6 Merge pull request #3262 from thinkyhead/rc_less_uptight_temps
Relax the test for "Heating failed" errors
2016-03-27 09:52:50 -07:00
Scott Lahteine 3b2d159abd Relax the test for "Heating failed" errors 2016-03-27 07:02:10 -07:00
Scott Lahteine 2e4ddd5c22 Merge pull request #3260 from jbrazio/cleanup/standardize-comment-style
Formatted multi-line comments
2016-03-26 21:42:33 -07:00
jbrazio 443e6d26fe Formatted multi-line comments 2016-03-27 04:36:36 +01:00
Scott Lahteine ee71f5a320 Merge pull request #3255 from esenapaj/patch-1
Use SBI macro
2016-03-26 17:49:20 -07:00
esenapaj 7950b5268a Use SBI macro 2016-03-26 20:17:52 +09:00
Scott Lahteine e4039a9b5b Merge pull request #3250 from esenapaj/patch-1
Fix typo
2016-03-26 00:41:31 -07:00
Scott Lahteine 1d987cd280 Merge pull request #3253 from thinkyhead/rc_autotune_menu_optional
Make the Autotune option(s) in the LCD menu optional
2016-03-26 00:32:05 -07:00
Scott Lahteine d6f92f9efe Remove Tonokip remnant from recent PR 2016-03-25 23:50:29 -07:00
Scott Lahteine ab412a2153 PIDTEMPBED on #endif 2016-03-25 23:50:28 -07:00
Scott Lahteine 53cc6cca46 Formalize some dependencies on PIDTEMPBED 2016-03-25 23:50:28 -07:00
Scott Lahteine 5955a3063f Sanity check PIDTEMPBED plus BED_LIMIT_SWITCHING 2016-03-25 23:50:28 -07:00
Scott Lahteine 67fabb6044 Merge pull request #3252 from thinkyhead/rc_keepalive_less
Host Keepalive: Reduce frequency of "busy" messages
2016-03-25 23:37:02 -07:00
Scott Lahteine d1bdd25b84 Merge pull request #3249 from esenapaj/patch-2
Update Japanese translation
2016-03-25 22:53:00 -07:00
Scott Lahteine 0d554c10ac Merge pull request #3244 from ch100/RCBugFix
Fixed backlight for PCF8575.
2016-03-25 22:50:20 -07:00
Scott Lahteine cd4c3e90bc Send a busy signal every 10 seconds instead of every 2 2016-03-25 22:15:40 -07:00
Scott Lahteine 8cb04816b5 Apply PID_AUTOTUNE_MENU option to ultralcd.cpp 2016-03-25 19:31:56 -07:00
Scott Lahteine 4b31c67dce Add PID_AUTOTUNE_MENU option 2016-03-25 19:31:56 -07:00
Scott Lahteine e08915a723 Fix comments in Configuration_adv.h 2016-03-25 19:31:31 -07:00
Scott Lahteine 26168676e7 Merge pull request #3246 from thinkyhead/rc_fix_numeric_filenames
Fix: current_command_args skips digits at the front
2016-03-25 16:38:36 -07:00
esenapaj f54315c728 Fix typo
These are salvaged from closed-PR #3216.
2016-03-26 08:37:17 +09:00
esenapaj 37a0806420 Update Japanese trasration
Follow the PR #3242.
2016-03-26 08:21:17 +09:00
Scott Lahteine f423716c6a Fix: current_command_args skips digits at the front
Closes #3245
2016-03-25 16:12:41 -07:00
Christian Inci 627f39e1e3 Fixed backlight for PCF8575.
Fixed backlight for PCF8575.

Signed-off-by: Christian Inci <chris.pcguy.inci@gmail.com>
2016-03-25 14:49:55 +01:00
Scott Lahteine fc0baec991 Merge pull request #3240 from esenapaj/patch-1
Fix distribution date
2016-03-25 06:49:42 -07:00
Scott Lahteine 18de9f55ac Merge pull request #3242 from thinkyhead/rc_epatel_mesh_fixes
Updated Mesh Bed Leveling
2016-03-25 06:48:12 -07:00
Scott Lahteine 3a1e6b1752 Merge pull request #3243 from AnHardt/homed
axis_known_position -> axis_homed
2016-03-25 06:36:46 -07:00
Scott Lahteine 1ee76fa981 Merge pull request #3241 from thinkyhead/rc_general_clean
Code cleanup around MOTOR_CURRENT_PWM options
2016-03-25 06:13:35 -07:00
AnHardt 94962ee678 axis_known_position -> axis_homed
In all these cases we want the axis to be homed. If we could have lost
some steps is secondary.

Reenables homing seperate axis with DISABLE_X / DISABLE_Y true.
2016-03-25 14:05:20 +01:00
Edward Patel 14afe1a017 Move to Z=0 for G28 when using Manual Bed Leveling
copy of https://github.com/MarlinFirmware/MarlinDev/pull/199/commits/406992f9dd44655b33dab46e0cb4fd4a29be1695
2016-03-25 04:58:44 -07:00
Edward Patel c606ed447a Add "G29 S4" to fine tune Z level for Mesh Bed Leveling.
Also add mbl.z_offset to the EEPROM, bumping the version to V23.
2016-03-25 04:58:43 -07:00
Scott Lahteine 5d8036e554 Code cleanup around MOTOR_CURRENT_PWM options 2016-03-25 04:23:46 -07:00
esenapaj bec112de87 Fix distribution date 2016-03-25 18:56:16 +09:00
Scott Lahteine 122bdd187f Merge branch 'RCBugFix' into RC 2016-03-25 01:15:38 -07:00
Scott Lahteine f394c0639e Merge pull request #3230 from jbrazio/bugfix/ultra-lcd-warning
Fix a compiler warning in ultralcd.cpp
2016-03-25 01:14:54 -07:00
Scott Lahteine 9045ea3adf Merge branch 'RCBugFix' into RC 2016-03-25 01:12:37 -07:00
Scott Lahteine f52f388bda Merge pull request #3239 from thinkyhead/rc_jbrazio_fanerr
Closes #3235. Fix dogm lcd error when FAN_PIN is defined as -1
2016-03-25 01:11:06 -07:00
João Brázio f077c7abbf Fix dogm lcd error when FAN_PIN is defined as -1 2016-03-25 01:09:09 -07:00
Scott Lahteine 6f9442afca Merge branch 'RCBugFix' into RC 2016-03-25 01:01:03 -07:00
Scott Lahteine 080c85a4c9 Merge pull request #3236 from thinkyhead/rc_followup_3231
Further cleanup of comments, partial Doxygen-style
2016-03-25 00:53:10 -07:00
Scott Lahteine 0da744b7b0 Further cleanup of comments, partial Doxygen-style
Following up on #3231
2016-03-25 00:45:56 -07:00
Scott Lahteine 4823791eb0 Merge pull request #3228 from esenapaj/patch-1
Fix spelling
2016-03-25 00:40:51 -07:00
Scott Lahteine af6049c6c2 Merge pull request #3231 from jbrazio/license/add-gpl3-header
Added GPLv3 header to all Marlin files
2016-03-24 22:40:40 -07:00
jbrazio 80f221ed11 Fixed: warning: extra tokens at end of #endif directive 2016-03-24 19:33:25 +00:00
jbrazio 5e5d250832 Added gplv3 header to all Marlin files 2016-03-24 18:01:20 +00:00
esenapaj 89a845659a Fix spelling
PROBABLE ->PROBEABLE
This is follow-up to #3069?
2016-03-25 02:13:37 +09:00
Scott Lahteine e12a481e35 Prettier summaries in README 2016-03-24 07:47:59 -07:00
Scott Lahteine c80e5aca30 New README for 1.1.0-RC4 2016-03-24 06:52:14 -07:00
Scott Lahteine dd4d860ad7 Merge branch 'Release-1.1.0-RC4' into RC 2016-03-24 05:33:32 -07:00
Scott Lahteine a6e39c1005 Release 1.1.0-RC4 2016-03-24 05:32:33 -07:00
Scott Lahteine 42ec1f39e7 Merge pull request #3207 from jbrazio/bugfix/toshiba-sdhc-flashair
Toshiba Flash Air Wifi SD card support
2016-03-24 05:28:48 -07:00
Scott Lahteine b6ca86b974 Merge pull request #3197 from PheiPheiPhei/RCBugFix
Enabling servo usage on boards with PWM current control
2016-03-24 05:27:57 -07:00
Scott Lahteine 515c8d4fe9 Merge pull request #3226 from yarda/fix-use-arduino-protocol-for-programming
Use arduino programming protocol by default for sanguino
2016-03-24 05:26:02 -07:00
Scott Lahteine a6805ddf30 Merge pull request #3225 from yarda/fix-melzi-makr3d
Fix MELZI_MAKR3D to use correct motherboard
2016-03-24 05:24:57 -07:00
Scott Lahteine d62ba3d87e Merge pull request #3222 from thinkyhead/rc_persist_endstop_enabling
M120/M121 also set endstops non-homing state
2016-03-24 04:41:42 -07:00
Scott Lahteine af32a7d5d6 M120/M121 also set endstops non-homing state 2016-03-24 03:24:23 -07:00
Scott Lahteine 02f466e633 Merge pull request #3202 from thinkyhead/rc_menu_item_M303_redo
Add Menu Items to initiate M303
2016-03-24 02:41:16 -07:00
Scott Lahteine 04fa9d4f47 Make Autotune options into Menu Edit Items 2016-03-24 02:00:08 -07:00
WPBack e3f583a3be Fixes for PID AutoTune from menu
Fixes for #3189

Setting a temp is still missing
2016-03-24 01:47:30 -07:00
WPBack 3b3e8a02b5 Initial implementation of PID Autotune Menu Items
Adds the parameter U to M303. If U1 is included , it will use the
PID-values from the auto-tune.
2016-03-24 01:46:37 -07:00
Scott Lahteine da9d4c4caf Merge pull request #3206 from esenapaj/patch-5
Follow-up the PR #3082, etc
2016-03-24 00:20:25 -07:00
Scott Lahteine c5857f96c8 Merge pull request #3182 from thinkyhead/rcbugfix_printrboard_revf
Add support for Printrboard RevF
2016-03-24 00:12:06 -07:00
Scott Lahteine f774420488 Merge pull request #3196 from thinkyhead/rc_controllerfan_bug
Make DISABLE_INACTIVE_X, etc., true if missing
2016-03-24 00:11:46 -07:00
Scott Lahteine 7d55d86081 Merge pull request #3219 from AnHardt/RH-pos-update
Send position updates to RH
2016-03-23 23:20:24 -07:00
Scott Lahteine 7ea4e095ad Merge pull request #3220 from thinkyhead/rc_tori_spelling
Patch minor spelling error in cn, en, gl language file headings
2016-03-23 22:43:11 -07:00
Scott Lahteine bcbac698f2 Patch minor spelling issue in cn, en, gl language file headings 2016-03-23 22:30:07 -07:00
Scott Lahteine 49ed4696ea Merge pull request #3218 from AnHardt/lost-pin-undef
Fix lost undef Y_MAX_PIN in pins.h
2016-03-23 21:37:51 -07:00
Scott Lahteine 7112f2e41a Merge pull request #3204 from esenapaj/patch-3
Change link to the document
2016-03-23 20:56:52 -07:00
Scott Lahteine 041fc639d7 Merge pull request #3215 from AnHardt/fix-kickstart
Fix Fan KICKSTART
2016-03-23 20:54:58 -07:00
AnHardt 1c6a16d5bb Send position updates to RH
Send position updates to RH where RH can not know the end position.

For example after G28 RepetierHost assumes to be at the homing-point,
but with a servo probe we are much higher. Now the RH-software-endstops
will prevent us from going down (if activated). With this patch the
internal position of RH is updated with `current_position[]`.
2016-03-23 13:30:50 +01:00
AnHardt 1b336971ae Fix lost undef Y_MAX_PIN in pins.h 2016-03-23 12:48:06 +01:00
AnHardt ba4eebad2f Fix Fan KICKSTART
Sorting ot what else belongs to what if was not so hard.
But the static `ms = ms = millis();` was a bit surpising.
2016-03-23 12:08:02 +01:00
Scott Lahteine cbce025248 Merge pull request #3217 from thinkyhead/rc_updated_kana
Patch-up to commits for Kana #3203.
Closes #3203.
2016-03-23 02:46:26 -07:00
esenapaj 665338bb69 Update Japanese translation 2016-03-23 02:43:53 -07:00
Scott Lahteine 97ed8abd3f Merge pull request #3213 from AnHardt/extend-gitignore
Extend .gitignore
2016-03-23 00:34:30 -07:00
Scott Lahteine b705ae0cb0 Merge pull request #3210 from thinkyhead/rc_cleanup_travis_ci
Improve Travis CI test
2016-03-23 00:32:45 -07:00
Scott Lahteine 1cd1ccbf86 Enable/disable multiple options on a single line. 2016-03-22 22:33:00 -07:00
Scott Lahteine ff272c7b69 Improve Travis CI test
- Add shell scripts to help with managing configs
- Clean up .travis.yml file by using shell scripts
- Don’t download “astyle” – not needed and delays Travis results
2016-03-22 22:23:07 -07:00
AnHardt 0c8e747f88 extend .gitignore 2016-03-22 17:05:45 +01:00
Scott Lahteine 815943ceed Merge pull request #3209 from AnHardt/call-buzz-direct
Call buzz() directly from M428
2016-03-22 08:04:30 -07:00
AnHardt 6486e8b74a Call buzz() directly from M428 2016-03-22 15:05:04 +01:00
jbrazio 757661b299 Toshiba Flash Air Wifi SD card support 2016-03-22 11:42:11 +00:00
esenapaj fc75e6f92d Follow-up the PR #3082, etc
Follow-up the PR #3082
Follow-up the commit 143ad74: unnoticed updates
Fix for commit b0f5ba0: Z offset: -front [of the nozzle] +behind -> Y offset: -front [of the nozzle] +behind
Standardize the writing method: Z-probe, z-probe -> Z Probe
Adjust spacing
2016-03-22 20:22:01 +09:00
esenapaj 22299c13c1 Change link to the document
documentation/LCDLanguageFont.md moved to http://www.marlinfirmware.org/ at commit 12d0983757,
but http://www.marlinfirmware.org/ isn't working.
2016-03-22 19:58:41 +09:00
PheiPheiPhei adb5375a09 Enabling servo usage on boards with PWM current control
Enabling servo usage on boards with PWM current control
timer5 is used by some boards like the Mini Rambo for controlling motor current via PWM, see stepper.cpp.
```cpp
  #ifdef MOTOR_CURRENT_PWM_XY_PIN
    pinMode(MOTOR_CURRENT_PWM_XY_PIN, OUTPUT);
    pinMode(MOTOR_CURRENT_PWM_Z_PIN, OUTPUT);
    pinMode(MOTOR_CURRENT_PWM_E_PIN, OUTPUT);
    digipot_current(0, motor_current_setting[0]);
    digipot_current(1, motor_current_setting[1]);
    digipot_current(2, motor_current_setting[2]);
    //Set timer5 to 31khz so the PWM of the motor power is as constant as possible. (removes a buzzing noise)
    TCCR5B = (TCCR5B & ~(_BV(CS50) | _BV(CS51) | _BV(CS52))) | _BV(CS50);
  #endif
}
```
Using the same timer for controlling servos results in loss of motor control. So use timer4/3 for those boards instead.
[See discussion here.](http://shop.prusa3d.com/forum/software-f13/enabling-auto-leveling-in-firmware-t416-s40.html)
2016-03-22 00:56:31 +01:00
Scott Lahteine cadded1e21 Merge pull request #3201 from jbrazio/feature/update-hephestos2-default-config
Update the Hephestos 2 default config
2016-03-21 14:35:00 -07:00
jbrazio 04e57e2b5e Update the Hephestos 2 default config 2016-03-21 18:20:29 +00:00
Scott Lahteine 40c7e5d4e7 Merge pull request #3199 from esenapaj/patch-2
fix spelling
2016-03-21 05:49:59 -07:00
esenapaj f260e00a72 fix spelling
Thermister -> Thermistor
2016-03-21 20:57:03 +09:00
Scott Lahteine b1a3a95ad4 Tweak controllerFan to save a cycle or two 2016-03-20 22:11:09 -07:00
Scott Lahteine 04a6924633 Make DISABLE_INACTIVE_X, etc., the same as DISABLE_X (etc.) if missing 2016-03-20 22:10:52 -07:00
Scott Lahteine 15fccd43ee Fix spacing of an #endif 2016-03-20 20:32:55 -07:00
Scott Lahteine be08eb6153 Merge pull request #3194 from jbrazio/feature/add-pt_pt-utf8
Add pt_pt-utf8 language pack and fix some minor compiler warnings
2016-03-20 17:42:45 -07:00
Scott Lahteine d1ff7959b7 Merge pull request #3188 from esenapaj/patch-1
follow-up the commit b82d91e
2016-03-20 17:39:52 -07:00
Scott Lahteine 10caee2b7c Merge pull request #3187 from AnHardt/target_extruder_number
Fix extrudernum in MSG_INVALID_EXTRUDER
2016-03-20 17:15:22 -07:00
Scott Lahteine 1cc316f1fd Merge pull request #3082 from thinkyhead/updated_2820
This is quite comprehensive. If probes are disabled in any case when they shouldn't be, I'm sure we will hear about it soon.
2016-03-20 17:10:38 -07:00
Scott Lahteine 7bf5d117e7 Merge pull request #3069 from thinkyhead/rc_delta_compat_m48
Delta-compatible extensions to M48
2016-03-20 17:09:18 -07:00
Scott Lahteine db8ab50c66 Merge pull request #3192 from tnw513/fix_lang
Added missing translations.
2016-03-20 17:07:00 -07:00
Scott Lahteine 06332f20be Merge pull request #3113 from jbrazio/bugfix/3061-stop-print-time-counter
Stop print timer with M105/M109
2016-03-20 17:05:07 -07:00
Scott Lahteine ac4e461901 Merge pull request #3186 from AnHardt/Fix-KEEPALIVE_STATE
Fix KEEPALIVE_STATE
2016-03-20 16:29:19 -07:00
jbrazio 92a7d4515a Missing coma comment correction for the default cofig file 2016-03-20 23:23:11 +00:00
jbrazio 1aa531a3db Missing coma comment correction for all config files 2016-03-20 23:21:45 +00:00
jbrazio 68dda08fff Added pt_pt-utf8 language pack; Fixed some minor compiler warnings; Harmonize file suffix for the current existing UTF8 language packs; Updated all configuration files to reflect the new language packs 2016-03-20 23:14:24 +00:00
Silvio Didonna f8c10d6b0e Added missing translations. 2016-03-20 22:34:00 +01:00
esenapaj 468df96b0f follow-up the commit b82d91e
follow-up the commit b82d91eca6
2016-03-20 20:57:14 +09:00
AnHardt 338b69c24b Fix extrudernum in MSG_INVALID_EXTRUDER
SERIAL_ECHO is not very good in printing uint8_t - so cast. to int.
2016-03-20 11:39:06 +01:00
AnHardt b39b54031b Fix KEEPALIVE_STATE
Add return to NOT_BUSY for M105
Replace WAIT_FOR_USER with PAUSED_FOR_USER

Add Travis test for FILAMENTCHANGEENABLE
2016-03-20 10:41:56 +01:00
Scott Lahteine 32f75749e4 Merge pull request #3117 from Blue-Marlin/thermal-protection
Improve the descriptions for THERMAL_PROTECTION
2016-03-19 23:41:05 -07:00
Scott Lahteine 7aafee3003 Merge pull request #3185 from esenapaj/patch-1
follow-up the PR #3180, #3183
2016-03-19 23:36:55 -07:00
esenapaj 37eaa1406b follow-up the PR #3180 2016-03-20 15:33:02 +09:00
esenapaj 198d5d56fd follow-up the PR #3183 2016-03-20 13:58:05 +09:00
Scott Lahteine 4119cef32f Merge pull request #3180 from clexpert/RCBugFix
Czech language specific changes
2016-03-19 20:18:05 -07:00
Scott Lahteine da94bcfebb Merge pull request #3184 from thinkyhead/fix_command_injection
Patch drain_queued_commands_P
2016-03-19 20:12:16 -07:00
Scott Lahteine 41145e6e81 Patch drain_queued_commands_P
Fix a SNAFU that should have been caught in #3012
2016-03-19 20:10:41 -07:00
Scott Lahteine 3ce0c5063f Merge pull request #3183 from thinkyhead/rc_lcm1602_support
Also closes #3181.
2016-03-19 19:28:50 -07:00
CoderSquirrel eda95d8bed Add support for LCM1602 16x2 I2C LCD adapter 2016-03-19 19:26:44 -07:00
Scott Lahteine 59483221d5 Move stepper DAC to a separate file 2016-03-19 19:24:26 -07:00
Scott Lahteine 5d0570cea0 Make digitalPotWrite depend on HAS_DIGIPOTSS 2016-03-19 19:24:26 -07:00
Scott Lahteine f96bc03081 Add M907-M910 g-codes support for Printrbot Rev. F 2016-03-19 19:24:26 -07:00
Scott Lahteine 8d9cf72db0 Merge pull request #3177 from thinkyhead/rc_finish_M665
Include M665 "ABC" parameters in EEPROM
2016-03-19 18:08:33 -07:00
Stephanie 6843b78f99 Add support for Printrboard RevF
The PrintrBoard Rev F utilizes a mcp4728 DAC to set motor current. Printrbot's implementation utilizes 2 new M-codes to set and write the DAC settings to the DAC EEPROM: `M909` (Read DAC) and `M910` (Write DAC). `M907` is re-used to set value, `M908` for direct control.

The Pins file for the RevF board is included.
2016-03-19 16:43:37 -07:00
Petr Zahradnik 98392782ea Update Configuration.h 2016-03-19 20:45:13 +01:00
Petr Zahradnik daa52124b0 Update language_cz.h 2016-03-19 20:43:28 +01:00
Blue-Marlin 3166aed087 Improve the descriptions for THERMAL_PROTECTION 2016-03-19 14:08:59 +01:00
Scott Lahteine a02ae36ae8 Include M65 "ABC" parameters in EEPROM
Addressing #2773
2016-03-19 05:52:20 -07:00
Scott Lahteine 7f2375ab46 Merge pull request #3176 from thinkyhead/rc_patch_3149_part_ii
Use const parameters in lcd_implementation_drawedit (etc.)
2016-03-19 05:18:25 -07:00
Scott Lahteine cf7c444aff Apply unknown_position_error elsewhere 2016-03-19 05:13:40 -07:00
Scott Lahteine eda5190581 Check for known position in M48 2016-03-19 05:13:40 -07:00
Scott Lahteine 68085ca855 Updated M48 friendly for DELTA
Partial implementation with reference to MarlinFirmware/Marlin#3011
2016-03-19 05:13:40 -07:00
Scott Lahteine 6a3529247f "Homing" as a translatable string 2016-03-19 04:41:03 -07:00
Scott Lahteine c97c2dcaf7 Use const parameters instead of static casting
Alternative fix to #3149
2016-03-19 03:36:53 -07:00
Scott Lahteine 09ef955191 Merge pull request #3086 from thinkyhead/rc_two_fans
Support for multiple PWM fans
2016-03-19 03:19:18 -07:00
Scott Lahteine 38b0082bf2 Additional tweaks to M42 exit conditions 2016-03-19 03:10:18 -07:00
Scott Lahteine 4bbea5124d Support for multiple PWM fans 2016-03-19 03:10:18 -07:00
Scott Lahteine 637cc03686 Fix M109 so it won't wait for cooling
Addressing issue #2767
2016-03-19 03:00:58 -07:00
AnHardt 3f45a1acf9 Check probes only when deployed
Aim: Test probes in update_endstops only when activated

Changes:
Configurations
 Add define for FIX_MOUNTED_PROBE to handle the situation where formerly ENDSTOPS_ONLY_FOR_HOMING had to be set, or lowering the nozzle below Z_PROBE_OFFSET_FROM_EXTRUDER could give an "endstop hit" message.
 Add define for Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN to indicate a common situation, that we have a probe but it is connected to an endstop pin
 Add some comments
 Shift some entries to have related things together.

Conditionals.h
 We have a probe (HAS_Z_MIN_PROBE) if one of the pins is defined AND one of the probes is defined.

SanityCheck.h
 Add some tests if the probe is connected and if we have defined a probe.

stepper.cpp
 Changes to test the probe only when it is deployed (z_probe_is_active).
 Test update_endstops() when the probe is deployed.

MarlinMain.cpp
 a. set and reset z_probe_is_active in deploy_z_probe(), stow_z_probe() and dock_sled()
 b. set and reset z_probe_is_active in the case a z-servo is moved to a defined position. The only remaining unhandled servo move is in M280 where we do not end in a defined position. If you want to handle a probe use M401/402
 c. skip deploying/stowing when already deployed/stowed in the dedicated deploy/stow functions.
 d. Handle the new FIX_MOUNTED_PROBE in parallel to a servo driven probe/endstop.

 To do: In another PR. handle all probes in deploy/stow_z_probe.
 Sort out SERVO_LEVELING vs. HAS_SERVO_ENDSTOPS.
2016-03-19 02:00:08 -07:00
Scott Lahteine 4634feaeab Merge pull request #3012 from thinkyhead/fix_command_injection
Use a serial line buffer to prevent queue corruption
2016-03-19 01:43:54 -07:00
Scott Lahteine 9bf87aac6a Merge pull request #3127 from thinkyhead/rc_core_babystepping
Implement BABYSTEPPING for COREXY and COREXZ
2016-03-18 23:25:26 -07:00
Scott Lahteine 4ae03df5c2 Merge pull request #3109 from thinkyhead/rc_host_keepalive
Provide feedback to hosts when busy
2016-03-18 23:22:29 -07:00
Scott Lahteine 963a92ceda Patch idle forevermore 2016-03-18 22:38:35 -07:00
Scott Lahteine 7ec7bb31c4 Send a Busy signal to hosts during long processes, wait for input, etc
If Marlin is blocking the serial input or command queue for any length
of time (for example more than 2 seconds), it needs to send a message
to serial out to inform the host that it is busy. Marlin should only
send these messages out when busy, and preferably not when trying to
print formatted output.
2016-03-18 22:38:35 -07:00
Scott Lahteine 861391d530 Merge pull request #3175 from esenapaj/patch-2
follow-up the PR #3114
2016-03-18 22:10:50 -07:00
esenapaj 8d580ea7e8 follow-up the PR #3114
follow-up the commit d56c6af24e
2016-03-19 13:17:34 +09:00
Scott Lahteine d9e1f22682 BABYSTEPPING requires ULTRA_LCD 2016-03-18 18:22:53 -07:00
Scott Lahteine e5fd43f343 Implement BABYSTEPPING for COREXY and COREXZ 2016-03-18 18:22:53 -07:00
Scott Lahteine 80277cc9c8 drain_queued_commands_P now returns true if there are more 2016-03-18 17:56:48 -07:00
Scott Lahteine 8fe7420310 Use a separate serial line buffer 2016-03-18 16:46:20 -07:00
Scott Lahteine 7d25c107a8 Merge pull request #3149 from esenapaj/patch-1
suppress warnings
2016-03-18 15:40:14 -07:00
Scott Lahteine d56c6af24e Merge pull request #3114 from thinkyhead/rc_reverse_lcd_menu
Option to reverse the click-wheel direction in menus
2016-03-18 15:39:29 -07:00
Scott Lahteine cc291aeb3c Move definition of "blink" to main ultralcd file 2016-03-17 18:19:05 -07:00
Scott Lahteine e7e1866589 Merge pull request #3161 from Alex9779/fix_InitialExtruderDirection
Fix initial extruder direction for second/third/fourth extruder if they run inverted to the first
2016-03-16 12:58:10 -07:00
Scott Lahteine 57e82cacc9 Merge pull request #3156 from esenapaj/patch-3
Fix CardReader::lsDive()
2016-03-16 12:48:22 -07:00
Alexander Leisentritt 4338813814 save last extruder and set stepper directions too in case the extruder changed
fixes MarlinFirmware/Marlin#3144 and MarlinFirmware/Marlin#3083
2016-03-16 20:20:34 +01:00
Scott Lahteine 8f24475e02 Simplify limiting encoderLine in END_MENU 2016-03-16 04:05:41 -07:00
Scott Lahteine fbef2f5b61 Implement reverse menu direction in ultralcd.cpp 2016-03-16 04:03:49 -07:00
Scott Lahteine b8b51d8da8 Add the REVERSE_MENU_DIRECTION option 2016-03-16 04:02:40 -07:00
Scott Lahteine 999a76dbdf Merge pull request #3157 from esenapaj/patch-4
Use variable in lcd_erase_line()
2016-03-16 02:46:42 -07:00
Scott Lahteine e8fa843c2d Merge pull request #3164 from epatel/epatel/RCBugFix
Fix for #3160 MESH_BED_LEVELING broke correct G1 movement in Z
2016-03-16 02:40:54 -07:00
Scott Lahteine fc04b587cf Merge pull request #3147 from thinkyhead/rc_stringify_macro
Promote STRINGIFY to macros.h
2016-03-15 17:37:03 -07:00
Scott Lahteine d7c6fd5c2f Merge pull request #3146 from thinkyhead/rc_enabled_true_false
Support "true" and "false" in the ENABLED macro
2016-03-15 17:35:55 -07:00
Edward Patel cb0dbfa3b5 Fix for #3160 MESH_BED_LEVELING broke correct G1 movement in Z 2016-03-16 01:26:00 +01:00
esenapaj a15c5d222a Use variable in lcd_erase_line()
lcd_erase_line() is called with argument, but the argument is ignored by lcd_erase_line().
2016-03-16 02:59:06 +09:00
esenapaj 609c0d46d9 Fix CardReader::lsDive()
If comparison between signed char(-128 ~ +127) and DIR_NAME_DELETED(uint8_t const 0XE5, it's +229),
it makes incorrect result.
2016-03-16 02:47:58 +09:00
Roxy-3DPrintBoard 3ba9b06b79 Update README.md 2016-03-15 09:12:06 -05:00
Roxy-3DPrintBoard 5286e73f29 Update README.md 2016-03-15 09:10:57 -05:00
Scott Lahteine 2ef49a9d53 Wrap DEFAULT_Ki, DEFAULT_Kd, PID_dT
Addition to #3140
2016-03-15 03:49:44 -07:00
Scott Lahteine eb8cf29464 Merge pull request #3151 from hydrocat/RCBugFix
Uptades the pt-br translation
2016-03-15 02:46:46 -07:00
Scott Lahteine 91cdea4022 Merge pull request #3153 from thinkyhead/rc_fix_macro_expansion
Additional macro wrapping, patches for #3140
2016-03-15 01:37:28 -07:00
Scott Lahteine 6e1bc03d3b Additional wrapping for #3140 2016-03-15 01:18:58 -07:00
Scott Lahteine cc9968f893 Patch spacing in #3140 2016-03-15 01:18:58 -07:00
Scott Lahteine 1c384930f3 Merge pull request #3140 from thinkyhead/rc_fix_macro_expansion
Wrap macros to prevent bad expansions
2016-03-15 00:25:34 -07:00
Scott Lahteine ff30a18d9c Merge pull request #3150 from esenapaj/patch-2
Use local variable in recalc_delta_settings()
2016-03-14 18:55:57 -07:00
VITORIO MIGUEL PRIETO CILIA de2cca73ac Uptades the pt-br translation 2016-03-14 21:16:57 -03:00
esenapaj a4314c4907 Use local variable in recalc_delta_settings()
diagonal_rod hadn't been used anywhere.
2016-03-15 06:47:27 +09:00
esenapaj 8de7a6f9b1 suppress warnings 2016-03-15 06:34:02 +09:00
Scott Lahteine 21be07a6f6 Merge pull request #3126 from Blue-Marlin/stackoverflow-with-e
Extend stack_overflow_protection for lcd_move_e and _lcd_level_bed
2016-03-14 00:04:13 -07:00
Scott Lahteine 9418b4f2f3 Promote STRINGIFY to macros.h 2016-03-13 23:15:17 -07:00
Scott Lahteine 4b648793f2 Use ENABLED with DISABLE_[INACTIVE_][XYZ] 2016-03-13 22:15:45 -07:00
Scott Lahteine 73a59a4e45 Allow ENABLED(b) to work with "true" and "false" 2016-03-13 22:15:01 -07:00
Blue-Marlin c73f1b2471 Extend stack_overflow_protection for lcd_move_e and _lcd_level_bed
Extend stack_overflow_protection for lcd_move_e() and _lcd_level_bed() with
a refined method of 3050.
2016-03-13 13:59:44 +01:00
Scott Lahteine f4a3efd35e Merge pull request #3116 from thinkyhead/rc_fix_value_edit_bug
Fix value edit click bug
2016-03-13 04:08:43 -07:00
Scott Lahteine 3f5fbbd398 Merge pull request #3124 from jbrazio/bugfix/update-g29-auto-level-bed-topography
Update the bed topography output done by G29
2016-03-13 03:51:43 -07:00
Scott Lahteine c16c47954c Merge pull request #3141 from esenapaj2/RCBugFix
follow-up the PR #3131
2016-03-13 03:37:39 -07:00
Scott Lahteine 30c3a21d1f Merge pull request #3112 from thinkyhead/rc_support_MAX31855 2016-03-13 03:30:48 -07:00
Scott Lahteine 81d759efb6 Merge pull request #3138 from jbrazio/bugfix/m109-r-could-wait-forever 2016-03-13 03:26:34 -07:00
Scott Lahteine 2179f598bf Merge pull request #3122 from thinkyhead/rc_group_filament_change 2016-03-13 03:25:38 -07:00
Scott Lahteine 62a9b9902d Merge pull request #3133 from thinkyhead/rc_machine_uuid_in_m115 2016-03-13 03:23:54 -07:00
Scott Lahteine f928894c38 Merge pull request #3132 from thinkyhead/rc_heating_failed_err 2016-03-13 03:23:14 -07:00
esenapaj2 236a44c83b follow-up the PR #3131
follow-up the commit 7326d63ce0
update Configration_adv.h of Hephestos2
delete unnecessary spaces
2016-03-13 19:12:39 +09:00
Scott Lahteine 7326d63ce0 Merge pull request #3131 from thinkyhead/pwm_motor_current_config
PWM_MOTOR_CURRENT Flag
2016-03-13 00:03:03 -08:00
Scott Lahteine f9ded2a7c4 Wrap macros to prevent bad expansions 2016-03-12 22:38:55 -08:00
jbrazio a645860431 All print timer related activity now uses print_job_start(), print_job_timer() or print_job_stop() 2016-03-12 07:16:39 +00:00
jbrazio 1981e53d68 M109 R option if misused could cause a wait-forever situation 2016-03-12 06:24:24 +00:00
Scott Lahteine 7976e29399 Use MACHINE_UUID in M115
Addressing #2879. The M115 report should display `MACHINE_UUID` but it
always displays `UUID`.
2016-03-11 05:34:48 -08:00
Scott Lahteine 81aab828e2 Fix a "Heating failed" error
Addressing #3085. If the target_temperature is set directly it never invokes or disables the timer set in `start_watching_heater`, so after _stopping a print_ or turning off _all heaters_ you could get a “Heating failed” error.
2016-03-11 05:07:48 -08:00
Scott Lahteine 0c48eaf3de Expose motor current in more configs, disable by default 2016-03-11 02:25:36 -08:00
Elijah Snyder e8b10d2836 Adding PWM_MOTOR_CURRENT flag to help expose PWM_MOTOR_CURRENTS in Configuration_adv.h similar to DIGIPOT_MOTOR_CURRENT 2016-03-11 02:25:36 -08:00
Scott Lahteine 7bb7ac8353 Merge pull request #3123 from thinkyhead/rc_move_stepper_macros
Move step macros to stepper_indirection.h
2016-03-10 18:31:01 -08:00
Scott Lahteine cd2ef25032 Merge pull request #3119 from AnHardt/extend-Travis-for-SDSUPPORT 2016-03-10 05:38:35 -08:00
João Brázio 4d4a842cfb Update the bed topography output done by G29 2016-03-10 13:24:17 +00:00
Scott Lahteine 89838cdb10 Move step macros to stepper_indirection.h 2016-03-10 04:34:55 -08:00
Scott Lahteine 70a41a8532 Merge pull request #3121 from thinkyhead/rc_stepper_cleanup
Reduce code in stepper.cpp with some macros
2016-03-10 03:55:37 -08:00
João Brázio 793cd0ae3b Clean up the code a bit 2016-03-10 11:52:43 +00:00
Scott Lahteine 27f244ba2c Support MAX31855 as Temperature Sensor -3 2016-03-10 02:49:54 -08:00
Scott Lahteine ce639b8b03 Group FILAMENT_SENSOR options together 2016-03-10 02:41:37 -08:00
Scott Lahteine 3fd31976c3 Reduce code in stepper.cpp with macros 2016-03-10 01:42:58 -08:00
Scott Lahteine b45a0c4c60 Fix bugs in edit submenus so they return to origin
Expected behavior: After editing a value the menu should return to the
previous place with the edited item selected.
Actual behavior: Either the top (back) item from the previous screen is
selected, or the menu jumps up another level.
Solution: Pass the correct arguments to `lcd_goto_menu` on click when
editing a value.
2016-03-09 21:06:56 -08:00
AnHardt 25d1c94fa8 Add SDSUPPORT test to TRAVIS 2016-03-10 03:06:00 +01:00
Scott Lahteine bedd4dab6a Merge pull request #3107 from AnHardt/z_raise_before_homing
Z_RAISE_BEFORE_HOMING -> MIN_Z_HEIGHT_FOR_HOMING
2016-03-08 19:21:43 -08:00
jbrazio 986b508ff7 Print timer now stops when it sees the last extruder temperature being shutdown 2016-03-08 18:11:02 +00:00
AnHardt fd5414c6ea Z_RAISE_BEFORE_HOMING -> MIN_Z_HEIGHT_FOR_HOMING
rebased
corrected spelling
changed to #elif for error

Still with MIN_Z_HEIGHT_FOR_HOMING but con be done with (folder wide) search-replace when we have a better name.
2016-03-08 17:50:23 +01:00
Scott Lahteine b7928a000a Merge pull request #3108 from AnHardt/M110+
M110 and M29 rework
2016-03-08 03:54:07 -08:00
Scott Lahteine 5cba0b4187 Merge pull request #3111 from thinkyhead/rc_drop_old_condition
Drop obsolete test for leading "N"
2016-03-08 03:07:25 -08:00
Scott Lahteine 302d1bfbc4 Drop obsolete test for leading "N" 2016-03-08 02:25:11 -08:00
Scott Lahteine 04b147645d Merge pull request #3105 from esenapaj2/esenapaj2-patch-1
update example configurations
2016-03-08 00:43:48 -08:00
AnHardt 37b857e8ec M110 ang M29 rework
Add 'ok' output for G29 actually closing the file.
Handle M110 when received without linenumber/checksumm.
2016-03-07 22:27:01 +01:00
esenapaj2 29e09c7c3e update example configurations
update old comments
update or delete deprecated definitions
complement forgotten updates
adjust spacing
some cosmetic changes
2016-03-07 22:03:33 +09:00
Scott Lahteine fac85f6fa1 Merge pull request #3102 from jbrazio/bugfix-g28-multiple-z-movements
Bugfix: G28 was lifting Z-axis multiple times
2016-03-07 03:52:00 -08:00
jbrazio 642e3699ce Z-axis was being lift multiple times if Z_SAFE_HOMING was enabled and Z_RAISE_BEFORE_HOMING was greater than zero 2016-03-07 03:49:11 +00:00
Scott Lahteine 501f63802a Merge pull request #3077 from Blue-Marlin/watchdogreset-in-kill
Add Watchdog timer reset in kill()
2016-03-06 16:21:39 -08:00
Scott Lahteine c23db208d9 Merge pull request #3101 from thinkyhead/rc_fix_stepper_func
Update name of st_get_axis_position_mm in stepper.h
2016-03-06 15:52:57 -08:00
Scott Lahteine 1002eb67c8 Update name of st_get_axis_position_mm in stepper.h 2016-03-06 15:46:39 -08:00
Jaroslav Škarvada 2cbcba1808 Use arduino programming protocol by default for sanguino
Signed-off-by: Jaroslav Škarvada <jskarvad@redhat.com>
2016-03-06 20:26:09 +01:00
Jaroslav Škarvada 7dde761aa6 Fix MELZI_MAKR3D to use correct motherboard
Signed-off-by: Jaroslav Škarvada <jskarvad@redhat.com>
2016-03-06 19:33:33 +01:00
Scott Lahteine eafbc5e0cc Add AJ4P pins and fix RAMBO pins 2016-03-06 05:52:01 -08:00
Scott Lahteine cf792fd8d8 Update configurations to use RAMPS 1.4 2016-03-06 05:52:01 -08:00
Scott Lahteine cacf04f8a7 Base RAMPS-like boards on RAMPS 1.4 2016-03-06 05:52:00 -08:00
Scott Lahteine 50e3482e0a Handle RAMPS 1.3 as the special case 2016-03-06 05:52:00 -08:00
Scott Lahteine 679be3294f Rename RAMPS 1.3 pins for RAMPS 1.4 2016-03-06 05:52:00 -08:00
Scott Lahteine f18d3f451a Limit LCD move_to_x/y coordinates for deltas
Related to MarlinFirmware/MarlinDev#270
2016-03-06 05:52:00 -08:00
Scott Lahteine 988332c67a Cosmetic tweaks from dev 2016-03-06 05:52:00 -08:00
Scott Lahteine 2690d8568e DOGLCD width/height in Conditionals.h 2016-03-06 05:51:59 -08:00
Scott Lahteine 614febaaf3 Fix acceleration limits
See: https://github.com/Ultimaker/Marlin/pull/7
2016-03-06 05:51:59 -08:00
Scott Lahteine 13ef12ad3f Fix power calculations
As suggested by @max-pau in #3073 - #3074
2016-03-06 05:51:59 -08:00
Scott Lahteine e2b022cce2 Include #3053 2016-03-06 05:51:59 -08:00
Scott Lahteine 5cba0210f2 Small patch to Z_SAFE_HOMING comment 2016-03-06 05:51:58 -08:00
Scott Lahteine 6165fd41a5 Fix Hephestos 2 and other configs 2016-03-06 05:51:58 -08:00
Scott Lahteine 71718d888a Fix typos in check_axes_activity 2016-03-06 05:51:58 -08:00
Lukas Abfalterer 83795d3e63 deleted double used comments 2016-03-06 05:51:58 -08:00
jbrazio 143ad74db7 Update PROBE_OFFSET_FROM_EXTRUDER comment section in all example config
files.
2016-03-06 05:51:58 -08:00
jbrazio b0f5ba0232 Update the PROBE_OFFSET_FROM_EXTRUDE comment section
This changes have being discussed at MarlinFirmware/Marlin#2849.
2016-03-06 05:51:57 -08:00
jbrazio 02b131b552 Replaced stock BQ PID values with fine tuned ones generated using M303 2016-03-06 05:51:57 -08:00
jbrazio 45dc8a51f3 Added readme file for bqh2 and disabled the SLOWDOWN config flag 2016-03-06 05:51:57 -08:00
Scott Lahteine 6a21180bd4 Implemented BQ ZUM Mega 3D board layout as an override to RAMPS 1.3 2016-03-06 05:51:57 -08:00
jbrazio b18816fcbf Fine tuned XYJERK.
Disallowed the Z_PROBE_OFFSET_RANGE_MAX to be greater than zero.
2016-03-06 05:51:57 -08:00
jbrazio be83036212 Applying suggestions by @thinkyhead at MarlinFirmware/Marlin#3049.
- Remove the forced activation of SDSUPPORT, I guess people may use the ZUM
3D board and not the LCD module.
 - Fixed the tab issue within boards.h file.
2016-03-06 05:51:56 -08:00
jbrazio b82d91eca6 Added configuration example for the BQ Hephestos 2 3D printer.
Added support for BQ ZUM Mega 3D board and stock Hephestos 2 thermistor.
2016-03-06 05:51:56 -08:00
Scott Lahteine 45bcc43e48 Don't override SOURCE_CODE_URL in Default_Version.h
- Defining `SOURCE_CODE_URL` in `Default_Version.h` overrides it
elsewhere. So don’t define it there.
- Also fix up `language.h` so no `#undef` will be needed.
2016-03-06 05:51:56 -08:00
Scott Lahteine ef68c1910c Check that the temperature is close to target 2016-03-06 05:51:56 -08:00
Scott Lahteine ea9fd1200b Fix M109 so it won't wait for cooling
Addressing issue #2767
2016-03-06 05:51:56 -08:00
Scott Lahteine e4945b30d2 sbi and cbi are deprecated 2016-03-06 05:51:55 -08:00
Scott Lahteine ff13070b59 Use _BV macros, patch up others 2016-03-06 05:51:55 -08:00
Scott Lahteine 209f5f21e0 Use macros where possible
Apply `constrain`, `NOMORE`, `NOLESS` and `CRITICAL_SECTION` macros
wherever possible.
2016-03-06 05:51:55 -08:00
Scott Lahteine c8f76bb8aa Create BITSET/BITCLR macros 2016-03-06 05:51:55 -08:00
Scott Lahteine adc25db8c4 Merge pull request #3005 from thinkyhead/rcbugfix_eeprom
Fix layout descr. in configuration_store.cpp
2016-03-06 00:31:44 -08:00
Scott Lahteine e7cf85b922 Merge pull request #3013 from thinkyhead/esenapaj-patch-1
Enhanced #3010 - formal Mesh/Manual dependency
2016-03-06 00:30:02 -08:00
Scott Lahteine 6e64895c30 Merge pull request #3001 from AlwaysTinkering/RCBugFix
Rc bug fix - Fix for issue #2931
2016-03-06 00:20:29 -08:00
Scott Lahteine 34b8b9f0f5 Merge pull request #2995 from thinkyhead/rcbugfix_corexy_corexz
Add CORE support to st_get_position_mm (and elsewhere)
2016-03-06 00:17:03 -08:00
Scott Lahteine 1e20949afb Merge pull request #3092 from thinkyhead/rc_2860_printrbot_lcd
Fix Printrboard with LCD (redo)
2016-03-06 00:14:29 -08:00
Scott Lahteine f5972c4d2c Merge pull request #2994 from AnHardt/Inerrup-save-serial
Interrupt safe serial --- Guard against non-atomic variable changes from interrupt routines
2016-03-05 22:25:12 -08:00
Scott Lahteine 3a3d358df9 Fix Printrboard with LCD (redo)
Based on #2860 - rebased for RCBugFix
2016-03-05 22:13:00 -08:00
Scott Lahteine eb85342fd9 Merge pull request #2989 from AnHardt/fix2661
Pre home display - Stepper release
2016-03-05 21:30:17 -08:00
Scott Lahteine 14f3ca1b2e Merge pull request #2978 from thinkyhead/tool_offset_abl_rcbugfix
Apply bed leveling matrix when switching extruders
2016-03-05 21:23:25 -08:00
Scott Lahteine 91fcdc2b99 Merge pull request #3090 from thinkyhead/rc_spelling
Various minor spelling corrections
2016-03-05 20:50:34 -08:00
Scott Lahteine 772460a7b8 Various minor spelling corrections
Redo of #2939 rebased against RCBugFix
2016-03-05 20:41:15 -08:00
Scott Lahteine aa0b0483f4 Merge pull request #3089 from thinkyhead/rc_apply_2924
Correct raise_z_for_servo for Z offsets below the nozzle
2016-03-05 20:23:14 -08:00
lrpirlet 0fb507a75d correct raise_z_for_servo 2016-03-05 20:19:53 -08:00
Scott Lahteine 04a0d45c22 Merge pull request #2821 from MarlinFirmware/ReinitializeDisplay
Fix status LEDs update when reinitializing the display
2016-03-05 15:31:49 -08:00
Blue-Marlin b4e5e0f11d Add Watchdog reset in kill()
Add watchdog reset in the kill loop to simplify recovering.
2016-03-04 00:35:18 +01:00
Scott Lahteine 547d35a921 Merge pull request #3067 from Blue-Marlin/ALARM_PIN
Remove unused ALARM_PIN
2016-03-02 20:20:26 -08:00
Scott Lahteine 79778d46d9 Merge pull request #3066 from Blue-Marlin/Fix-disable_all_heaters()
Fix disable_all_heaters() for MAX6675
2016-03-02 17:35:08 -08:00
Blue-Marlin a68228bf55 Remove unused ALARM_PIN
Remove unused ALARM_PIN from all the Configuration.h's
2016-03-02 14:29:49 +01:00
Scott Lahteine 9eb4aceee4 Merge pull request #2986 from thinkyhead/enable_watchdog
Enable USE_WATCHDOG by default
2016-03-02 05:29:42 -08:00
Blue-Marlin 0631541166 Fix disable_all_heaters() for MAX6675 2016-03-02 14:17:23 +01:00
Scott Lahteine 222d13d5ed Merge pull request #3051 from thinkyhead/rcbugfix_dual_axis_offset
Code cleanup in gcode_T
2016-03-02 03:45:40 -08:00
Scott Lahteine 186629aee8 Merge pull request #3057 from jbrazio/3034-z_raise_after_probing_fix
Fix Z_RAISE_AFTER_PROBING for non DELTA printers
2016-03-02 03:14:27 -08:00
Scott Lahteine a42fb35c56 Merge pull request #3050 from Blue-Marlin/fix-1166
Temporary workaround for stack overflow
2016-03-01 11:33:19 -08:00
jbrazio 67e15aac3d As pointed out by @Blue-Marlin the previous code would raise the Z axis
twice for a servo based probe.
2016-03-01 00:22:48 +00:00
jbrazio 17cc2a9663 Z_RAISE_AFTER_PROBING value was being ignored by Marlin because
raise_z_after_probing() was only called if the printer type was set to a
DELTA or if the printer had a docking sled for the probe.
2016-02-29 15:48:26 +00:00
Scott Lahteine 252f4a75cd Merge pull request #3043 from oxivanisher/RCBugFix
Example configuration for Kossel XL
2016-02-28 23:57:13 -08:00
Scott Lahteine fd1243c184 Merge pull request #3052 from thinkyhead/rc_fix_m145_eeprom_output
Fix "M145" output in M503 report
2016-02-28 23:43:08 -08:00
Scott Lahteine 0bc648353f Merge pull request #3031 from tnw513/RCBugFix
Fix board type for Hephestos: RAMPS 1.4
2016-02-28 23:23:01 -08:00
AnHardt f27c2b6b4b Reimplement #2892
Include #2892 to fix the isHeating symbol in the extruder graphics
2016-02-28 23:20:30 +01:00
AnHardt 615bec2329 Activate warning about possible reduced accuracy by default
Renamed `WARN_REDUCED_ACCURACY` to `DISABLE_REDUCED_ACCURACY_WARNING`

Changed the condition for blinking from
```
#if ENABLED(WARN_REDUCED_ACCURACY)
```
to
```
#if DISABLED(DISABLE_REDUCED_ACCURACY_WARNING)
```
2016-02-28 23:20:21 +01:00
AnHardt 1c889cd303 Refresh previous_cmd_ms during run_z_probe()
Refresh previous_cmd_ms during run_z_probe() to prevent:
stepper shutdown for expired DEFAULT_STEPPER_DEACTIVE_TIME
and extrudes for expired EXTRUDER_RUNOUT_SECONDS
(https://github.com/MarlinFirmware/MarlinDev/issues/238)
2016-02-28 23:20:12 +01:00
AnHardt 4b02f33e69 Distribute config-changes to the other configurations 2016-02-28 23:20:04 +01:00
AnHardt be24fdacea The same changes to the axis-letters now for the char-displays
Exactly the same - copy/paste.
2016-02-28 23:19:54 +01:00
AnHardt 5b0f659355 Changes for graphics displays
Replaced displaying "---" instead of the value of a coordinate when
unhomed or with reduced precision
with blinking the coordinate-prefix-character ('X','Y','Z').
For "unhomed" a '?' is shown every second second - until that axis is
homed. The value displayed is, as before the "---" where displayed, the
relative to the reset position coordinate value.
When the axis stepper was disabled, now we can display a hint on that,
by showing a blinking ' ' instead of the axis letter, when
WARN_REDUCED_ACCURACY is defined.

I suppose the code itself is here the better documentation.

A '+/-' character is in non of our charsets so i decided for a '?' for
now to reduce the work.
There is no additional space on the displays one could use to display
the information, so replacing something is the only option. As the axis
letters are totally redundant with their positions on the display they
contain the least information.
So my decision was to overwrite them.
2016-02-28 23:19:32 +01:00
AnHardt 32ae9f9ab7 Fix stepper shutdown during waiting for temperatures
In the wait loops of M109 M190 idle() is called, what checks
stepper_inactive_time against previous_cmd_ms.
Because we can be several minutes inside the loop, resetting
previous_cmd_ms only outside the loop caused stepper shutdowns.

The name of previous_cmd_ms does not really reflect its use. It's set
not only when a new command was received or executed but also in many of
the movement routines. For that the little extension of using it during
the wait will (hopefully) not hurt.

# Conflicts:
#	Marlin/Configuration_adv.h
2016-02-28 16:58:50 +01:00
AnHardt b6e69e71ce Make stepper shutdown after inactivity dependent
Make stepper shutdown after inactivity dependent on a new set of
#defines.
DISABLE_INACTIV_X
DISABLE_INACTIV_Y
DISABLE_INACTIV_Z
DISABLE_INACTIV_E

And make exemplaric Configuration.
Names can be discussed.

This makes the disabling of the steppers independent from the DISABLE_?
settings witch shut down the steppers immediately.
2016-02-28 16:58:42 +01:00
AnHardt 051325ccd7 Introduce axis_homed
Introduce additional variable axis_homed to replace axix_known_position
when the coordinate display should indicate the axis is not homed.
This is to distinguish between "not homed" and "inexact position possible
because stepper was disabled".

# Conflicts:
#	Marlin/ultralcd_implementation_hitachi_HD44780.h
solved
2016-02-28 16:58:28 +01:00
AnHardt e736779d7e blink for char-lcds
Implement and test blinking for char-lcds

# Conflicts:
#	Marlin/ultralcd_implementation_hitachi_HD44780.h
solved
2016-02-28 16:58:19 +01:00
Scott Lahteine 7253a1971d Fix "M145" output in M503 report 2016-02-27 22:28:08 -08:00
Scott Lahteine d118e3f985 Merge pull request #3044 from thinkyhead/rc_gcode_spaces
Fix GCode handling of spaces between command letter and first digit
2016-02-27 22:21:28 -08:00
Scott Lahteine 100271e6ac minor cleanup in gcode_T 2016-02-27 19:56:56 -08:00
Blue-Marlin fd9e94e5a4 Fix crashes when the Z axis is moved via LCD
Fix crashes when the Z axis is moved via LCD
by calling `plan_buffer_line` only when there is enough room in the
planner buffer, to avoid endless recursion.
A brief description about what went wrong is in #1166
2016-02-28 00:59:47 +01:00
Scott Lahteine 8dccd5a7ea Merge pull request #3018 from CONSULitAS/RCBugFix_K8200_backinsync
K8200: sample config back in sync
2016-02-27 05:22:12 -08:00
Scott Lahteine 6a4f06d35d Fix GCode handling of spaces between command letter and first digit 2016-02-26 18:42:59 -08:00
Marc Urben 68eae2b5a8 added kossel xl example configuration 2016-02-27 01:48:45 +01:00
Silvio Didonna eb5817675d Fix board type: RAMPS 1.4 2016-02-25 15:52:41 +01:00
Scott Lahteine 8006684c19 Merge pull request #3027 from CONSULitAS/RCBugFix_current_command
Fix: current_command_args contains command
2016-02-24 17:43:38 -08:00
AnHardt cb88fdd242 Protect MarlinSerial against interrupts
Protect MarlinSerial against interrupts
by shielding the CRITICAL_SECTIONs

Now with a test if RX_BUFFER_SIZE is in the required range.
Code in peek() and read() is now optimized for readability and showing the similarity between the two.

Maybe a bit overprotected in checkRx() and store_char(), but now some days without detected errors from this source.
2016-02-24 17:18:12 +01:00
AnHardt dc0f41868e Make rx tail/head atomic 2016-02-24 15:51:34 +01:00
CONSULitAS ea8409ad5d Fix: current_command_args contains command
@thinkyhead
Hi Scott,
your code from a0f362c@thinkyhead is great, but you forgot to skip the
command.
Symptom `M117 Test`shows `M117 Test` on LCD instead of `Test`.

see also
https://github.com/MarlinFirmware/Marlin/commit/a0f362c735401ebbcd95de3f
6f8e3c2f17ecc770 lines 941, 2851 and so on

Greetings and welcome back

Jochen
2016-02-24 09:35:04 +01:00
Scott Lahteine 9a3408e58f Merge pull request #3024 from thinkyhead/rc_remove_steps_mm_e
Remove obsolete STEPS_MM_E setting
2016-02-23 23:37:09 -08:00
Scott Lahteine 1093c780c8 Remove obsolete STEPS_MM_E setting 2016-02-23 01:11:58 -08:00
CONSULitAS a4fe6a45ae K8200: sample config back in sync
* Configuration.h:
  * updated header comment
  * new UUID feature used
  * sync to default config
  * typos fixed
  * changes better documented
  * reflect change in SDSUPPORT feature
* Configuration_adv.h
  * updated header comment
  * thermal protection tuned to work with K8200
  * homing tuned
  * sync to default config
  * typos fixed
  * changes better documented
  * reflect change in LCD features
  * use long filenames
  * use Watchdog
  * use Babystepping
  * use Auto Filament Change
2016-02-21 16:06:25 +01:00
Scott Lahteine c2e5c6c12c Nest Manual Bed Leveling options
This formalizes the dependency of MANUAL_BED_LEVELING on
MESH_BED_LEVELING
2016-02-20 20:35:10 -08:00
Scott Lahteine 042a6a0a37 Extend existing MESH_BED_LEVELING test 2016-02-20 20:35:10 -08:00
esenapaj 08b3147791 sanity check for MANUAL_BED_LEVELING 2016-02-20 20:35:10 -08:00
Scott Lahteine 9f8e6dce20 Merge pull request #2942 from esenapaj/esenapaj-patch-2
more suitable display format for delta printer
2016-02-18 17:59:35 -08:00
Scott Lahteine e1beaf61eb Merge pull request #2985 from AnHardt/adv-ok
Repair N in ADVANCED_OK
2016-02-18 17:06:26 -08:00
esenapaj 34cde1b77c Merge pull request #14 from MarlinFirmware/RCBugFix
Rc bug fix
2016-02-19 09:19:23 +09:00
Scott Lahteine f00ca3fd89 Fix layout descr. in configuration_store.cpp 2016-02-17 19:44:04 -08:00
Scott Lahteine 0c9db67273 Merge pull request #2983 from AnHardt/ok-echo
Replace the "ok" in M280, M301, M304, M851 with output not including …
2016-02-17 19:09:41 -08:00
Scott Lahteine fbfbc5e330 Enable USE_WATCHDOG by default 2016-02-17 17:14:57 -08:00
Scott Lahteine d4e7c2d694 Merge pull request #2976 from thinkyhead/drop_configurator
Drop the experimental Configurator
2016-02-17 17:08:08 -08:00
Scott Lahteine 9df0e0e0cc Merge pull request #2974 from thinkyhead/sanitycheck_spi_speed
Sanity-check deprecated options replaced by SPI_SPEED
2016-02-17 17:07:58 -08:00
Scott Lahteine 3e2473e695 Merge pull request #2988 from thinkyhead/z2_more_extruders
Use next open E connector for Y2/Z2
2016-02-17 17:07:07 -08:00
Scott Lahteine 8eaba020fb Merge pull request #2973 from thinkyhead/fix_splash_url
Remove references to marlinfirmware.org
2016-02-17 17:05:06 -08:00
Scott Lahteine 438a87eba8 Sanity check deprecated SDSLOW, SDEXTRASLOW 2016-02-17 14:54:10 -08:00
Scott Lahteine b19b272172 Update configurations with SPI_SPEED
- Include aligned comment about new SDSUPPORT behavior
2016-02-17 14:54:09 -08:00
Scott Lahteine 7f30f85602 Merge pull request #2987 from thinkyhead/gcode_allow_no_initial_space
Fix handling of spaces in GCode
2016-02-17 14:51:19 -08:00
Scott Lahteine b81d3b83cf Drop the experimental Configurator
Development moved to https://github.com/thinkyhead/MarlinConfigurator
2016-02-17 14:49:37 -08:00
Scott Lahteine be691b51f1 Remove references to marlinfirmware.org
The domain is gone and doesn’t redirect, so for now show no URL on the boot screen.
2016-02-17 14:41:46 -08:00
Scott Lahteine f3f58bd619 Merge pull request #2992 from thinkyhead/rc_rename_fpos_t
Rename fpos_t to avoid libc conflict
2016-02-17 14:40:33 -08:00
Scott Lahteine b03787262a Merge pull request #2868 from esenapaj/esenapaj-patch-1
Fix AUTOTEMP documentation in configs
2016-02-17 14:15:29 -08:00
Scott Lahteine 83ffc9eb4f Show raw steps in M114
This is a proposed change. This section of M114 output is a debug
extension according to RepRap wiki.
2016-02-15 15:59:24 -08:00
Scott Lahteine 373e8a1ad4 Fixes for COREXY and COREXZ coordinates 2016-02-15 15:59:24 -08:00
unknown 31656e68bc Fix for homing X and Y before raising Z when Z_SAFE_HOMING is set. 2016-02-15 15:53:40 -06:00
unknown 8ea55323d8 Fix for not raising Z before homing X and Y 2016-02-15 14:52:04 -06:00
Scott Lahteine b83e472bd3 Rename fpos_t to avoid libc conflict 2016-02-10 20:49:25 -08:00
Scott Lahteine 68457ee903 For Dual Y/Z use the next available extruder pins 2016-02-09 21:59:09 -08:00
Scott Lahteine 711e5db19a Tweak comment in process_next_command 2016-02-09 18:16:35 -08:00
Scott Lahteine 400e9329be Allow spaces after a code letter 2016-02-09 18:03:13 -08:00
Scott Lahteine cdcb80f3c5 Allow no-space after initial command
Addresses issue #2715
2016-02-09 18:00:35 -08:00
AnHardt 6f473f7fc6 Repair N in ADVANCED_OK
Send the correct line number.
If no N was in the command - non't send an N.
2016-02-09 19:23:26 +01:00
AnHardt efbd705eda Replace the "ok" in M280, M301, M304, M851 with output not including an "ok"
Replace the "ok" in M280, M301, M304, M851 with output not including an "ok"
to avoid senting two "ok"s for a single g-code.

Doing the same for M105 would break the input filters of the hosts.
For M105 the other "ok" is omitted.
2016-02-09 13:36:03 +01:00
Scott Lahteine 8e66028d25 Apply the ABL rotation matrix to the extruder offset. 2016-02-08 14:22:18 -08:00
esenapaj ab5aa3fc92 Merge pull request #5 from MarlinFirmware/RCBugFix
Rc bug fix
2016-02-08 05:42:11 +09:00
esenapaj 27d918d836 Merge pull request #4 from MarlinFirmware/RCBugFix
Rc bug fix
2016-02-08 05:35:32 +09:00
Scott Lahteine 159ff94afd Remove obsolete HEATER_BED_DUTY_CYCLE_DIVIDER #2977 2016-02-07 08:02:11 -06:00
Richard Wackerbarth 1112dcd3c2 Merge Slow SD Handling #2848 2016-02-07 08:00:14 -06:00
Ruwan J Egoda Gamage 1270fbfd38 Using SET_INPUT instead of pinMode 2016-02-07 07:58:52 -06:00
Ruwan J Egoda Gamage b58083b0fa Getting rid of SDEXTRASLOW, SDSLOW variables. 2016-02-07 07:58:52 -06:00
Ruwan J Egoda Gamage 1833049b8a reusing millis() 2016-02-07 07:58:52 -06:00
Ruwan J Egoda Gamage 1b7c443628 Adding SDULTRASLOW variable.
Instead of changing SDEXTRASLOW variable to a slower speed,  the new
SDULTRASLOW is used for rigidbot panel.
2016-02-07 07:58:52 -06:00
Ruwan J Egoda Gamage 6f9e9c0e4f Cleaning up, getting rid of the fake encoder count variable. 2016-02-07 07:58:52 -06:00
Ruwan J Egoda Gamage becbfe1065 Fixing Rigidbot LCD Panel Support 2016-02-07 07:58:52 -06:00
esenapaj 4882a7eded more suitable display format for delta printer 2016-01-29 18:38:25 +09:00
esenapaj d7272e3f36 Merge pull request #3 from MarlinFirmware/RCBugFix
Rc bug fix
2016-01-29 05:43:22 +09:00
esenapaj 9ed1275a37 Merge pull request #1 from MarlinFirmware/RCBugFix
Rc bug fix
2016-01-29 05:40:33 +09:00
Scott Lahteine 62bad1b60f Merge pull request #2848 from japzi/RCBugFix
Fixing Rigidbot LCD Panel Support
2016-01-26 17:30:12 -08:00
esenapaj 59d345a3dd Update Configuration.h 2016-01-22 07:27:11 -06:00
esenapaj b8f0c8a4c7 Update Configuration.h 2016-01-22 07:27:11 -06:00
esenapaj df0d599c79 Update Configuration.h 2016-01-22 07:27:11 -06:00
esenapaj a366697649 Update Configuration.h 2016-01-22 07:27:11 -06:00
Richard Wackerbarth 7c94c83765 Repair formula mangled by PR#1319 in Jan 2015 2016-01-15 10:06:27 -06:00
Richard Wackerbarth 51aa7d93eb Merge pull request #2902 from Naruto-kyun/patch-1
Update stepper.cpp
2016-01-15 10:04:15 -06:00
Naruto-kyun 2932602643 Update stepper.cpp
Forgot Z2_MIN_PIN
2016-01-15 16:50:43 +01:00
Ruwan J Egoda Gamage 06555febdd Using SET_INPUT instead of pinMode 2015-12-24 12:12:25 -05:00
esenapaj 8d2aa2368d Update Configuration_adv.h 2015-12-23 08:16:36 +09:00
esenapaj 0de5fcad0a Update Configuration_adv.h 2015-12-23 08:16:06 +09:00
esenapaj 1403b9acc0 Update Configuration_adv.h 2015-12-23 08:15:20 +09:00
esenapaj 5cf1c38ea1 Update Configuration_adv.h 2015-12-23 08:12:54 +09:00
esenapaj 04ab61bf40 Update Configuration_adv.h 2015-12-23 08:12:28 +09:00
esenapaj 39c62fbd6f Update Configuration_adv.h 2015-12-23 08:12:04 +09:00
esenapaj efcb769003 Update Configuration_adv.h 2015-12-23 08:09:57 +09:00
esenapaj 992fbb831d Update Configuration_adv.h 2015-12-23 08:08:45 +09:00
esenapaj 5ee6fe6385 Update Configuration_adv.h 2015-12-23 08:07:12 +09:00
esenapaj 056daf00fc Update Configuration_adv.h 2015-12-23 08:06:15 +09:00
esenapaj 71aafb79a0 Update Configuration_adv.h 2015-12-23 08:03:54 +09:00
Ruwan J Egoda Gamage 2c9e0415c7 Getting rid of SDEXTRASLOW, SDSLOW variables. 2015-12-13 23:23:01 -05:00
Ruwan J Egoda Gamage a64bcd53e9 reusing millis() 2015-12-13 22:06:03 -05:00
Ruwan J Egoda Gamage e6cc232184 Adding SDULTRASLOW variable.
Instead of changing SDEXTRASLOW variable to a slower speed,  the new
SDULTRASLOW is used for rigidbot panel.
2015-12-13 15:47:10 -05:00
Ruwan J Egoda Gamage 83c4131ba3 Cleaning up, getting rid of the fake encoder count variable. 2015-12-13 15:28:40 -05:00
Ruwan J Egoda Gamage 5eeea2f611 Fixing Rigidbot LCD Panel Support 2015-12-13 15:28:40 -05:00
Richard Wackerbarth f6950acb8e Residual unused variable — Backport 2015-12-10 19:48:08 -06:00
Richard Wackerbarth 7a670e3911 Improve planner & stepper PR #263 2015-12-10 07:24:37 -06:00
Richard Wackerbarth 58658c9279 Call the probe pin a probe pin and not a min endstop 2015-12-10 07:20:52 -06:00
Richard Wackerbarth 0fa3bac8ee If unused, just don’t define it. 2015-12-10 07:20:52 -06:00
Richard Wackerbarth 3b2973da6a Prepare Ramps for user redefinition 2015-12-10 07:20:52 -06:00
Richard Wackerbarth 1635613c25 Backport cosmetic 2015-12-10 07:20:52 -06:00
Richard Wackerbarth 0b429461d5 Back port Cosmetic changes 2015-12-10 07:20:52 -06:00
Richard Wackerbarth 0cebe85e65 Clean up spacing and duplicate entries
• Removing trailing whitespace
• Adjusting indention for better readability
• Removing duplicated entries
2015-12-10 07:20:52 -06:00
Richard Wackerbarth e7b40bbe98 Change link to U8glib source 2015-12-10 06:33:29 -06:00
Richard Wackerbarth e2da2b4105 Back port language translation 2015-12-10 06:31:41 -06:00
Richard Wackerbarth 4f314afaf0 Allow Thermistor #12 to be used on hotends also
//100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)

Caveat Emptor —- 
I’m not sure that this really makes sense,
but why keep someone from using it?
2015-12-10 06:31:31 -06:00
Scott Lahteine 60d5658da8 Revert nozzle_bed_fan_menu_items
For some reason that I cannot determine, using a sub-function causes
the Tune sub-menu to act strangely, yet replacing the function call
with its code content works perfectly.
2015-12-09 20:33:52 -06:00
Richard Wackerbarth ae4acc42ec Merge ConformingHostMessages (PR#2822) 2015-12-07 16:12:46 -06:00
AnHardt 57da1b8497 Host parseble output for M109, M190 and M303
Make the output of M105 more similar to Repetier.
Make the text-print pert of M105 an extra function to make it reusable. `print_heaterstates()`
Use `print_heaterstates()` in M019, M190 and M303
2015-12-07 15:37:53 -06:00
AnHardt fcceb98191 Unglobalize no_wait_for_cooling 2015-12-07 15:34:26 -06:00
Wurstnase 78a347a01a change nx, ny, nz and ne from float to long
st_set_position takes long
```void st_set_position(const long& x, const long& y, const long& z, const long& e)```
2015-12-07 08:22:44 -06:00
Wurstnase 6d691aceee change dx, dy, dz and de from float to long
anything is long, we don't need float there
2015-12-07 08:22:24 -06:00
Richard Wackerbarth 6bfcb74c25 The probe stowing coordinates have changed 2015-12-05 19:31:59 -06:00
Wurstnase 0fbfb22506 Renaming delta speeds (PR2824)
dx -> dsx
dy -> dsy
dz -> dsz
de -> dse
2015-12-04 07:55:45 -06:00
AnHardt 8d1eeff021 Fix status LEDs update when reinitializing the display
Fix status LEDs update when reinitializing the display

By using the regular update function during init.

Fixing #2683
2015-12-03 07:18:35 -06:00
AnHardt e19fe4054d Update README.md 2015-12-03 00:38:27 +01:00
Richard Wackerbarth 5a54204f72 Marlin 1.1.0 Release Candidate 3 - 01 December 2015 2015-12-01 07:24:45 -06:00
AnHardt bb4efcf603 Handle temp callbacks when THERMAL_PROTECTION_HOTENDS is not defined
by alternate definition for the callback macros
2015-12-01 07:21:52 -06:00
AnHardt 96d0d04b8f Update LCD buttons less frequently
Move slow_buttons_update into the LCD_UPDATE_INTERVAL block
lcd_implementation_read_slow_buttons() will then be executed ~10 times a
second.
2015-11-30 05:44:32 -06:00
Richard Wackerbarth e293ea57f0 Unbalanced brackets in setPwmFrequency
This is a back port of the correct in issue #248
2015-11-30 05:44:32 -06:00
AnHardt c956b52c4a Babystep Multiplier
Analog to https://github.com/MarlinFirmware/MarlinDev/pull/250 by
@RicardoGA

Restore the Babystep Multiplicator functionality and now it's available
for X/Y/Z
2015-11-30 05:43:10 -06:00
Richard Wackerbarth 956418c674 Kc is also a multi-PID parameter 2015-11-23 06:08:01 -06:00
Richard Wackerbarth 8cea79a81d Update reference to our wiki 2015-11-15 12:23:37 -06:00
AnHardt 33addc52a1 Suppress Z_MIN_PROBE_REPEATABILITY_TEST for DELTA and SCARA configurations (PR#2747)
For now Z_MIN_PROBE_REPEATABILITY_TEST is not possible for DELTA or SCARA
configurations.
This PR comments the feature out, where it is commented in by default.
2015-11-13 07:33:33 -06:00
AnHardt 8da2e98985 Split RAMPS 1.3 an 1.4 (PR#2741)
because of hardware differences on the SERVO0_PIN
2015-11-13 07:13:48 -06:00
AnHardt 6dfc7124a1 Add Travis check for ALLEN_KEY (PR#2748)
Tests DELTA, AUTO_BED_LEVELING_FEATURE and ALLEN_KEY
2015-11-13 07:09:05 -06:00
AnHardt be7167ed97 Change XY formatting on LCD (PR#2740)
According to #123 negative values for XY at or below -100 are displaying incorrectly, dropping the first digit. Deltas can easily have XY values in this range. This PR adds a function to display floats/ints formatted like `_123`, `-123`, `_-12`, or `__-1` as appropriate and applies it to the XY coordinates on Hitachi displays. It also moves the Z value to the right to be consistent with the XY formatting.
2015-11-13 06:46:11 -06:00
vogtmann 9acdc6c234 Update LICENSE 2015-11-12 13:09:59 -06:00
Luis Correia e7099ea597 Fix Portuguese (Portugal) strings (PR#2700)
Align strings with release
2015-11-12 00:08:42 -06:00
Richard Wackerbarth a0f6407d6a Merge corrections from dev branch (PR#2704) 2015-11-12 00:04:18 -06:00
Scott Lahteine 754b13d8fe Patch issue #2315 2015-11-12 00:03:22 -06:00
Scott Lahteine dbd4c17096 Init Kp, Ki, Kd to 0 2015-11-12 00:03:22 -06:00
Scott Lahteine 644c376e84 Use binary OR with endstop bits 2015-11-12 00:03:22 -06:00
Scott Lahteine 54a39d8c1a Use a ternary in qr_solve.cpp 2015-11-12 00:03:22 -06:00
Scott Lahteine 17c23bbaf3 Shorten gcode_M221 yet function the same 2015-11-12 00:03:22 -06:00
Scott Lahteine c0e791dbe9 Only look for "N" line number as first parameter 2015-11-12 00:03:22 -06:00
Scott Lahteine b4af4441c5 Clean up watchdog impl. 2015-11-12 00:03:22 -06:00
Scott Lahteine 8f16563bbd Use "defined" with LCD_PIN_BL and LCD_PIN_RESET 2015-11-12 00:03:22 -06:00
Scott Lahteine 6fa7e24af3 Use "UNUSED" to squash compiler warnings 2015-11-12 00:03:22 -06:00
Scott Lahteine d5b7c595ae Use static locals in utf_mapper.h 2015-11-12 00:03:21 -06:00
Scott Lahteine 9bdab4f3a8 Clean up "else" and other spacing 2015-11-12 00:03:21 -06:00
Scott Lahteine 9b23490f01 Clean up spacing in configs 2015-11-12 00:03:21 -06:00
esenapaj c6c37abd41 Update language_kana.h 2015-11-12 00:00:51 -06:00
esenapaj c24045475a Update language_kana_utf8.h 2015-11-12 00:00:32 -06:00
Richard Wackerbarth 25d636c9e0 Compiler issues (PR#2696) 2015-11-11 23:52:11 -06:00
AnHardt 47401ec97b MSG_EXTRUDER_SWITCHED_OFF was renamed to MSG_REDUNDANCY
in language.h, but was not renamed here. If TEMP_SENSOR_1 is enabled as redundant then
an error is thrown that MSG_EXTRUDER_SWITCHED_OFF is not defined.

Originaly by @12dstring
2015-10-08 10:45:11 -05:00
Scott Lahteine ba6a243197 DEBUG message has no parameter (PR#2671) 2015-10-03 22:03:03 -05:00
Scott Lahteine 0c7f7ebcfb Styling adjustments (PR#2668 & PR#2670)
Keep "astyled" reformatting
2015-10-03 22:02:45 -05:00
Rafa Couto b5fb7075b9 Galician (gl) language. 2015-09-30 14:46:01 -05:00
Richard Wackerbarth 7b4bdc0203 DUAL_X_CARRIAGE motor enabling
As noted by @darkjavi et.al. in #103, the E1 motor was not being enabled in planner.cpp when using DUAL_X_CARRIAGE. This patch enables and disables E1 as it should.
2015-09-30 04:31:19 -05:00
Richard Wackerbarth 91b5156b3e Marlin 1.1.0 Release Candidate 2 - 29 September 2015 2015-09-29 20:28:41 -05:00
Richard Wackerbarth 03f0edb57e Fix high LCD status screen update frequency (PR#2655) 2015-09-28 11:07:33 -05:00
KiteLab 0ad25c6665 Hint for changed behaviour of SDSUPPORT 2015-09-28 11:07:33 -05:00
Richard Wackerbarth 56a6d85c41 Add (disabled) style test 2015-09-28 11:07:14 -05:00
Richard Wackerbarth 4cdafc0b35 Add astyle specification 2015-09-17 10:45:38 -05:00
Richard Wackerbarth e01f5e1ef7 Cleanup 2015-09-17 10:44:23 -05:00
Mike Cochrane 5e36b64635 SDEXTRASLOW for some SD card readers (PR#176)
Add SDEXTRASLOW which runs the SD card at SPI_QUARTER_SPEED. Quarter speed is needed for RIGIDBOT_PANEL
2015-09-14 07:58:08 -05:00
Scott Lahteine 5d65a36dee Give lcd_sd_status an UNKNOWN state (PR#180) 2015-09-14 06:32:27 -05:00
fmalpartida 0f149ea0c6 LCD home button causes repeated homing (PR#175)
Fix: increased debounce delay.
2015-09-14 06:31:49 -05:00
Scott Lahteine b825567e0f Drop www. from marlinfirmware.org (PR#175) 2015-09-14 06:28:53 -05:00
Richard Wackerbarth 42e381f8e2 Merge Extrusion_rate_heater_compensation 2015-09-12 07:54:42 -05:00
Scott Lahteine db27e67580 Apply PID_ADD_EXTRUSION_RATE to extras 2015-09-12 07:53:20 -05:00
Scott Lahteine bc50db9cf6 Implement PID_ADD_EXTRUSION_RATE 2015-09-12 07:53:20 -05:00
Richard Wackerbarth b5987de08a Merge Menu Updates 2015-09-12 07:51:37 -05:00
Scott Lahteine cffb2d457e Cleanup file formatting 2015-09-12 07:48:27 -05:00
Scott Lahteine 7ac7ddbf20 Show nozzles, heaters, and extruders numbered 1-4 2015-09-12 07:40:18 -05:00
Scott Lahteine 5bc480fee8 Fix Move E menu items 2015-09-12 07:33:49 -05:00
Scott Lahteine fc882c34a3 Init lcd_sd_status as false to force lcd_update test
Replaces #145 which is way out of date
2015-09-12 07:32:20 -05:00
Scott Lahteine e27dd5c22d Conditionalize functions that rely on SDSUPPORT 2015-09-12 07:30:09 -05:00
Scott Lahteine fabf3ae4a0 Add final Z raise after Delta probe 2015-09-12 07:23:24 -05:00
Petr Zahradnik 8c768a76a2 Create language_cz.h
Czech language translation.
2015-09-12 07:18:05 -05:00
Petr Zahradnik 5b9010965d Update language.h
Added comment for Czech language (associated with file language_cz.h).
2015-09-11 04:43:54 +02:00
Scott Lahteine 89fb778684 Fix up probe pin define and test 2015-09-10 10:54:03 -05:00
Scott Lahteine 558665cd90 Constrain Tune > Nozzle/Flow menu items 2015-09-10 08:47:11 -05:00
Scott Lahteine 9f462f0cf5 Hack to address stuttering caused by ISR not finishing in time
(PR #138)

When the ISR does not finish in time, the timer will
wrap in the computation of the next interrupt time.

This hack replaces the correct (past) time with a time not far in the future.
2015-09-10 08:26:17 -05:00
Richard Wackerbarth a356699882 Merge manual feedrates for deltas from PR#128 2015-09-08 13:12:21 -05:00
Scott Lahteine 8b3d63c423 Unify Delta XYZ homing rates
As noted in #130 allen key probe stow rate is based on homing rates,
but homing rates were left out of most delta configs. This unifies the
XYZ homing rates and applies the unified rates to allen key movements.
2015-09-08 13:11:55 -05:00
Scott Lahteine 7c72b57313 Unify manual feedrate and Fix LCD MANUAL_FEEDRATE (PR#128)
As noted by @o-lampe at https://github.com/MarlinFirmware/MarlinDev/issues/114#issuecomment-136757614 the `MANUAL_FEEDRATE` for Delta Z should be the same as XY.
2015-09-08 13:11:55 -05:00
Scott Lahteine f690b82343 Remove extra MAX_FREQ_TIME define (PR#148) 2015-09-08 13:11:12 -05:00
fmalpartida 868dbbac6a Updated README to rearrange logo to avoid being crossed out by title.
Added my name following naming convention.
2015-09-07 09:51:06 -05:00
Richard Wackerbarth 8e4fa08a20 Merge Dual Y&Z towers (PR#108 & PR#147) 2015-09-07 09:49:34 -05:00
Scott Lahteine a4c78ae786 Add E1 pins to SENSITIVE_PINS for Dual Y or Dual Z 2015-09-07 09:41:06 -05:00
Scott Lahteine a39fadf876 Update kossel-pro example config (again?) 2015-09-07 09:41:06 -05:00
Scott Lahteine 34e0a8d848 Move Y2 and Z2 pins defines to pins.h 2015-09-07 09:41:06 -05:00
Scott Lahteine 28599c51c7 Wrap Dual Y options in a conditional 2015-09-07 09:41:05 -05:00
Scott Lahteine 11a065c0ca Remove Z2 pins overrides from Configuration_adv.h 2015-09-07 09:41:05 -05:00
Scott Lahteine f7f6b5faae Fix lcd_move_e compile error (PR#143)
Fix a compile error introduced in #98
2015-09-07 09:36:05 -05:00
Richard Wackerbarth fe0cbd40fe Default to SD Card Disabled (PR#139) 2015-09-06 02:05:47 -05:00
Scott Lahteine 2b30e8ac99 Conditionals for ULTIPANEL without SDSUPPORT 2015-09-06 02:04:49 -05:00
Scott Lahteine 7c7a4051fe Disable SDSUPPORT by default
As noted in #133 you can’t disable `SDSUPPORT` with `MAKRPANEL`,
`PANEL_ONE`, `MINIPANEL`, or `ULTIPANEL`. This patch makes it possible
to disable `SDSUPPORT` on these controllers and then disables it by
default.

Users of these controllers will now need to enable `SDSUPPORT` in their
configurations as others currently do.
2015-09-06 02:04:49 -05:00
Eric Kuzmenko b23d765991 Added Extrude From Multiple Extruders from LCD feature 2015-09-05 05:33:18 -05:00
Scott Lahteine fe8816214f GPLv2 LICENSE 2015-09-05 05:30:44 -05:00
fmalpartida c3c4d50a99 Refreshed logo for release 1.1 2015-09-04 09:22:08 -05:00
Christian Lefrançois 8347a9d6e4 Fix HOMING_BUMP_DIVISOR for deltas configuration
* Re-bump speed divisor should be the same for delta printer.
2015-09-03 09:26:28 -05:00
Scott Lahteine 703df2cb6c Fix error message for probe region sanity check 2015-09-03 03:27:47 -05:00
Shane Francis 4c8330c15c Trim Adjustments for Delta Configurations 2015-09-03 01:05:33 -05:00
Roxy-3DPrintBoard 93a512cf97 Add Roxy-3DPrintBoard to dev team 2015-09-03 01:03:36 -05:00
Scott Lahteine 962120d1d2 Fix spacing in some conditional blocks 2015-08-27 20:59:09 -05:00
Richard Wackerbarth 109628a77e Merge tag debug_G29 (PR#54) 2015-08-27 20:56:25 -05:00
Richard Wackerbarth 20b4772155 Create DEBUG_LEVELING_FEATURE 2015-08-27 20:52:08 -05:00
Scott Lahteine 194f98ff95 Debug messages for homing and leveling 2015-08-27 20:52:08 -05:00
Richard Wackerbarth 6292d9e815 Rename ENABLE_AUTO_BED_LEVELING
With the introduction of the #if ENABLED(…)

reads better than
2015-08-27 20:52:08 -05:00
Richard Marko 91fd66ffba add Lulzbot TAZ4 example configuration (PR#104) 2015-08-27 08:36:43 -05:00
Wurstnase 7a275773ee remove colon in utf_mapper.h (PR#106) 2015-08-27 07:15:23 -05:00
Chris Bruner 6b4b6fa315 update for newest version of U8glib_Arduino 2015-08-26 19:52:59 -05:00
Christian Lefrançois 9897a9147c Update ABL comments (PR#95)
* Updates the auto bed leveling comments ONLY.
* Renames "Z probe" word usage in //comments and #errors properly.
2015-08-26 05:51:38 -05:00
Christian Lefrançois a7822e3ff7 Some renaming of Z_PROBE to Z_MIN_PROBE (PR#91)
* Fix a couple of renames omission and macro expansion errors.
2015-08-20 06:04:46 -05:00
Richard Wackerbarth 4939c642b4 Merge Suppress some compiler warnings (PR#70) 2015-08-16 06:57:54 -05:00
Richard Wackerbarth ad90e851b3 Use a small unsigned integer type 2015-08-16 06:56:47 -05:00
Richard Wackerbarth 29b456ae07 Suppress some compiler warnings 2015-08-16 06:56:47 -05:00
Scott Lahteine 23d742bf06 Don't free the stack array plane_equation_coefficients (PR#83) 2015-08-16 06:53:24 -05:00
Scott Lahteine e3b1e08777 Patch G30 to use raise_z_for_servo (PR#73) 2015-08-15 21:47:04 -05:00
Richard Wackerbarth c2f695c84e Merge Save a few bytes (PR#79) 2015-08-12 21:27:40 -05:00
Scott Lahteine a1eb90d5c0 Save another 30 bytes in gcode_SET_Z_PROBE_OFFSET 2015-08-12 21:26:32 -05:00
Scott Lahteine 91122277f4 Reduce gcode_SET_Z_PROBE_OFFSET by 88 bytes 2015-08-12 21:26:25 -05:00
Richard Wackerbarth 9531b154ea Merge Zig-Zag Endpoint (PR#65) 2015-08-11 17:33:35 -05:00
AnHardt 5707a2c3d5 indexindexIntoAB is only vald for !DELTA 2015-08-11 17:32:11 -05:00
AnHardt d8860f9ad9 Alway end at the same point
Always end at [RIGHT_PROBE_BED_POSITION, BACK_PROBE_BED_POSITION]
Regardles the evennes of auto_bed_leveling_grid_points.
2015-08-11 17:32:11 -05:00
AnHardt 4ca8f4a9a7 Always zigzag
Use the shortest way between probing-points.
2015-08-11 17:32:11 -05:00
AnHardt 3d23424121 Add array indexIntoAB[xx][yy]
and use it.
2015-08-11 17:32:11 -05:00
AnHardt e2d69f66b2 Make Z_PROBE a Z_MIN_PROBE (PR#65)
Currently we use the probe exclusively as a device to find the build platform(bed).
For the currently supported setups this means, we use it as a additional min-endstop.
A triggered when not deployed probe disturbs the homing process for max-endstops.

Rename ENDSTOPPULLUP_ZPROBE to ENDSTOPPULLUP_ZMIN_PROBE
Rename Z_PROBE_ENDSTOP_INVERTING to Z_MIN_PROBE_ENDSTOP_INVERTING
Rename Z_PROBE_ENDSTOP to Z_MIN_PROBE_ENDSTOP
Rename DISABLE_Z_PROBE_ENDSTOP to DISABLE_Z_MIN_PROBE_ENDSTOP
Rename Z_PROBE_REPEATABILITY_TEST to Z_MIN_PROBE_REPEATABILITY_TEST
Rename Z_PROBE_ENDSTOP to Z_MIN_PROBE_ENDSTOP
Adjust comments accordingly
Remove Z_MAX  check for the probe in update_endstops().

Using an delta related idea of @clefranc from #61,
extended to the general change for all setups.

Tested with Prusa i3, max-z-endstop and permanently triggered z-probe.
Worked for @clefranc's delta.
2015-08-11 14:41:36 -05:00
AnHardt 8d23c4230e Add a Travis test for Z_DUAL_STEPPER_DRIVERS and Z_DUAL_ENDSTOPS (PR#68) 2015-08-10 17:47:49 -05:00
AnHardt 6a6e863a47 Resolve #2581 by adding a missed ';' (PR#67) 2015-08-10 12:51:59 -05:00
RicardoGA e09ff79635 Update pins_RAMPS_13.h (PR#64)
Now all ramps configuration can enable Filament sensor not only EEB
2015-08-10 05:53:01 -05:00
Fourmi e6aed7bb4e Update thermistortables for Hisens Thermistor (PR#2588) 2015-08-09 18:11:14 -05:00
Richard Wackerbarth 9d8cc24abf Continue from the line following the M999 (PR#60)
If the printer is going to accept the M999,
then it should continue from that line number.
2015-08-08 08:08:02 -05:00
wurstnase f3ab1dba54 Z babystepping for coreXY (PR#47)
only X and Y were not implemented
2015-08-04 20:10:09 -05:00
Richard Wackerbarth 35afea1c0e Restore test
PR#2572 Changed this because of faulty Boolean Logic

NOT(A OR (NOT B) OR (NOT C)) !=

(NOT A) AND ((NOT B) OR C))


Besides, the compiler should be smart enough to
optimize this without help from the programmer
2015-08-04 15:22:56 -05:00
Richard Wackerbarth 3c7470dbc3 Windows doesn’t have AUTOMATIC VERSIONING yet 2015-08-03 19:34:47 -05:00
Richard Wackerbarth c54076456b Merge Overridable Options - Part 12 (PR#39) 2015-08-03 16:05:23 -05:00
Scott Lahteine 6af75f4b5d Squish down deprecated tests in sanity check 2015-08-03 16:04:48 -05:00
Scott Lahteine edeb58288e Use PIN_EXISTS in sanity check 2015-08-03 16:04:48 -05:00
Scott Lahteine c30b7693e0 Clean up RUMBA pins conditions 2015-08-03 16:04:48 -05:00
Scott Lahteine 46453905d6 Apply remaining ENABLED/DISABLED conditionals 2015-08-03 16:04:48 -05:00
Richard Wackerbarth 4a72d2ba9c Merge Support PlatformIO (PR#34)
**** NOTE ****
This code is very EXPERIMENTAL and UNSUPPORTED
2015-08-03 15:55:23 -05:00
Richard Wackerbarth 8afd94ed3a Version Generator for PlatformIO Builds 2015-08-03 10:33:26 -05:00
Richard Wackerbarth 4c2948a8e6 PlatformIO Build Configurations
See http://platformio.org/
2015-08-03 10:33:26 -05:00
AnHardt e3acc84b99 Merge pull request #7 from Wackerbarth/DetailedBuildVersion
Provide both long and short version strings
2015-08-03 15:40:54 +02:00
Richard Wackerbarth b227d8c128 Supply a VERSION in a short form for displays
The long descriptor will still be available in M115
2015-08-03 08:21:09 -05:00
Richard Wackerbarth cd7828a928 This will be the 1.1.0 Release rather than 1.0.3 2015-08-03 08:08:38 -05:00
Richard Wackerbarth 4e2f5618c1 Pick up Default_version when needed 2015-08-03 08:08:37 -05:00
Richard Wackerbarth 329acc852e Canonize Option flag USE_AUTOMATIC_VERSION 2015-08-03 08:08:37 -05:00
Richard Wackerbarth a8db0aac32 Automatic Versioning was introduced in 1.6.3 2015-08-03 08:08:37 -05:00
Richard Wackerbarth 5a11d32a85 Move deprecation test to SanityCheck.h 2015-08-03 08:08:37 -05:00
Richard Wackerbarth 7bb7a52940 Bring config up-to-date 2015-08-03 07:35:33 -05:00
Richard Wackerbarth e66ab97a3c Merge Bootscreen Text (PR#24) 2015-08-03 07:15:32 -05:00
AnHardt 244ea2014a Boot-screen for text-displays improvements
Centred the logo for 16x4 and 20 x4.
Moved version to the bottom line
Code shrink to 704 bytes.
2015-08-03 07:13:00 -05:00
AnHardt 80f2a20842 Enable bootscreen in all Configurations 2015-08-03 07:13:00 -05:00
AnHardt 2684d061ed Scroll too long strings on bootscreen 2015-08-03 07:13:00 -05:00
AnHardt 4f46df5dab Make bootscreen configurable for the graphic displays
Saves about 473 byte of progmem and 28 bytes of RAM.
2015-08-03 07:13:00 -05:00
AnHardt 09571b7753 Boot-screen for the character displays
Uses about 488 byte of progmem and 32 byte of RAM.
For that configurable.
2015-08-03 07:13:00 -05:00
Richard Wackerbarth 866efc14fe Add Danish translations 2015-08-03 07:06:17 -05:00
Scott Lahteine 267f3479d7 Adjust spacing in pins_RAMPS_13.h 2015-08-02 23:26:58 -05:00
Scott Lahteine 56702e7bb9 Define servo pins just like other pins 2015-08-02 23:26:58 -05:00
Richard Wackerbarth 4b9d5cd352 Use lowercase names for serial instances 2015-08-02 23:01:39 -05:00
Scott Lahteine 1e2deff4fd Rename BTENABLED to BLUETOOTH
- For some reason it’s easy to forget what BT stands for, but it
doesn’t need an abbreviation.
2015-08-02 22:56:50 -05:00
Scott Lahteine 68055a5959 Include RIGIDBOT_PANEL in Conditionals 2015-08-02 22:26:41 -05:00
Richard Wackerbarth 3cfe1dce1f Merge Rigidbot Configuration (PR#2579) 2015-08-02 22:14:36 -05:00
George Djabarov f8ed3a835d Added comment with the RigidBot Big bed size 2015-08-02 22:13:37 -05:00
George Djabarov 7deae6b6be Updated RigidBot example configuration
- The default serial baud rate of 115200
- The regular RigitBot bed size 254mm/248mm/254mm
- Single stock extruder
- Stock termistors for extruder and hotbed
- Stock Min X/Y/Z stops. Max stops not connected
- Stock 32 teth tooleys (stock axis steps)
- No auto bed leveling
- No screen
2015-08-02 22:13:37 -05:00
Richard Wackerbarth eb65c57496 Merge SD_DETECT_PIN (PR#2569) 2015-08-02 22:11:47 -05:00
Scott Lahteine 5418faa1f9 Add sanity checks for old names 2015-08-02 22:09:08 -05:00
Scott Lahteine f03e063750 Rename BEEPER to BEEPER_PIN
For consistency with other pins, allowing use of `PIN_EXISTS` macro.
2015-08-02 22:09:08 -05:00
Scott Lahteine 270c766de2 SDCARDDETECT -> SD_DETECT, added docs
- `SD_DETECT_PIN` replaces `SDCARDDETECT`
- `SD_DETECT_INVERTED` replaces `SDCARDDETECTINVERTED`
- Revise the description of `SD_DETECT_INVERTED`
- Add a note about the override of `SD_DETECT_INVERTED` in
`Conditionals.h`
2015-08-02 21:59:41 -05:00
Scott Lahteine 496fc28dc3 Tweaks to pins comments 2015-08-02 21:34:13 -05:00
Scott Lahteine 8d3b74cc6e Rename SDCARDDETECT to SDCARDDETECT_PIN
- Rename the pin so it can be tested with `PIN_EXISTS`
- Fix some incorrect tests for `SDCARDDETECT`
2015-08-02 21:34:13 -05:00
Richard Wackerbarth aa1d38613a Update README to reflect new repository 2015-08-01 19:34:33 -05:00
Scott Lahteine 0f5ada8cbd Group the fail case in one negation (PR#2572) 2015-08-01 18:55:50 -05:00
AnHardt 7ddf1cda1d Improve condition for SERVO_LEVELING (PR#2570) 2015-07-31 22:41:34 -05:00
Richard Wackerbarth e309fb4bcb Merge BEEPER_PIN (PR#2564) 2015-07-31 17:14:40 -05:00
Richard Wackerbarth f32048b8f5 In for a penny, in for a pound 2015-07-31 17:13:53 -05:00
Scott Lahteine e944f960de Add a sanity check for old name "BEEPER" 2015-07-31 17:13:53 -05:00
Scott Lahteine 8ebf0b92be Spacing adjustments in some pins files 2015-07-31 17:13:53 -05:00
Scott Lahteine 94a796c8cc Rename BEEPER to BEEPER_PIN
For consistency with other pins, allowing use of `PIN_EXISTS` macro.
2015-07-31 17:13:53 -05:00
Richard Wackerbarth b217474eab Compiler Complaints about concatenated tokens (PR#2566) 2015-07-31 17:08:44 -05:00
AnHardt c39dc2908f New test for servos in Travis (PR#2565) 2015-07-31 07:14:11 -05:00
Richard Wackerbarth d3532bd2a6 Merge Part 5 (PR#2557) 2015-07-31 01:26:09 -05:00
Scott Lahteine 2460f82d8b Make proper distinction between BEEPER and HAS_BUZZER 2015-07-31 01:24:33 -05:00
Scott Lahteine 58cfcd4239 Overridable Options - Part 5
Apply `ENABLED` / `DISABLED` macros to files needing only a small
number of changes.
2015-07-31 01:24:20 -05:00
Scott Lahteine 5e834352a9 Overridable Options - Part 11 (PR#2563)
Apply `ENABLED` / `DISABLED` macros to EEPROM-related files.
2015-07-31 01:07:04 -05:00
Scott Lahteine bf6eb93c61 Overridable Options - Part 10 (PR#2562)
Apply `ENABLED` / `DISABLED` macros to planner files.
2015-07-31 01:06:29 -05:00
Scott Lahteine 51e89a269c Overridable Options - Part 9 (PR#2561)
Apply `ENABLED` / `DISABLED` macros to temperature-related files.
2015-07-31 01:05:55 -05:00
Scott Lahteine c35fb88094 Overridable Options - Part 8 (PR#2560)
Apply `ENABLED` / `DISABLED` macros to stepper-related files.
2015-07-31 01:05:22 -05:00
Scott Lahteine 0d8989fc14 Overridable Options - Part 7 (PR#2559)
Apply `ENABLED` / `DISABLED` macros to LCD-related files.
2015-07-31 01:04:37 -05:00
Scott Lahteine b4abb0ae7f Apply ENABLED / DISABLED to Marlin core files (PR#2558) 2015-07-31 01:03:58 -05:00
Scott Lahteine c0d7ea3e7e Overridable Options - Part 4 (PR#2556)
Apply `ENABLED` / `DISABLED` / `HAS_SERVOS` macros to pins files.
2015-07-31 00:44:53 -05:00
Scott Lahteine 4b40964064 Overridable Options - Part 3 (PR#2555)
Apply `ENABLED` / `DISABLED` macros to language-related files.
2015-07-31 00:19:13 -05:00
Richard Wackerbarth abe9905ef8 Merge Overridable Options (PR#2496) 2015-07-31 00:04:43 -05:00
Scott Lahteine 32683b282b Include configurator copies of configs 2015-07-31 00:03:36 -05:00
Scott Lahteine 37d1879386 Apply overridables to Configuration files 2015-07-31 00:03:36 -05:00
Richard Wackerbarth 819fa7216e Merge Redo Servo angles (PR#2554) 2015-07-30 23:36:38 -05:00
Scott Lahteine 9d151bb61b servo_endstop_angles -> servo_endstop_angle 2015-07-30 23:35:57 -05:00
Scott Lahteine 9334479aeb Minor cleanup of Conditionals.h 2015-07-30 23:35:57 -05:00
Scott Lahteine 1f63293624 servo_endstops -> servo_endstop_id 2015-07-30 23:35:57 -05:00
Scott Lahteine edaaead7e0 Fix comment about SERVO_ENDSTOP_ANGLES 2015-07-30 23:35:57 -05:00
Scott Lahteine ed4a6371ad Add HAS_SERVO_ENDSTOPS to simplify conditonals 2015-07-30 23:35:57 -05:00
Richard Wackerbarth 47ae96ce15 Merge Complete M200 output with M503 (PR#2506) 2015-07-30 23:33:36 -05:00
Scott Lahteine 70be61d416 Reset filament_size with a loop 2015-07-30 23:31:58 -05:00
Scott Lahteine ae9274be05 Fix minor compiler warnings in for loops 2015-07-30 23:31:58 -05:00
Scott Lahteine c7c8cfed6f Complete M200 output with M503
- The contents of EEPROM include filament diameters even with
Volumetric disabled. This change makes `M503` display the full
volumetric settings so that playing back the output of `M503 S0` will
fully restore them.
2015-07-30 23:31:58 -05:00
Scott Lahteine 4a58e447a1 Add array size to servo_endstop_angles (PR#2553) 2015-07-30 23:27:38 -05:00
Andrew Lenharth a0ae9e30df don't pass integer by reference, inefficient. (PR#2547) 2015-07-30 17:51:12 -05:00
AnHardt d03f037a92 Get rid of malloc() and free() (PR#2549)
Just the minimal changes to qr_solve.cpp and .h to get rid of malloc() and free().

Saves about 656 bytes of progmem (library-code)
and 22 bytes for static variables.

Should use exactly the same amount of stack as it did before on the heap.
2015-07-30 17:50:31 -05:00
Richard Wackerbarth f9195d114b Merge Servo Endstops (PR#2543) 2015-07-30 16:39:55 -05:00
Scott Lahteine 3b2b2313ff Combine if block related to SERVO_ENDSTOPS 2015-07-30 16:39:05 -05:00
Scott Lahteine 0af2a80e06 Make SERVO_ENDSTOP_ANGLES 2-dimensional 2015-07-30 16:38:56 -05:00
Richard Wackerbarth 525d0dc239 Configurator is out-of-date AGAIN (PR#2550) 2015-07-30 16:36:01 -05:00
Richard Wackerbarth 67c4d22984 Update Developer References 2015-07-30 07:57:11 -05:00
Richard Marko dd22cbbfb8 makefile: add buzzer.cpp (PR#2479) 2015-07-30 07:56:44 -05:00
Scott Lahteine 9f48798ffd Replace ENABLED with DEFINED for SERVO_ENDSTOPS (PR#2542) 2015-07-30 07:55:29 -05:00
Scott Lahteine 22b9fd97b2 Remove usage restriction to comply with GPL
Discussion at #2541
2015-07-30 07:54:09 -05:00
Richard Wackerbarth 3c1653207c Merge Memory Watcher (PR#2398) 2015-07-27 20:33:20 -05:00
Richard Wackerbarth ae00fad75b Rename as M100 2015-07-27 20:31:59 -05:00
Richard Wackerbarth a401d738df There is an echo in here 2015-07-27 20:31:59 -05:00
Richard Wackerbarth ed7d45e8f5 Memory watcher 2015-07-27 20:31:59 -05:00
AnHardt d17f7ebc8a Multiply WATCH_TEMP_PERIOD by 1000UL (PR#2535)
instead of 1000.  Else we get errors with times over 32 seconds.
2015-07-27 20:30:53 -05:00
Scott Lahteine bea6739774 Don't include Z_RAISE_AFTER_PROBING if not used (PR#2527) 2015-07-27 20:24:33 -05:00
Scott Lahteine 81bba7ed88 More sanity checking for extruder requirements (PR#2531) 2015-07-27 10:14:43 -05:00
Richard Wackerbarth 78b7c486fd Merge Translate additional Displays (PR#2529) 2015-07-26 20:42:11 -05:00
AnHardt 87a97f3724 Fix conditions for display strings 2015-07-26 20:41:21 -05:00
AnHardt aaccea0260 Shift some display only strings from language.h to lenguage_en.h
and translate them to German.
2015-07-26 20:41:15 -05:00
Scott Lahteine e4c01f1c7e Simplify init with ARRAY_BY_EXTRUDERS1 macro (PR#2507) 2015-07-26 20:40:27 -05:00
Scott Lahteine ab6f1fdf8b Move & document ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED (PR#2528)
As suggested in #2521
- Move `ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED` because `SDSUPPORT` is
also required.
- Add a note that endstops must be enabled for the feature to have any
effect
2015-07-26 20:36:37 -05:00
Richard Wackerbarth 096046c09f Merge Improve Makefile use of avrdude (PR#2477) 2015-07-26 20:32:10 -05:00
Richard Marko 1183c10a2e makefile: drop -q -q (much quiet) from avrdude flags
Annoying when trying to figure out if uploading
actually does something.
2015-07-26 20:31:31 -05:00
Richard Marko 0e064357f4 makefile: use /etc/avrdude/avrdude.conf on linux
No need to look for arduino specific avrdude configuration
as distributions ship their own avrdude.conf file that
is compatible with arduino.
2015-07-26 20:31:31 -05:00
Richard Wackerbarth 960de3411b Merge Temp Sanity Checks (PR#2514) 2015-07-25 21:18:32 -05:00
Scott Lahteine bcb7d5a149 Improve sanitycheck for TEMP_SENSOR_1 2015-07-25 21:17:36 -05:00
Scott Lahteine 5b24f59401 Add sanity checks for temp sensors 2015-07-25 21:17:36 -05:00
AnHardt fd0e81b0c7 Distinguish between BUZZER and SPEAKER (PR#2513)
A speaker needs a AC or a pulsed DC to make a sound, a buzzer only needs a DC.
A buzzer has it's own resonator. It works in most cases to feed the buzzer with a pulsed DC, but the sound will not be as loud as with pure DC.

There seem to be boards where the BEEPER-pin is not able to handle a PWM. Obviously intended for a buzzer.
To make these board able to handle a speaker

* replace the PWM based tone()-function again with a on-delay-off-delay loop.

Hopefully the last time I touch the beeper code.
2015-07-24 22:10:04 -05:00
Richard Wackerbarth 53d9c9ff23 Merge G29 Ending Position (PR#2498) 2015-07-24 22:08:30 -05:00
Scott Lahteine e2957df05c Shorthand for do_blocking_move_to 2015-07-24 22:07:41 -05:00
Scott Lahteine 819c5b9b50 Adjust comment on Z adjustment 2015-07-24 22:07:41 -05:00
Scott Lahteine 5a7356b6fc Patch for G29 final Z position
Include all the necessary pieces to get the final Z position after
probing the bed, and add commentary about other possible changes.
2015-07-24 22:07:41 -05:00
Richard Wackerbarth d233976737 Merge Servo Corrections (PR#2510) 2015-07-24 22:05:53 -05:00
AnHardt 088e09e052 Add forgotten Marlin_main.cpp 2015-07-24 22:04:49 -05:00
AnHardt 8b876241bd Some more servo code tweaks
Just set up the pin. Don't move to a random position.

Simplify servo::move()
* servo::move() does not need the pin parameter - The pin is set during servo_init() with attach().
* servo::move() does not need a return value.

SERVO_LEVELING is the wrong condition to deactivate the servos.

Remove some temporary (Servo *) variables.
SanityCheck for the servo indexes.
2015-07-24 22:04:49 -05:00
Scott Lahteine b116c096bd Reduce set_homing_bump_feedrate, save 42 bytes (PR#2512)
Updates to `set_homing_bump_feedrate`:
- Move the string into Program Memory, reduce length by 31 bytes
- Use an auto to get the divisor, adjust it on error
- Set feedrate once, at the end
2015-07-24 22:00:25 -05:00
Scott Lahteine f7e7862588 Better Sanguinololu & Graphical Controller (PR#2504)
- Change suggested at
https://github.com/MarlinFirmware/Marlin/issues/2482#issuecomment-123553
266
2015-07-23 23:47:07 -05:00
Scott Lahteine a1154d4a20 Enable Y and sanity-check CoreXZ (PR#2509) 2015-07-23 23:46:27 -05:00
Richard Wackerbarth 0a7f2a8be7 Merge MegaController & MINIPANEL (PR#2508) 2015-07-23 22:52:51 -05:00
Scott Lahteine 932f1c109e Move servos to the top in pins_MEGACONTROLLER.h 2015-07-23 22:51:41 -05:00
Scott Lahteine 90f8ddfc1e Apply MINIPANEL to other configs 2015-07-23 22:51:41 -05:00
AndySze 00dbf69b6d add MINIPANEL defines 2015-07-23 22:51:40 -05:00
AndySze 8ac5e56934 fixed some format problems and cleaned code 2015-07-23 22:51:40 -05:00
AndySze eef595aa64 add makerlab mega controller pin configs 2015-07-23 22:51:40 -05:00
Richard Wackerbarth a0120a533c Merge CORE_XZ (PR#2503) 2015-07-23 19:53:33 -05:00
AnHardt 4e14e152fa Add Travis tests for CORXY and COREXZ 2015-07-23 19:52:48 -05:00
AnHardt 27d7d2ccab Correct bracketing for COREXY-XZ 2015-07-23 19:52:21 -05:00
Scott Lahteine 469843427d Reduce code in gcode_M81 (PR#2497) 2015-07-23 08:14:00 -05:00
Scott Lahteine c66955aaf9 Mark unchanging arrays as const (PR#2494)
The compiler may be able to optimize if it knows an array won’t be
changing.
2015-07-22 21:37:37 -05:00
Richard Wackerbarth 72b9e3a6ac Merge Configuration Macros (PR#2495) 2015-07-22 18:17:27 -05:00
Scott Lahteine 278aa15301 Add COUNT macro and apply 2015-07-22 18:16:05 -05:00
Scott Lahteine d85861d296 Move macros, add ENABLED/DISABLED, add includes 2015-07-22 18:16:05 -05:00
Scott Lahteine 17960fd2b0 Neaten up pins_MEGATRONICS.h (PR#2493) 2015-07-22 17:23:22 -05:00
Scott Lahteine aac2b9aa9d Reduce code in gcode_M84 (PR#2492)
`gcode_M84` only needs to call `finishAndDisableSteppers`, which calls
all the other functions.
2015-07-22 17:22:01 -05:00
Scott Lahteine 4971fa73f9 Add a sanitycheck error for old servo settings (PR#2491)
- Documentation solution for #2476
2015-07-22 16:35:10 -05:00
Scott Lahteine 96ace72ddc Servos attach/detach based only on servo config
Assuming #2470 fixed up the main issue.
2015-07-22 16:34:26 -05:00
Richard Wackerbarth b80a6a8d31 Correct Kossel Pro Configuration_adv (PR#2473) 2015-07-22 16:32:08 -05:00
Scott Lahteine 000a6fce46 Extract update_endstops from stepper ISR (PR#2474) 2015-07-19 18:33:18 -05:00
Richard Wackerbarth adfcfcba95 Merge G2/G3 for Delta (PR#2469) 2015-07-19 16:19:37 -05:00
Scott Lahteine e83eac312e Move plan_arc next to prepare_move 2015-07-19 16:18:46 -05:00
Scott Lahteine 5c5936508d G2/G3 Arcs for Delta
- Update prepare_move_delta to take a target argument
- Add Delta support to plan_arc
2015-07-19 16:18:46 -05:00
Richard Wackerbarth 39092efe88 Merge CORE_XZ (PR#2300) 2015-07-19 16:17:55 -05:00
Scott Lahteine 9f53e2f0c9 Implement COREXZ in stepper.cpp and planner.cpp 2015-07-19 16:17:03 -05:00
Scott Lahteine fa00e1d97f Explode conditions common to corexy and cartesian 2015-07-19 16:17:03 -05:00
Scott Lahteine c7dd5527b4 Add a C_AXIS and Z_HEAD to support COREXZ 2015-07-19 16:17:03 -05:00
Scott Lahteine 129f986ccf Add COREXZ option to configurations 2015-07-19 16:17:03 -05:00
Scott Lahteine 69b0490b77 Show minimal preheat options in menus (PR#2471) 2015-07-19 16:14:59 -05:00
Scott Lahteine 9d1d590f43 Merge pull request #2470 from thinkyhead/patch_servo_move
Patch servos code for move
2015-07-19 12:10:10 -07:00
Scott Lahteine eacfe132aa Change the name of servos[] and servo_t 2015-07-19 11:35:48 -07:00
Scott Lahteine 3b23ccd366 Patch servos code for move
- Have `Servo::attach` explicitly return -1 if it fails
- Check for -1 in `Servo::move` because `servoIndex` might be 0
- Make `attach` / `detach` calls conditional on `SERVO_LEVELING`
- Move `SERVO_LEVELING` define to `Conditionals.h`
2015-07-19 11:24:23 -07:00
Richard Wackerbarth 54ddc1d417 Simplify DRY RUN (PR#2358)
Elsewhere DRYRUN turns off the heating elements
and ignores constraints on them.

Here, whenever motion is entered into the planner,
if DRY RUN is set, we instantly act as if the E_AXIS
is in the desired final position.
2015-07-19 10:15:53 -05:00
Richard Wackerbarth c2760c3cac Merge Reduce IsDive memory usage (PR#2455) 2015-07-19 10:14:42 -05:00
Scott Lahteine 944090c19c Optimize lsDive logic 2015-07-19 10:13:40 -05:00
Scott Lahteine 417706e578 Include space for the terminating nul in lsDive 2015-07-19 10:13:39 -05:00
Scott Lahteine f3c1a6b19c Reduce lsDive stack usage to the minimum 2015-07-19 10:13:39 -05:00
Patrick Bogen fba4e6241b Specify print format for reporting invalid tmp_extruder (PR#2465) 2015-07-18 16:40:01 -05:00
AnHardt d15d869267 Rename axis_is_at_home() to set_axis_is_at_home() (PR#2464)
to make clear - it's not a question but an order.
2015-07-18 10:27:21 -05:00
Scott Lahteine f209b755a5 Move the Z probe as far as needed to trigger the switch (PR#2461) 2015-07-16 20:02:44 -05:00
Richard Wackerbarth a91263f79e Merge Clean up code_seen (PR#2395) 2015-07-16 16:41:38 -05:00
Scott Lahteine 0f1df62389 Fixup comments in code_seen 2015-07-16 16:40:52 -05:00
Scott Lahteine 2945eb6650 Call code_seen only once per parameter 2015-07-16 16:40:52 -05:00
Scott Lahteine b742af2e2a Move Y_STOP_PIN for Printrboard with SD (PR#2420) 2015-07-16 16:39:55 -05:00
Richard Wackerbarth e0f4fc2033 Merge Cleanup (PR#2445) 2015-07-16 16:37:33 -05:00
Scott Lahteine baa9199973 Define extern delta only for delta 2015-07-16 16:36:30 -05:00
Scott Lahteine 77e80ef367 Require extruders for thermal code 2015-07-16 16:36:30 -05:00
Scott Lahteine 3bde4f4855 Require temp sensor for bed thermal protection 2015-07-16 16:36:30 -05:00
Scott Lahteine 82a3ed2f9a Cleanup and dev notes in Marlin.h 2015-07-16 16:36:30 -05:00
Scott Lahteine db23b9b184 Minor tweak to M204 code (PR#2457) 2015-07-16 16:35:13 -05:00
Scott Lahteine 81d42406b7 Move braces in homeaxis to prevent a hanging else (PR#2451) 2015-07-16 10:25:54 -05:00
Scott Lahteine 552a327df8 Fix lsDive filename stack overrun (PR#2449) 2015-07-16 10:23:56 -05:00
Richard Wackerbarth ee71845d60 Merge Servo pin (PR#2425) 2015-07-15 20:53:21 -05:00
AnHardt a6628f12cc Eliminate the further use of the pin-parameter 2015-07-15 20:50:58 -05:00
AnHardt 8504992e9f Remove the additional pin variable in Servo.cpp
as sugested by @c-born
inhttps://github.com/MarlinFirmware/Marlin/issues/1885#issuecomment-92618240
2015-07-15 20:50:58 -05:00
Richard Wackerbarth 2cbb85fe88 Merge Bed leveling residuals (PR#2444) 2015-07-15 19:52:42 -05:00
AnHardt ed6598adf5 Corrected Bed Height vs. Bed Topology for verbosity > 3
and cleaned out some tabs.

Everything else is a rebased PR#2017 as proposed by @CptanPanic
2015-07-15 19:51:40 -05:00
brian 62302ceb9e Add calculation of difference between auto-correct bed level plane, and measured topo map. 2015-07-15 19:51:40 -05:00
Richard Wackerbarth f7659f02bb Merge Config cleanup (PR#2448) 2015-07-15 19:14:29 -05:00
Scott Lahteine de25a48dec Remove PID examples from preconfigured configs 2015-07-15 19:13:53 -05:00
Scott Lahteine 7456710a1f Update configs formatting 2015-07-15 19:13:47 -05:00
Scott Lahteine 391386dd94 Update configs for new servo deactivation 2015-07-15 19:13:40 -05:00
Richard Wackerbarth 63715aba4f Merge Anti-jitter for all servo moves (PR#2427) 2015-07-15 17:40:59 -05:00
AnHardt 5243d8b523 Deactivate DEACTIVATE_SERVOS_AFTER_MOVE by default 2015-07-15 17:39:43 -05:00
AnHardt 49609f6c14 Activate the new servo.move() function
by replacing the sequences (attach, write, delay, detach), and their conditions with the new function in Marlin.main.cpp
and removing the old configuration in the ABL part of Configuration.h
2015-07-15 17:39:43 -05:00
AnHardt 40b6edcad7 Introduce DEACTIVATE_SERVOS_AFTER_MOVE in Configuration.h
DEACTIVATE_SERVOS_AFTER_MOVE is ought to replace PROBE_SERVO_DEACTIVATION_DELAY.
But it will work on all servo moves, not only the probe servo moves.
2015-07-15 17:39:43 -05:00
AnHardt 2ddb2a2be9 Add Servo::move() to servo.cpp
move(pin, angel) - Sequence of attach(pin), write(angel),
                   if DEACTIVATE_SERVOS_AFTER_MOVE is defined waits SERVO_DEACTIVATION_DELAY, than detaches.

As we have jitter on the servos during moves of the steppers, and detaching them improves this behaviour,
the usual sequence to handle a servo movement is:
attach(pin)
write(angel)
delay(until the servo finished the move)
detache()

Here a function to handle the complete sequence.
2015-07-15 17:39:43 -05:00
mkile 8a01e5fb7a Update Russian translation (PR#2443)
Slightly updated translation.
2015-07-15 10:35:36 -05:00
Richard Wackerbarth e83575537a Compiler defines USBCON for USB devices (PR#2433) 2015-07-15 10:32:11 -05:00
ayberkozgur 7268d46508 Always calculate extruder temperature PID d term (PR#2432) 2015-07-13 13:22:26 -05:00
Scott Lahteine 87a872e103 Use st_get_position_mm where possible (PR#2411) 2015-07-12 22:15:54 -05:00
Scott Lahteine 2e0da8abdc Allow N to take a negative argument (PR@2402) 2015-07-12 22:14:25 -05:00
Richard Wackerbarth 85b7cca4d0 Merge Stepper reset for RigidBot (PR#2417) 2015-07-11 16:04:56 -05:00
Scott Lahteine 447dbd6fa5 Add STEPPER_RESET_PIN support 2015-07-11 16:04:11 -05:00
Scott Lahteine a0351bdb73 Remove STEPPER_RESET_FIX option 2015-07-11 16:04:11 -05:00
Scott Lahteine 6b1b8cb2b3 Also nullify spaces before the checksum asterisk (PR#2409) 2015-07-10 09:03:07 -05:00
Richard Wackerbarth 0fd814e4f1 Merge RigidBot (PR#2401) 2015-07-09 11:37:26 -05:00
Scott Lahteine 8e61314323 Use RIGIDBOT_PANEL for consistency with online docs 2015-07-09 11:36:46 -05:00
Scott Lahteine 4b204da3c1 Cleanup of pins_RAMPS_13.h 2015-07-09 11:36:46 -05:00
Scott Lahteine 536f86e896 RigidBot CONTROLLERFAN_PIN in Configuration_adv.h 2015-07-09 11:36:46 -05:00
Scott Lahteine f068e46661 RigidBoard include for pins.h 2015-07-09 11:36:46 -05:00
Scott Lahteine 9ebcae496d RIGIDBOARD / RIGIDPANEL 2015-07-09 11:36:46 -05:00
Scott Lahteine c3c605c658 Move note about LiquidTWI2 to Configuration.h (PR#2406) 2015-07-09 05:33:17 -05:00
Richard Wackerbarth 3b769753eb Merge M11 fixes (PR#2394) 2015-07-07 07:04:30 -05:00
Scott Lahteine 4e9d658141 Prevent a hanging SERIAL_ECHO_START in M111 2015-07-07 06:59:10 -05:00
Scott Lahteine bc0fdbe88e Use SERIAL_EOL in SERIAL_PROTOCOLLN macros 2015-07-07 06:59:10 -05:00
Scott Lahteine d78ebbc0e9 Remove unused MSG_OK_B and MSG_OK_T 2015-07-07 06:59:10 -05:00
Scott Lahteine 6b494c1535 Use disable_all_heaters in M111 2015-07-07 06:59:10 -05:00
Scott Lahteine 15190d40df Add extra EOL after M111 2015-07-07 06:59:10 -05:00
AnHardt 0e1cf78f5c Remove code for testing if probing range is too small (PR#2390)
becaue it is over-restrictive and superseeded by the now working tests
if the probe-recktangle can be reached. See iss#2366
2015-07-07 06:58:01 -05:00
AnHardt d421f5250d Correct the sign of zprobe_zoffset for G29 (PR#@391)
Sign flipped with #2167.
See also comments
https://github.com/MarlinFirmware/Marlin/issues/2040#issuecomment-118568355
and following.
2015-07-07 06:55:33 -05:00
Scott Lahteine 52fcc743ab Replace "target" with "destination" in M600 (PR#2374)
- Also fix a bug in `M600` where `Z_MAX_ENDSTOP_INVERTING` is being
used as the index into the `destination[AxisEnum]` array.
2015-07-04 05:55:25 -05:00
Scott Lahteine a5033c3652 Enable LCD_PIN_RESET if it exists (PR#2375) 2015-07-04 05:53:22 -05:00
AnHardt 23c8c5348f Z-height fix V2b (PR#2351)
here the other two occurences of `Z_PROBE_OFFSET_FROM_EXTRUDER` are
replaced with `zprobe_zoffset`.
2015-07-02 20:30:40 -05:00
Todd Swindoll a111fbbd0a z-probe offset fix (PR#2361)
verified via 1.0.2 tag that compiles by multiple people,
credit for the fix goes to paulusjacobus for the initial find and
sniffle for the correction so M851 works.
2015-07-02 20:28:07 -05:00
AnHardt dae4eb36ad Add MagoKimbra to the list of contributors (PR#2356)
in Development
2015-06-30 08:23:38 -05:00
AnHardt 2c1414f81f Reactivate tests for more extruders in Travis (PR#2348)
BOARD_ULTIMAKER was not the default any more
- sed failed to change the board
- RAMPS_EFB has no second extruder
- ...
- Added test for bed

Rebased.
2015-06-29 09:30:33 -05:00
Richard Wackerbarth 316469e76a Clean up comments and spacing 2015-06-28 08:22:29 -05:00
Scott Lahteine 42465ee444 Cleanup of comments & spacing 2015-06-28 08:20:28 -05:00
Scott Lahteine 9682ed455e Fix comment on M83, add comment to prepare_move 2015-06-28 08:20:19 -05:00
Richard Wackerbarth 8c760f1c31 Modify Travis build to use IDE 1.6.4 2015-06-27 16:51:42 -05:00
Richard Wackerbarth cfb416fda9 Merge branch 'PrepareForIDE1.6' (PR#2306) 2015-06-27 15:49:12 -05:00
Richard Wackerbarth 9643e6c744 Make the platform.local a bit more generic 2015-06-27 15:45:25 -05:00
Richard Wackerbarth 4683645036 Vendor (Marlin) files 2015-06-27 15:45:25 -05:00
Richard Wackerbarth efd5658e32 library - SPI 2015-06-27 15:45:25 -05:00
Richard Wackerbarth 9b13e60e38 core - AT90USB… 2015-06-27 15:45:25 -05:00
Richard Wackerbarth 907032616e core - arduino 2015-06-27 15:45:25 -05:00
Richard Wackerbarth e2f2458928 library - Liquid Crystal 2015-06-27 15:45:24 -05:00
Richard Wackerbarth d8785ffc6f library - TMC26x Stepper 2015-06-27 15:45:24 -05:00
Richard Wackerbarth ae9de515b8 library - L6470 2015-06-27 15:45:24 -05:00
Richard Wackerbarth 363d7c505f library - Wire 2015-06-27 15:45:24 -05:00
Richard Wackerbarth 7592bb1f2f library - U8glib upgrade to v1.17 2015-06-27 15:45:24 -05:00
Richard Wackerbarth deea00dde3 library - U8glib 2015-06-27 15:45:23 -05:00
Richard Wackerbarth 1fd335b702 Bootloaders 2015-06-27 15:45:22 -05:00
Richard Wackerbarth bf629cf7b1 Have Travis Get additional information from the git repository
Travis builds from a detached head.
We need to use the current branch so that versioning works properly
2015-06-27 15:45:22 -05:00
Scott Lahteine bb44fe17cf Fix typo in buzzer.h endif (PR#2337) 2015-06-27 06:10:19 -05:00
AnHardt 36746143a1 Correct output of M48 (PR#2336)
n_samples is an uint8_t .
Got printouts like:
50 of 2  ...
2015-06-27 06:08:40 -05:00
Richard Wackerbarth 47b78ed1af Merge Implement M110 (PR#2327) 2015-06-26 18:15:09 -05:00
Scott Lahteine f6ca5a8da8 Allow "M110 N123" without a checksum 2015-06-26 18:13:54 -05:00
Scott Lahteine aaad65ff5d Include a comment documenting M110 2015-06-26 18:13:54 -05:00
Scott Lahteine 862c72b030 Put the mandatory test of gcode_N first 2015-06-26 18:13:54 -05:00
Scott Lahteine 30976f9773 Allow M110 to handle a second N argument 2015-06-26 18:13:53 -05:00
Scott Lahteine d135b15bb8 Init all endstop bits to 0 (PR#2332) 2015-06-26 07:10:22 -05:00
Richard Wackerbarth e09abb1b31 Merge Fix M600 (PR#2301) 2015-06-25 20:45:55 -05:00
Scott Lahteine 5ccb1c9e7d Use millis for M600 audio feedback interval 2015-06-25 20:45:03 -05:00
Scott Lahteine fb16a83b8a Cleanup M600 documentation comments 2015-06-25 20:45:03 -05:00
Scott Lahteine 97ec224d72 Replace target with destination in M600 2015-06-25 20:45:03 -05:00
Scott Lahteine 4ce9ddbb74 Check the temperature before filament change 2015-06-25 20:45:03 -05:00
Richard Wackerbarth a1e8714d5f Merge 'Ultimaker' (PR#2331) 2015-06-25 09:13:50 -05:00
Jaime van Kessel b8b5762e55 Update Ultimaker URL 2015-06-25 09:12:44 -05:00
Jaime van Kessel d5bfbf5a59 Added correct dutch translation for calibrate. 2015-06-25 09:12:44 -05:00
Scott Lahteine 149c474e55 Updated Russian language (PR#2325)
Gleaned from
https://github.com/MarlinFirmware/Marlin/commit/4ac14a7e5fa8e6e395436664
8976eafd1ae220ae
2015-06-22 23:07:19 -04:00
AnHardt 722829b058 Move buzzing code to buzzr.h & buzzer.cpp (PR#2307)
at least the lcd independent part from Marlin_main.cpp.
2015-06-22 22:31:48 -04:00
AnHardt c461975140 Rename and repair MELZI_1284 (PR#2301)
to MELZI_MAKR3D.

Fix for #2288
As the normal MELZI also can have a 1284.
2015-06-22 22:30:07 -04:00
schlotzz 1e9cf905c7 Enable ZigZag AutoBedLeveling on Deltas (PR#2273)
ZigZag has been disabled by fault due to do_topography_map
2015-06-15 20:26:25 -05:00
Scott Lahteine ec93383ec8 Add SanityCheck for bed probe position settings (PR#2282) 2015-06-15 20:22:44 -05:00
Richard Wackerbarth c2cef42f8e Merge (PR#2285) 2015-06-15 20:21:01 -05:00
Scott Lahteine dc40a5f6e0 Patch up more outdated config lines 2015-06-15 20:20:32 -05:00
Scott Lahteine 98c9111a7d Update delta configs with latest settings 2015-06-15 20:20:32 -05:00
Scott Lahteine e6baf8afd9 Fix up allen key settings in delta configs 2015-06-15 20:20:31 -05:00
Scott Lahteine 3b293fc5d1 Move Delta settings lower in delta files 2015-06-15 20:20:31 -05:00
Scott Lahteine df21857583 Move extruder offset settings next to extruders setting 2015-06-15 20:20:31 -05:00
Scott Lahteine 2dd1859247 Cleanup spaces and comments in configs and conditionals 2015-06-15 20:20:31 -05:00
Scott Lahteine a274769f4f Clean up spacing and comments
Also clean up some trailing spaces in a few other sources
2015-06-15 20:20:31 -05:00
Scott Lahteine d3bce05d54 Fix up spacing for filament sensor values 2015-06-15 20:20:31 -05:00
Scott Lahteine b4b10a57fe Fix configurator section directives and values lists 2015-06-15 20:20:31 -05:00
Scott Lahteine bba14dcbe6 Move Z Safe Homing point to the middle of the movement range 2015-06-15 20:20:31 -05:00
Richard Wackerbarth 06906bc1c8 Merge (PR#2295) 2015-06-15 20:18:21 -05:00
Scott Lahteine 318318b02f Add pins_RAMPS_13_EFB.h to reduce redundancy 2015-06-15 20:17:09 -05:00
Scott Lahteine 346c8b339b Remove a test from pins_RAMPS_13.h
- Add 3 new lines to `pins.h` to remove 2 redundant tests in
`pins_RAMPS_13.h`
2015-06-15 20:15:38 -05:00
AnHardt b93cddfcc9 Add lost MKS_BASE to pins.h (PR#2297) 2015-06-15 10:23:46 -05:00
AnHardt 6ab7b560af Rework buzzing (PR#2296)
by:
Moving HAS_LCD_BUZZ macro to Coditionals.h
Renaming HAS_LCD_BUZZ to HAS_BUZZER to make clear is has nothing to do with the lcd.
Removing the ULTRALCD condition.

Moving declaration of lcd_buzz() out of the ULTRA_LCD block in ultralcd.h
Moving definition of lcd_buzz() out of the ULTIPANEL block in ultralcd.cpp
Renaming lcd_buzz() to buzz() to make clear is has nothing to do with the lcd.

All buzzing code is now only dependent on the existence of a BEEPER-pin or the definition of a LCD_USE_I2C_BUZZER.

To do: Check the conditions for the BEEPER-pin in all pin-files.
2015-06-15 06:13:26 -05:00
Scott Lahteine 29122db2fa Fix ULTRA_LCD spelling in HAS_LCD_BUZZ 2015-06-15 06:12:34 -05:00
Richard Wackerbarth 1418470ae9 Merge PR(#2271) 2015-06-14 20:01:40 -05:00
Scott Lahteine 1d94d098bf Formatting tweaks as part of fixing issue 1497 2015-06-14 19:57:27 -05:00
Scott Lahteine e602c28ad9 Set auto fan pins to OUTPUT during init
Fixes the problem of these pins being left in INPUT state, as described
in #1497
2015-06-14 19:57:27 -05:00
Scott Lahteine 90f858aa85 Use translated strings for axis movement (PR#2280)
Suggest we use the translated strings here. They use (except for
German) the phrasing “Move X” instead of just the axis letter, but they
should fit the available space. The “Extruder” string would be the
same, except it will be translated.
2015-06-14 08:16:00 -05:00
Scott Lahteine e2a4a83586 Don't re-apply Z_RAISE_BETWEEN_PROBINGS in probe_pt (PR #2281) 2015-06-12 22:39:35 -05:00
Scott Lahteine 6b1b3adaf0 Consistent punctuation in SanityCheck errors (PR#2283) 2015-06-12 09:31:02 -05:00
MagoKimbra eb81982fcd Fix error next command in autotune (PR#2274)
Now send only temperature for T or B, but not send OK.
Host interprets the line to show the right temperature, but not in
response to M105 then stop and send commands until it ends the autotune.
2015-06-12 07:10:38 -05:00
AnHardt 55b23c896a Optimise out_of_range_error() (PR#2265)
by avoiding the strncopy()
2015-06-12 02:20:40 -05:00
filipmu b0860adab6 Fix volumetric multiplier display for filament sensor (PR#2264)
The volumetric multiplier display needs to be multiplied by 100 in order to make it an integer for display purposes.
2015-06-12 02:19:27 -05:00
AnHardt 45642b7fe8 Respect DISABLE_AXIS settings (PR#2216)
when DEFAULT_STEPPER_DEACTIVE_TIME is over
instead of simply turn off all.
2015-06-11 11:35:05 -05:00
wurstnase c85a486445 make the dual z-endstop optional (PR#2277)
it's disabled by default
2015-06-10 15:45:59 -05:00
Scott Lahteine 962b107341 Prevent current_command_args from bypassing nul (PR#2270) 2015-06-09 16:07:10 -05:00
Richard Wackerbarth 4061279218 Merge pull request #2260 from Wackerbarth/DropArduino0.x.x
Deprecate Support for Arduino IDE < 1.0.5
2015-06-08 17:16:25 -05:00
Richard Wackerbarth 06ae832276 Deprecate Support for Arduino IDE < 1.0.5
Note that newer versions of the IDE can still
be made to support compilation for the older boards.
2015-06-08 17:15:28 -05:00
Richard Wackerbarth 4c3ca0b5b6 Deprecate Support for Arduino IDE < 1.0.5
Note that newer versions of the IDE can still
be made to support compilation for the older boards.
2015-06-08 17:15:28 -05:00
Scott Lahteine ff6081be3a Parse N[0-9]+[ ]* differently (PR #2263)
More general solution to skip N[0-9]+[ ]* in the parser as in #2218
2015-06-08 17:06:49 -05:00
Richard Wackerbarth d8e2f5d333 Merge pull request #2167 from thinkyhead/reverse_zoffset_sign
Reverse the sign of zprobe_zoffset
2015-06-08 05:10:05 -05:00
Scott Lahteine aad121864e Include "Z" in M851 report 2015-06-08 05:09:27 -05:00
Scott Lahteine 96a3fba8ac Reverse the sign of zprobe_zoffset
- When editing on the LCD, minus now means below the nozzle
- Stores the opposite sign in EEPROM, so bumped to “V20”
2015-06-08 05:09:27 -05:00
Richard Wackerbarth 1ad2c5bfc0 Merge pull request #2257 from fmalpartida/bugFixing
Updated SAV MkI extension module header connector.
2015-06-08 05:07:48 -05:00
fmalpartida f92907183c Updated SAV MkI pin header. 2015-06-08 05:07:11 -05:00
Richard Wackerbarth 58941e543e ELB_FULL_GRAPHIC_CONTROLLER_SDCARDDETECTINVERTED removed
#defining something just to define something else doesn’t
make sense

If you want SDCARDDETECTINVERTED, just define it yourself.

If the previous code was intended to define, undefined and then again define the term, that code is improper.
2015-06-06 21:44:59 -05:00
Richard Wackerbarth cf5d64d940 Merge PR #2118 2015-06-06 20:14:50 -05:00
CONSULitAS 788eb6e647 planner.cpp: remove tab
planner.cpp: single evil and hidden tab removed ♻️ 😏
2015-06-06 20:13:56 -05:00
CONSULitAS 3a5963c0e7 Configuration_adv.h: Add FAN_MIN_PWM for slow fan stopping issue …
* all Configuration_adv.h: Add #define FAN_MIN_PWM for slow fan stopping
issue
* for K8200: uncommented with tested (and working) values
2015-06-06 20:13:56 -05:00
CONSULitAS e55e65d1e4 planner.cpp: Add FAN_MIN_PWM for slow fan stopping issue …
@CONSULitAS

planner.cpp: Add FAN_MIN_PWM for slow fan stopping issue (V2.1 with
macro and linear scaling)

@thinkyhead thanks for idea on linear scaling
2015-06-06 20:13:56 -05:00
Richard Wackerbarth 5239a4e839 Merge bPR #1882 2015-06-06 19:47:07 -05:00
paclema 8d295547be * Auto filament change on CHANGEFILAMENT feature. Now you can activate this option that extrude filament until you press the button. 2015-06-06 19:45:45 -05:00
Richard Wackerbarth 3eea5222cf Merge PR #1767 2015-06-06 19:00:27 -05:00
atfield90 6d0e91328d Renamed Board_megatronics_1 to Board_minitronics 2015-06-06 18:59:04 -05:00
atfield90 c4a2e5ac23 Renamed Pins_megatronics_1 to Pins_minitronics 2015-06-06 18:59:04 -05:00
atfield90 2076906aaa Renamed Pins_megatronics_1 to Pins_minitronics 2015-06-06 18:59:04 -05:00
tonokip 10733a2bb0 added minirambo pin definitions. V2 2015-06-06 18:37:58 -05:00
Richard Wackerbarth 0c7bdf569c Merge branch 'ProbeDeployment' into Development 2015-06-06 17:49:20 -05:00
Richard Wackerbarth 303d47228e Define Probe Path in new format 2015-06-06 17:48:27 -05:00
Richard Wackerbarth ad09d6a60f 3 Step Allen Key Probe 2015-06-06 17:48:27 -05:00
Richard Wackerbarth 8359cdf01d Check compatibility for Teensy-based processor
The instruction say to set a #define in fastio.h
However, that value is not included before this test.
2015-06-06 17:24:34 -05:00
Richard Wackerbarth 6b095af9b1 Merge branch 'GenerateVersionHeader' into Development 2015-06-06 17:21:35 -05:00
Richard Wackerbarth b3a3080b4b Suppress error when on detached head 2015-06-06 17:20:01 -05:00
Daniel Friesen 54375cc7a4 Quote paths so build scripts work when directories have space in their name.
Currently if you clone Marlin to a directory with a space in the name, Arduino will generate an error.
Because when executed the path ends up split into two separate arguments.
2015-06-06 17:20:01 -05:00
Richard Wackerbarth bdf778bec2 Merge SDCARDDETECTINVERTED (#2144) 2015-06-06 16:44:13 -05:00
Ed Boston 08968c29bb Adding ELB_FULL_GRAPHIC_CONTROLLER_SDCARDDETECTINVERTED to Examples 2015-06-06 16:40:32 -05:00
Ed Boston fed18bcc20 Removed SDSLOW for ELB_FULL_GRAPHIC_CONTROLLER
Hardware changes has removed the need for this option.
2015-06-06 16:40:32 -05:00
Ed Boston b94a0e1501 Added ELB_FULL_GRAPHIC_CONTROLLER_SDCARDDETECTINVERTED
The new define allows the sd card detect to be inverted or not from
Configuration.h
2015-06-06 16:40:31 -05:00
Ed Boston bc205c76a3 SDCARDDETECTINVERTED problems
Fixed an error where SDCARDDETECTINVERTED was being defined/undefined
improperly
2015-06-06 16:40:31 -05:00
AnHardt 2bf482ce65 Merge pull request #2238 from AnHardt/TRP-Travis-again
Remove the 'Thermal Runaway Protection' section from .travis.yml
2015-06-03 12:48:13 +02:00
AnHardt e400fce271 Merge pull request #2221 from MagoKimbra/Dryrun
Insert Debug DRYRUN Repetier Host compatible
2015-06-03 12:30:48 +02:00
AnHardt 5ed0c1a2bd Remove the 'Thermal Runaway Protection' section from .travis.yml
because its activated by default now.

Closes #2234.
2015-06-03 12:25:57 +02:00
AnHardt 95f1feab1a Merge pull request #2232 from Wackerbarth/AutoVersioning
Automatic versioning for Travis builds
2015-06-03 12:22:01 +02:00
AnHardt 163a9ff58e Merge pull request #2230 from AnHardt/psm
Fix thermal protection state machine target temp. V2
2015-06-03 09:46:53 +02:00
AnHardt c3fe6e61ae Merge pull request #2229 from AnHardt/position-out-of-range
Fix out_of_range_error()
2015-06-03 09:46:22 +02:00
MagoKimbra 4db8d2def4 Moved MSG_DEBUG in language.h 2015-06-03 08:18:27 +02:00
AnHardt 38c21ff34d Merge pull request #2236 from AnHardt/backto103def
Back to 1.0.3 dev - for now
2015-06-03 01:08:05 +02:00
AnHardt b7e9ba7591 Back to 1.0.3 dev - for now 2015-06-03 00:47:11 +02:00
AnHardt d1f4471000 Merge pull request #2146 from Wackerbarth/Versioning
Versioning
2015-06-02 18:31:21 +02:00
Richard Wackerbarth ac382cbdaf Automatic versioning for Travis builds 2015-06-02 08:13:43 -05:00
AnHardt b1404a0743 fix thermal protection state machine target temp. V2
If the target temperature is changed then it would always stay in the reset state.
Thanks to @tonokip.

Replaces #2119
2015-06-02 12:26:21 +02:00
AnHardt 17b0ec84ed Fix out_of_range_error()
For sprintf_P() the first parameter has to be a `char*` not `const char*`.
2015-06-02 11:50:32 +02:00
AnHardt 35af5ef23e Merge pull request #2225 from Wurstnase/naming
consistency name for multiplier
2015-06-02 10:18:22 +02:00
wurstnase e7e964432b consistency name for multiplier
replace extruder_multiply with extruder_multiplier
like feedrate_multiplier or volumetric_multiplier
2015-06-01 22:33:22 +02:00
AnHardt d4c6fc5d0a Merge pull request #2223 from AnHardt/dualz-semicolon
Add a semicolon to make Z_DUAL_STEPPER_DRIVERS compile again.
2015-06-01 20:15:55 +02:00
AnHardt 0d9d21d15f Add a semicolon to make Z_DUAL_STEPPER_DRIVERS compile again. 2015-06-01 19:51:43 +02:00
MagoKimbra 76306f9073 Insert Debug DRYRUN Repetier Host compatible 2015-06-01 18:34:45 +02:00
AnHardt ca2dcff9d4 Merge pull request #2219 from MagoKimbra/Cura_bug
Fix problem Width Cura
2015-06-01 17:54:10 +02:00
MagoKimbra 881146bc22 Fix problem Width Cura 2015-06-01 17:25:32 +02:00
Bo Herrmannsen c33fffd6a7 Merge pull request #2209 from AnHardt/u8glib
Replace U8GLI v1.11 with v1.17
2015-06-01 07:01:59 +02:00
Bo Herrmannsen 01a7b5cc97 Merge pull request #2210 from fmalpartida/bugFixing
Addes support for SDD1306 I2C OLED LCD
2015-06-01 07:01:35 +02:00
Bo Herrmannsen cc5d006087 Revert "updated addons for IDE 1.6.4"
This reverts commit 2724baae8b.
2015-06-01 07:00:30 +02:00
Bo Herrmannsen 2724baae8b updated addons for IDE 1.6.4 2015-05-31 23:52:39 +02:00
fmalpartida 11e3f3375d Merge commit '764e61708b8e73410c7819d59c4970d7089ca6f5' into bugFixing
Updated LCD wiki location.
2015-05-31 21:20:26 +02:00
AnHardt 6f4873329e Replace U8GLI v1.11 with v1.17
In Travis we already test against 1.17.
2015-05-31 20:25:36 +02:00
AnHardt 764e61708b Merge pull request #2208 from alexxy/ru_translations
Update ru translation
2015-05-31 19:46:59 +02:00
Alexey Shvetsov a8670b66a7 Update ru translation
Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
2015-05-31 20:09:10 +03:00
fmalpartida 93da52d011 Added support for OLED SSD1306 I2C based LCDs. 2015-05-31 18:53:29 +02:00
Wurstnase 9c09967803 Merge pull request #2149 from Wurstnase/enstop_bits
faster compare
2015-05-31 16:02:55 +03:00
wurstnase 0f3f7d6835 clean up double endstops 2015-05-31 14:06:13 +02:00
AnHardt 9d2a980bcf Merge pull request #2170 from thinkyhead/beep_M600_elsewise
Slight size reduction by adding idle()
2015-05-30 12:42:32 +02:00
AnHardt 2728dc0606 Merge pull request #2194 from thinkyhead/reduce_strings
Redo "invalid extruder" to save 304 bytes
2015-05-30 11:05:08 +02:00
Scott Lahteine be5236e839 Reduce setTargetedHotend by removing the switch 2015-05-29 18:03:58 -07:00
Scott Lahteine 06f401e7e5 Redo "invalid extruder" to save 264 bytes
- Use `setTargetedHotend` in `M200`, as with other commands that use
`T` for the extruder
- Synthesize the "invalid extruder" message, obviating several long
strings
2015-05-28 22:25:28 -07:00
Scott Lahteine 1a882bcc2e Merge pull request #2193 from thinkyhead/ignore_unrecognized_commands
Ignore unknown commands if they start with G, M, or T
2015-05-28 22:03:48 -07:00
Scott Lahteine a672872717 Merge pull request #2187 from AnHardt/MAX6675M105
Print active extruder with M105 for MAX6675
2015-05-28 18:12:48 -07:00
Scott Lahteine 9beed830eb Drop commented code_is_good lines 2015-05-28 17:53:47 -07:00
Scott Lahteine 068d4a1eb2 Ignore unknown commands if they start with G, M, or T 2015-05-28 17:44:09 -07:00
Scott Lahteine 5824f613ff Merge pull request #2185 from jothan/bed_integral
Separate the maximum integral power for the bed from PID_INTEGRAL_DRI…
2015-05-28 16:32:02 -07:00
Scott Lahteine c5c9d12630 Merge pull request #2183 from AnHardt/displayinit
Initialize the display earlier
2015-05-28 16:29:18 -07:00
Scott Lahteine ef4becc413 Merge pull request #2188 from AnHardt/FtoN
Replace MSG_F? with MSG_N?
2015-05-28 16:18:50 -07:00
Scott Lahteine eecabf0b00 Merge pull request #2190 from thinkyhead/new_parser_m33
Update M33 for new gcode parser
2015-05-28 16:17:32 -07:00
Scott Lahteine 0564625757 Update M33 for new gcode parser 2015-05-28 14:17:39 -07:00
AnHardt f18f689c01 Replace MSG_F? with MSG_N?
To avoid double definitions.
I prefer to read N for Number not for Nozzle.
2015-05-28 20:30:23 +02:00
AnHardt af7e3f5076 Print active extruder with M105 for MAX6675
Was omitted when T0 is a MAX6675.
2015-05-28 19:03:16 +02:00
Jonathan Bastien-Filiatrault d46d9d998e Add maximum bed integral term in example configurations. 2015-05-28 12:51:37 -04:00
Jonathan Bastien-Filiatrault e86f2342c0 Separate the maximum integral power for the bed from PID_INTEGRAL_DRIVE_MAX / PID_MAX.
My PID_INTEGRAL_DRIVE_MAX was at 96, which was insufficient for my bed
to reach its intended temperature. The head requires a low maximum power since
I run on 24 volts and it has a somewhat low thermal mass.
2015-05-28 11:48:04 -04:00
AnHardt a8a8f236d2 Merge pull request #2180 from thinkyhead/fix_radian
Fix DEGREES macro
2015-05-28 16:19:41 +02:00
AnHardt f0523b5816 Initialize the display earlier
to have it ready to display errors during (temperature)-setup.
2015-05-28 16:08:17 +02:00
Scott Lahteine 790c697c19 Fix DEGREES macro 2015-05-28 00:19:48 -07:00
Scott Lahteine 76b4678f99 Merge pull request #2171 from thinkyhead/gcode_110_is_good
M110 is a known command
2015-05-26 21:17:58 -07:00
Scott Lahteine 03d5709b09 M110 is a known command
- The command parser now displays “unknown command” in more cases.
Known commands must be added to the `switch` inside `process_commands`
to suppress the error.
2015-05-26 20:31:18 -07:00
Scott Lahteine d76a01194d Slight size reduction by adding idle() 2015-05-26 20:08:21 -07:00
Scott Lahteine 22c8bc5ef4 Merge pull request #2157 from AnHardt/bed-mintemp
Activate BED_MINTEMP error
2015-05-26 17:49:37 -07:00
Scott Lahteine 97a48e36e9 Merge pull request #2156 from AnHardt/kill3
Call kill() only once when triggered by a temperature error
2015-05-26 15:34:47 -07:00
Richard Wackerbarth 2deb5a8ac5 Temporary Hack
REVERT THIS CHANGE

In proper use, we want to force the vendor to update this file to reflect distribution parameters

However, until most users have converted to automatic versioning,
we “grant them a pass”
2015-05-25 15:54:08 -05:00
Richard Wackerbarth b5743d6927 Use SOURCE_CODE_URL rather than FIRMWARE_URL 2015-05-25 15:53:34 -05:00
Richard Wackerbarth 5ea139fd79 Revised Versioning mechanism 2015-05-25 15:53:14 -05:00
AnHardt da246f5cb1 Activate BED_MINTEMP error.
And call _temp_error() directly for ERR_MAXTEMP_BED to avoid the only one time use of bed_max_temp_error().

Includes #2156.
2015-05-25 13:23:19 +02:00
AnHardt 959da98d8e Call kill() only once when triggered by a temperature error
to avoid stack overflow when called from interrupt.

Some clean up for calls of disable_all_heaters().
'disable_all_heaters()' is called in kill() and again when 'killed' is already set inside _temp_error().
2015-05-25 12:44:03 +02:00
Scott Lahteine ffc39dc182 Merge pull request #2153 from thinkyhead/leveling_shrink
Reduce code size with out_of_range_error function
2015-05-24 20:32:51 -07:00
Scott Lahteine 68f6f149d0 Reduce code size with out_of_range_error function
- Affects code size when automatic bed leveling is enabled
2015-05-24 20:18:02 -07:00
Scott Lahteine f8aabd670e Notes about Development in its README.md 2015-05-24 18:47:00 -07:00
wurstnase 94120740d8 faster compare
!(~(ab)&0x3) and ab == 0x3 are equal
2015-05-23 07:55:15 +02:00
Scott Lahteine c9141e604a Merge pull request #2145 from thinkyhead/gcode_folding
Indentation in process_commands
2015-05-22 18:47:37 -07:00
Scott Lahteine 3778362f88 Merge pull request #2143 from thinkyhead/fix_command_parser_M110
Cleanup pins in RAMPS_13_EFB boards
2015-05-22 18:47:10 -07:00
Scott Lahteine b55f8718c3 Indent G90/G91, G92 2015-05-22 17:34:08 -07:00
Scott Lahteine b0d520b109 Indent G30, G31/G32 2015-05-22 17:33:17 -07:00
Scott Lahteine ffe27a6225 Indent G29 2015-05-22 17:32:46 -07:00
Scott Lahteine 86083badc2 Indent G4, G10/G11, G28 2015-05-22 17:32:27 -07:00
Scott Lahteine 47d7a9cb5e Indent G2/G3 2015-05-22 17:31:38 -07:00
Scott Lahteine 350f239d84 Indent G0/G1 2015-05-22 17:31:24 -07:00
Scott Lahteine 672b0c1fd3 Cleanup pins in RAMPS_13_EFB boards 2015-05-22 16:20:54 -07:00
Scott Lahteine f4584c51c5 Merge pull request #2142 from thinkyhead/fix_command_parser_M110
No need for +1 on initial seen_pointer
2015-05-22 15:32:11 -07:00
Scott Lahteine 15a2351675 No need for +1 on initial seen_pointer 2015-05-22 15:31:30 -07:00
Scott Lahteine 8cba3bd811 Merge pull request #2141 from thinkyhead/fix_command_parser_M110
Set seen_pointer before calling code_value
2015-05-22 15:29:15 -07:00
Scott Lahteine 550dd87b2a Set seen_pointer before calling code_value 2015-05-22 15:11:48 -07:00
Scott Lahteine 38cc0b93c6 Merge pull request #1874 from AnHardt/Bulgarian
Introduction of Bulgarian - language_bg.h
2015-05-22 13:59:50 -07:00
Scott Lahteine 04a1622172 Merge pull request #2127 from Wackerbarth/Kossel_Pro
Kossel Pro
2015-05-21 18:43:26 -07:00
Scott Lahteine 81c2ca3e10 Merge pull request #2131 from thinkyhead/bq_is_ramps_13_efb
Witbox and Hephestos are RAMPS EFB
2015-05-21 18:39:02 -07:00
Scott Lahteine f919a2fed1 Merge pull request #2134 from AnHardt/preheat-all
Shift call of start_watching_heater() into setTargetHotend()
2015-05-21 18:36:28 -07:00
Scott Lahteine 65343e8ae8 Merge pull request #2138 from thinkyhead/tweak_swh
Fix a couple of doubled semicolons
2015-05-21 18:36:04 -07:00
Scott Lahteine 063881b5bd Fix a couple of doubled semicolons 2015-05-21 18:15:29 -07:00
AnHardt 94dff5b36a Merge pull request #2137 from thinkyhead/tweak_swh
Move millis call in start_watching_heater
2015-05-22 02:02:07 +02:00
Scott Lahteine 70d2f48d4e Merge pull request #2136 from thinkyhead/M303_suppress_error
Suppress the line mismatch error after M303
2015-05-21 16:46:30 -07:00
AnHardt 0c0ace2a04 Remove start_watching_heater() fom M104 and M109 2015-05-22 01:44:50 +02:00
Scott Lahteine 00716d0ca0 Small start_watching_heater adjustment 2015-05-21 16:44:49 -07:00
Scott Lahteine 834747deb7 Merge pull request #2135 from Wurstnase/new_endstop_bits
new endstop bits
2015-05-21 16:35:54 -07:00
Scott Lahteine bde9c70d42 Suppress the line mismatch error after M303 2015-05-21 16:27:22 -07:00
Scott Lahteine 50bd7493cc Merge pull request #2108 from thinkyhead/m33_long_filename_host_support
M33 LONG_FILENAME_HOST_SUPPORT
2015-05-21 16:22:47 -07:00
Scott Lahteine 4d11b29959 Merge pull request #2113 from thinkyhead/command_sanitizer
Command sanitizer
2015-05-21 16:21:58 -07:00
Scott Lahteine 71ff9adb12 Merge pull request #2132 from thinkyhead/fix_M120_M121
M120 and M121 are reversed
2015-05-21 16:20:03 -07:00
wurstnase ff98b8632b new endstop bits 2015-05-21 23:16:43 +02:00
AnHardt 9b0fa9c309 Changed dependency of start_watching_heater() in setTargetHotend() to THERMAL_PROTECTION_HOTENDS 2015-05-21 21:07:37 +02:00
AnHardt bc0764894a Shift call of start_watching_heater() into setTargetHotend()
to warrant watching is set or reset.

Make setTargetBed() in _lcd_preheat() dependant of TEMP_SENSOR_BED.
Use disable_all_heaters() in lcd_cooldown() and abort_on_endstop_hit.
2015-05-21 20:36:11 +02:00
Richard Wackerbarth b878bc5620 Introducing the Kossel Pro Build Configuration 2015-05-21 11:47:34 -05:00
Richard Wackerbarth 3004359191 Libraries supporting Marlin platform 2015-05-21 11:47:34 -05:00
Richard Wackerbarth 6c86266fb6 Brainwave Bootloaders 2015-05-21 11:47:34 -05:00
Richard Wackerbarth 3eee09cb6c Brainwave Variants 2015-05-21 11:47:34 -05:00
Richard Wackerbarth 945fd2cf82 Brainwave Core from Arduino 1.0.1 (In 1.5 file structure) 2015-05-21 11:47:34 -05:00
Richard Wackerbarth 1b707a7cf7 Platform and Boards 2015-05-21 11:47:34 -05:00
Richard Wackerbarth 1d8f61ca8a AT90USB is defined in pins.h 2015-05-21 11:46:54 -05:00
Richard Wackerbarth 735bf2d35f Describe Custom M Code 2015-05-21 08:06:33 -05:00
Scott Lahteine f39658c822 M120 and M121 are reversed 2015-05-21 00:17:44 -07:00
Scott Lahteine 6eb4f90ce7 Also synchronize configurator copies of configs 2015-05-20 21:34:00 -07:00
Scott Lahteine 9d1961ebe3 Witbox and Hephestos are just RAMPS_13_EFB 2015-05-20 21:33:23 -07:00
AnHardt d6c1285ab5 Merge pull request #2115 from AnHardt/_temp_error
Use _temp_error() for all errors thrown by different heater sanity check mechanisms
2015-05-21 00:36:30 +02:00
AnHardt 4422365a53 Merge branch 'Development' of https://github.com/MarlinFirmware/Marlin into _temp_error 2015-05-20 23:34:39 +02:00
AnHardt 4113762062 Merge pull request #2130 from AnHardt/kill2
Add a string parameter to kill()
2015-05-20 23:32:51 +02:00
AnHardt 89d2ee6f13 Make output on display dependant of ULTRA_LCD 2015-05-20 22:03:16 +02:00
AnHardt 120d4c7a8c Merge remote-tracking branch 'origin/kill2' into _temp_error 2015-05-20 21:25:32 +02:00
AnHardt cb6e82dc60 Change from kill() to kill(const char *)
in temperature.cpp
2015-05-20 21:22:48 +02:00
AnHardt 9d13942278 Use new kill() with parameter. 2015-05-20 21:18:52 +02:00
AnHardt 6398c5e28d Merge remote-tracking branch 'origin/kill2' into _temp_error 2015-05-20 21:08:19 +02:00
AnHardt f4a93ed997 Add a string parameter to kill()
Makes the output on the LCD adjustable.
2015-05-20 20:53:48 +02:00
AnHardt 2990c6c45f Use new kill_() for _temp_error()
instead of stop(). We really want to require a reset and no chance to set a new temperature.
2015-05-20 14:03:14 +02:00
AnHardt 9b8c6ed254 Merge pull request #2120 from chris-bo/dogm_config
move dogm font selection to configuration_adv.h
2015-05-20 10:11:34 +02:00
AnHardt 06513565e9 Merge pull request #2105 from eboston/Development
Add  ELB_FULL_GRAPHIC_CONTROLLER with ADAFRUIT_ST7565 display.
2015-05-20 09:56:21 +02:00
Ed Boston 082ed3beed Propagate Configuration.h changes
Updated all the example Configuration.h files for the new display type.
2015-05-19 14:04:57 -07:00
Ed Boston 152b681bb5 Added link to controller github
Added the link to the github information about the
ELB_FULL_GRAPHIC_CONTROLLER
2015-05-19 04:14:55 -07:00
AnHardt 995b84944b Merge pull request #1982 from CONSULitAS/Development_Update_language.h
language.h: update documentation / URL für K8200
2015-05-19 12:13:35 +02:00
Scott Lahteine 7bc5fd8193 Merge pull request #2123 from AnHardt/Duemilanove
Remove Duemilanove
2015-05-18 20:36:05 -07:00
Scott Lahteine 94de1e0d93 Merge pull request #2116 from AnHardt/wording
transpire -> expire
2015-05-18 20:34:46 -07:00
AnHardt 23ee57c1c1 Remove DUEMILANOVE from Travis too. 2015-05-19 03:17:56 +02:00
AnHardt 4d4fa3607b Remove Duemilanove
No way to fit Marlin into 32K.
2015-05-19 02:46:37 +02:00
AnHardt e353d27430 Merge branch 'Development' of https://github.com/MarlinFirmware/Marlin into Bulgarian 2015-05-18 23:56:53 +02:00
AnHardt 775ea401c8 Delete Documentation/LCDLanguageFont.mf to avoid conflicts with Development 2015-05-18 23:56:26 +02:00
Ed Boston ca8d1756d5 Define fixes
Fixed a couple defines that were not changed or commented out.
2015-05-18 14:23:31 -07:00
CONSULitAS b96b28b7cc language.h: update documentation for LANGUAGE_INCLUDE
language.h: update documentation for LANGUAGE_INCLUDE

@thinkyhead What do you think? I think there should be a warning like
this.
2015-05-18 23:11:26 +02:00
Christian Bohn 258bcdefe0 move dogm font selection to configuration_adv.h 2015-05-18 22:54:53 +02:00
AnHardt 7750180c93 transpire -> expire
Minor wording correction.
2015-05-18 21:48:10 +02:00
AnHardt 70163dafb9 Use _temp_error() for all errors thrown by different mechanisms
Now ending in an endless loop.
Tidy up the output format.
We now get:
ERRORTEXT ", system stopped! Heater_ID: " HEATERID

Where ERRORTEXT can be:
"Heating failed"
"Thermal Runaway"
"MAXTEMP triggered"
"MINTEMP triggered"
and soon
"Thermal Jump"

HEATERID can be
0, 1, 2 ,3 , "bed"

This messages are always followed by the common:
"Printer stopped due to errors. Fix the error and use M999 to restart. (Temperature is reset. Set it after restarting)"
2015-05-18 20:26:25 +02:00
Scott Lahteine a0f362c735 Simplify & optimize with current_command_args 2015-05-18 07:08:04 -07:00
Scott Lahteine adc8fcb77f More parser comments, optimize code_seen, save with goto 2015-05-18 07:08:04 -07:00
Scott Lahteine c6d8dd19d9 use fetched value 2015-05-18 07:08:04 -07:00
Scott Lahteine 1116e13f5a Further optimization of command parser 2015-05-18 07:08:03 -07:00
Scott Lahteine 3a4c3ab76e Pre-sanitize the command before handling
- Use a global pointer for the current sanitized command
- Pre-sanitize the current command to bypass `N` and nullify `*`,
removing the need for handlers to bypass, ignore, or nullify these
parts, and reducing overhead for `code_seen`, etc.
- Pre-skip leading whitespace.
- Only look for G, M, T codes at the start of the command.
- Verify that G, M, T codes are followed by command codes.
2015-05-18 07:06:51 -07:00
Ed Boston a83bf18ee1 More functional seperation
Moved SDCARDDETECTINVERTED and SDSLOW to Conditionals.h.
Added U8GLIB_LM6059_AF to define display specific actions.
Added reminder to compile in u8glib
2015-05-18 05:37:46 -07:00
Scott Lahteine cad248fc55 Merge pull request #2111 from AnHardt/at
Name magic value 20 to MAX_OVERSHOOT_PID_AUTOTUNE
2015-05-18 05:25:51 -07:00
AnHardt 97ca1b3f4d Name magic value 20 to MAX_OVERSHOOT_PID_AUTOTUNE
to make it better findable.
2015-05-18 14:15:29 +02:00
Scott Lahteine 7ff18f6657 Merge pull request #2107 from thinkyhead/fix_issue_2106
Have G92 set the nozzle position on Delta and SCARA
2015-05-17 17:39:09 -07:00
Scott Lahteine 0f2c9bacfd M33 LONG_FILENAME_HOST_SUPPORT 2015-05-17 17:36:32 -07:00
Scott Lahteine 3feaef6526 Have G92 set the nozzle position on Delta and SCARA 2015-05-17 17:08:05 -07:00
Ed Boston 047e688e93 Changed ADAFRUIT_ST7565 to ELB_FULL_GRAPHIC_CONTROLLER
Rename of define to avoid confusion between the controller and the
display which had similar names.
2015-05-17 15:23:17 -07:00
Ed Boston 1999ac415c Formatting Changes
Fixes for some code formatting changes and commenting out the
ADAFRUIT_ST7565 define that was left defined.
2015-05-17 13:39:24 -07:00
Ed Boston 41f8cdb3a6 ADAFRUIT_ST7565
Added support for new display type
2015-05-17 12:47:41 -07:00
Scott Lahteine c5feb9c6a1 Merge pull request #2103 from Wurstnase/rework_out_bits
rework out_bits
2015-05-17 07:07:21 -07:00
wurstnase 21ff773832 rework out_bits 2015-05-17 14:33:09 +02:00
Scott Lahteine 6c27eaf864 Merge pull request #2101 from thinkyhead/code_style
Code style and a dangling "else"
2015-05-17 03:39:08 -07:00
Scott Lahteine 80d2c11f9d Merge pull request #2099 from thinkyhead/gcode_rename
Rename gCode to codenum as a consistency
2015-05-17 03:09:46 -07:00
Scott Lahteine d580a0d186 Use "+=" in plane rotation 2015-05-17 01:51:14 -07:00
Scott Lahteine 2f3a410cb0 Fix a potential hanging "else" bug 2015-05-17 01:50:30 -07:00
Scott Lahteine b83e3f0905 Combine "Bed X: " strings 2015-05-17 01:49:52 -07:00
Scott Lahteine 7dfb8becdb Adjust some names and types in Marlin_main.cpp 2015-05-17 01:48:51 -07:00
Scott Lahteine c966aa26ff Comments in Marlin_main.cpp 2015-05-17 01:47:53 -07:00
Scott Lahteine c54a2ea042 Adjust spacing in Marlin_main.cpp and stepper.* 2015-05-17 01:47:02 -07:00
Scott Lahteine 072625ccad Update headings in Marlin_main.cpp and stepper.cpp 2015-05-17 01:44:53 -07:00
Scott Lahteine 16032f149f Rename to codenum as a consistency 2015-05-16 23:17:35 -07:00
Scott Lahteine 273a4a253f Merge pull request #2096 from thinkyhead/cherry_picking3
Hide M117 with no LCD
2015-05-16 21:10:28 -07:00
Scott Lahteine 64825a3d1e Merge pull request #2095 from thinkyhead/cherry_picking2
Add gcode_line_error to reduce code size
2015-05-16 21:09:15 -07:00
Scott Lahteine ea3df2b0b3 Merge pull request #2094 from thinkyhead/cherry_picking
Rename process_commands to process_next_command
2015-05-16 21:08:59 -07:00
Scott Lahteine ca79282eaf Hide M117 with no LCD 2015-05-16 20:59:04 -07:00
Scott Lahteine ce218cafdb Add gcode_line_error to reduce code size 2015-05-16 20:54:58 -07:00
Scott Lahteine 46d59784ad Rename preocess_command to process_next_command 2015-05-16 20:47:40 -07:00
Scott Lahteine 98c4f22432 Merge pull request #2093 from thinkyhead/timeout_default
Tweak to fan kick routine
2015-05-16 19:43:45 -07:00
Scott Lahteine 513077c317 Minor change to fan kick 2015-05-16 19:42:28 -07:00
Scott Lahteine ef62463d20 Merge pull request #2089 from thinkyhead/timeout_default
NO_TIMEOUTS and ADVANCED_OK off by default
2015-05-16 18:35:29 -07:00
Scott Lahteine 76438195f0 NO_TIMEOUTS and ADVANCED_OK off by default 2015-05-16 02:47:20 -07:00
Scott Lahteine 7fecc48174 Merge pull request #2081 from thinkyhead/better_lsdive
Allow lsDive to recurse with minimal stack usage
2015-05-15 22:16:59 -07:00
Scott Lahteine d2563804c8 Add LF to file errors 2015-05-15 04:37:22 -07:00
Scott Lahteine e114662cfa Adjust SdBaseFile spacing 2015-05-15 03:23:49 -07:00
Scott Lahteine 98e91f5253 Allow lsDive to recurse with minimal stack usage 2015-05-15 03:19:07 -07:00
Scott Lahteine 8b2cd930c3 Update README.md 2015-05-14 18:21:53 -07:00
Scott Lahteine 19166a92e4 Merge pull request #2057 from Wurstnase/serial_wait
add plan buffer remaining for 'P' and block buffer remaining 'B'
2015-05-14 04:57:08 -07:00
Scott Lahteine 95f5a68006 Merge pull request #2074 from thinkyhead/lcd_xyz_unknown
Display unknown XYZ on the LCD as "---"
2015-05-14 04:56:38 -07:00
Scott Lahteine e97fcafd0e Merge pull request #2076 from thinkyhead/mendel_inverting
Use MSG_OK in M105
2015-05-14 04:54:11 -07:00
Scott Lahteine 197a256669 Hardtung 2015-05-14 04:43:10 -07:00
Scott Lahteine 2e6f57baa9 More active authors 2015-05-14 04:40:07 -07:00
Scott Lahteine 0f6cd3640b Drop extraneous ok_to_send 2015-05-14 04:38:09 -07:00
Scott Lahteine 0ce355d9e7 Use MSG_OK in M105 2015-05-14 03:33:38 -07:00
Scott Lahteine a366e57385 Merge pull request #2075 from thinkyhead/mendel_inverting
Use Mendel default for INVERT_Y_DIR
2015-05-14 03:29:24 -07:00
Scott Lahteine 7b3acfbb6f Merge pull request #2072 from thinkyhead/better_arc_code
Consolidate arc code, remove motion_control.*
2015-05-14 00:27:22 -07:00
Scott Lahteine 78beef2d73 Use Mendel default for INVERT_Y_DIR 2015-05-14 00:25:47 -07:00
Scott Lahteine 1a4a09c26f Display unknown XYZ on the LCD as "---"
- Also show 2 digits past decimal for Z on DOGM
2015-05-13 22:45:58 -07:00
Scott Lahteine 68ce419147 Note on segment size 2015-05-13 19:11:36 -07:00
Scott Lahteine 8b92249f18 Bring arc_offset into auto scope 2015-05-13 19:00:46 -07:00
Scott Lahteine 80807b2d71 Consolidate arc code, remove motion_control.* 2015-05-13 18:52:41 -07:00
Scott Lahteine 56126786a6 Merge pull request #2069 from thinkyhead/sd_alpha_sort
Formatting tweaks
2015-05-13 02:04:24 -07:00
Scott Lahteine f65833931d Formatting tweaks 2015-05-13 02:02:19 -07:00
Scott Lahteine 56090fc374 Merge pull request #2067 from thinkyhead/thermal_unified
Fix heating error message
2015-05-12 19:06:16 -07:00
Scott Lahteine fcfd99c1ae Add comments to lcd_control_temperature_menu 2015-05-12 18:46:16 -07:00
Scott Lahteine d693e0f378 Use WATCH_TEMP_INCREASE + TEMP_HYSTERESIS + 1 as difference limit 2015-05-12 18:30:38 -07:00
Scott Lahteine 6697a8f375 Watch the heater a little longer 2015-05-12 18:22:47 -07:00
Scott Lahteine 5693a6e3c9 Fix heating error message 2015-05-12 18:17:13 -07:00
Scott Lahteine 747fd5801c Merge pull request #2055 from thinkyhead/thermal_unified
Combine thermal runaway and watch-period
2015-05-12 08:04:29 -07:00
Scott Lahteine 6e5572228d Merge pull request #2064 from thinkyhead/wait_before_g28
Split up prepare_move by type
2015-05-12 07:53:11 -07:00
Scott Lahteine 27ad381e25 Allow fractional seconds in G4 and M0 2015-05-12 07:52:08 -07:00
Scott Lahteine 5146694452 Merge pull request #1884 from shaggythesheep/feature_new_board_ramps_cnc_controller
Feature: Add RAMPS CNC Controller Board
2015-05-12 04:31:49 -07:00
Scott Lahteine b2bd9aae7c SCARA_SEGMENTS_PER_SECOND 2015-05-12 04:18:15 -07:00
Scott Lahteine bd20bd5444 Merge pull request #2063 from chris-bo/autobed_sled
improve sled handling
2015-05-12 03:29:21 -07:00
Scott Lahteine 9e95ceb3fc Split up prepare_move by type
- For better encapsulation add inlines for each prepare_move type
- Move controllerFan vars inside the function as statics
- Some formatting cleanup
- Rename `ClearToSend` as `ok_to_send`
2015-05-12 02:08:20 -07:00
Scott Lahteine 9ba8cf5fe3 Merge pull request #2061 from thinkyhead/wait_before_g28
Always do st_synchronize() before G28
2015-05-12 02:05:30 -07:00
Scott Lahteine 873f7d6f2a Check that configs are up-to-date 2015-05-12 01:33:51 -07:00
Christian Bohn f48599f172 add pin definition to some motherboards 2015-05-12 10:02:23 +02:00
Scott Lahteine b5200e184c Remove extra setup_for_endstop_move 2015-05-12 01:01:53 -07:00
Scott Lahteine 8d814de558 Return void in prevent_dangerous_extrude 2015-05-12 00:55:00 -07:00
Scott Lahteine 367e2eb9f4 Global setup_for_endstop_move 2015-05-12 00:51:22 -07:00
Wurstnase fd873c00c6 Merge pull request #2062 from Wurstnase/z_probe_bit_fix
add missing endstop-bits
(Travis don't see that part of code)
2015-05-12 09:47:52 +02:00
Wurstnase 1d5677cc3b add missing Z-bits 2015-05-12 09:36:19 +02:00
Wurstnase df12e68e7d add missing Z_PROBE-bit 2015-05-12 09:33:24 +02:00
Scott Lahteine fa951f8a0b Always do st_synchronize() before G28 2015-05-12 00:31:51 -07:00
Christian Bohn 27a3b1d895 disable sled pin by default 2015-05-12 08:51:01 +02:00
Christian Bohn fb44b53ae3 sled improvements
- create sled pin definition
- G28 Works with sled
2015-05-11 23:22:19 +02:00
Wurstnase 46d1932380 add plan buffer remaining for 'P' and block buffer remaining 'B' 2015-05-11 13:04:00 +02:00
Scott Lahteine 429c6ccad2 Neaten config formatting 2015-05-10 23:27:00 -07:00
Scott Lahteine 8a0dc4d54a Merge pull request #1922 from Wurstnase/serial_wait
Serial wait
2015-05-10 23:10:25 -07:00
Scott Lahteine 8332a15899 Fix testing of runaway options in temperature.cpp 2015-05-10 23:03:24 -07:00
Wurstnase 526ad82d20 activate advanced_ok and no_timeout 2015-05-11 08:01:51 +02:00
Scott Lahteine 2b92b01afc Fix typo in SanityCheck.h 2015-05-10 22:58:37 -07:00
Scott Lahteine 2445ae3d3a Combine thermal runaway and watch-period
- Make thermal protection for all hotends and/or bed into simple
switches
- Now enable `WATCH_TEMP_PERIOD` when `THERMAL_PROTECTION_HOTENDS` is
enabled
- Move detailed thermal parameters to `Configuration_adv.h`
- Add sanity checks to warn about old configurations
- Change `WATCH_TEMP_PERIOD` to seconds instead of milliseconds
2015-05-10 22:52:01 -07:00
Scott Lahteine 4097207c75 Merge pull request #2041 from thinkyhead/watch_temp
More thermal protection
2015-05-10 21:39:05 -07:00
Scott Lahteine 45d64040fe Merge pull request #2048 from Wurstnase/hit_bits
replace some bools
2015-05-10 20:37:17 -07:00
Scott Lahteine 9b3d4380d3 Only watch the heater that was set 2015-05-10 20:26:45 -07:00
Scott Lahteine 52c0696e44 Merge pull request #2044 from thinkyhead/fix_servos_too
Make some z probe and servo code tweaks
2015-05-10 20:10:42 -07:00
Scott Lahteine 58781cb88c Merge pull request #2045 from delagela/upstream
Correction traductions
2015-05-10 17:58:00 -07:00
Wurstnase b55f32f8a1 replace some bools
this PR replaces some bools with one char. this will safe 3 bytes and should also be sometimes a little bit faster.
2015-05-10 21:37:39 +02:00
Laurent DELAGE e70e6e2b48 Correction traductions 2015-05-10 15:38:50 +02:00
Scott Lahteine f73f4ce555 Make some z probe and servo code tweaks 2015-05-09 19:11:19 -07:00
Bo Herrmannsen 598c7aea5d Update README.md 2015-05-09 23:27:54 +02:00
Bo Herrmannsen 4cafe9e275 updated info on hangout 2015-05-09 23:27:34 +02:00
Bo Herrmannsen b0235adccd Update README.md 2015-05-09 23:18:39 +02:00
Bo Herrmannsen 875d86bf9b removed donation as it was agreed that we should not have it 2015-05-09 23:16:56 +02:00
Bo Herrmannsen 37219072c1 moved to http://www.marlinfirmware.org/ 2015-05-09 23:15:52 +02:00
Bo Herrmannsen 4aa2490099 moved to http://www.marlinfirmware.org/ 2015-05-09 23:14:52 +02:00
Bo Herrmannsen 1351e40c72 moved to http://www.marlinfirmware.org/ 2015-05-09 23:11:42 +02:00
Bo Herrmannsen c0b318330b moved to http://www.marlinfirmware.org/ 2015-05-09 23:11:33 +02:00
Bo Herrmannsen 12d0983757 moved to http://www.marlinfirmware.org/ 2015-05-09 23:11:18 +02:00
Bo Herrmannsen 7cd7b2e4c8 moved to http://www.marlinfirmware.org/ 2015-05-09 22:58:49 +02:00
Bo Herrmannsen 031294bdd2 moved to http://www.marlinfirmware.org/ 2015-05-09 18:31:44 +02:00
Bo Herrmannsen b2b595f8f4 moved to http://www.marlinfirmware.org/ 2015-05-09 18:29:23 +02:00
Bo Herrmannsen 2ddace1a84 moved to http://www.marlinfirmware.org/ 2015-05-09 18:26:58 +02:00
Bo Herrmannsen caf15371e2 moved to http://www.marlinfirmware.org/ 2015-05-09 18:24:31 +02:00
Bo Herrmannsen 29f4ebf32a moved to http://www.marlinfirmware.org/ 2015-05-09 18:16:28 +02:00
Bo Herrmannsen 39d6de1558 Update README.md 2015-05-09 14:59:48 +02:00
Bo Herrmannsen 711f7b0180 Update README.md 2015-05-09 14:56:59 +02:00
Bo Herrmannsen b413cf34e9 moved to http://www.marlinfirmware.org/ 2015-05-09 14:55:22 +02:00
Bo Herrmannsen d92b52b19b moved to http://www.marlinfirmware.org/ 2015-05-09 14:40:18 +02:00
Bo Herrmannsen b9b9a2085a moved to http://www.marlinfirmware.org/ 2015-05-09 14:39:46 +02:00
Bo Herrmannsen 0de83187ea moved to http://www.marlinfirmware.org/ 2015-05-09 14:29:07 +02:00
Bo Herrmannsen 6e8f8706b0 moved to http://www.marlinfirmware.org/ 2015-05-09 14:28:43 +02:00
Bo Herrmannsen d54fe3a40c moved to http://www.marlinfirmware.org/ 2015-05-09 14:19:07 +02:00
Bo Herrmannsen 86ed55e75c moved to http://www.marlinfirmware.org/ 2015-05-09 14:18:23 +02:00
Scott Lahteine 28c87ec81b Disable all heaters on temp error 2015-05-08 23:17:25 -07:00
Scott Lahteine 79106638a8 Fix documentation of heating sanity check 2015-05-08 22:50:08 -07:00
Scott Lahteine 6110494a56 Change default to 4°C in 16s 2015-05-08 22:41:12 -07:00
Scott Lahteine 54deb9eea3 Enable WATCH_TEMP_PERIOD by default 2015-05-08 22:36:02 -07:00
Scott Lahteine deedb00c18 Document WATCH_TEMP_PERIOD 2015-05-08 22:25:51 -07:00
Scott Lahteine 9a6423ea17 Merge pull request #2021 from brupje/Development
Fixes for reprapworld's keypad
2015-05-08 20:35:37 -07:00
Scott Lahteine be77cfd895 Merge pull request #2032 from Wurstnase/toshiba_for_all_stepper
We don't need the old standard one. The STEP_ADD and STEP_IF_COUNTER …
2015-05-08 20:32:30 -07:00
Scott Lahteine 8b59e620bb Merge pull request #2039 from thinkyhead/mks_base
Support for MKS BASE 1.0 board
2015-05-08 20:29:57 -07:00
Scott Lahteine 44decda00b Add documentation for MKS BASE 1.0 et. al. 2015-05-08 19:35:59 -07:00
Scott Lahteine cb4ea75fab Support for MKS BASE 1.0 board 2015-05-08 19:07:37 -07:00
Scott Lahteine 0e70511381 Merge pull request #2036 from brupje/mainline
Fixes for reprapworld's keypad
2015-05-08 18:19:31 -07:00
Wurstnase 0cb87795a3 advanced 'ok'
ok N(linenumber) P(bufferremaining)
the host can use this to send the data much faster.

Some pseudo code:
If (bufferremaining > 0)  send command
## as long there is free buffer send command

Also
if (linenumber > lastsend - bufferremaining) send command
## as long last linenumber received is bigger than lastsend (host) - last bufferremaining received
2015-05-08 22:28:51 +02:00
Wurstnase 182e0d99c9 Merge remote-tracking branch 'Marlin8bit/Development' into serial_wait 2015-05-08 21:27:18 +02:00
brupje b425851441 Rename Configuration_megatronics.h to Configuration.h 2015-05-08 14:40:14 +02:00
brupje d1148a0198 Rename Configuration_megatronics.h to Configuration.h 2015-05-08 14:36:23 +02:00
Scott Lahteine 7f3252eea9 Merge pull request #1999 from paclema/Filrunout_configurable_script
Added configurable script for filrunout from configuration.h
2015-05-08 04:39:59 -07:00
Scott Lahteine 0511ccda23 Merge pull request #2034 from thinkyhead/fixup_configs
Edit thermal runaway description
2015-05-07 21:46:05 -07:00
Scott Lahteine 181ccc884c Edit thermal runaway description 2015-05-07 20:46:03 -07:00
Wurstnase 073e4af7e2 We don't need the old standard one. The STEP_ADD and STEP_IF_COUNTER are also good for non-Toshiba stepper driver. 2015-05-07 18:55:47 +02:00
brupje b7fcb11580 Added example configuration for Megatronics 2015-05-07 13:18:05 +02:00
brupje 8f8174dc93 Revert "Default configuration for megatronics."
This reverts commit 22e0d2afcb.
2015-05-07 13:12:17 +02:00
Scott Lahteine 91fa1dea82 Merge pull request #2029 from thinkyhead/hardware_md
Initial Hardware.md to fix 404 error
2015-05-06 19:16:30 -07:00
Scott Lahteine 69655205f5 Demote headers, add TOC 2015-05-06 19:04:54 -07:00
Scott Lahteine b492391fa7 Initial Hardware.md to fix 404 error
- Addressing issue #1935
2015-05-06 18:30:10 -07:00
Scott Lahteine 26c53634e1 Add a TOC 2015-05-06 18:24:10 -07:00
Scott Lahteine 72bf6acb5b Merge pull request #2027 from thinkyhead/fix_mbl_compile_err
Fix MBL compile error
2015-05-06 14:26:48 -07:00
Scott Lahteine 79633a74ab Fix MBL compile error 2015-05-06 14:25:13 -07:00
brupje ba9741139e Clean up pins file for megatronics 2015-05-05 14:01:52 +02:00
brupje 22e0d2afcb Default configuration for megatronics. 2015-05-05 14:01:20 +02:00
brupje 816aa19861 Up/down buttons were reversed, swapped the assignments 2015-05-05 13:04:46 +02:00
brupje df4d50579a This is conflicting with the settings in ultralcd.h. Not sure why it' s redefined here anyway. 2015-05-05 12:47:24 +02:00
brupje 8f8bf3a897 Make Marlin actually compile when #define REPRAPWORLD_KEYPAD is uncommented 2015-05-05 11:03:20 +02:00
Scott Lahteine 777f2d3820 Merge pull request #2018 from fmalpartida/bugFixing
Bug corrected: persistent HOMING message when HOME button pressed for homing.
2015-05-05 00:12:32 -07:00
Scott Lahteine ecb46de349 Merge pull request #2013 from bq/Fix_lowercase
Fixed lowercase change missing on commit a22a228b.
2015-05-04 23:50:56 -07:00
fmalpartida 150a35eff8 Bug corrected:
Persistent homing message.
Message was declared as an alert, therefore it was persistent.
Updated to message.
2015-05-04 19:48:49 +02:00
Gina Häußge 7dbb595424 Merge pull request #2015 from foosel/revert/changedLinenumberMessage
Reverting changes to error messages on serial console
2015-05-04 15:25:36 +02:00
Gina Häußge ab246ab032 Reverting changes to error messages on serial console
This reverts the changes done to the error message for line number mismatches done in commit d43cc2dd5f
2015-05-04 15:03:00 +02:00
Ivan Galvez Junquera 59529b755d Fixed lowercase change missing on commit a22a228b.
Servo.cpp and Servo.h were changed to lowercase in Makefile but not their actual filenames.
2015-05-04 09:44:34 +02:00
Scott Lahteine df4c104637 Merge pull request #2012 from BrianGilbert/Development
Add example configuration for Boots Industries V2.5 Delta Printer
2015-05-03 20:42:32 -07:00
Scott Lahteine 1f039cde61 Merge pull request #1992 from thinkyhead/too_many_probes
Stow Z probe on M402 without extra raise
2015-05-03 20:40:26 -07:00
Brian Gilbert 1285784a49 Add Boots Industries V2.5 example configuration 2015-05-04 09:10:42 +10:00
Scott Lahteine 65487b75e2 Merge pull request #2011 from thinkyhead/fix_2004
Tweak to planner.cpp position.debug
2015-05-03 16:03:30 -07:00
Scott Lahteine 35493e1af9 Tweak to planner.cpp position.debug 2015-05-03 16:03:05 -07:00
paclema 26015b02d8 Fixed typo and updated Configuration.h of configurator 2015-05-03 02:39:34 +02:00
paclema aedd580911 Updated all configuration.h examples 2015-05-03 02:28:43 +02:00
Scott Lahteine 555128d9e6 Merge pull request #2008 from thinkyhead/fix_2004
Cleanup language.h
2015-05-01 21:39:28 -07:00
Scott Lahteine 2c892fca6a Cleanup of language.h 2015-05-01 21:38:32 -07:00
Scott Lahteine 4b156a612a Merge pull request #2007 from thinkyhead/fix_2004
Fix compile error in configuration_store.cpp
2015-05-01 21:17:12 -07:00
Scott Lahteine 2db384a21d Fix compile error in configuration_store.cpp 2015-05-01 21:15:26 -07:00
Scott Lahteine ca8cec8e8a Merge pull request #1998 from paclema/Filament_runout_fix
Fixed sintaxis error of filament runout
2015-04-29 19:53:25 -07:00
Scott Lahteine 425cd46c12 Merge pull request #1993 from AnHardt/TRP-bed
Enable TRP for the bed
2015-04-29 19:44:50 -07:00
Scott Lahteine b12bcd0f92 Merge pull request #2001 from thinkyhead/thermal_protection_on
Add M428 to set home_offset logically
2015-04-29 19:15:31 -07:00
Scott Lahteine d4c74b8f8c Don't apply M428 if an error occurs
- Also move audio feedback into the command
- Added shorthand for `lcd_buzz` availability
2015-04-29 19:05:48 -07:00
Scott Lahteine d065d37822 Add M428 to set home_offset logically 2015-04-29 18:26:16 -07:00
Scott Lahteine e47e888a08 Merge pull request #1991 from thinkyhead/thermal_protection_on
Enable thermal runaway protection by default
2015-04-29 15:43:18 -07:00
paclema 013a09dbe6 Added configurable script for filrunout form configuration.h 2015-04-29 21:38:40 +02:00
paclema 4dcc0fd55a Fixed sintaxis error of filament runout 2015-04-29 21:32:27 +02:00
AnHardt 514d8ac460 Enable TRP for the bed
in all Configurations.
2015-04-29 08:47:01 +02:00
Scott Lahteine ce3caf447b Tweak how homeaxis deploys and stows 2015-04-28 19:17:48 -07:00
Scott Lahteine a235dca79c Stow z on M402 without extra raise 2015-04-28 19:10:07 -07:00
Scott Lahteine 2610b8d047 Enable thermal runaway protection by default 2015-04-28 17:40:29 -07:00
AnHardt b4b19a6cbd Merge https://github.com/MarlinFirmware/Marlin into Bulgarian
Conflicts:
	Marlin/Configuration.h
	Marlin/configurator/config/Configuration.h
	Marlin/example_configurations/Felix/Configuration.h
	Marlin/example_configurations/Felix/Configuration_DUAL.h
	Marlin/example_configurations/Hephestos/Configuration.h
	Marlin/example_configurations/K8200/Configuration.h
	Marlin/example_configurations/SCARA/Configuration.h
	Marlin/example_configurations/WITBOX/Configuration.h
	Marlin/example_configurations/delta/generic/Configuration.h
	Marlin/example_configurations/delta/kossel_mini/Configuration.h
	Marlin/example_configurations/makibox/Configuration.h
	Marlin/example_configurations/tvrrug/Round2/Configuration.h

Conflicts with my Chinese implementation resolved.
2015-04-28 09:24:32 +02:00
Scott Lahteine 7548a56f64 Merge pull request #1886 from ex-nerd/pins_BRAINWAVE_PRO
Add pin configuration for Brainwave Pro
2015-04-27 23:13:26 -07:00
Scott Lahteine 02acf0641a Merge pull request #1983 from CONSULitAS/Development_Update_language_de.h
language_de.h: updated translation and minor typos
2015-04-27 22:45:24 -07:00
Scott Lahteine a9a4f0ed3b Merge pull request #1989 from thinkyhead/pid_tuning_report
Fix the M303 S-1 report text
2015-04-27 22:41:59 -07:00
Scott Lahteine a120bf3fe4 Latest upstream commits 2015-04-27 22:40:19 -07:00
Scott Lahteine 3688256f86 Merge pull request #1974 from thinkyhead/eeprom_in_gcode
Make EEPROM reproducible in GCode
2015-04-27 22:35:41 -07:00
Scott Lahteine ae53b3cdc3 Fix the M303 S-1 report text 2015-04-27 22:25:00 -07:00
Scott Lahteine c1fbef1722 Merge pull request #1988 from thinkyhead/bye_string_url
Remove obsolete STRING_URL
2015-04-27 22:12:05 -07:00
Scott Lahteine 31516e2a3b Merge pull request #1985 from Arengorn/Development
Update of servo.h
2015-04-27 22:10:02 -07:00
Scott Lahteine 185f8a0a66 Merge pull request #1917 from CONSULitAS/Development_Update_K8200_Config
Example Configuration for K8200: comments/URL/readme
2015-04-27 21:59:56 -07:00
Scott Lahteine 0970102950 Remove obsolete STRING_URL 2015-04-27 21:59:14 -07:00
Scott Lahteine 0f687b5dda Merge branch 'Development' into eeprom_in_gcode
Latest upstream commits
2015-04-27 21:47:47 -07:00
Scott Lahteine 28aef684b4 Merge pull request #1957 from Voxel8/sjk/home_y_before_x
Allow Y to home before X with option in Configuration_adv.h.
2015-04-27 21:41:14 -07:00
Scott Lahteine c1dd9bda7f Merge pull request #1987 from thinkyhead/fix_homing_zpos
Disable endstops between homing bumps
2015-04-27 21:16:47 -07:00
Scott Lahteine 71a0b1a5bb Disable endstops between homing bumps 2015-04-27 21:14:30 -07:00
Scott Lahteine 8c28e36e75 Merge pull request #1986 from thinkyhead/fix_homing_zpos
Fix homing Z position
2015-04-27 20:58:14 -07:00
Scott Lahteine c36226c4dc Fix homing Z position
Add `sync_plan_position()` after `axis_is_at_home(axis)` to keep the
planner position in sync when homing.
2015-04-27 20:55:19 -07:00
Scott Lahteine 2bc1d70a31 Merge pull request #1977 from AnHardt/Cinese2
We mark this historic day, when Marlin went to China.
2015-04-27 20:37:00 -07:00
Scott Lahteine ff178d8cf7 Change M421 to take coordinates
This makes `M421` more amenable for irregular matrices
2015-04-27 19:48:34 -07:00
Scott Lahteine ed988e39a8 Merge pull request #1984 from thinkyhead/leveling_menu_items
Level Bed in Prepare submenu
2015-04-27 19:32:59 -07:00
Bernardo e449659338 Update Servo.cpp
Updated "servo.h" to "Servo.h"
2015-04-27 23:30:11 -03:00
Bernardo ff67ee73fc Update Marlin_main.cpp
Corrected "servo.h" to "Servo.h" because of the updated filename.
2015-04-27 23:29:16 -03:00
Scott Lahteine 5b248757c7 Level Bed in Prepare submenu
- Add “Level Bed” menu item for auto bed leveling
- Hide the option if homing has not been done yet
- Arrange the Prepare submenu more logically (?)
- Add documentation comments, some white-space
- Apply some coding standards here and there
- Move old encoder multiplier debug option to `ultralcd.cpp`
2015-04-27 19:11:25 -07:00
CONSULitAS c5dfb35597 language_de.h: updated translation and minor typos
language_de.h: updated translation and minor typos
2015-04-28 01:03:54 +02:00
CONSULitAS 6423fe7601 language.h: update documentation / URL für K8200
language.h: update documentation for LANGUAGE_INCLUDE
language.h: URL für K8200 github repository
2015-04-28 01:01:57 +02:00
CONSULitAS 8f8824e1d3 Merge remote-tracking branch 'upstream/Development' into Development 2015-04-28 00:59:43 +02:00
CONSULitAS 6af40e9dc0 K8200 example Configuration.h: STRING_URL removed
K8200 example Configuration.h:
* STRING_URL removed: like proposed by thinkyhead in #1917
2015-04-27 23:59:10 +02:00
CONSULitAS d1c1f766d5 Merge remote-tracking branch 'upstream/Development' into K8200_2015-04-23_TEST
Conflicts:
	Marlin/example_configurations/K8200/Configuration.h
2015-04-27 23:54:47 +02:00
Steve Kelly 98ca46006c Allow Y to home before X with option in Configuration_adv.h.
This addresses comments in #1956 and #1079. In particular, this is useful
when both endstops are stationary on a CoreXY system, and the Y axis needs
to be homed before the X so the flags are aligned.
2015-04-27 16:17:30 -04:00
AnHardt 6cba6bcd82 Add 'cn' to the other 'Configuration.h's 2015-04-27 13:24:51 +02:00
AnHardt 1d9699be0f Add some doku 2015-04-27 13:16:20 +02:00
AnHardt 76b12edecf Give TALL_FONT_CORRECTION a default 2015-04-27 12:47:11 +02:00
AnHardt 6b1b71837c Intit. commit for Chinese
Edited the European part of 'ISO10646_CN.fon' to match the existing fonts.
Added Chinese font to make_fonts.bat
Created 'dogm_font_data_ISO10646_CN.h'
Added Chinese to 'language.h'
Added 'language_cn.h' with some minor edits.
Added Chinese font in 'language_en.h' to not fall back to European font.
Added cn to 'Configuration.h'
Changed WIDTH to LCD_PIXEL_WIDTH and HEIGHT to LCD_PIXEL_HEIGHT to have more descriptive names.

In 'dogm_lcd_implementation.h'
Added Chinese Font
Made 1 pixel more room for the larger Chinese font on the status line.
Changed geometry of the 'select bar' by one pixel.
Changed the way the position for values and postcars are set.
2015-04-27 12:15:36 +02:00
Scott Lahteine fb379384ee Reduce MBL eeprom read code 2015-04-26 21:06:04 -07:00
Scott Lahteine 0fca084ea6 Make EEPROM reproducible in GCode
With these changes the output of `M503 S0` is all you need to restore
the EEPROM. Building on this it is straightforward to save and restore
the EEPROM state using the SD card or external GCode file.

- Added `M145` to set “heatup states” for the LCD menu
- Added `M420` to toggle Mesh Bed Leveling
- Added `M421` to set a single Mesh coordinate
- Extended `Config_PrintSettings` with added M codes
- Cleaned up some comments here and there
2015-04-26 20:56:33 -07:00
Scott Lahteine 01bedd17c9 Merge pull request #1973 from thinkyhead/m111_debug_level
M111 - Debug Level
2015-04-26 20:39:56 -07:00
Scott Lahteine d43cc2dd5f M111 - Debug Level
- Add `M111` as a standard option to set the debug level
- Implement `DEBUG_ECHO` in `process_commands`
- Other debug levels (e.g., `DEBUG_DRYRUN`) need more work
2015-04-26 20:08:45 -07:00
Scott Lahteine 1f530beaf1 Merge pull request #1970 from thinkyhead/rename_files
Rename files to move them in the IDE
2015-04-26 15:15:51 -07:00
Scott Lahteine 0ec444720f Rename blinkm files 2015-04-25 21:06:19 -07:00
Scott Lahteine a22a228bcc Rename files to move them in the IDE 2015-04-25 21:04:54 -07:00
Scott Lahteine ac9ca64c50 Merge pull request #1969 from thinkyhead/buzz_duration
Fix BEEPER duration
2015-04-25 03:26:28 -07:00
Scott Lahteine a932e7490f No noTone needed, but delay is 2015-04-25 03:25:30 -07:00
Scott Lahteine 9c5d14ea68 Fix BEEPER duration 2015-04-25 03:12:49 -07:00
Scott Lahteine b3436c875a Merge pull request #1968 from thinkyhead/more_disable_warning
Add a warning for DISABLE_[XYZ] options
2015-04-25 00:47:42 -07:00
Scott Lahteine 5c29fda167 Add a warning for DISABLE_[XYZ] options 2015-04-25 00:46:33 -07:00
Scott Lahteine 0438f0d835 Merge pull request #1924 from thinkyhead/raise_z_for_m401_m402
Raise Z for M401 and M402
2015-04-24 22:41:12 -07:00
Scott Lahteine a640cad139 Merge pull request #1967 from thinkyhead/g4_dwell_message
Use millis_t for progress_bar_ms and expire_status_ms
2015-04-24 22:17:28 -07:00
Scott Lahteine c92b59952a Use millis_t for progress_bar_ms and expire_status_ms 2015-04-24 22:16:09 -07:00
Scott Lahteine b275946a52 Merge pull request #1966 from thinkyhead/g4_dwell_message
G4 shows status message only if no message is set already
2015-04-24 22:02:37 -07:00
Scott Lahteine 97dfa0365d Rename expireStatusMillis to expire_status_ms 2015-04-24 21:51:10 -07:00
Scott Lahteine 7295640f44 Remove extraneous ; 2015-04-24 21:37:27 -07:00
Scott Lahteine 0d8c00d3f6 Define lcd_hasstatus for no lcd also 2015-04-24 21:36:04 -07:00
Scott Lahteine 777ca11760 Merge pull request #1925 from thinkyhead/move_zoffset
Apply zprobe_zoffset in axis_is_at_home
2015-04-24 21:29:07 -07:00
Scott Lahteine 182f2cda35 Minor cleanup of M48 2015-04-24 21:26:36 -07:00
Scott Lahteine 3a6fd912cd Latest upstream commits, merged 2015-04-24 21:14:13 -07:00
Scott Lahteine 3c9e94e035 Merge pull request #1964 from AnHardt/Max6675again
Add variant for MAX6675 in M104
2015-04-24 20:44:45 -07:00
Scott Lahteine 56ff46eb8b Improve code_has_value test 2015-04-24 20:43:16 -07:00
Scott Lahteine ce142afdda G4 shows status message only if no message is set already
- Address issue raised in #1961
2015-04-24 20:13:01 -07:00
Scott Lahteine c5a1b227a4 Merge pull request #1965 from thinkyhead/g28_xyz_are_flags
Remove set-coordinate extension of G28
2015-04-24 19:34:38 -07:00
Scott Lahteine 35e79d56a5 Remove set-coordinate extension of G28 2015-04-24 19:23:12 -07:00
Scott Lahteine 3a74bb5039 Merge pull request #1945 from Wurstnase/max_endstopp
Max endstopp
2015-04-24 19:17:38 -07:00
Scott Lahteine 2606d1d892 Merge pull request #1960 from Wurstnase/macro_steppercpp
Macro steppercpp
2015-04-24 18:45:19 -07:00
AnHardt 0fed46360c Add variant for MAX6675 in M104
Else will throw error:
@:0 B@:0
Error:No thermistors - no temperature
[ERROR] Error:No thermistors - no temperature

when no bed is defined
2015-04-24 16:43:19 +02:00
Wurstnase 79a44a9de3 stepper.cpp macros rework
delete some tabs
2015-04-24 08:03:17 +02:00
Scott Lahteine 588ed70d4a Latest upstream commits, merged 2015-04-23 21:18:48 -07:00
Scott Lahteine 7fb8d9fe05 Merge remote-tracking branch 'origin/move_zoffset' into move_zoffset 2015-04-23 21:12:53 -07:00
Scott Lahteine 0165560333 Apply zprobe_zoffset in axis_is_at_home
Ensure the probe offset will always be included when homing Z.
2015-04-23 21:12:38 -07:00
Scott Lahteine 075386e7fe Merge pull request #1959 from thinkyhead/lcd_move_rate
Include axis parameter to ultralcd's line_to_current
2015-04-23 21:06:57 -07:00
Scott Lahteine 2558c10c6c Use the slower feedrate for XY axes 2015-04-23 20:06:17 -07:00
Scott Lahteine 31932912dd Use AxisEnum instead of int for _lcd_move 2015-04-23 19:32:37 -07:00
Scott Lahteine c2e11daf66 Merge pull request #1958 from thinkyhead/redo_1937
Fix homing of YZ with DUAL_X_CARRIAGE
2015-04-23 19:12:51 -07:00
Scott Lahteine c3560e0288 Include axis parameter to ultralcd's line_to_current 2015-04-23 19:10:09 -07:00
Scott Lahteine a0a5ff61c4 Merge pull request #1951 from AnHardt/Azteeg_x3
Fix for #1946
2015-04-23 18:40:00 -07:00
Scott Lahteine 0094481e55 Merge pull request #1955 from AnHardt/langlang
Add DISPLAY_CHARSET_HD44780_CYRILLIC as alternative in SanityCheck.h
2015-04-23 18:36:06 -07:00
Scott Lahteine 64268f3312 Fixup axis_is_at_home a little 2015-04-23 18:16:44 -07:00
Scott Lahteine 996d0a9185 Squish the code down a little 2015-04-23 18:06:36 -07:00
Scott Lahteine 8534bc376c Fix homing of YZ with DUAL_X_CARRIAGE 2015-04-23 17:56:37 -07:00
Scott Lahteine 3b97a7d446 Merge pull request #1944 from AnHardt/beep2
More Beeper clean up
2015-04-23 17:50:02 -07:00
Scott Lahteine 461aaf2126 Merge pull request #1941 from thinkyhead/gcode_M410
Add M410 QuickStop command
2015-04-23 17:30:58 -07:00
Wurstnase be9e4ceddc fix typo
c'n'p ftw :/
2015-04-23 10:35:14 +02:00
unknown c26d816839 filter any 0 2015-04-22 12:09:57 +02:00
AnHardt f2c94b3298 tone will end automaticly 2015-04-22 01:49:55 +02:00
AnHardt c5e0e29d23 Add DISPLAY_CHARSET_HD44780_CYRILLIC as alternative in SanityCheck.h
and add some documentation - how to integrate a new font.
2015-04-21 21:42:00 +02:00
AnHardt b59e92ab99 Fix for #1946
Syntax error.
2015-04-21 13:50:28 +02:00
Wurstnase 61ae43f35e v <-> code_value 2015-04-20 23:31:10 +02:00
Wurstnase da0d91a79b max endstopp
no user will home to 0 with a max endstopp
2015-04-20 23:28:46 +02:00
AnHardt 3a27a78f9e Commented REPRAP_DISCOUNT_SMART_CONTROLLER again
and removed some tabs.
2015-04-20 15:01:43 +02:00
AnHardt 064f2b37d0 More Beeper clean up.
Centralised beep code to lcd_buzz().
From gcode_M300() and lcd_quick_feedback().

Enforced max. duration for M300 to 5 seconds.

Corrected description in 'Configuration.h'

LCD_FEEDBACK_FREQUENCY_HZ 0 gives now a silent delay of
LCD_FEEDBACK_FREQUENCY_DURATION_MS.
2015-04-20 11:11:13 +02:00
Wurstnase 92575cecca new timout/add adv_ok 2015-04-20 00:22:40 +02:00
AnHardt 671aaf2dc9 Minor fix for M300
Corrected wrong order of parameters.
2015-04-19 13:25:20 +02:00
Scott Lahteine d931220a65 Tweak comments 2015-04-18 23:12:29 -07:00
Scott Lahteine 47847765e2 Add M410 QuickStop command 2015-04-18 23:07:48 -07:00
Scott Lahteine a4ca87ba99 Merge pull request #1933 from bq/Fix_stray_in_configuration
Fixed compilation error "error: stray ‘\357’ in program"
2015-04-18 03:56:31 -07:00
Scott Lahteine 5e3bb4bdf3 Merge pull request #1931 from paclema/M303_echo
Added new PID autotune info, to make easy copy & paste results to marlin
2015-04-18 03:49:31 -07:00
Scott Lahteine 67a4471324 Merge pull request #1926 from nophead/acceleration_fix
Fixed jump in speed at high accelerations on axes with lots of steps
2015-04-18 03:09:54 -07:00
Ivan Galvez Junquera b99e63a7bf Fixed compilation error "error: stray ‘\357’ in program" in several configuration files.
Introduced in commit 697ee2dc and later spread to other files.
2015-04-17 16:10:58 +02:00
Bo Herrmannsen 2d1e730216 Update README.md 2015-04-17 15:00:21 +02:00
paclema 581685a231 Added new PID autotune info, to make easy copy & paste results to marlin 2015-04-17 11:15:09 +02:00
Chris Palmer 483384aaa4 Fixed faulty comment merge 2015-04-17 09:31:53 +01:00
Chris Palmer cc6b7cf3ce Fixed some comment spellings. 2015-04-17 09:28:08 +01:00
Chris Palmer e4595fa24a Fixed jump in speed when using high accelerations on axes with lots of steps.
I.e., when acceleration * steps per mm > 2,000,000.
This was done by changing MultiU24X24toH16 to take a 32b bit operand.
Removed the claim that stepper.cpp uses the Leib algorithm.
2015-04-16 23:04:38 +01:00
Wurstnase b09a957fce make 'wait' optional and mark as workaround 2015-04-16 21:42:54 +02:00
Scott Lahteine d0b65ff642 Merge pull request #1923 from thinkyhead/babystep_delay_2us
Babystep delay 2us
2015-04-16 07:51:37 -07:00
Scott Lahteine 58d128b7a9 Apply zprobe_zoffset in axis_is_at_home
Ensure the probe offset will always be included when homing Z.
2015-04-16 07:41:19 -07:00
Scott Lahteine 63b98b8280 Raise Z for M401 and M402 2015-04-16 07:24:33 -07:00
wurstnase d69da22f7c last_command_time inside get_command() 2015-04-16 16:20:23 +02:00
Scott Lahteine 53be0f3399 Babystep delay 2us 2015-04-16 04:16:36 -07:00
wurstnase 574e2d856e remove config 2015-04-16 13:07:20 +02:00
Scott Lahteine f49a73d69f Merge pull request #1919 from paclema/M48_mismatch
Fixed M48 mismatch between n and P parameter on documentation
2015-04-16 03:25:23 -07:00
paclema cde5eee2a5 Removed unnecessary comments 2015-04-15 19:01:09 +02:00
paclema e1b69db6d1 Fixed M48 mismatch between n and P parameter on documentation 2015-04-15 18:17:58 +02:00
Bo Herrmannsen d0b1f70118 Update Compilation.md 2015-04-15 16:35:02 +02:00
Bo Herrmannsen f8389b1076 Update README.md 2015-04-15 15:25:18 +02:00
elgambitero 60f46276bf Some minor translations to spanish 2015-04-15 10:06:51 +02:00
CONSULitAS a40c274310 Example Configuration for K8200 back in sync
example_configurations\K8200\Configuration.h:
* merge upstream changes from default Configuration.h manually
* add some machine specific comments
2015-04-15 10:06:50 +02:00
CONSULitAS 1de9b568db Example Configuration for K8200: comments/URL/readme
Example Configuration for K8200 : comments/URL/readme

example_configurations\K8200\Configuration.h:
* add machine specific header
* change STRING_URL to K8200 fork (@thinkyhead: What do you think?)

example_configurations\K8200\readme.md:
* updated documentation
* added URLs and links
2015-04-15 10:02:13 +02:00
CONSULitAS 0af5e3a04f Example Configuration for K8200: comments/URL/readme
Example Configuration for K8200 : comments/URL/readme

example_configurations\K8200\Configuration.h:
* add machine specific header
* change STRING_URL to K8200 fork (@thinkyhead: What do you think?)

example_configurations\K8200\readme.md:
* updated documentation
* added URLs and links
2015-04-15 10:00:41 +02:00
Scott Lahteine 637babb99b Merge pull request #1915 from elgambitero/Development
Some minor translations to spanish
2015-04-14 19:59:39 -07:00
Scott Lahteine 71f183a3a2 Merge pull request #1913 from CONSULitAS/Development_Update_K8200_Config
Example Configuration for K8200 back in sync
2015-04-14 19:52:47 -07:00
elgambitero cb9ac490d4 Some minor translations to spanish 2015-04-14 23:14:52 +02:00
CONSULitAS 3851ac6226 Example Configuration for K8200 back in sync
example_configurations\K8200\Configuration.h:
* merge upstream changes from default Configuration.h manually
* add some machine specific comments
2015-04-14 17:12:42 +02:00
CONSULitAS b447a4ffab Merge remote-tracking branch 'upstream/Development' into Development 2015-04-14 15:35:08 +02:00
Scott Lahteine d57b23b1e3 Merge pull request #1912 from thinkyhead/some_fixes
Enable all old_z_*_endstop vars for Z_DUAL_ENDSTOPS
2015-04-14 05:12:49 -07:00
Scott Lahteine 7336e6df07 Always define old_z, not always z2 2015-04-14 04:55:20 -07:00
Scott Lahteine 5dd87d2e74 Enable all old_z_*_endstop vars for Z_DUAL_ENDSTOPS
- Potentially addressing #1911
2015-04-14 04:05:51 -07:00
Scott Lahteine 639ffc341e Merge pull request #1910 from thinkyhead/some_fixes
Rename servos[] array in Marlin to servo[]
2015-04-14 03:44:20 -07:00
Scott Lahteine 3f02da646c Make sure axis_active is cleared for #1908 2015-04-14 03:41:37 -07:00
Scott Lahteine e0e68c5cbc Rename servos[] array in Marlin to servo[] 2015-04-14 03:13:25 -07:00
Chris Petersen ffaf1b4f22 Add pin configuration for Brainwave Pro
Copied from jcrocholl's contributions to the OpenBeamUSA Marlin fork
2015-04-13 23:46:57 -07:00
Scott Lahteine dee6840c50 Merge pull request #1907 from thinkyhead/some_fixes
Fix type of code_has_value
2015-04-13 18:04:53 -07:00
Scott Lahteine 642f6a92bc fix type of code_has_value 2015-04-13 18:02:17 -07:00
Scott Lahteine 6b51305c4b Merge pull request #1906 from thinkyhead/some_fixes
Naming and code comments
2015-04-13 17:59:48 -07:00
Scott Lahteine 17ad80c1e1 Spacing in XYZ_CONSTS 2015-04-13 17:58:47 -07:00
Scott Lahteine 09d60e0128 Naming and code comments 2015-04-13 17:17:36 -07:00
Scott Lahteine c05b347617 Merge pull request #1902 from msutas/Development
Fix Syntax Error Filament Runout Statement
2015-04-13 14:31:57 -07:00
Mehmet Sutas 5a9e45cc4a Fix Syntax Error Filament Runout Statement 2015-04-13 22:37:18 +03:00
Scott Lahteine 0908c41156 Merge pull request #1899 from thinkyhead/squash_fixups
Several fixups
2015-04-12 23:31:31 -07:00
Scott Lahteine 257a907456 Fix typo in next_bed_check_ms 2015-04-12 23:17:28 -07:00
Scott Lahteine e4b1e8651b next_ vars faster than previous_
- Change some `previous_` time vars to `next_` so an add only happens
at intervals
- Fix `HEATER_0_USES_MAX6675` polling too frequently, or not at all
2015-04-12 23:06:50 -07:00
Scott Lahteine cfa60bdb97 Merge branch 'Development' into squash_fixups
Conflicts:
	Marlin/ultralcd.cpp
2015-04-12 22:51:18 -07:00
Scott Lahteine ccddc280be Apply three more commits 2015-04-12 22:47:44 -07:00
Scott Lahteine 666f9cd7b4 Merge pull request #1897 from epatel/Development
Manual bed leveling menu fixes.
2015-04-12 21:26:36 -07:00
Scott Lahteine e7aae314de Merge pull request #1896 from thinkyhead/cold_extrude
Homing fixes
2015-04-12 17:50:19 -07:00
Scott Lahteine 74e4b42f7e Default MACHINE_NAME to "3D Printer" 2015-04-12 17:17:41 -07:00
Scott Lahteine 8857b9e921 Use the extruder argument in plan_buffer_line 2015-04-12 16:57:00 -07:00
Edward Patel a37c7ff16d Manual bed leveling menu fixes.
lcdDrawUpdate = 2 helped a lot!
2015-04-12 16:56:17 +02:00
Scott Lahteine ac2b23f574 Homing fixes
- Prevent `Z_SAFE_HOMING` from homing Z twice in some cases
- Allow `G28` with XYZ values of 0 to explicitly set the position
- Don’t add `home_offset` when setting XYZ explicitly in `G28`
- Add `code_has_value` function to check for the presence of a numeric
value (could just test for space or nul to allow other types of values)
2015-04-11 20:06:48 -07:00
Scott Lahteine b089eb42eb Merge pull request #1893 from thinkyhead/cold_extrude
Fix doubled lcd_quick_feedback
2015-04-11 04:57:00 -07:00
Scott Lahteine 055b11814a Additional cleanup of ultralcd.cpp 2015-04-11 04:56:08 -07:00
Scott Lahteine 388dd0cfa5 Fix doubled lcd_quick_feedback
- MENU_ITEM causes lcd_quick_feedback to be called, so only those calls
to `lcd_goto_menu` outside of the `MENU_ITEM` macro need to set the
`feedback` flag when calling `lcd_goto_menu`.
2015-04-11 04:45:04 -07:00
Scott Lahteine f8b4ee079b Merge pull request #1891 from thinkyhead/cold_extrude
machine name for hephestos too
2015-04-11 01:37:07 -07:00
Scott Lahteine c6bb98abad machine name for hephestos too 2015-04-11 01:36:24 -07:00
Scott Lahteine 79a5b14eb7 Merge pull request #1890 from thinkyhead/cold_extrude
Apply CUSTOM_MACHINE_NAME to configs
2015-04-11 00:04:46 -07:00
Scott Lahteine ccbe2c4ea3 Apply CUSTOM_MACHINE_NAME to configurations
- Replace “Mendel” with “RepRap”
2015-04-10 21:29:42 -07:00
Scott Lahteine 71adb1ee59 Merge branch 'Development' into cold_extrude
Latest upstream commits
2015-04-10 21:13:50 -07:00
Scott Lahteine f1a03c5447 Merge pull request #1887 from thinkyhead/cold_extrude
Break out prevent_dangerous_extrude feature
2015-04-10 16:16:52 -07:00
Scott Lahteine 5fe382949b Some G-Codes comment cleanup 2015-04-10 16:16:13 -07:00
Scott Lahteine 8f164f4c83 Clean up M85 in GCodes.md 2015-04-10 16:04:32 -07:00
Scott Lahteine a327d876fe Document G92 arguments in GCodes.md 2015-04-10 16:02:00 -07:00
Scott Lahteine 652d59cd80 Spacing of g-codes in GCodes.md 2015-04-10 15:59:55 -07:00
Scott Lahteine fe912f44dc Smaller headings 2015-04-10 15:58:32 -07:00
Scott Lahteine 93eb63238f Move G Codes into categories with M Codes 2015-04-10 15:57:54 -07:00
Scott Lahteine a3b13eb5ac Organize M Codes by Category
- In GCodes.md
2015-04-10 15:54:36 -07:00
Scott Lahteine 3105ebc562 Restore M928, M999 2015-04-10 15:05:00 -07:00
Scott Lahteine 01654bdec1 Cleanup formatting of some M codes 2015-04-10 15:03:41 -07:00
Scott Lahteine 907e8e98e5 Add GCodes from Marlin 1.0.3 dev, format as pre 2015-04-10 14:55:21 -07:00
Scott Lahteine 8b16ebe705 Break out prevent_dangerous_extrude feature
- It’s inline here, but could be a macro and duplicated for
`planner.cpp`
2015-04-09 22:40:37 -07:00
Scott Lahteine 67c0e8323e Merge pull request #1879 from thinkyhead/cold_extrude
Fix moves for DELTA for MANUAL_BED_LEVELING
2015-04-09 22:06:06 -07:00
Scott Lahteine 740152ee70 Merge branch 'Development' into cold_extrude
Latest upstream commits
2015-04-09 20:23:47 -07:00
Scott Lahteine 5914d9d7de Shuffling declarations.. 2015-04-09 20:21:30 -07:00
Scott Lahteine b328c6e6b6 Shuffling declarations. 2015-04-09 20:05:10 -07:00
Scott Lahteine fb4cefc91d Define lcd_move_[xyz] ahead of lcd_move_menu_axis 2015-04-09 19:33:16 -07:00
Richard Miles 4c3736ed43 Feature: Add RAMPS CNC Controller Board
Created a new board to make using RAMPS as a CNC machine controller
easier. It maps pin 8 to the spindle and pin 9 to the controller fan.
2015-04-09 16:32:56 +01:00
Scott Lahteine 9189cc66ab Fix moves for DELTA for MANUAL_BED_LEVELING
- Use `line_to_current` in place of `plan_buffer_line`
2015-04-09 04:32:14 -07:00
AnHardt 56fc3a4835 bgr -> bg
+ update in documentation
2015-04-09 13:09:18 +02:00
Scott Lahteine 7a1aef1450 Merge pull request #1877 from AnHardt/display-only
Made encoderPosition and quick_feedback dependant on NEWPANEL
2015-04-09 03:54:05 -07:00
Scott Lahteine 6096164d79 Merge pull request #1878 from thinkyhead/cold_extrude
Cold extrude
2015-04-09 03:41:54 -07:00
Scott Lahteine a488445cbe Fix spelling of "too" 2015-04-09 03:41:31 -07:00
Scott Lahteine b1950a7f25 Merge pull request #1875 from Natealus/Development
Z Probe inverting not present in example configs, causes error
2015-04-09 03:37:24 -07:00
AnHardt df50523605 Made encoderPosition and quick_feedback dependant on NEWPANEL
where the hardware is available.
Fix for #1873
2015-04-09 12:26:45 +02:00
Scott Lahteine dcde09fdff Merge remote-tracking branch 'upstream/Development' into Development
Latest upstream commits
2015-04-09 03:21:36 -07:00
Scott Lahteine 2ca099d1e7 Merge pull request #1876 from thinkyhead/cold_extrude
Catch dangerous extrude before trying several
2015-04-09 03:21:19 -07:00
Scott Lahteine 837ceb9abb Merge pull request #1867 from epatel/Development
Added sanity check for MESH_NUM_X_POINTS and MESH_NUM_Y_POINTS
2015-04-09 02:29:47 -07:00
Scott Lahteine a95544f92a Spell adjustment 2015-04-09 02:04:06 -07:00
Scott Lahteine a00ebf03d4 Merge pull request #1868 from AnHardt/LCD_STR
Moved the definitions of the LCD_STR_* to Conditionals.h
2015-04-09 01:56:23 -07:00
Scott Lahteine 7f22464353 Merge remote-tracking branch 'upstream/Development' into Development
Latest upstream commits
2015-04-09 01:41:10 -07:00
Scott Lahteine 1269c445ab Catch dangerous extrude before trying several 2015-04-09 01:40:48 -07:00
Scott Lahteine 4abd23ae9e Merge pull request #1866 from AnHardt/contrast
Remove Contrast Menu for device U8GLIB_ST7920
2015-04-09 00:34:25 -07:00
Natealus 585eee6549 Z Probe inverting not present in example configs, causes error
The line const bool Z_PROBE_ENDSTOP_INVERTING = false; // set to true to
invert the logic of the endstop is in the main configuration.h but
wasn't present in the example configuration.h's. Causes a compiling
error with Z Probe enabled. Just added it to all the configs. :)
2015-04-08 18:57:30 -06:00
AnHardt c5961892e3 Bulgarian for all the Configuration.h's 2015-04-09 01:52:13 +02:00
AnHardt 6248c93f37 Introduction of Bulgarian - language_bgr.h
Thank you @Nprod!
2015-04-09 01:26:48 +02:00
AnHardt 540dbb35e2 And an other MSG_BED in Marlin_main.cpp 2015-04-09 01:16:06 +02:00
AnHardt 14d4419e16 Replaced SERIAL_PROTOCOLPGM(MSG_BED) with SERIAL_PROTOCOLPGM("Bed")
Resolved some warnings in Marlin_main.cpp regarding compares of signed and unsigned integers by replacing 'int' or 'uint16_t' with 'uint8_t'.
2015-04-08 23:59:01 +02:00
AnHardt ea897654a4 Moved the definitions of the LCD_STR_* to Conditionals.h
to avoid errors in Marlin_main.cpp. #1860

In the include tree of Marlin_main.cpp the decision between the display types is not made.
To include the right LCD_STR_* ether 'dogm_lcd_implementation.h' or 'ultralcd_implementation_hitachi_HD44780.h' with all their code.
A 'dogm_lcd_implementation.h.h' would be a curiosity.
So i moved both of the definition blocks to conditionals.h

On the long term it could make sense to use the same numbering for the u8glib and the hitachi symbols.
2015-04-08 21:53:58 +02:00
Edward Patel 7dc64efe67 Added sanity check for MESH_NUM_X_POINTS and MESH_NUM_Y_POINTS 2015-04-08 20:52:48 +02:00
AnHardt 6a514f3dc9 Aplied HAS_LCD_CONTRAST also to Marlin_main.cpp
and cleaned typo.
2015-04-08 13:26:29 +02:00
AnHardt a76fb42ca6 Merge https://github.com/MarlinFirmware/Marlin into contrast 2015-04-08 13:05:21 +02:00
AnHardt bcc04192fc Remove Contrast Menu for U8GLIB_ST7920
The other two devices we use in u8glib have more than only dummy code.
Checked this in the library code.
2015-04-08 12:56:38 +02:00
Scott Lahteine 98f3130a5c Merge pull request #1865 from thinkyhead/configurator_values
Thermistor values for configurator
2015-04-08 03:13:27 -07:00
Scott Lahteine 4788b59300 Thermistor values for configurator 2015-04-08 03:12:21 -07:00
Scott Lahteine bb917ecda8 Merge pull request #1853 from thinkyhead/dev_version
Set version to "1.0.3 dev"
2015-04-08 01:57:51 -07:00
Scott Lahteine caa7734402 Merge pull request #1864 from thinkyhead/is_running
IsStopped / IsRunning inline
2015-04-08 01:10:36 -07:00
Scott Lahteine c82da64d10 Merge pull request #1863 from lcfm1/patch-3
Update language_ru.h
2015-04-08 01:07:12 -07:00
Scott Lahteine 3162971cd6 current_position not static 2015-04-08 01:05:39 -07:00
Scott Lahteine 27cb90da8b IsStopped / IsRunning inline 2015-04-08 00:56:19 -07:00
Max 07fc2b5b70 Update language_ru.h 2015-04-08 13:18:45 +06:00
Scott Lahteine 756bb5e268 Cleanup formatting in hitachi & dogm lcd 2015-04-07 22:04:10 -07:00
Scott Lahteine 7431ef7e2d Merge branch 'Development' into dev_version
Latest upstream commits
2015-04-07 21:14:00 -07:00
Scott Lahteine 43773ff735 Formatting and lcd contrast masking 2015-04-07 21:11:03 -07:00
Scott Lahteine eb6e3886f4 Set version to "1.0.3 dev" 2015-04-07 20:38:43 -07:00
Scott Lahteine cf9b58452c Minimum delay in menu click feedback
Squished #1849
2015-04-07 20:20:30 -07:00
Scott Lahteine 419f3ebc03 Merge pull request #1850 from OpCode1300/docs
Fix typo in readme
2015-04-07 20:14:53 -07:00
Administrator ff429cdd8a Fix typo in readme 2015-04-07 23:03:46 -05:00
Scott Lahteine 1d291be2ba Fix de after PREVENT_DANGEROUS_EXTRUDE
- Set `de` to 0 when `position[E] = target[E]`
- Address regression mention in #1846
2015-04-07 20:01:08 -07:00
Scott Lahteine e03da4805b Merge pull request #1774 from epatel/Development
Mesh bed leveling: Added G29 S3 + finer display steps during manual input + bug fix
2015-04-07 19:24:46 -07:00
Scott Lahteine 5b2c67f4c3 Merge pull request #1847 from thinkyhead/more_configurator
Fix G29 not deploying probe in some instances
2015-04-07 15:41:02 -07:00
Scott Lahteine f7c4e7e19f Fix G29 not deploying in some instances 2015-04-07 15:38:29 -07:00
Edward Patel a9ed39b12d Moved checks into SanityCheck.h + removed previous added checks. 2015-04-07 22:58:08 +02:00
Edward Patel 002340f32c Merge branch 'Development-Marlin' into Development 2015-04-07 22:49:12 +02:00
Scott Lahteine 3db4e0fb5d Merge pull request #1842 from thinkyhead/more_configurator
Configurator updates
2015-04-06 23:38:20 -07:00
Scott Lahteine c379f17117 Encapsulate setting of homing_bump_feedrate 2015-04-06 23:21:33 -07:00
Scott Lahteine 7d2c2f1790 Updates for the configurator
- Sections in all `Configuration_adv.h`
- Recognize JAPANESE/WESTERN/CYRILLIC options
- Better capturing of comments for tooltips
2015-04-06 23:16:01 -07:00
Scott Lahteine 967db181d0 Latest upstream commits 2015-04-06 21:46:18 -07:00
Scott Lahteine e502144eda Fixup formatting of last commit 2015-04-06 21:28:14 -07:00
Scott Lahteine d05efa008d Merge pull request #1825 from shaggythesheep/bugfix_no_heaters
Bugfix: Temperature checks when no heaters in use
2015-04-06 21:25:22 -07:00
Scott Lahteine d20f42c883 Don't stow the probe until the last grid point!
- Address Issue #1682 at hash #issuecomment-89756858
2015-04-06 20:58:09 -07:00
Scott Lahteine 5c2bb05af3 Merge pull request #1839 from AnHardt/fix-statusmessage
Fix lcd_status_message
2015-04-06 19:08:25 -07:00
Scott Lahteine d70a4a3847 Merge pull request #1823 from AnHardt/splashscreen
Disable splash-screen when done once
2015-04-06 18:48:48 -07:00
Scott Lahteine 56aea5f8e5 Merge pull request #1829 from Natealus/Development
Azteeg X3 Pro Pin fix ups
2015-04-06 18:19:33 -07:00
Scott Lahteine 6a860b99dc Merge pull request #1828 from Wackerbarth/Configurator
Update Configurator Files
2015-04-06 18:09:26 -07:00
AnHardt ac843fbf3b Fix lcd_status_message
Because we now can use utf8 with up to 3 bytes per symbol,
lcd_status_message[] must be 3*LCD_WIDTH wide.
Filling up the message, or cutting to length, are fixed to.

Fix for #1832 about at the end.
2015-04-07 02:33:34 +02:00
Scott Lahteine 6d084c017f Fix typo in FWRETRACT handler
Should be `retracting` and not `retract`
2015-04-06 17:04:22 -07:00
Scott Lahteine ed7a2f9fac Merge pull request #1827 from thinkyhead/fixup_dualz
Fix compile error with Z_DUAL_ENDSTOPS
2015-04-06 16:34:04 -07:00
Edward Patel d27c82a450 Added check for Delta printers in Mesh, #error not yet supported. 2015-04-06 23:03:06 +02:00
Edward Patel 9a093b2e8f Added #error + mention not to enable ABL and Mesh at the same time 2015-04-06 19:38:59 +02:00
AnHardt 6ae714894e Now the simplycistic solution.
Just and only display splashscreen only once.
2015-04-06 12:43:38 +02:00
AnHardt d521693641 Revert "Draw content in display loop only when needed"
This reverts commit bf04a92cc0.
2015-04-06 12:31:31 +02:00
Natealus b6f2bff461 Azteeg X3 Pro Pin fix ups 2015-04-05 23:34:56 -06:00
Scott Lahteine d867c18535 Fix compile error with Z_DUAL_ENDSTOPS 2015-04-05 20:48:08 -07:00
Richard Wackerbarth 46474cf2f2 Incorporate @section headers from configurator 2015-04-05 22:39:40 -05:00
Richard Wackerbarth cf66cb8808 Bring configurator up-to-date 2015-04-05 22:38:15 -05:00
Richard Miles 1a5293c2ce Prevents MINTEMP / MAXTEMP when no heaters present
This commit checks whether or not HEATER_0 is in use, and if not, skips
the MIN / MAX temperature checks.
2015-04-05 22:27:14 +01:00
Edward Patel 5360158545 Merge branch 'Development-Marlin' into Development 2015-04-05 20:28:44 +02:00
AnHardt bf04a92cc0 Draw content in display loop only when needed
Example for splash screen.
2015-04-05 12:53:20 +02:00
AnHardt 9865318f1c Disable splash-screen when done once
Splash screen was shown with every display init.
That means every time the menus where entered.

Note the 2 in the initialisation.
The buffer is already written in two steps a 512 byte.
Without the 2 only the upper half is shown.
2015-04-05 12:24:01 +02:00
Scott Lahteine f5dad8ade2 Merge pull request #1819 from thinkyhead/fixup_probing
Have the configurator read from MarlinFirmware repo
2015-04-04 20:19:44 -07:00
Scott Lahteine 53eb662908 Have the configurator read from MarlinFirmware repo 2015-04-04 20:19:17 -07:00
Edward Patel d24ea7c03f Added Comment in hope of github seeing these updates 2015-04-05 05:14:06 +02:00
Edward Patel 61de6ecd54 Added change to example Configuration.h's 2015-04-05 04:26:35 +02:00
Edward Patel 2f0081bbb5 Compile error fix! Fix for merge artifacts. 2015-04-05 04:16:16 +02:00
Edward Patel 0e6514e7bd Bug fix! Missed putting z value back in right slot after zigzag mod. 2015-04-05 04:13:34 +02:00
Edward Patel ea10601406 Merge branch 'Development-Marlin' into Development
Conflicts:
	Marlin/Configuration.h
	Marlin/Marlin_main.cpp
2015-04-05 04:06:02 +02:00
Scott Lahteine cb02bc6db4 Merge pull request #1817 from AnHardt/dogm_looptest
Execute DOGM display-loop less often
2015-04-04 17:29:56 -07:00
Scott Lahteine f3597cf55a Merge pull request #1818 from quillford/patch-1
Fixed scara directions
2015-04-04 16:27:33 -07:00
quillford b02a55e60f Fixed scara directions
Config said for a delta instead of for a scara
2015-04-04 15:26:35 -07:00
Scott Lahteine 6c5f07c5cb Merge pull request #1813 from thinkyhead/fixup_probing
Fix bad thermal runaway trigger
2015-04-04 14:41:43 -07:00
AnHardt 340d165a9c Reduce display updates for dogm displays
In 'if (encoderPastThreshold || LCD_CLICKED)' lcdDrawUpdate was not set.

'lcd_status_update_delay'-loop was not effective in  function
lcd_status_screen().
The loop prevented the update of the status screen but not the displays
update.
Shifted the loop into lcd_update().
2015-04-04 22:02:24 +02:00
AnHardt 418d22d7b3 Revert "Testloop cleanup"
This reverts commit 6361404b91.
2015-04-04 18:33:36 +02:00
AnHardt 6361404b91 Testloop cleanup
Shifted condition should still be in.
2015-04-04 17:56:13 +02:00
AnHardt 6d4b3f0d6a Move the condition before the loop
Result see: https://youtu.be/AEnBzdu9_tk
Dot is moving not so fast -> less executed loops.
2015-04-04 17:49:39 +02:00
AnHardt 4cb7dfc546 Move the 'alive dot' in every displayloop
Result see: https://www.youtube.com/watch?v=tdu7J0i-c4g
Loop is executed several times per display update.
2015-04-04 17:34:28 +02:00
Scott Lahteine b0f198c153 heater_index above its use 2015-04-04 06:18:08 -07:00
Bo Herrmannsen 3d01492228 Update README.md 2015-04-04 15:07:36 +02:00
Bo Herrmannsen bf5dbb90c4 Update README.md 2015-04-04 15:06:13 +02:00
Scott Lahteine 60f8e0386f More thermal runaway states 2015-04-04 05:45:36 -07:00
Scott Lahteine f9dbd73652 Fix tr_target_temperature type - float! 2015-04-04 05:25:53 -07:00
Scott Lahteine c83faa9c5e Merge pull request #1811 from thinkyhead/fixup_probing
Compare indices instead of floats for probe actions
2015-04-04 05:14:59 -07:00
Bo Herrmannsen cabd713610 Update README.md 2015-04-04 14:12:36 +02:00
Bo Herrmannsen f39e5988a3 Update README.md 2015-04-04 14:09:59 +02:00
Bo Herrmannsen 20a047b8c5 Update README.md 2015-04-04 14:09:39 +02:00
Bo Herrmannsen a5e9263987 Update README.md 2015-04-04 14:08:30 +02:00
Bo Herrmannsen 506a42338b Update README.md 2015-04-04 14:07:59 +02:00
Bo Herrmannsen 2f189be2e4 Update README.md 2015-04-04 14:07:20 +02:00
Bo Herrmannsen 1836aa2615 Update README.md 2015-04-04 14:02:58 +02:00
Scott Lahteine 61f8394361 Compare indices instead of floats for probe actions 2015-04-04 05:01:16 -07:00
Scott Lahteine a98183b463 Merge pull request #1809 from Wackerbarth/LanguageCleanup
Deferring default definition made #undef unnecessary
2015-04-04 04:37:20 -07:00
Scott Lahteine 41ded7e996 Merge pull request #1805 from thinkyhead/fixup_probing
Optimize coordinate copying, fix EXTRUDER_RUNOUT_PREVENT
2015-04-04 03:49:54 -07:00
Richard Wackerbarth 4119738e69 Deferring default definition made #undef unnecessary 2015-04-04 05:48:07 -05:00
Scott Lahteine 6f06d33be5 Fix missing refresh_cmd_timeout function 2015-04-04 03:47:25 -07:00
Scott Lahteine 2d099a2c70 Fix missing backslash in macro 2015-04-04 03:35:16 -07:00
Scott Lahteine 0f9b29e6c5 Merge pull request #1803 from Natealus/Development
Z_PROBE_ENDSTOP Pin for Azteeg X3 Pro
2015-04-03 23:45:05 -07:00
Scott Lahteine 0935084141 Fix manage_inactivity
- Document `manage_inactivity` function
- Allow `EXTRUDER_RUNOUT_PREVENT` to work with all extruders
- Use faster `memcpy` for copying coordinates
2015-04-03 23:42:50 -07:00
Scott Lahteine c065da52ec Spacing and spelling 2015-04-03 22:54:48 -07:00
Scott Lahteine a3e129e091 Merge pull request #1801 from thinkyhead/fixup_probing
Minor optimizations
2015-04-03 22:30:01 -07:00
Scott Lahteine e8a711994a Merge pull request #1802 from Natealus/Development
Compiling error temperature.cpp with multiple extruders defined
2015-04-03 22:14:12 -07:00
Natealus ab11f90da0 Z_PROBE_ENDSTOP Pin for Azteeg X3 Pro
Just a simple #ifdef Z_PROBE_ENDSTOP to define the pin for it. Also has
a couple commented lines for switching Z_MIN_PIN if needed.
2015-04-03 23:14:03 -06:00
Scott Lahteine 8680b515b0 Fix missing tmp_extruder -> target_extruder 2015-04-03 22:12:49 -07:00
Natealus a6ba40ae48 Compiling error temperature.cpp with multiple extruders defined
It wouldn't compile because of this line in temperature.cpp it turns out
it was just a stray ( that didn't line up with the previous lines so I
just made it in line with the rest and it compiled fine.
2015-04-03 23:09:31 -06:00
Scott Lahteine fc3c76fc16 Fix #1800 2015-04-03 22:04:42 -07:00
Scott Lahteine c185912c19 Latest upstream commits, mostly 2015-04-03 21:58:48 -07:00
Scott Lahteine 1e5c18bb14 Add code_value_short and SERIAL_CHAR 2015-04-03 21:43:30 -07:00
Scott Lahteine e0d4368cb5 Minor code cleanup, move NUM_AXIS out of config 2015-04-03 20:45:24 -07:00
Scott Lahteine 4c7af484f8 Merge pull request #1787 from thinkyhead/fixup_tr
Fix: thermal_runaway_protection triggered by target temperature increase
2015-04-03 20:06:56 -07:00
Scott Lahteine c747becec1 Merge pull request #1796 from thinkyhead/pidbed_temp_eeprom
Add PIDTEMPBED to EEPROM
2015-04-03 20:03:38 -07:00
Scott Lahteine 369a497300 Merge pull request #1797 from quillford/Development
Fixed README typos
2015-04-03 19:58:09 -07:00
Scott Lahteine 84e4edaea7 Add M48 comment for #1794 2015-04-03 19:52:00 -07:00
Scott Lahteine 9ba55baa5b Track target temperature separately for each heater 2015-04-03 19:42:40 -07:00
Scott Lahteine 528e32a1d4 Fix timeout in thermal_runaway when temperature is set higher 2015-04-03 19:34:55 -07:00
Scott Lahteine b98ebd517e disable / enable_all_steppers functions 2015-04-03 19:25:22 -07:00
Scott Lahteine 713953d8c1 Upstream commits, allow no extruder in M105 2015-04-03 19:16:38 -07:00
Scott Lahteine 8f893eb8df Merge pull request #1798 from thinkyhead/fixup_probing
Fix probe height at G28 start
2015-04-03 19:03:00 -07:00
Scott Lahteine dde7e11f8e Merge branch 'Development' into fixup_tr
Latest upstream commits
2015-04-03 18:56:52 -07:00
Scott Lahteine abd7fc36b6 Fix probe height at G28 start 2015-04-03 18:54:55 -07:00
Scott Lahteine 610c8c5471 Merge pull request #1795 from thinkyhead/fixup_probing
Finish pin tests
2015-04-03 18:44:44 -07:00
quillford 1ad5fb1178 Fixed README typos 2015-04-03 18:36:01 -07:00
Scott Lahteine e4934164e4 Merge pull request #1790 from Wurstnase/fix_home_z
fix feedrate for homing z
2015-04-03 18:35:09 -07:00
Scott Lahteine a469d796e1 Add cleanups needed for #1772 2015-04-03 18:14:57 -07:00
Scott Lahteine c0ca26cd50 Merge branch 'Development' into fixup_probing
Latest upstream commits
2015-04-03 18:05:17 -07:00
Scott Lahteine 5c1f08a35f Merge pull request #1772 from croadfeldt/Merge_cleanup
Z_PROBE_ENDSTOP
2015-04-03 18:04:31 -07:00
Scott Lahteine db7b0ea0cf Merge pull request #1569 from Wackerbarth/Development
Incorporating Build Numbers
2015-04-03 16:56:31 -07:00
Scott Lahteine 92119d0f7d Static delta[] for SCARA 2015-04-03 16:46:56 -07:00
Scott Lahteine 007a4bd421 Adjust spacing in view function 2015-04-03 16:41:58 -07:00
Scott Lahteine 424d5495e4 Add PIDTEMPBED to EEPROM 2015-04-03 16:38:05 -07:00
Scott Lahteine 6b919e14c1 Group all universal variables 2015-04-03 15:45:41 -07:00
Scott Lahteine 21cd2e4fae Merge branch 'Development' into fixup_probing
Latest upstream commits
2015-04-03 15:32:15 -07:00
Scott Lahteine 0e8182bbf2 Additional pin tests, cleanup 2015-04-03 15:31:35 -07:00
Scott Lahteine e8700bd1e2 Merge pull request #1788 from AnHardt/iss1786
Fix typo in Marlin_main.cpp
2015-04-03 15:14:58 -07:00
Wurstnase 45565b680d second wrong feedrate 2015-04-03 18:01:28 +02:00
Wurstnase 581b2aae04 fix feedrate for homing z
max_feedrate is in mm/s. line_to_destination needs a feedrate in mm/min because there is feedrate/60.
2015-04-03 16:11:32 +02:00
Edward Patel 48b1c3822f Merge branch 'Development-Marlin' into Development 2015-04-03 00:46:30 +02:00
Richard Wackerbarth 8f620de0ff Actually activate Automatic Versioning 2015-04-02 09:20:24 -05:00
Richard Wackerbarth ccdaea51ba Add KosselPro 2015-04-02 09:20:24 -05:00
Richard Wackerbarth f4599143eb Allow M115 to better reflect the build 2015-04-02 09:20:24 -05:00
Richard Wackerbarth a33e20b27d Adjust per-project .gitignore
Refer to http://git-scm.com/docs/gitignore
to see why this is appropriate
2015-04-02 09:20:24 -05:00
Richard Wackerbarth 34c7d45879 Hook for Auto-generated Build Version
The automatic versioning system extracts a
build version number from the SCM system

That versioning information is written to the file
_Version.h, a file that is NOT preserved in the SCM.

If such a file will be present,
we include it here to utilize the parameters
that are defined therein.
2015-04-02 09:20:24 -05:00
Scott Lahteine c756b4cf07 Comment tweak 2015-04-02 06:11:03 -07:00
AnHardt 23cd54755f Fix typo in Marlin_main.cpp
related to current_position[Z_AXIS] and retract_zlift.

'+ =' -> '+='

Fix for #1786
2015-04-02 14:50:31 +02:00
Scott Lahteine e96df67630 Clarify thermal_runaway_protection
- Add comments documenting `thermal_runaway_protection`
- Add an enum for the thermal runaway states
- Add macros for temperature helper functions
- Fix a glitch with the z probe sled in homeaxis
2015-04-02 05:10:14 -07:00
Bo Herrmannsen 93fdc2951b Update README.md 2015-04-02 07:22:01 +02:00
Chris Roadfeldt 79b56b083f Merge branch 'Development' into Merge_cleanup 2015-04-01 19:33:11 -05:00
Chris Roadfeldt 0afe6696f0 Merge remote-tracking branch 'MarlinFirmware/Development' into Merge_cleanup 2015-04-01 19:31:20 -05:00
Chris Roadfeldt 9e603920c2 Merge branch 'Merge_cleanup' into Development 2015-04-01 19:31:14 -05:00
Chris Roadfeldt 59994bd519 Not doing network admin work, pin not ping... :) 2015-04-01 19:24:42 -05:00
Chris Roadfeldt 916f59e35f Spaces not tabs in language.h.
Catch unlikely but possible error and head crash when using
Z_PROBE_REPEATABILITY_TEST
2015-04-01 19:22:05 -05:00
Scott Lahteine 66b3b53e76 Merge pull request #1762 from AnHardt/MiMa
Fix MIN&MAX temperatures again
2015-04-01 16:52:07 -07:00
alexborro 56633da44f Merge pull request #1773 from Wurstnase/cartesian_old_bump
old bump_divisor for cartesian/corexy-printer
2015-04-01 20:39:04 -03:00
Bo Herrmannsen ae2ebc6951 Update README.md 2015-04-01 23:18:51 +02:00
Edward Patel 6bdebede27 Added description in the documentation for the new parts. 2015-04-01 21:32:28 +02:00
Edward Patel 6b91b7b411 Mesh bed leveling: Added G29 S3 + finer steps in manual probing.
* Use "G29 S3 Xn Yn Zn.nn" to modify bad probed point manually
* Changed manual Z steps from 0.05 to 0.025 and made brought it to Configuration.h
2015-04-01 21:18:51 +02:00
Chris Roadfeldt 26dc80bf2d Typo fixed... 2015-04-01 13:47:17 -05:00
Chris Roadfeldt b84db7ff5b Merge branch 'Merge_cleanup' into Development 2015-04-01 13:36:02 -05:00
Chris Roadfeldt 2966ae2022 Fix Z_PROBE_PING not declared, allows code to compile if Z_PROBE_ENDSTOP
is not used.
2015-04-01 13:32:25 -05:00
Wurstnase 67d5e7973e old bump_divisor for cartesian/corexy-printer
some people are starting to ask why homing is so slow. this is the old standard hard-coded value.
2015-04-01 20:17:49 +02:00
Chris Roadfeldt fb74995fe3 Merge branch 'Merge_cleanup' into Development 2015-04-01 12:15:01 -05:00
Chris Roadfeldt bb41edc2ef Fixed extra #endif 2015-04-01 12:13:25 -05:00
Chris Roadfeldt f53e951462 Merge branch 'Merge_cleanup' into Development 2015-04-01 11:52:34 -05:00
Chris Roadfeldt a57862e29f Cleaning up code in prep for merge with upstream. 2015-04-01 11:40:24 -05:00
Chris Roadfeldt ca40921bf1 Merge branch 'Merge_cleanup' into Development 2015-04-01 10:34:36 -05:00
Chris Roadfeldt 745d9fe1a4 Merge remote-tracking branch 'MarlinFirmware/Development' into Merge_cleanup
Conflicts:
	Marlin/Marlin_main.cpp
2015-04-01 10:31:02 -05:00
AnHardt 488666832b Remove the previously introduced () 2015-04-01 13:40:05 +02:00
Scott Lahteine 443468df8d Merge pull request #1771 from AnHardt/iss1770
Added new - changed entries from Fix up LCD_PROGRESS_BAR
2015-04-01 02:13:30 -07:00
Scott Lahteine 9593f09b99 Merge pull request #1764 from thinkyhead/probe_leveling
Fix homing and leveling
2015-04-01 02:00:39 -07:00
Scott Lahteine 7bf31cc8a1 Merge pull request #1768 from atfield90/atfield90-patch-1
Added support for Atmega 1281 chip
2015-04-01 01:59:39 -07:00
Scott Lahteine 72c7de3570 Cleanup M48 2015-04-01 01:48:45 -07:00
Scott Lahteine 97a258b0b0 Clean up, document home_axis 2015-04-01 01:44:13 -07:00
AnHardt 831016b09f Added new - changed entries from Fix up LCD_PROGRESS_BAR
for when no LCD is defined.
Fix for #1770.
2015-04-01 10:17:17 +02:00
Chris Roadfeldt a508d835db Changed Z_PROBE_AND_ENDSTOP to Z_PROBE_ENDSTOP.
Updated documentation in Configuration.h.
Cleaned up and commented some code relating to Z_PROBE_ENDSTOP.
Separated Z_MIN_ENDSTOP and Z_PROBE_ENDSTOP completely.
2015-04-01 02:14:55 -05:00
Chris Roadfeldt fdb4ddbdea Merge remote-tracking branch 'MarlinFirmware/Development' into Development 2015-04-01 00:52:08 -05:00
atfield90 d273c90d53 Added support for Atmega 1281 chip 2015-04-01 05:15:27 +02:00
Scott Lahteine 1c7391717e Include sync_plan_position_delta for SCARA also 2015-03-31 19:58:03 -07:00
Scott Lahteine 8231fb166d Merge pull request #1758 from AnHardt/MENU_MULTIPLIER_ITEM
Fix: Audio feedback for MENU_MILTIPLIER_ITEM click
2015-03-31 19:29:48 -07:00
Scott Lahteine 0b57a2ab8b Merge pull request #1757 from bq/Translation-strings
Added new trasnslatable labels.
2015-03-31 18:56:25 -07:00
Scott Lahteine 18bb6be80e Fix homing and leveling
- Include the current Z when raising the axis after and between probing
- Add `sync_plan_position_delta` for parity with `sync_plan_position`
- Clean up and clarify `M48`, `dock_sled`, and others
2015-03-31 18:52:19 -07:00
AnHardt 3f2e863206 Improve conditions for HAS_TEMP
and use them in temperuture.h

Flattened the if structure - the preprocessor is doing the work - not the Arduino. Arduino.
2015-04-01 02:56:14 +02:00
AnHardt 85f8a26ba4 Fix MIN&MAX temperatures again
replaced GE0 with th matching GEX in the second row.
added some ()
2015-04-01 00:48:04 +02:00
AnHardt 19b11dfdd7 Fix can't enter MENU_MULTIPLIER_ITEM 2015-03-31 18:29:16 +02:00
Chris Roadfeldt c89b8368ee Merge remote-tracking branch 'MarlinFirmware/Development' into Development
Conflicts:
	Marlin/Marlin_main.cpp
2015-03-31 11:08:36 -05:00
Ivan Galvez Junquera d08782386b Added new trasnslatable labels.
* Added MSG_END_HOUR and MSG_END_MINUTE labels to all language files.
* Available translations:
  EN, FR, DE, ES, IT, PT, PT-BR.
2015-03-31 16:59:43 +02:00
Scott Lahteine be593b600b Merge pull request #1756 from thinkyhead/fixup_config
Correct XYZ after obtaining plan_bed_level_matrix
2015-03-31 05:08:41 -07:00
Scott Lahteine 97a69d9b1c Correct XYZ after obtaining plan_bed_level_matrix
The current position needs to be updated by using the inverse
`plan_bed_level_matrix` on X, Y, and Z. All moves in the planner are
transformed by the `plan_bed_level_matrix` from this point forward.
2015-03-31 04:24:13 -07:00
Scott Lahteine 5f6962dd90 Merge pull request #1755 from thinkyhead/fixup_config
Raise when not retracting
2015-03-31 03:47:01 -07:00
Scott Lahteine ae89ccd2c7 Use Z_RAISE_BETWEEN_PROBINGS 2015-03-31 03:45:21 -07:00
Scott Lahteine 9a5a7a3f68 Raise when not retracting
Code to raise the probe before retraction is good, but the code should
always raise the probe, not just when retracting
2015-03-31 03:38:03 -07:00
Scott Lahteine 6ff1620fcb Merge pull request #1753 from thinkyhead/fix_extruder_offset
Fix EXTRUDER_OFFSET compiler error
2015-03-31 03:21:45 -07:00
Scott Lahteine 8a4ed3c241 Merge pull request #1754 from thinkyhead/fixup_config
Correct the comment about M206
2015-03-31 03:20:57 -07:00
Scott Lahteine cda4bd4ad9 Correct the comment about M206 2015-03-31 03:20:15 -07:00
Scott Lahteine db4d8e835c Merge pull request #1752 from thinkyhead/fix_lcd_click
Fix LCD click
2015-03-31 02:52:17 -07:00
Scott Lahteine 935592cf6a offsets off by default 2015-03-31 02:50:52 -07:00
Scott Lahteine 2a45922afe Restore extruder_offset, init more simply 2015-03-31 02:49:47 -07:00
Scott Lahteine 28792e5731 Fix typo in assignment 2015-03-31 02:10:49 -07:00
Scott Lahteine bb6174524f Fix EXTRUDER_OFFSET compiler error
- Addressing issue #1741
2015-03-31 02:08:57 -07:00
Scott Lahteine 571652c49b Fix LCD click
- Make the default LCD click sound more pleasant
- Fix warnings about bed temperature runaway
2015-03-31 01:41:24 -07:00
Chris Roadfeldt 45ece5afb1 Merge remote-tracking branch 'MarlinFirmware/Development' into Development 2015-03-31 03:07:57 -05:00
Chris Roadfeldt 17707e7479 Fixed Z_PROBE_PIN pullup bug.
Documented some additional areas that should be addressed if Z_PROBE is
fully separated from Z_MIN or Z_MAX.
Fixed a documentation error in sanity checks. Servos start at 0 not 1.
2015-03-31 02:56:41 -05:00
Scott Lahteine 21ab44cfa7 Merge pull request #1750 from thinkyhead/fixup_config
Bring all configs up to date
2015-03-30 23:49:04 -07:00
Scott Lahteine 50145266cd Merge pull request #1748 from thinkyhead/raise_before_homing
Apply Z_RAISE_BEFORE_HOMING before homing XY
2015-03-30 23:37:41 -07:00
Scott Lahteine a117b6bff6 Merge pull request #1747 from thinkyhead/progress_bar_tweak
Fix up LCD_PROGRESS_BAR
2015-03-30 23:37:28 -07:00
Scott Lahteine 3348b3bf0c Allow SD_FINISHED_RELEASECOMMAND to be undefined 2015-03-30 23:31:48 -07:00
Scott Lahteine 82794fa5f7 Add delta generic not renaming 2015-03-30 23:25:04 -07:00
Scott Lahteine ba2c7cb467 Update configs with all the latest 2015-03-30 23:24:33 -07:00
Chris Roadfeldt ec1d9c0b8f Use Z_PROBE_ENDSTOP_INVERTING when checking pin status. 2015-03-31 01:06:01 -05:00
Chris Roadfeldt 3175c70c79 Manually synching back up with MarlinFirmware/Development. 2015-03-31 00:11:11 -05:00
Chris Roadfeldt faac2af4af Merge remote-tracking branch 'origin/Development' into Development 2015-03-31 00:03:07 -05:00
Chris Roadfeldt 3be00cce6f Merge remote-tracking branch 'MarlinFirmware/Development' into Development
Conflicts:
	Marlin/Configuration.h
2015-03-30 23:59:01 -05:00
Chris Roadfeldt e08f8eed05 Revert 06f767d..cba5692
This rolls back to commit 06f767d608.
2015-03-30 23:51:36 -05:00
Scott Lahteine 2e7a4bd7db Merge pull request #1749 from thinkyhead/fixup_config
Restore ENDSTOPPULLUPS in Configuration.h
2015-03-30 21:15:44 -07:00
Scott Lahteine 5e82ed4f30 Restore ENDSTOPPULLUPS in Configuration.h 2015-03-30 21:15:16 -07:00
Scott Lahteine b8973051c3 Merge pull request #1746 from thinkyhead/power_supply
Allow POWER_SUPPLY to be 0
2015-03-30 21:00:40 -07:00
Chris Roadfeldt 992b07ca57 Don't disable Z_RAISE_BEFORE_HOMING when Z_PROBE_AND_ENDSTOP is enabled. 2015-03-30 22:58:10 -05:00
Chris Roadfeldt cba5692673 Merge remote-tracking branch 'MarlinFirmware/Development' into Development
Conflicts:
	Marlin/Marlin_main.cpp
	Marlin/stepper.cpp
2015-03-30 22:33:05 -05:00
Scott Lahteine 8500c80b33 Apply Z_RAISE_BEFORE_HOMING before homing XY 2015-03-30 20:22:21 -07:00
Scott Lahteine 92b54aa27e #define HAS_POWER_SWITCH 2015-03-30 19:44:53 -07:00
Scott Lahteine 5519882eea Fix up LCD_PROGRESS_BAR
- Some messages should not expire with `PROGRESS_MSG_EXPIRE`.
- Simplify conditional for progress bar with sanity checks.
- Rename `messageTick` to `expireStatusMillis` and make it the expire
time.
2015-03-30 18:00:54 -07:00
Scott Lahteine 6864280803 Use elif and parentheses in conditionals 2015-03-30 16:52:27 -07:00
Scott Lahteine 8c136a5ab5 Conditionals and comments for PS = 0 2015-03-30 16:50:05 -07:00
Scott Lahteine 2faed961ce Allow POWER_SUPPLY 0 for no power switch 2015-03-30 16:39:47 -07:00
Scott Lahteine baa6787393 Merge pull request #1740 from thinkyhead/fixup_homing
Apply leveling for DELTA
2015-03-30 15:45:33 -07:00
Scott Lahteine 346c07cc1a Merge pull request #1743 from AnHardt/extrudemultiply
Replace extrudemultiply by extruder_multiply[active_extruder]
2015-03-30 15:45:10 -07:00
AnHardt 9ac7dc675e Make filament display on dogm_... same as hitachi...
Thanks @MagoKimbra.
2015-03-30 16:56:21 +02:00
AnHardt 50a732360a Replace extrudemultiply by extruder_multiply[active_extruder]
Fix for #1460.

Seems to work with only one extruder. Can't test this myself with more.
2015-03-30 13:35:03 +02:00
Scott Lahteine e63076504d Merge pull request #1733 from AnHardt/c20
Get back folder symbols on Hitachi displays
2015-03-30 01:57:00 -07:00
Scott Lahteine 41d258697a Pass the z for after probing to retract_z_probe
A `z_before` value is passed to probe_pt, but the `retract_z_probe`
function assumes that Z is 0, doesn’t add `current_position[Z_AXIS]` as
other cases do. This may be superfluous, so this is a test, and will be
reverted if it has no effect.
2015-03-30 00:45:02 -07:00
croadfeldt 06f767d608 Merge remote-tracking branch 'upstream/development' into development 2015-03-30 02:10:49 -05:00
Scott Lahteine b47fa8c064 Merge pull request #1735 from AnHardt/compilerCandy
Remove some further warnings
2015-03-29 23:55:19 -07:00
Scott Lahteine e96db1cd6c Make G29 shared function inline 2015-03-29 23:21:39 -07:00
Scott Lahteine d73b169de3 Apply leveling for DELTA,
- Fix `prepare_move` function not calling `adjust_delta`
- Add more shorthand for plan_buffer_line.
- Fix wrong `federate` usage, assuming they are all mm/m
- Minor `stepper.cpp` cleanup
2015-03-29 23:16:12 -07:00
Scott Lahteine 85b67e5223 Merge pull request #1738 from thinkyhead/fixup_homing
Fix G29 E and M48 n
2015-03-29 20:08:19 -07:00
Scott Lahteine ce44bee28b Small code reduction 2015-03-29 19:45:14 -07:00
Scott Lahteine 0213f7f016 Cleanup case for M666 2015-03-29 19:39:43 -07:00
Scott Lahteine 803425e12c Fix G29 E and M48 n
- Users prefer `G29 E` to work like `M48 E` so fixed that
- `M48 n` replaced with `M48 P` (or `p`). `n` legacy support
- Shorten some strings to save precious bytes
- Smaller code for 3-point probing
2015-03-29 18:56:09 -07:00
Scott Lahteine 1e9999711c Merge pull request #1736 from thinkyhead/fixup_homing
Fix G28 homing Y with X
2015-03-29 18:27:17 -07:00
Scott Lahteine d738b7acdd Merge pull request #1724 from Natealus/Development
Viki 2 Pins from Manual and Azteeg X3 Pro Endstop Reswap
2015-03-29 18:26:32 -07:00
Scott Lahteine e8ae51bfe3 Fix G28 homing Y with X
- Fixed a typo causing G28 to home incorrectly
- Added documentation to G28
- Added homeXYZ bools to neaten the code
- Added a note about home_offsets being questionable
2015-03-29 18:06:59 -07:00
AnHardt 7b2550a604 Times can't be negative.
cardreader.cpp needs temperature.h for autotempShutdown() when
AUTOTEMP is defined but warns about unused variables.
Unpublished variables by putting them in to temperature.cpp.
2015-03-30 01:58:46 +02:00
AnHardt 507efa771b Remove unused variable fan_rot
and satisfy the compiler about the implicit compare.
2015-03-30 01:46:38 +02:00
AnHardt 2b959a7752 Some additional {} to make the compiler happy. 2015-03-30 01:42:35 +02:00
AnHardt 0f1bd6e4a7 In ST7920_SWSPI_SND_8BIT(uint8_t val) parameter is unsigned
therefor in macro ST7920_WRITE_BYTE(a) cast a to uint8_t
to make the compiler happy.
2015-03-30 01:40:58 +02:00
AnHardt 81bab8739d Get back folder symbols on Hitachi displays
and make use of column 20.
2015-03-29 17:29:48 +02:00
Chris Roadfeldt a9802c95b3 Ensure Z_PROBE_PIN is defined if Z_PROBE_AND_ENDSTOP is. 2015-03-29 04:18:37 -05:00
Chris Roadfeldt 62834a1c43 Don't deploy probe on Z Axis homing if Z_PROBE_AND_ENDSTOP is enabled,
unless Z_SAFE_HOMING is.
2015-03-29 03:55:41 -05:00
Chris Roadfeldt 666fad3494 Typo fixed in sanity check. 2015-03-29 03:25:03 -05:00
Chris Roadfeldt 08a7aa16c5 Don't deploy Z Probe on Z homing if Z_PROBE_AND_ENDSTOP is defined. 2015-03-29 03:21:48 -05:00
Chris Roadfeldt 80285251cc More config cleanup work for Z_PROBE_AND_ENDSTOP. 2015-03-29 03:06:20 -05:00
Chris Roadfeldt fe4549cd83 Config file Z_PROBE_AND_ENDSTOP description clean up. 2015-03-29 03:04:59 -05:00
Chris Roadfeldt 82d2f11129 More additional sanity checks for Z_PROBE_AND_ENDSTOP 2015-03-29 02:53:55 -05:00
Chris Roadfeldt 05134f0807 Additional Sanity Checks for Z_PROBE_AND_ENDSTOP 2015-03-29 02:51:51 -05:00
Chris Roadfeldt c75a5e8c55 Fixed typo for Z_PROBE_AND_ENDSTOP support in pins_RAMPS.h.
Confirmed Sanity checks are working.....
2015-03-29 02:38:08 -05:00
Chris Roadfeldt a98ac4033b Added Z_PROBE_PIN to #define for Z_PROBE_AND_ENDSTOP support. 2015-03-29 02:36:26 -05:00
Chris Roadfeldt 6125124d6c Config file cleanup for Z_PROBE_AND_ENDSTOP support. 2015-03-29 02:29:16 -05:00
Chris Roadfeldt 324c14943b Bug fixes for Z_PROBE_AND_ENDSTOP.
Code cleanup for Z_PROBE_AND_ENDSTOP.
Added Z_PROBE_PIN to pins_RAMPS_13.h
2015-03-29 02:16:09 -05:00
Natealus ca5821aa57 Made #ifdef DELTA branch instead
Another fellow here gave me the idea to do it this way
2015-03-29 01:08:00 -06:00
Natealus 04fda6b3e9 Undesired behavior with endstops swapped
Made my swap commented out so its the option not the default.
2015-03-29 00:55:47 -06:00
Natealus ca1477d830 Revert "Undesired behavior with endstops swapped"
This reverts commit 15028e9b08.
2015-03-29 00:52:53 -06:00
Natealus 15028e9b08 Undesired behavior with endstops swapped
I made my changes to swap MIN and MAX endstops on the Azteeg X3 Pro the
option rather than the default to fix unexpected reversal.
2015-03-29 00:42:40 -06:00
Nate Stokes 18245c6cd2 Update pins_RAMBO.h
Updated for the changes that Thinkyhead made before I submitted mine.
2015-03-28 22:29:54 -06:00
Natealus 234a9d0b12 Viki 2 Pins from Manual
I added in the pins into the new board files for the Azteeg X3, X3 Pro,
Printrboard, and Rambo. I'm sure it can be added for others too but
these are the manual specified pins. Just like many things here though,
I can't test for the boards other than the Azteeg X3 Pro. Hopefully it
works smoothly for everyone who happens on this nifty display. :)
2015-03-28 22:11:12 -06:00
Scott Lahteine a22efc5f11 Merge pull request #1597 from Wurstnase/g29_auto_script
G29 auto script
2015-03-28 20:54:17 -07:00
Scott Lahteine 62a3da9618 Merge pull request #1723 from thinkyhead/tweak_g92
Tweak G92
2015-03-28 20:53:37 -07:00
Scott Lahteine cc7a081cae Merge pull request #1722 from Natealus/Development
Azteeg X3 Pro Pin Revisions
2015-03-28 20:45:55 -07:00
Scott Lahteine afff968e88 ARRAY_BY_EXTRUDERS, shorthand to sync planner
- Add some documentation to planner and stepper headers
- Patch up RAMBO pins with undefs
- Add `sync_plan_position` inline to set current XYZE
- Swap indices in `extruder_offset` to fix initialization values
2015-03-28 20:33:21 -07:00
Scott Lahteine 2b0c25a091 Tweak G92 to call plan_set_position only once, yes? 2015-03-28 19:18:24 -07:00
Natealus 22bea37393 Azteeg X3 Pro Pin Revisions
I added the fan pins in here and left them at -1 in configuration_adv.h
and it works fine. Pinned for a 4 extruder from 1-4 and HE5 being the
controller fan, HE6 being the Extruder Auto Fan/Water pump in the Kraken
case, and HE7 being for part cooling fan. Added in descriptions for the
MIN MAX pin swap and for servo motor additions.
2015-03-28 20:14:42 -06:00
Scott Lahteine 93dc0d0518 Merge pull request #1718 from AnHardt/blink
Move variable blink from ultralcd.h to dogm_lcd_implementation.h
2015-03-28 16:20:33 -07:00
Scott Lahteine 4f399bf1fb Merge pull request #1721 from thinkyhead/fixup_1699
Patch generic delta config
2015-03-28 16:15:09 -07:00
Scott Lahteine edb67ea165 Patch generic delta config
- Addressing issue mentioned at #1699
2015-03-28 14:13:25 -07:00
AnHardt c481c3b180 Move variable blink from ultralcd.h to dogm_lcd_implementation.h
to avoid warnings about unused blink.

Concentrate definitions of variables in dogm_lcd_implementation.h to one place.

Make only local used variable currentfont static.
2015-03-28 13:14:38 +01:00
Chris Roadfeldt 059052889f Further Sanity Checks for Z_PROBE_AND_ENDSTOP. 2015-03-28 06:08:04 -05:00
Chris Roadfeldt 8b81f20c61 Filling in more places where Z_PROBE_PIN and Z_PROBE_AND_ENDSTOP need to
be.
Added Sanity Check for it.
Added hook so it's enabled.
2015-03-28 05:55:42 -05:00
Chris Roadfeldt fd823449ad Added serial message for Z Probe trigger. 2015-03-28 05:42:38 -05:00
Chris Roadfeldt 92eb8109ab Fix declaration of old_z_probe_endstop. 2015-03-28 05:09:48 -05:00
Chris Roadfeldt 44b88b41a2 Added credit for code. 2015-03-28 05:01:04 -05:00
Chris Roadfeldt 2979b40a7a Fixed typo in Z Probe and Endstop section. 2015-03-28 04:41:03 -05:00
Chris Roadfeldt 9f3ff14008 Enabled separate Z Probe and Z Axis endstop use at same time.
Typo fixes in comments in existing code.
2015-03-28 04:31:51 -05:00
Scott Lahteine f47fc879fe Merge pull request #1717 from thinkyhead/fixup_warnings
Fixup warnings
2015-03-27 22:59:49 -07:00
Scott Lahteine 29a713ea5e Merge branch 'Development' into fixup_warnings
Conflicts:
	Marlin/Marlin_main.cpp
2015-03-27 20:50:45 -07:00
Scott Lahteine b14be7235e Merge pull request #1585 from galexander1/strtod_e_fix
Fix `code_value` (so `G1X1E2` isn't evaluated as `G1 X100 E2`)
2015-03-27 20:49:03 -07:00
Scott Lahteine ba871e46bf Fix compiler warnings
- Patched up for most included configurations
2015-03-27 20:29:05 -07:00
Scott Lahteine ffe0df4b36 Latest upstream commits 2015-03-27 18:30:56 -07:00
Scott Lahteine bc2f249cc6 Merge pull request #1622 from AnHardt/tm-utf-minus-kanji
The big Language Pack
2015-03-27 18:24:19 -07:00
Scott Lahteine abfcbd793f Merge pull request #1693 from chris-bo/rework_lcd_beeper
use only one implementation for beeper feedback
2015-03-27 17:03:38 -07:00
Scott Lahteine 72510b75d2 Merge pull request #1716 from thinkyhead/fixup_leveling
Fix Z_APPLY_STEP for dual Z
2015-03-27 17:02:54 -07:00
Scott Lahteine 55739a4efe Fix Z_APPLY_STEP 2015-03-27 17:02:11 -07:00
Scott Lahteine 1aec2f437c Merge pull request #1700 from thinkyhead/fixup_leveling
Fixup leveling and other issues
2015-03-27 16:37:47 -07:00
Scott Lahteine df02b992b0 Fix redundant_temperatrure_raw setting 2015-03-27 16:37:22 -07:00
Scott Lahteine fe29bdd72b Also fix temperature externs 2015-03-27 16:26:07 -07:00
Scott Lahteine 578f93bc26 Fixup temp arrays and leveling equation, prepare for merge 2015-03-27 16:20:23 -07:00
Scott Lahteine 7d472367e2 Merge pull request #1713 from epatel/Development
Parentheses need here otherwise sanitycheck.h does wrong thing on line 222
2015-03-27 16:14:55 -07:00
Scott Lahteine d841028805 Merge pull request #1714 from thinkyhead/fixup_temperature
Give all temp arrays 4 indices
2015-03-27 16:11:57 -07:00
Scott Lahteine ce485175eb Give all temp arrays 4 indices 2015-03-27 16:11:28 -07:00
Edward Patel 782464ea4d Parentheses need here otherwise sanitycheck.h does wrong thing on line 222 2015-03-27 20:22:59 +01:00
Scott Lahteine 460f73056b Fix ECHOPAIR ambiguity
- Also patch up some warnings
2015-03-27 00:46:39 -07:00
Scott Lahteine 19d418cd6a Fix up the code to eliminate warnings 2015-03-27 00:32:58 -07:00
Scott Lahteine b2496533c6 Put " M" into pmem 2015-03-26 20:30:14 -07:00
Scott Lahteine 267d6bef15 Eliminate most warnings
- Fix a bug reading `code_value` for `M503 Sn`
- Hide and remove unused variables
2015-03-26 20:07:17 -07:00
Scott Lahteine 3fd7790a15 Merge branch 'Development' into fixup_leveling
Latest upstream commits
2015-03-26 19:56:58 -07:00
Scott Lahteine b76a352d41 Fix the planeNormal calculation 2015-03-26 17:14:07 -07:00
Scott Lahteine 4385ac4f9d Merge pull request #1707 from thinkyhead/fixup_temperature
Always 4 temp sensors
2015-03-26 17:02:11 -07:00
Scott Lahteine 410f64782a Always 4 temp sensors 2015-03-26 16:22:21 -07:00
Scott Lahteine 0b32431551 Remove abs() from planeNormal.z 2015-03-26 16:20:23 -07:00
Scott Lahteine 53169d96e8 Set temp_meas_ready in set_current_temp_raw 2015-03-26 16:02:15 -07:00
Scott Lahteine 06eb7f5b3c Latest upstream commits 2015-03-26 15:30:51 -07:00
Scott Lahteine 04328d7537 Add zprobe_zoffset in set_bed_level_equation_*
- Also a small tweak to SanityCheck.h
2015-03-26 15:29:16 -07:00
Scott Lahteine d2e73545ba Merge pull request #1705 from AnHardt/ddt
Avoid warnings in SanitiCheck.h
2015-03-26 15:16:37 -07:00
Scott Lahteine 81aec66d21 Merge pull request #1704 from AnHardt/firstAid1703
First aid for #1703
2015-03-26 15:12:40 -07:00
Scott Lahteine 78090275a9 Fix probe range editing
- Increase the probe offset range to -20…20
- Apply the range limits to the menu item
2015-03-26 13:52:48 -07:00
AnHardt 1ff6df8f9e Avoid warnings in SanitiCheck.h
/SanityCheck.h:107:53: warning: missing terminating ' character
...
2015-03-26 21:30:53 +01:00
AnHardt ebe5b87c2c < like in the oher compareble loops
to avoid:
Marlin_main.cpp:1790: warning: array subscript is above array bounds.
2015-03-26 21:18:19 +01:00
AnHardt 20f909567a Merge https://github.com/MarlinFirmware/Marlin into tm-utf-minus-kanji
Conflicts:
	README.md
Solved
2015-03-26 10:05:00 +01:00
Christian Bohn eab5fad539 code formatting 2015-03-26 09:00:34 +01:00
Scott Lahteine abadeac08d Group zprobe_zoffset with bed leveling 2015-03-25 23:06:33 -07:00
Scott Lahteine 9e8427f253 Merge pull request #1698 from zeuseye/Development
Clean "fromsd" array if not SDSUPPORT
2015-03-25 22:21:57 -07:00
Scott Lahteine 32331faee4 Prettify Bed Level Correction Matrix
- Put + in front of positive values in the output
2015-03-25 22:13:59 -07:00
Scott Lahteine 46601b1c65 Merge pull request #1696 from epatel/mesh-docs
Instructions for Mesh Bed Leveling
2015-03-25 21:57:32 -07:00
Scott Lahteine f5f4c2b366 Merge branch 'Development' into fixup_leveling
Latest upstream commits
2015-03-25 21:30:49 -07:00
Scott Lahteine 7667023817 Merge pull request #1694 from Wurstnase/fix_z_config
comment #define Z_DUAL_STEPPER_DRIVERS
2015-03-25 21:28:17 -07:00
Scott Lahteine 5eff15c409 Merge branch 'Development' into fixup_leveling
Latest upstream commits
2015-03-25 21:24:38 -07:00
Scott Lahteine ad05a726c1 Merge pull request #1691 from AnHardt/PID_dt
Move definition of PIDdT back to temperature.h
2015-03-25 21:22:39 -07:00
Scott Lahteine 5261d35737 Fix custom m-code behavior
Don’t set CUSTOM_M_CODE_SET_Z_PROBE_OFFSET if there’s no Z probe
2015-03-25 21:20:50 -07:00
Scott Lahteine fbf9b21e0c Merge plus fixup zprobe_zoffset
- Make `zprobe_zoffset` conditional
- Fix ConfigurationStore for `zprobe_zoffset`
2015-03-25 21:14:00 -07:00
Scott Lahteine 96b5da7198 Fix up bed leveling code
- Init `zprobe_zoffset`
- Remove `current_position[Z_AXIS] = zprobe_zoffset` lines from the
`set_bed_level_equation_*` functions
- Apply standards to `mesh_bed_leveling` files
- Document `MESH_BED_LEVELING`
2015-03-25 20:36:24 -07:00
Scott Lahteine 02b4f5f9cd Merge pull request #1689 from AnHardt/MAXand161
Fix MAX6675 again and introduce set_current_temp_raw()
2015-03-25 20:23:51 -07:00
AnHardt f680e509c4 Enclosed error-messages for TEMP_SENSOR_1_AS_REDUNDANT in PSTR() 2015-03-25 23:26:06 +01:00
Victor Torre d43d47da14 Clean "fromsd" array is not SDSUPPORT
if not have SDSUPPORT the fromsd array is not necessary
2015-03-25 22:05:18 +01:00
AnHardt ac81b4084f Make variables and function static. 2015-03-25 21:37:15 +01:00
Edward Patel 92a7260fd0 typos 2015-03-25 21:34:55 +01:00
Edward Patel 4a78db29eb Added instructions for Mesh bed leveling 2015-03-25 21:28:05 +01:00
alexborro 55025558dc Implement Dry-Run mode in G29
It just probe all the bed without appliying the matrix.
Useful after a first G29 to check the topology.
2015-03-25 11:12:30 -03:00
wurstnase a4ad9117dd comment #define Z_DUAL_STEPPER_DRIVERS 2015-03-25 13:46:29 +01:00
chris-bo 2dfd0e5ce7 Update Configuration.h
documentation how to disable buzzer feedback
2015-03-25 12:44:29 +01:00
Christian Bohn 4c3cbc0961 use only one implementation for beeper feedback 2015-03-25 12:23:50 +01:00
AnHardt 01cc97a3c3 Corected condition for PIDdT 2015-03-25 12:08:23 +01:00
AnHardt 94330705c7 Move definition of PIDdT back to temperature.h
make it unconditional
remove all definitions in the 'Configuration.h's
remove form 'Conditionals.h'
2015-03-25 11:51:41 +01:00
AnHardt dd0067afa6 Fix MAX6675 again and introduce set_current_temp_raw()
to make the temperature-code work again with Arduino 1.0.6.

Sorry could not make an extra block on base level.
2015-03-25 11:08:24 +01:00
Scott Lahteine 80ae160c26 Merge pull request #1688 from AnHardt/ultra-menu-fix
Add the missed {} to END_MENU in ultralcd.cpp
2015-03-25 01:50:48 -07:00
AnHardt 8848b7e9ef Add the missed {} to END_MENU in ultralcd.cpp
what caused an extra update of encoderLine most of the time.
2015-03-25 09:48:21 +01:00
AnHardt 4beffbca69 Make SMALL_INFOFONT configurable.
Tweak the documentation
2015-03-24 23:40:04 +01:00
CONSULitAS 045ea42cc8 Merge remote-tracking branch 'upstream/Development' into Development 2015-03-24 22:52:02 +01:00
alexborro c2ba5d0c09 Fix ZigZag and Topograph table
ZigZag: Inverted Behavior.. If T supplied, it does not zigzag.
Topograph table: The table was rotated 90º clockwise.
2015-03-24 15:50:31 -03:00
alexborro 0ce3576685 New Feature: Z_DUAL_ENDSTOPS
Z_DUAL_ENDSTOPS is a feature to enable the use of 2 endstops for both Z
steppers - Let's call them Z stepper and Z2 stepper.
That way the machine is capable to align the bed during home, since both
Z steppers are homed.
There is also an implementation of M666 (software endstops adjustment)
to this feature.
After Z homing, this adjustment is applied to just one of the steppers
in order to align the bed.
One just need to home the Z axis and measure the distance difference
between both Z axis and apply the math: Z adjust = Z - Z2.
If the Z stepper axis is closer to the bed, the measure Z > Z2 (yes, it
is.. think about it) and the Z adjust would be positive.
Play a little bit with small adjustments (0.5mm) and check the
behaviour.
The M119 (endstops report) will start reporting the Z2 Endstop as well.
2015-03-24 14:06:44 -03:00
AnHardt c686069ccd Revert "Remove 6x9 font"
This reverts commit e6cb8ee188.

Conflicts:
	Marlin/dogm_lcd_implementation.h
Confilkt solved
Needs rework.
2015-03-24 17:13:05 +01:00
AnHardt b00a531df8 Revert "Removed now unneded FONT_STATUSMENU"
This reverts commit 8c5bb38748.
2015-03-24 17:01:56 +01:00
AnHardt 9d589cbb2a Merge https://github.com/MarlinFirmware/Marlin into tm3-utf-minus-kanji
Conflicts:
	Marlin/example_configurations/delta/generic/Configuration.h
	Marlin/example_configurations/delta/kossel_mini/Configuration.h
	Marlin/language.h

Conflicts solved
2015-03-24 16:59:15 +01:00
Scott Lahteine 512a0056a9 Merge pull request #1658 from thinkyhead/planner_oh_planner
Cleanup of planner code
2015-03-23 22:21:27 -07:00
Scott Lahteine 8db4fd7177 Merge branch 'Development' into planner_oh_planner
Latest upstream commits
2015-03-23 22:08:50 -07:00
Scott Lahteine c6df5f4d85 small text correction 2015-03-23 21:55:03 -07:00
Scott Lahteine 8dd94ccf58 Initial list from perusing the commit logs 2015-03-23 21:54:06 -07:00
Scott Lahteine 4afe50b920 Merge pull request #1651 from thinkyhead/config_testing
Configuration sanity-checking
2015-03-23 21:23:13 -07:00
Scott Lahteine 0d81abe1c9 Merge branch 'Development' into config_testing
Latest upstream commits
2015-03-23 21:13:04 -07:00
Scott Lahteine 01740fd9c6 Merge branch 'Development' into planner_oh_planner
Latest upstream commits
2015-03-23 21:12:36 -07:00
Scott Lahteine e2576b1ac5 Merge pull request #1674 from thinkyhead/fix_temperature_minmax
Cleanup temperature code
2015-03-23 21:10:03 -07:00
Scott Lahteine 8b004d26c1 Merge pull request #1681 from thinkyhead/marlin_configurator
A logo for the Marlin wiki
2015-03-23 21:02:38 -07:00
Scott Lahteine fc53e43de6 Don't test raw temp for MAX6675
- Remove test of raw temp for thermistor 0 when using MAX6675
- Longer `raw_temp_value` array for `TEMP_SENSOR_1_AS_REDUNDANT`
2015-03-23 20:55:48 -07:00
Scott Lahteine 03fa9fae9f Merge branch 'Development' into fix_temperature_minmax
Latest upstream commits
2015-03-23 20:42:48 -07:00
Scott Lahteine b1a7f74ee4 A logo for the Marlin wiki 2015-03-23 18:25:31 -07:00
Scott Lahteine 2606da9e81 Merge pull request #1678 from Nutz95/Development
Report changes from previous PR (#1670) from old code base including :
2015-03-23 15:29:51 -07:00
Scott Lahteine 1fac388664 Revert measurement loop 2015-03-23 15:18:22 -07:00
CONSULitAS 703f3b38c4 Merge remote-tracking branch 'upstream/Development' into Development 2015-03-23 17:40:49 +01:00
nicolas-rambaud 37cde8a191 Report changes from previous PR from old code base including :
I've updated the minimum values from the LCD.
It has been a while that i want to at least fix this.
I have an inductive probe and often i need to set my zOffset to something lower than 0.5.
With the current implementation, the default LCD value is set to 0.5 for some reason.
On my case i need to be able to set it down to 0.0 as my inductive probe can be lower than 0.5.
Before with the LCD we couldn't change this value below 0.5. We had to flash the firmware every time which was painful.
Now we are able to change this value down to 0.0 if needed.
I've also changed the minimum value for Z min acceleration.
In the default configuration it's set to 25 but on the LCD the minimum was 100 which is not coherent.
I've changes the minimum to 10. On this axis, depending on the mechanics/motor drivers we might require very low acceleration, so i guess 10 is somehow realistic.
2015-03-23 12:29:12 +01:00
Scott Lahteine b26a3ea02c Merge pull request #1662 from josla972/refactor_scara
Refactor SCARA calibration. Save some lines of code and possibly ROM.
2015-03-23 00:51:18 -07:00
Scott Lahteine 36474be8eb Merge pull request #1675 from Wurstnase/Development
fix bad insertion config again
2015-03-23 00:33:56 -07:00
wurstnase e6f6c6e3a1 fix bad insertion config again 2015-03-23 08:32:48 +01:00
Scott Lahteine 6bdee87be3 Cleanup temperature code
- Get rid of unused temp states in the ISR, resulting in more frequent
temperature reading with fewer sensors
- Shrink code slightly in min/max testing
2015-03-23 00:27:29 -07:00
Scott Lahteine 34a41648ab Merge branch 'Development' into planner_oh_planner
Latest upstream commits
2015-03-22 23:40:29 -07:00
Scott Lahteine 4fbb80567e Get upstream commits 2015-03-22 23:07:22 -07:00
Scott Lahteine f65f61fa72 Merge pull request #1672 from thinkyhead/fix_probeaction
Fix mangled probe_pt calls
2015-03-22 22:40:52 -07:00
Scott Lahteine 7717e1ce33 Fix bad insert in configuration 2015-03-22 21:48:46 -07:00
Scott Lahteine 146501215f Fix mangled probe_pt calls
- Address issue #1669
- Remove the TOPO_ORIGIN configuration setting
2015-03-22 21:45:20 -07:00
Scott Lahteine e0a42d3f9a Merge pull request #1666 from maverikou/fix_1507
Fix 1507
2015-03-22 21:25:05 -07:00
maverikou 15345cc249 Corrected Z_PROBE_ALLEN_KEY behaviour. 2015-03-22 13:54:51 +02:00
maverikou 0f034dd97e Clean up Z_RAISE_AFTER_PROBING to work the same in all code paths except Z_PROBE_SLED. 2015-03-22 13:54:45 +02:00
maverikou 6c96f32069 Blind fix for #1507 2015-03-22 13:54:21 +02:00
Josef Larsson 379348487e Removed malplaced comment. 2015-03-22 12:21:31 +01:00
Scott Lahteine 8bd6e37b21 Merge pull request #1661 from thinkyhead/G92_no_offset
Don't add home offsets in G29
2015-03-21 16:49:06 -07:00
Scott Lahteine 88ed5268d2 Merge pull request #1663 from thinkyhead/fix_dual_z_1659
Fix compile error with `*_DUAL_STEPPER_DRIVERS`
2015-03-21 16:48:08 -07:00
Scott Lahteine 582cd780cd Fix compile error with *_DUAL_STEPPER_DRIVERS
- Patch up macros in stepper.cpp
2015-03-21 16:43:47 -07:00
Josef Larsson 9b3462f73f Refactor SCARA calibration. Save some lines of code and possibly ROM. 2015-03-22 00:37:24 +01:00
Scott Lahteine 691e753cc3 Don't add home offsets in G29
- Address #1262 by leaving values as set
- Rename `add_homing` to `home_offset`
2015-03-21 16:30:02 -07:00
Scott Lahteine 88e81a4804 Latest upstream commits, plus fixes
- Also add Manual Bed Leveling to the rest of the configs
2015-03-21 16:12:57 -07:00
Scott Lahteine 15eb5d35a2 Merge branch 'Development' into config_testing
Latest upstream commits
2015-03-21 15:42:45 -07:00
Scott Lahteine 19df90622b Include Conditionals.h file in update 2015-03-21 15:40:20 -07:00
Scott Lahteine 9b639b4135 Merge pull request #1619 from epatel/manual-bed-leveling+mesh-bed-level
Manual bed leveling + mesh bed leveling
2015-03-21 15:39:42 -07:00
Scott Lahteine 2c9bd15625 Move LCD items to Conditionals.h
- `Conditionals.h` is included twice, setting LCD values the first time
2015-03-21 15:24:57 -07:00
Scott Lahteine a96bfee76a Merge pull request #1660 from thinkyhead/fix_temperature_minmax
Fix temperature min/max test
2015-03-21 15:04:42 -07:00
Scott Lahteine 63abeaff38 Merge branch 'Development' into config_testing
Latest upstream commits
2015-03-21 15:03:06 -07:00
Scott Lahteine 3703694e30 Fix temperature min/max test
- Base tests on all thermistors/thermocouples, not just heater 0
2015-03-21 14:23:43 -07:00
Edward Patel 3d0a060a7a Added G29 command 2015-03-21 14:50:47 +01:00
Edward Patel c516747847 Merge branch 'Development' into manual-bed-leveling+mesh-bed-level 2015-03-21 14:49:52 +01:00
Scott Lahteine b5970492e2 Merge pull request #1656 from AnHardt/menufix
Fix for menus failing to scroll
2015-03-20 21:09:26 -07:00
Scott Lahteine af14c684b5 Minor optimizations to planner code
- Prefetch values used more than once
2015-03-20 20:57:06 -07:00
Scott Lahteine 13fbf42d95 Cleanup of planner code
- Use named axis indexes, `X_AXIS` etc.
- Replace `block.steps_A` with block.steps[A]`
- Replace `A_segment_time` with `segment_time[A]`
- Add `A_AXIS`, `B_AXIS` for `COREXY` axes
- Conditional compile based on `EXTRUDERS`
- Add BLOCK_MOD macro for planner block indexes
- Apply coding standards to `planner.h` and `planner.cpp`
- Small optimizations of planner code
- Update `stepper.cpp` for new `block` struct
- Replace `memcpy` with loops, let the compiler unroll them
- Make `movesplanned` into an inline function
2015-03-20 20:42:49 -07:00
AnHardt 64e3d33893 Fix shrinked menucode
by updating 'encoderPosition' in END_MENU() line 1.
2015-03-20 23:36:14 +01:00
Edward Patel a7e89d4cfa Merge branch 'Development' into manual-bed-leveling+mesh-bed-level 2015-03-20 15:46:01 +01:00
AnHardt 08856d9615 Merge branch 'tm2-utf-minus-kanji' into tm-utf-minus-kanji
Conflicts:
	Marlin/ultralcd_implementation_hitachi_HD44780.h

Cleaned!
2015-03-20 14:19:30 +01:00
AnHardt 8c5bb38748 Removed now unneded FONT_STATUSMENU 2015-03-20 14:12:12 +01:00
Scott Lahteine 0d869703ca Merge pull request #1655 from thinkyhead/fix_count_direction_init
Fix count_direction initializer
2015-03-20 05:45:33 -07:00
Scott Lahteine 2176a22d42 Fix count_direction initializer
- Addressing #1625
2015-03-20 05:45:05 -07:00
AnHardt e72cb3e45d Merge https://github.com/MarlinFirmware/Marlin into tm2-utf-minus-kanji
Conflicts:
	Marlin/dogm_lcd_implementation.h
	Marlin/ultralcd_implementation_hitachi_HD44780.h

Fix merge conflicts 2
2015-03-20 13:35:47 +01:00
Scott Lahteine cb6942d4a7 Merge branch 'Development' into config_testing
Get upstream commits
2015-03-20 05:30:36 -07:00
AnHardt 6bfccaf99e Merge https://github.com/MarlinFirmware/Marlin into tm2-utf-minus-kanji
Conflicts:
	Marlin/dogm_lcd_implementation.h
	Marlin/ultralcd_implementation_hitachi_HD44780.h
Fixed conflicts 1
2015-03-20 13:08:18 +01:00
Scott Lahteine e3f04c876a Merge pull request #1653 from thinkyhead/lcd_menu_hilite
Fix hiliting of edit items in LCD menus
2015-03-20 04:37:20 -07:00
Scott Lahteine 5644ad6809 Fix hiliting of edit items 2015-03-20 04:29:35 -07:00
Scott Lahteine 63d5d28085 Merge branch 'Development' into config_testing
Latest upstream changes
2015-03-20 04:15:18 -07:00
Scott Lahteine 526a755a66 Merge pull request #1652 from AnHardt/PIDdebug
PID debug
2015-03-20 04:14:08 -07:00
Scott Lahteine a1c240b0a4 Delta supports some auto bed leveling options 2015-03-20 04:04:45 -07:00
Edward Patel 5112cf8422 Added comment for the EEPROM storage 2015-03-20 11:46:47 +01:00
Edward Patel 4619d80524 Merge branch 'Development' into manual-bed-leveling+mesh-bed-level 2015-03-20 11:45:06 +01:00
Scott Lahteine 199151a4ed Merge pull request #1650 from AnHardt/beautify
Beautivy statusscreen
2015-03-20 03:38:02 -07:00
Scott Lahteine 2424713a8f Merge pull request #1640 from AnHardt/warning6
codepos not used in gcode_M28()
2015-03-20 02:58:00 -07:00
Scott Lahteine b6d381f863 Divide up Conditionals to get LCD items early 2015-03-20 02:50:28 -07:00
AnHardt e85061d20d Added changes to the 'new' Configuration.h s 2015-03-20 10:36:29 +01:00
Scott Lahteine 33c7c6e11d Conditionals.h requires Arduino.h 2015-03-20 01:27:14 -07:00
Scott Lahteine 8ade04b78e Felix and Hephestos configs
- Not sure why these are showing as all new
2015-03-19 22:25:05 -07:00
Scott Lahteine 670006b919 Remove invariant code from Configurations
- Add `Conditionals.h` with calculated configuration values
- Add `SanityCheck.h` with checks for configuration errors
- Remove equivalent code from all configurations
- Move error checks from some sources to `SanityCheck.h` also
- Fix initialization of count_direction in stepper.cpp
2015-03-19 22:22:23 -07:00
Edward Patel a61f679568 Merge branch 'Development' into manual-bed-leveling+mesh-bed-level 2015-03-20 02:28:35 +01:00
Edward Patel c87faa69ed Shortened mesh_plan_buffer_line() 2015-03-20 02:18:49 +01:00
AnHardt 47c1ea72af Merge https://github.com/kieranc/Marlin into PIDdebug
Conflicts:
	Marlin/temperature.cpp

Cleaned merge conflict.

Codeposition had changed.
Variable pid_input had vanished.

Signed-off-by: AnHardt <github@kitelab.de>
2015-03-20 00:07:36 +01:00
AnHardt f1d3d1524d Merge branch 'optimize_menu_code' of https://github.com/thinkyhead/Marlin into beautify
Conflicts:
	Marlin/dogm_lcd_implementation.h

solved merge conflict.
2015-03-19 22:51:22 +01:00
Scott Lahteine 0858fba192 Merge pull request #1620 from thinkyhead/optimize_menu_code
Reduce size of menu code
2015-03-19 14:35:26 -07:00
AnHardt fa889cd6e1 Beautivy statusscreen
by shifting things some pixels around
2015-03-19 22:13:37 +01:00
Scott Lahteine 7279e4f82f Small code tweaks re lcd.print 2015-03-19 14:01:33 -07:00
Scott Lahteine 90ba61b9b8 Include indicator for new drawmenu_generic
In the new method we pass the character that should be used for
selected state, not the character to print always.
2015-03-19 13:49:06 -07:00
Scott Lahteine 15d29efad5 Pass sel to lcd_implementation_mark_as_selected
- Pass selected state directly to lcd_implementation_mark_as_selected
- Rename sel function parameter
- Include a minor fix for SdBaseFile.h
2015-03-19 13:40:36 -07:00
Scott Lahteine a547dc2148 Merge branch 'Development' into optimize_menu_code
Get upstream changes
2015-03-19 13:31:37 -07:00
CONSULitAS 9c1f6e7ac7 Merge remote-tracking branch 'upstream/Development' into Development 2015-03-19 18:49:34 +01:00
alexborro e650d4044e Fix "Stop Print" function in the LCD menu
When one hit "Stop Print" option in LCD menu, the command buffer was not
cleared. The printer keep moving until the buffer has been emptied.
Actually I could not clear the command buffer as well.. I don't know
why, it doesnt work as expected.
I need to implement a routine inside Stepper ISR to handle such
situation.
2015-03-19 14:16:18 -03:00
AnHardt eff6a2bd2e Clean out a warning
in ultralcd_implementation_hitachi_HD44780.h lcd_print( about array index.
2015-03-19 12:58:43 +01:00
AnHardt e917477fec Merge https://github.com/MarlinFirmware/Marlin into tm-utf-minus-kanji
Conflicts:
	Marlin/dogm_lcd_implementation.h
	Marlin/fonts/make_fonts.bat

Claerd conflicts with my own #1621. (His was easy. :-) )

corrected typo in fonts/README.fonts

Applied changes to the new delta-configurations
 and deletet there some extra whitespace at the line-endings.
2015-03-19 12:35:43 +01:00
AnHardt ae01a6b5f2 Make use of codepos.
Saves one addition.
Needs one pointer on the stack.

Don't know if this is a go trade.
2015-03-19 09:45:16 +01:00
Scott Lahteine a534ac197a Merge pull request #1621 from AnHardt/remove--6x9-font
Remove 6x9 font
2015-03-18 23:10:42 -07:00
Scott Lahteine 80e0ee10ca Merge pull request #1631 from AnHardt/iss1593
Decrease KILL_DELAY
2015-03-18 19:10:38 -07:00
Scott Lahteine 4ce79920e5 Merge pull request #1635 from AnHardt/warnings1
Negative times are unlikly
2015-03-18 19:10:12 -07:00
Scott Lahteine 76127b8a55 Merge pull request #1630 from Wurstnase/fix_g29
optional parameters must be named when ignoring order
2015-03-18 19:09:40 -07:00
Scott Lahteine be3f2dc1d9 Merge pull request #1636 from AnHardt/warning2
lcd_control_retract_menu() is conditional.
2015-03-18 19:09:05 -07:00
Scott Lahteine 8d396584bf Merge pull request #1637 from AnHardt/warning3
lcd_autostart_sd() has two conditions.
2015-03-18 19:08:33 -07:00
Scott Lahteine 8664c6d465 Merge pull request #1638 from AnHardt/warning4
delta[3] not used when DELTA not defined.
2015-03-18 19:07:55 -07:00
Scott Lahteine 10711ccc6a Merge pull request #1639 from AnHardt/warning5
G4 could wait for an undefined time
2015-03-18 19:07:14 -07:00
Edward Patel 28c91deb5c EEPROM saving of z_values.
Tried to make it a little intelligent.
2015-03-18 21:07:07 +01:00
Edward Patel 240b5cfe04 Merge branch 'Development' into manual-bed-leveling+mesh-bed-level 2015-03-18 19:19:46 +01:00
alexborro 4521f6655b Restore "S" parameter of M204 for retrocompatibility. 2015-03-18 12:19:30 -03:00
alexborro 5ddb8d94e2 Update Documentation related to M204 2015-03-18 11:09:10 -03:00
AnHardt f8c4d43886 delta[3] is used with SCARA
Shoot in the dark.
2015-03-18 12:14:49 +01:00
AnHardt 72a9fed4fb codepos not used in gcode_M28()
Got:
Marlin_main.cpp:2567: warning: unused variable 'codepos'

Needs revision.
Don't now how this should look like.
2015-03-18 11:41:14 +01:00
AnHardt b94dd33641 G4 could wait for an undefined time
Got:
Marlin_main.cpp:1689: warning: 'codenum' may be used uninitialized in this function

And indeed codenum is undefined when no parameter is given.
2015-03-18 11:23:41 +01:00
AnHardt e90985a4e8 delta[3] not used when DELTA not defined.
got:
Marlin_main.cpp:387: warning: 'delta' defined but not used

Compiles cleaner when definition is removed.
2015-03-18 11:11:49 +01:00
AnHardt 5099b86ad4 lcd_autostart_sd() has two conditions.
got:
ultralcd.cpp:408: warning: 'void lcd_autostart_sd()' defined but not used
2015-03-18 10:51:13 +01:00
AnHardt 5d81c779cc lcd_control_retract_menu() is conditional.
Got:
ultralcd.cpp:64: warning: 'void lcd_control_retract_menu()' declared 'static' but never defined
2015-03-18 10:39:59 +01:00
AnHardt 450b89e63c Negative times are unlikly
While bunting an other bug I stumbled across:
ultralcd.cpp:1250: warning: comparison between signed and unsigned
integer expressions
Changed to the type of lcd_next_update_millis.
2015-03-18 10:31:34 +01:00
AnHardt d1658eebfc Decrease KILL_DELAY
Users hat to press kill-button for unexpexted lon times.
See #1593
2015-03-18 01:45:42 +01:00
Wurstnase 00adb2a6c1 optional parameters must be named when ignoring order 2015-03-18 01:02:29 +01:00
Edward Patel 0d43898a22 Remove of mesh_plan_buffer_line parameter reference (e) 2015-03-17 22:55:29 +01:00
Edward Patel 8067a985ce Merge branch 'Development' into manual-bed-leveling+mesh-bed-level
Fixed conflicts:
	Marlin/planner.h
2015-03-17 22:48:08 +01:00
alexborro f5f99c4883 Merge pull request #1626 from Wurstnase/fix_backslash_macro
fix macro
2015-03-17 18:34:05 -03:00
wurstnase 05333f61b7 fix macro 2015-03-17 12:50:44 +01:00
AnHardt 1883e1bb60 Applied thinkyheads corrections from 2015-03-17 2015-03-17 11:23:44 +01:00
AnHardt be79235ef2 Add new (cleaner) Marlin font
with sources in /fonts
2015-03-17 10:33:02 +01:00
Scott Lahteine 89fe77468d Merge pull request #1586 from maverikou/delta_auto_bed_level
Delta auto bed level (Updated PR)
2015-03-16 18:17:11 -07:00
CONSULitAS 2b1ddc0413 Merge remote-tracking branch 'upstream/Development' into Development 2015-03-16 22:12:17 +01:00
alexborro cb676cdf39 Fix CoreXY homing bug introduced by PR #1606
The Check Endstop logic must be:

if (current_block->steps_x != current_block->steps_y || (TEST(out_bits,
X_AXIS) == TEST(out_bits, Y_AXIS)))
if (TEST(out_bits, X_HEAD))

not

if (TEST(out_bits, X_HEAD) && (current_block->steps_x !=
current_block->steps_y || (TEST(out_bits, X_AXIS) == TEST(out_bits,
Y_AXIS))))

Same applies for Y axis.
2015-03-16 16:31:25 -03:00
AnHardt 8a29dd4839 Cleaned typo in dogm_lcd_implementation.h 2015-03-16 20:18:48 +01:00
AnHardt 7e69f72db6 Moved font directory. Updated README.fonts 2015-03-16 17:27:27 +01:00
AnHardt 00b162a993 Merge remote-tracking branch 'origin/utf-kanji' into tm-utf-minus-kanji
Conflicts:
	Marlin/language.h
Conflict cleaned
2015-03-16 17:13:49 +01:00
AnHardt e38dd5f030 Merge remote-tracking branch 'origin/utf' into utf-kanji 2015-03-16 17:00:54 +01:00
AnHardt 08e4651ece Corrected cyrillic font again
Thank you @Nprod.
2015-03-16 16:59:14 +01:00
Wurstnase 752c804677 remove offset, add minimum scan area 2015-03-16 15:13:16 +01:00
Wurstnase 14f0250853 allow negative values
and some more comments
2015-03-16 14:26:59 +01:00
AnHardt e6cb8ee188 Remove 6x9 font
in dogm_lcd_implementation.h
by using standard font and
shifting down temperature displays by one pixel
Saves 2300 bytes.
2015-03-16 11:18:27 +01:00
maverikou e93eb3e8d3 Update test 2015-03-16 09:16:00 +02:00
maverikou b8ae3feb9e Update test 2015-03-16 09:03:15 +02:00
maverikou 3570447ded Fix Z_RAISE_AFTER_PROBING 2015-03-16 08:35:49 +02:00
maverikou 8a739b6fba Merge branch 'Development' into delta_auto_bed_level
Conflicts:
	Marlin/Marlin_main.cpp
2015-03-16 08:24:26 +02:00
Scott Lahteine cbe4496123 Merge pull request #1616 from thinkyhead/topo_map_origin
Move TOPO_ORIGIN define to Configuration.h
2015-03-15 22:55:54 -07:00
Scott Lahteine 7629c4f05c Cleanup for menu optimization
- Compare pr_char to space
- Fewer calls to lcd_strlen
2015-03-15 22:54:54 -07:00
Scott Lahteine 3405f85a6a Reduce size of menu code
- Get rid of _selected functions, passing selected state instead
2015-03-15 22:02:33 -07:00
Edward Patel e983a5ab92 Disable option. Enable for use/test. 2015-03-16 02:50:11 +01:00
Edward Patel f34b9c83d1 Added comment about MESH_NUM axis points. 2015-03-16 01:48:46 +01:00
Scott Lahteine a686c9878f Move TOPO_ORIGIN define to Configuration.h
- Addressing issue #1608
2015-03-15 15:49:36 -07:00
Edward Patel 8005d22c81 Added menu option for bed leveling. 2015-03-15 23:24:32 +01:00
Edward Patel 0e51e53813 WIP. Adding bed leveling code. 2015-03-15 23:24:32 +01:00
Scott Lahteine d0d12962e0 Merge pull request #1615 from AnHardt/fix-1611
Fix #1611
2015-03-15 15:19:02 -07:00
Scott Lahteine 3f34d9d44e Merge pull request #1614 from AnHardt/fix-1612
Fix for #1612
2015-03-15 15:18:24 -07:00
AnHardt f0dcea7e14 Fix #1611
Warning: suggest parentheses around comparison in operand of &

pretty much helped.
2015-03-15 22:52:50 +01:00
AnHardt 28b1c37dea Fix for #1612 2015-03-15 21:35:33 +01:00
CONSULitAS a8c1bdabd2 Update: readme.md for K8200 example
* readme.md: updated typo and URLs
2015-03-15 17:25:31 +01:00
AnHardt 2f374f1465 Removed Kanji. 2015-03-15 16:44:37 +01:00
Scott Lahteine 5efc798642 Merge pull request #1546 from apollo-ng/pr-felix
Added support for Felix 2.0/3.0 printers
2015-03-15 07:52:22 -07:00
Scott Lahteine b83e52e50f Merge pull request #1467 from thinkyhead/marlin_configurator
Configurator utility
2015-03-15 07:49:19 -07:00
Scott Lahteine 7bc77dc134 Merge pull request #1583 from galexander1/m404fix
M404 should not use 'N' address as parameter because 'N' is reserved
2015-03-15 07:47:30 -07:00
Scott Lahteine 3aadaa7677 Merge pull request #1609 from thinkyhead/fix_fan_pin_issue
Fix controllerFan() code
2015-03-15 07:33:34 -07:00
Scott Lahteine b80ed51fcc Fix controllerFan() code
- Add support for 4th extruder
- Fix parentheses matching
- Apply coding standards
- Address issue mentioned at #1575
2015-03-15 06:55:31 -07:00
Scott Lahteine 4b50205f11 Merge branch 'Development' into marlin_configurator
Latest upstream changes
2015-03-15 06:37:32 -07:00
Scott Lahteine bb4cb1b15a Merge pull request #1606 from thinkyhead/cleanup_stepper
Cleanup of stepper.cpp
2015-03-15 06:05:08 -07:00
Scott Lahteine 63f41f56f8 Merge pull request #1607 from chris-bo/Development
Update ultralcd_st7920_u8glib_rrd.h
2015-03-15 01:04:40 -07:00
Scott Lahteine 4eabd80025 Fix babystep for extruder_duplication 2015-03-14 18:31:25 -07:00
alexborro d3259d0dba Merge pull request #1581 from msutas/Development
Filament Runout Sensor Feature
2015-03-14 18:35:20 -03:00
AnHardt 25c4f17e5d Corrected Cyrillic fonts. Round II. 2015-03-14 15:10:45 +01:00
chris-bo b73ba26b23 Update ultralcd_st7920_u8glib_rrd.h 2015-03-14 14:31:00 +01:00
Scott Lahteine 901c3c5392 Merge pull request #1603 from thinkyhead/issue_1523_compiler_error
Simplify manage_heater
2015-03-14 05:20:18 -07:00
Scott Lahteine c37f7d15c9 - Rename WRITE_E_STEP for consistency
- Add BIT and TEST macros
- Add _APPLY_ macros to stepper.cpp to help with consolidation
- Consolidate code in stepper.cpp using macros
- Apply standards in stepper.cpp
- Use >= 0 instead of > -1 as a better semantic
- Replace DUAL_Y_CARRIAGE with Y_DUAL_STEPPER_DRIVERS
2015-03-14 04:28:22 -07:00
AnHardt 44a205d9d9 Corrected Cyrillic fonts.
Cleaned typo in language_test.h Cyrillic part.
2015-03-14 12:27:47 +01:00
chrono 4d878b9bac Fixed path typos in README 2015-03-14 10:18:12 +00:00
chrono 12ec557a75 Added DEFAULT_TRAVEL_ACCELERATION 2015-03-14 10:14:13 +00:00
chrono 1d25d510bc Upstream Merge Fixes 2015-03-14 09:48:30 +00:00
chrono a89d690b77 Merge remote-tracking branch 'upstream/Development' into pr-felix 2015-03-14 09:25:43 +00:00
Scott Lahteine cb57fc727d Declare pid_output for PIDBEDTEMP 2015-03-13 20:19:51 -07:00
Scott Lahteine 3d6deb9bdf Simplify manage_heater
- Make separate get_pid_output(e) and get_pid_output_bed() function
- Reduce size of manage_heater function
- Hopefully work around linker errors
2015-03-13 19:49:41 -07:00
AnHardt 730497aaa1 Make use of ligatures in language_kana_utf8.h 2015-03-13 19:47:40 +01:00
AnHardt 3240d89f7d Logic cleanup in utf_mapper. 2015-03-13 19:45:10 +01:00
alexborro 2f3c77b751 Fix decimal places in G29 Bed Equation Coeficients 2015-03-13 14:39:41 -03:00
AnHardt ace3c62a1c Argh! Did not hit save 2015-03-13 15:26:01 +01:00
AnHardt bfb8a53156 Documentation reformating
The last for today - i hope.
2015-03-13 15:23:30 +01:00
AnHardt 1feb71895b And an other one 2015-03-13 15:16:55 +01:00
AnHardt 9518b1c873 And another update for the documentation. 2015-03-13 14:59:53 +01:00
AnHardt d9b3232e94 Another update for the documentation. 2015-03-13 14:55:15 +01:00
AnHardt 09838dc948 reformat documentation 2015-03-13 14:46:15 +01:00
AnHardt 96f8d20f2f Change selection logic another time
Automatic selection was to unflexible.

Updated documentation

Updated language files to new logic and documentation.

Updated bdf2u8g.exe
2015-03-13 14:26:58 +01:00
Wurstnase 76da32b567 add hash-bang for python3 2015-03-13 07:44:20 +01:00
Wurstnase 2e7ba44633 some renaming for readability 2015-03-13 07:31:27 +01:00
Scott Lahteine 352aa3f4c5 Merge branch 'Development' into marlin_configurator
Latest upstream
2015-03-12 17:12:51 -07:00
Scott Lahteine 196db5720e Merge pull request #1598 from thinkyhead/temp_errors
Fix missing temp_error declarations
2015-03-11 22:18:49 -07:00
Scott Lahteine e3ca9137b5 Fix missing temp_error declarations
- Fix for #1591 replacing #1595
2015-03-11 16:38:42 -07:00
Wurstnase 0620267ebb g29 auto-mode for the new G29 LRFB
short:
this script scans the first few lines from a gcode. If the line between 2 different z are greater than min_g1 this is our first layer. On this layer we search the min and max values of X and Y. With an offset we write that in a new file.
2015-03-11 23:53:28 +01:00
Wurstnase 3898ace246 Merge pull request #2 from MarlinFirmware/Development
actual
2015-03-11 23:47:41 +01:00
Scott Lahteine 08694339eb Merge branch 'Development' into marlin_configurator
Conflicts:
	Marlin/Configuration.h
2015-03-11 15:47:32 -07:00
Scott Lahteine e4d77a6313 Merge pull request #1554 from 2PrintBeta/Development
Macro indirection for stepper drivers + Support for TMC26X and L6470 Stepper Drivers
2015-03-11 15:31:57 -07:00
Mehmet Sutas b373826428 Merge pull request #2 from MarlinFirmware/Development
update
2015-03-12 00:07:39 +02:00
AnHardt 5bafb1fe1f Add user test to language_test.h and make it default.
Improve description in Configuration.h
2015-03-11 20:46:52 +01:00
alexborro c0b6075f77 Fix max acceleration limits in planner
The max acceleration limiting was in wrong place.
2015-03-11 15:08:11 -03:00
Bo Herrmannsen c7067edddf initial empty change log 2015-03-11 18:56:46 +01:00
alexborro 9157cbd8f3 Add Travel Acceleration and change the M204 options
Added option to set Travel Acceleration (non printing moves).
The M204 options was a non sense (S for printing moves and T for retract
moves).

It has been changed to:
P = Printing moves
R = Retract only (no X, Y, Z) moves
T = Travel (non
printing) moves

I will add this info o G-Code wiki in reprap.org. I also advise to put
this info in Marlin next version changelog.
2015-03-11 13:19:02 -03:00
alexborro 888cf161bd fix travel speed option for G29
I forgot to enclousure the variable with #ifdef
2015-03-11 10:03:32 -03:00
alexborro af63b54562 Add travel speed option to G29 command line 2015-03-11 09:51:56 -03:00
AnHardt 817751d4b9 Added new languages, the Cyrillic display and a test language to find out your hardware. 2015-03-11 11:10:35 +01:00
AnHardt c4b0087f7a Insert utf_mapper.h
Top -> down
- Decide what output function is to use.
- Precautions. If non of the DISPLAY_CHARSET_HD44780's is selected fall back to Japanese.
- When we are not on the dogms setup a mapping table depending on display type and mapper.
- If we are on dogm we use ONE To ONE mapping - except kanji.
- select and define one of the mapping functions.
2015-03-11 10:55:16 +01:00
AnHardt b60761bcff Removed some messages that shouldn't be translated in the Japanese files.
And made falback to kana work.
2015-03-11 10:30:38 +01:00
Bo Herrmannsen 749e5b9b84 updated milestone link 2015-03-11 10:30:03 +01:00
AnHardt 97ae3c5c6a Corected some errors inrtoduced by a faild global replacement. 2015-03-11 10:26:36 +01:00
Bo Herrmannsen 33fe89f539 removed irc archive link
removed the link as the software i had did not work, nor does anyone hardly use irc chat but just hang out there
2015-03-11 10:24:56 +01:00
AnHardt ae76b1e8a8 Changes in dogm_lcd_implementation.h in detail.
Top -> down
- We don't need the old Marlion_font package any more - we made new.
- But we need information about configured fonts and the mappers.
- We support Cyrillic now.
- LCD_CLASS is not used in this file. LiquidCrystalRus.h is deleted anyway.
- define some fonts
- BIG_EDIT_FONT works only together with western languages.
- Select a matching FONT for the MENUE depending on the defined language.
- Number the different font-types. Wanted to avoid to store complete font-structures when changing fonts back and forth.
- Marlin special symbols are now at the lower end - like in 'ultralcd_implementation_hitachi_HD44780.h'
- insert the new remembering setFont function.
- insert the new counting lcd_print functions.
- make use of the new setFont and lcd_print functions.
- On some places redefined one character long strings with chars to avoid overhead and reduce warnings.
2015-03-10 22:34:56 +01:00
alexborro 5bf42066fa Fix typo in configuration.h 2015-03-10 15:06:34 -03:00
alexborro 8a4b62d081 Set more regular setup in configuration.h 2015-03-10 14:41:21 -03:00
AnHardt 255ca68123 Changes in ultralcd_implementation_hitachi_HD44780.h in detail
Top -> down:
We don't need LiquidCrystalRus.cpp and LiquidCrystalRus.h any more. Functionality is now in utf_mapper.h
Comment on LCD_STR_BEDTEMP about behaviour in strings.
Change LCD_STR_ARROW_RIGHT from "\x7E" to ">" because "\x7E" is only ARROW_RIGHT on displays with DISPLAY_CHARSET_HD44780_JAPAN.
Introduce the counting UTF8 enabled lcd_print functions.
Replace the old lcd.print functions and make use of them.
A bit of reformatting around the changes.
2015-03-10 18:30:09 +01:00
alexborro 60ceca1bc1 Add speed configuration for home-bumping movement 2015-03-10 14:08:32 -03:00
AnHardt 6fc2ccd568 Make use of new remenbering fontswitch. 2015-03-10 18:04:03 +01:00
AnHardt 0f26f3abf2 Add a test_language.
Will show the compleet utf8 or ASCII charset
To se the second half of ASCII click on "01234..."
2015-03-10 17:59:28 +01:00
AnHardt 6d575b1bc7 Add some documentation. 2015-03-10 17:55:59 +01:00
AnHardt 901cf203fe Add legal stuff to marlin_kanji.h 2015-03-10 17:49:16 +01:00
AnHardt 2d5134b0ed Introduce - clean - prepae language files 2015-03-10 17:46:25 +01:00
domonoky d813090d90 Merge remote-tracking branch 'remotes/upstream/Development' into Development
Conflicts:
	Marlin/Marlin_main.cpp
	Marlin/stepper.cpp
2015-03-10 10:46:37 +01:00
Scott Lahteine c321c97f35 Merge pull request #1584 from galexander1/stringcleanup
fix a handful of cases where strtod() was cast to int, instead of just using strtol()
2015-03-10 01:48:30 -07:00
maverikou 53abc5e2f1 Merge branch 'Development' into delta_auto_bed_level 2015-03-09 22:28:57 +02:00
Mehmet Sutas 956fb2d278 Merge pull request #1 from MarlinFirmware/Development
update
2015-03-09 11:05:49 +02:00
Scott Lahteine 978dadf806 Base64 decode AJAX-fetched text properly 2015-03-08 21:54:17 -07:00
Scott Lahteine 0eae9c24bc Merge pull request #1582 from galexander1/deltaconftypo
fix typo in delta example config introduced in commit 697ee2d
2015-03-08 21:13:14 -07:00
Scott Lahteine 624f23f550 Merge pull request #1575 from Wurstnase/fix-controllerFan
Fix controller fan
2015-03-08 20:36:38 -07:00
maverikou 424c747fb3 Enable M401 and M402 for deltas with allen key z-probes. 2015-03-08 09:57:38 +02:00
maverikou 0d593ab7c1 Fix debug message 2015-03-08 09:41:31 +02:00
Greg Alexander 3e8c5678f5 fix bug where, i.e., "G1X1E1" would be interpretted as "G1 X10 E1",
because strtod() will read the E address value as if it was a base 10
exponent.
2015-03-07 21:14:34 -05:00
Greg Alexander ed7874b4e0 M404 should not use 'N' address as parameter because 'N' is reserved for the line number 2015-03-07 17:35:06 -05:00
Greg Alexander b9dfa5cad4 use code_value_long() instead of (int)code_value() 2015-03-07 17:33:15 -05:00
Greg Alexander 901b03d020 use strtol() instead of strtod() when an integer value is desired 2015-03-07 17:24:26 -05:00
Greg Alexander 4fba7b084f fix typo in delta example config introduced in
commit 697ee2dc50
2015-03-07 16:43:41 -05:00
Mehmet Sutas cfc6a3a87a Filament Runout Sensor Feature
With this change a mechanical or optical switch may be used to check the
availability of the filament and when the filament runs out an M600
(filament change) command is issued. This is only done while printing
with an SD card.

This feature was requested several times (issue #679), but the requests
were not accepted since it was believed that this situation should be
handled at host side. However during an SD print the control is totally
on firmware and I think that during an SD print it should be handled by
the firmware.

The original code was posted at reprap forum
(http://forums.reprap.org/read.php?1,297350) by Lazymonk. I have only
corrected some bugs of the code and improved it by adding definitions to
the configuration.h in order to make it more standardized.
2015-03-07 22:43:15 +02:00
maverikou e6862700af Add Z_RAISE_AFTER_PROBING to all config files 2015-03-07 20:55:30 +02:00
maverikou 39d255608d Test an extra delta configuration with auto bed leveling code paths 2015-03-07 20:53:23 +02:00
maverikou 7c24b97958 Ported over Johann Rocholl's improvements for delta printers:
- Nonlinear auto bed leveling code (includes G29, G30, Z_RAISE_AFTER_PROBING). Cleaned it up to be a delta-specific AUTO_BED_LEVELING_GRID code path.
- Allen key z-probe deployment and retraction code. Cleaned it up and added safety checks.
2015-03-07 20:36:21 +02:00
Wurstnase a5342c942e Update Marlin_main.cpp 2015-03-07 16:47:53 +01:00
Scott Lahteine 0f3b7d5575 Update annotated configurations
- Also update base configs
2015-03-07 01:07:40 -08:00
Scott Lahteine c5aa56bc4d Merge branch 'Development' into marlin_configurator
Latest upstream commits
2015-03-06 23:00:03 -08:00
Scott Lahteine 9dccd3a94f Merge pull request #1579 from thinkyhead/fix_abl_issues
More sanity-checking for ABL
2015-03-06 22:50:03 -08:00
Scott Lahteine d085725c86 More sanity-checking for ABL
- Moved sanity-checks to Marlin_main.cpp
- Applied to other configuration files
- Fixed formatting of ABL output
- Passing verbose level to probe_pt
- Miscellaneous cleanup
- Put CONFIG_STEPPERS_TOSHIBA into Configuration.h
2015-03-06 22:14:34 -08:00
Scott Lahteine 8b6766b37b Merge branch 'Development' into marlin_configurator
Latest upstream changes
2015-03-06 16:32:57 -08:00
Scott Lahteine ca4b36deda Merge pull request #1578 from thinkyhead/require_lcd_style
Make sure a ROM is selected for ULTRA_LCD
2015-03-06 15:38:24 -08:00
Scott Lahteine 9eed8c8cf0 Make sure a ROM is selected for ULTRA_LCD 2015-03-06 15:37:54 -08:00
AnHardt 7136268273 Added 'dogm_font_data_6x10_marlin_Kanji.h'
This is copied from http://www.thingiverse.com/thing:664397

// Japanese Original font
// Version 0.1 by ichibey
//
// 営利目的で利用する際は、かならず許可を得てください。非営利の場合は、CCライセンスに従い使用ください。
// http://creativecommons.org/licenses/by-nc/2.1/jp/legalcode

This font is very special. It uses a mixture of katakana an kanji symbols, uses multi character symbols and is only addressable by '\xxx' sequences.
2015-03-07 00:26:28 +01:00
AnHardt 16e173e167 Added 5 new font.h files to main directory.
The former place of 'dogm_font_data_6x9_marlin.h' was in 'dogm_font_data_m0arlin.h'.

Deleted 'dogm_font_data_marlin.h'.
2015-03-07 00:09:49 +01:00
Scott Lahteine 254970c92a Merge pull request #1570 from C-o-r-E/escape_fix
Fixes gCode handling of comments and escaped characters
2015-03-06 15:09:35 -08:00
Scott Lahteine d3660d22ae Merge pull request #1577 from thinkyhead/fix_gcode_g29
Fix compile error in gcode_G29
2015-03-06 14:55:05 -08:00
Scott Lahteine 25dc79f124 Remove M48 credits also 2015-03-06 14:54:30 -08:00
Scott Lahteine 34e51f576f Fix compile error in gcode_G29
- A redo of #1576, which missed topo_flag
- Always set verbose_level
2015-03-06 14:52:05 -08:00
AnHardt b14270b029 Added font tools 2015-03-06 23:48:55 +01:00
AnHardt fe2bd237d5 Add font sources.
Fonts have been created with fony.exe (http://hukka.ncn.fi/?fony)

The HD44760_? fonts simulate the fonts of the character based displays.
The ISO10646 fonts provide the right size of the standard fonts.
Marlin_symbols contains only the the special symbols of the original marlin font.
2015-03-06 23:36:56 +01:00
Scott Lahteine bbeb1117d4 Merge pull request #1572 from Wackerbarth/Issue1572
Minor typos in the README
2015-03-06 10:10:40 -08:00
Scott Lahteine 344a12bd10 Merge pull request #1571 from AnHardt/Undubble
Undubble MSG_MIN & MSG MAX
2015-03-06 10:08:19 -08:00
Scott Lahteine 1149c24b86 More grouping, cleanup, start on overrides 2015-03-06 08:48:53 -08:00
Wurstnase 62bd734612 fix controllerFan() for inverted enable pins
add ```^ !(n_ENABLE_ON)``` for each stepper
2015-03-06 12:01:17 +01:00
Richard Wackerbarth fd9beb1672 Minor typos in the README 2015-03-05 22:03:21 -06:00
AnHardt 3024f6c706 Undubble MSG_MIN &MSG MAX 2015-03-06 00:25:44 +01:00
Corey C ba27f90e36 Merge pull request #1 from foosel/C-o-r-E-escape_fix
In-line comments and escaping fixed by foosel
2015-03-05 17:50:41 -05:00
Gina Häußge 63b62d8d4e Fixed in-line comments and escaping
* "G1 X1 ; test" was not executing "G1 X1" due to never leaving comment mode.
  * "M117 Hello \;)" printed "Hello \" to the display due to not replacing serial_char properly.

Tested with the following commands:
    * M117 Hello ; test => displays "Hello" on display, ignores "test"
    * G1 X1 ; foo => moves 1mm in X, ignores "foo"
    * ; test => completely ignored, not even acknowledged
    * M117 Hello \;) => displays "Hello ;)" on display
    * M117 Hello \\;) => displays "Hello \" on display, ignores ")"
2015-03-05 23:30:34 +01:00
C-o-r-E 99fb1bc3e8 Attempt to resolve #1568 and add basic escape character support 2015-03-05 15:22:37 -05:00
Wurstnase 92ebb7f4c8 Merge pull request #1 from MarlinFirmware/Development
dev pull
2015-03-05 17:51:33 +01:00
Scott Lahteine fad14ae7eb Merge branch 'Development' into marlin_configurator
Latest upstream changes
2015-03-05 05:32:31 -08:00
Scott Lahteine 273d00353f Merge pull request #1565 from thinkyhead/gcode_handler_functions
Gcode handlers to inline functions
2015-03-05 04:55:46 -08:00
Scott Lahteine cdc38aa783 Move gcode handlers into inline functions 2015-03-05 04:27:24 -08:00
Scott Lahteine 94fd8c7555 Merge pull request #1556 from thinkyhead/enhanced_g29
Enhanced G29
2015-03-05 03:54:53 -08:00
Scott Lahteine 6d9e9a6bef Merge branch 'Development' into enhanced_g29
Latest upstream changes
2015-03-05 02:49:18 -08:00
Scott Lahteine 4db2179f5c Include 4th extruder support 2015-03-05 02:37:36 -08:00
Scott Lahteine 0e074d4050 Merge pull request #1561 from OhmEye/Development
Fix autoretract
2015-03-05 02:14:34 -08:00
OhmEye f90a947e65 Fix autoretract
Autoretract was broken, looks like it was overlooked when the retracted flag was updated for multi extruders.
2015-03-04 20:28:08 -10:00
Scott Lahteine 2ef6b3d57a Fix wrong defines, broken syntax 2015-03-04 22:24:44 -08:00
OhmEye f3f04e9fd6 Merge pull request #1 from MarlinFirmware/Development
Sync with upstream
2015-03-04 20:23:10 -10:00
Scott Lahteine 08b722b635 Merge pull request #1555 from C-o-r-E/solenoids
Add support for solenoid articulated extruders
2015-03-04 21:36:29 -08:00
Scott Lahteine 32744d41a9 Do sanity checking on LRFB values
- Setting boundaries based on configured limits, contrasting with G28
(which forgets these limits?)
2015-03-04 21:32:11 -08:00
chrono 0a7d85c20e Minor fixes 2015-03-04 12:35:32 +00:00
chrono 48e3a97a18 Removed extra encoder definitions from pins_FELIX2.h 2015-03-04 12:21:18 +00:00
Scott Lahteine d052a3c6aa Merge pull request #1551 from thinkyhead/redundant_encrot
Cleanup rotary encoder encrot* defines
2015-03-04 03:22:24 -08:00
chrono d8eeddfb93 Updated DUAL Extruder config, added README and enabled NEWPANEL by default 2015-03-04 09:59:58 +00:00
Wurstnase 81a6e59a82 Merge branch 'Development' of https://github.com/Wurstnase/Marlin into Development 2015-03-03 22:18:14 +01:00
chrono b423b90c77 Added Configuration_adv.h to examples for LCD/SD Support 2015-03-03 19:09:25 +01:00
domonoky 075507fb9a missed one X_ENABLE_PIN 2015-03-03 11:09:56 +01:00
Scott Lahteine dfb38874f8 Some suggested changes for #1555 2015-03-03 00:48:20 -08:00
chrono 32eef03b58 Unfelixed README again 2015-03-03 08:12:42 +01:00
Scott Lahteine 7f8ea7105f Arrange ProbeAction values bitwise 2015-03-02 20:14:37 -08:00
Scott Lahteine 7684721977 Enhanced G29
- Adapted “Enhanced G29” code referred to in #1499 and posted at
[3dprintboard.com](http://3dprintboard.com/showthread.php?3105-Auto_Bed_
Leveling-Enhanced-G29-command)
- Compatible with current G29 while adding some new arguments
  - `V` sets the verbose level for serial out
  - `T` (or `V` > 2) send a Topology report to serial out
  - `E` works the same way as before
  - `P` works as before (source used `n` or `U`/`u`)
  - `L`, `R`, `B`, `F` work as before
- Still needs sanity checking for `LRBF`
2015-03-02 20:00:17 -08:00
C-o-r-E 874d3d3fc5 Add support for solenoid articulated extruders 2015-03-02 20:07:12 -05:00
chrono 7540a81106 Minor fixes 2015-03-02 22:55:00 +01:00
domonoky e363428c54 New attempt at copying the libraries. 2015-03-02 19:00:02 +01:00
domonoky bcb57f13ea try to fix path to additional libraries. 2015-03-02 18:55:30 +01:00
domonoky e3d92b9168 Try to fix the travis build, which is failing because conditional includes do not work in .ino files for the ino processor ? 2015-03-02 18:45:58 +01:00
chrono c13d81ce15 Merge branch 'Development' into pr-felix 2015-03-02 17:21:39 +00:00
chrono a375d648c7 Merge remote-tracking branch 'upstream/Development' into Development 2015-03-02 17:21:05 +00:00
domonoky 4a7aca2736 Merge remote-tracking branch 'remotes/upstream/Development' into Development 2015-03-02 17:52:12 +01:00
alexborro 715104e477 Fix Endstop check for CoreXY bots.
The X_Axis could not home to min while Y_Max endstop was trigged.
2015-03-02 13:36:58 -03:00
Scott Lahteine e428e8da75 Merge pull request #1552 from thinkyhead/cleanup_cardreader
Cleanup of cardreader.*
2015-03-02 07:57:26 -08:00
Scott Lahteine 20e59dc61e Don't skip files starting with underscores 2015-03-02 07:56:11 -08:00
Scott Lahteine f171656f8e Cleanup of cardreader.*
- Apply standards to cardreader.*
- Fix minor issues with cardreader.cpp
- Apply standards to some other stale regions
2015-03-02 07:06:01 -08:00
Scott Lahteine f379edca78 Cleanup rotary encoder encrot* defines
The encrot values are used in only one place, and don’t vary, so remove
redundant references.
2015-03-02 06:42:48 -08:00
Scott Lahteine c7cdb176c8 Merge branch 'Development' into marlin_configurator
Latest upstream changes
2015-03-02 06:13:10 -08:00
chrono 187d336665 Revert default conf and temperature.cpp 2015-03-02 13:56:37 +00:00
chrono 7f060d7caf Revert "Testing Fix for Arduino 1.6+ compiler issue #1523"
This reverts commit fb75a9272d.
2015-03-02 13:47:35 +00:00
Scott Lahteine 49f471a5fc Merge pull request #1541 from thinkyhead/fixup_temperature
Cleanup of temperature code
2015-03-02 05:38:10 -08:00
Scott Lahteine f2710e11d1 Optimize initial loading, code cleanup 2015-03-02 05:23:36 -08:00
chrono fb75a9272d Testing Fix for Arduino 1.6+ compiler issue #1523 2015-03-02 10:45:54 +00:00
chrono 558c6313f7 Merge branch 'pr-felix' into Marlix 2015-03-02 10:27:58 +00:00
chrono 08bc723a3c Enable PIDBED 2015-03-02 10:26:42 +00:00
chrono e487bd642b Updated PR to streamline integration 2015-03-02 09:49:45 +00:00
Scott Lahteine 2eeb241b42 Find fields that group together
- Do field grouping
- Tweak configurations for better grouping
2015-03-02 01:45:53 -08:00
Scott Lahteine 9377089c43 Merge pull request #1548 from thinkyhead/issue_1547_bed_leveling
Fix undefined *_PROBE_BED_POSITION error
2015-03-01 20:01:38 -08:00
Scott Lahteine e30bfedce4 Fix undefined *_PROBE_BED_POSITION error 2015-03-01 19:57:35 -08:00
chrono 875812d346 Updated package info 2015-03-01 11:15:17 +01:00
chrono 3eafea840d Minor fixes in Configuration.h 2015-03-01 11:04:02 +01:00
chrono c7fb1b70f2 Initial Configuration.h for Felix 2.0/3.0 2015-03-01 09:54:36 +00:00
chrono 2e172f38bd Added support for Felix 2.0/3.0 printers 2015-03-01 09:16:55 +00:00
Scott Lahteine f994729999 Parse and use dependent groups
- Parse #if, #ifdef, etc. for rules to enable fields
2015-02-28 22:40:20 -08:00
Scott Lahteine b869476e99 Merge pull request #1545 from maverikou/panel_one_encoder
Panel One encoder pins
2015-02-28 05:32:56 -08:00
maverikou 9b50ec6512 Panel One encoder pins 2015-02-28 10:52:15 +02:00
Scott Lahteine 838a22de64 Fix switch value method, make app global 2015-02-27 21:08:09 -08:00
Scott Lahteine 8d5839151b Merge branch 'Development' into marlin_configurator
Latest upstream changes
2015-02-27 20:40:23 -08:00
domonoky 443e7edef4 - Add support for L6470 Drivers.
- Both TMC, L6470 and pin-driven drivers work.
- All can be mixed and matched as needed.
2015-02-27 12:43:23 +01:00
Scott Lahteine 1db02c2891 Merge branch 'Development' into fixup_temperature
Merge upstream changes
2015-02-26 17:25:28 -08:00
Scott Lahteine a99470fbb0 Merge pull request #1527 from maverikou/panel_one
Added support for PanelOne from T3P3.
2015-02-26 16:01:13 -08:00
domonoky 5727cb3ed4 Cleanup TMC Stepper a bit. 2015-02-26 12:57:46 +01:00
Scott Lahteine a5bbd402bf Merge pull request #1539 from AnHardt/dummysensor
Extend the idea of dummy temperature sensors.
2015-02-26 01:29:14 -08:00
Scott Lahteine 1a7b0d9a37 Redo HAS_* macros to fix define error 2015-02-26 01:14:59 -08:00
Scott Lahteine 864dddc878 Macros to the top, a few HAS_* macros 2015-02-26 00:33:30 -08:00
alexborro 227ab8c665 Merge pull request #1503 from MarcelMo/patch-2
Support for simple customisable AutoZProbing area
2015-02-25 13:22:42 -03:00
Scott Lahteine fd1ea9d56f Move literal strings to language files 2015-02-24 23:03:08 -08:00
maverikou 8742b6bd56 Merge branch 'Development' into panel_one 2015-02-24 22:24:57 +02:00
Scott Lahteine aa9c1f1bed Better name for ADC macro 2015-02-24 05:38:10 -08:00
Scott Lahteine 9c9726d469 Cleanup of temperature code
- Reduce calls to millis()
- General cleanup of manage_heaters
- General cleanup of pid autotune
- Formatting here & there
- Macros to clean up and shrink ISR code (reduced by ~364 lines)
2015-02-24 04:46:11 -08:00
AnHardt c6d2ebe452 Extend the idea of dummy temperature sensors.
Added a second sensor and made them configurable.
2015-02-24 11:02:16 +01:00
Scott Lahteine e6af82ba2f Merge pull request #1526 from thinkyhead/cleanup_ultralcd
Cleanup and fix ultralcd.cpp
2015-02-23 21:22:54 -08:00
Scott Lahteine c9a3eb0c1a Spacing in calculate_volumetric_multiplier(s) 2015-02-23 20:35:18 -08:00
Scott Lahteine 2af559cca3 Shared function for menu_edit_* and menu_edit_callback_* 2015-02-23 20:31:28 -08:00
Scott Lahteine 7ec391e689 Merge branch 'Development' into marlin_configurator
Latest upstream changes
2015-02-23 20:21:40 -08:00
Scott Lahteine df8c51528f Merge branch 'Development' into cleanup_ultralcd
Latest upstream changes
2015-02-23 20:13:08 -08:00
Scott Lahteine 517f411999 Spacing adjustment to menu_edit* macro 2015-02-23 20:11:52 -08:00
Scott Lahteine 4938ae5caf Add required backslash for macro expansion 2015-02-23 20:10:49 -08:00
Scott Lahteine e182cdebf9 Add required backslash for macro expansion 2015-02-23 19:54:07 -08:00
Scott Lahteine adbb839b16 Merge pull request #1535 from gege2b/Development
Corrected a typo in ArduinoAddons/Arduino_1.5.x/(...)/boards.txt
2015-02-23 19:51:44 -08:00
Scott Lahteine fa4c36df68 Fix menu callback issue wrt LCD_CLICKED 2015-02-23 19:40:57 -08:00
Scott Lahteine 0cf0c20532 Optimize calculate_volumetric_multiplier 2015-02-23 18:10:35 -08:00
domonoky 38500165ea First attempt at adding TMC Driver support. May need some cleanup. 2015-02-23 17:45:29 +01:00
domonoky b55995aae8 Introduce a layer of macro indirection to all stepper pins. This allows other stepper drivers to redefine them, so they can use SPI/I2C instead of direct pin manipulation. 2015-02-23 16:12:35 +01:00
Gege2B b4e9395661 Corrected a typo in ArduinoAddons/Arduino_1.5.x/(...)/avr/boards.txt about Sanguino 2015-02-23 16:02:04 +01:00
kieranc 8ccdac9898 Enable PID debugging for heated bed 2015-02-23 09:42:01 +01:00
kieranc 29097b0ab2 Enable PID debugging for heated bed 2015-02-23 09:41:25 +01:00
kieranc 21bd4fd6db Enable PID debugging for heated bed 2015-02-23 09:40:53 +01:00
kieranc fb56aad898 Enable PID debugging for heated bed 2015-02-23 09:40:29 +01:00
kieranc 08c543f8fb Enable PID debugging for heated bed 2015-02-23 09:40:06 +01:00
kieranc c89413db1e Enable PID debugging for heated bed 2015-02-23 09:39:39 +01:00
kieranc 1c71e4751a Enable PID debugging for heated bed 2015-02-23 09:39:07 +01:00
maverikou a9e15aa503 Updated example configurations 2015-02-22 20:15:05 +02:00
Scott Lahteine 3ba47ea277 Remove test/demo multi=line code menu items 2015-02-22 10:10:37 -08:00
Scott Lahteine c1240f23dd Merge branch 'Development' into marlin_configurator
Latest upstream changes
2015-02-22 10:02:25 -08:00
alexborro a57869ba49 Dummy Thermistor Table for testing purposes
Am I the only one who always need to change the thermistortable.h to add
a dummy table??
Ok, it is done. Just set the thermistor to 999 and it will always read
25C. Great for Testing or Development purposes.
2015-02-22 11:02:04 -03:00
Maverikou 2e166f5337 Added support for PanelOne from T3P3. 2015-02-22 09:14:43 +02:00
Scott Lahteine 40ef472a25 Merge in encoder multiplier 2015-02-21 20:18:49 -08:00
Scott Lahteine c3c50528e6 Merge pull request #1521 from thinkyhead/fixup_encoder_code
Encoder multiplier - revised code
2015-02-21 19:44:53 -08:00
Scott Lahteine 1c13cd604b Formatting in babysteps defines 2015-02-21 18:45:10 -08:00
Scott Lahteine 3a26804d80 Adapt to latest PID code and fix typos 2015-02-21 18:41:04 -08:00
Scott Lahteine 422582da71 Prep formatting for upcoming PR 2015-02-21 18:24:16 -08:00
Scott Lahteine 27ac3e985d Add options to example_configurations 2015-02-21 18:17:37 -08:00
Scott Lahteine 0d6a7a2df0 Merge with latest upstream changes 2015-02-21 18:13:31 -08:00
Scott Lahteine c7a97e18b7 Merge branch 'Development' into cleanup_ultralcd
Latest upstream changes
2015-02-21 18:04:08 -08:00
Scott Lahteine 6d5c13df74 Merge pull request #1520 from thinkyhead/fixup_temperature
Fix typos in checkExtruderAutoFans
2015-02-21 17:53:26 -08:00
Scott Lahteine 5b9e341222 Merge pull request #1516 from thinkyhead/fixup_ramps
Cleanup ramps boards
2015-02-21 17:51:57 -08:00
Scott Lahteine 57bc28b42c Cleanup and fix ultralcd.cpp
- Fix bug in lcd_control_temperature_menu
- Remove test menu-item left in from multi-line command feature
- Replace literals with translatable strings
- Reduce lcd_preheat code redundancy
- Reduce menu macro redundancy
- Clean up formatting
2015-02-21 17:38:56 -08:00
Scott Lahteine 4fcd4b444e Merge pull request #1519 from thinkyhead/fix_recent_issues
Fix implementation of PID menu items
2015-02-21 16:43:11 -08:00
Scott Lahteine 9c35ed149d Merge pull request #1508 from AnHardt/iss1492
Fix iss#1492
2015-02-21 16:26:37 -08:00
Scott Lahteine 430c4b6538 Replace missing backslash 2015-02-20 02:17:16 -08:00
Scott Lahteine 3aa5f98b64 Download all as ZIP, adjust layout on resize 2015-02-20 02:12:00 -08:00
Scott Lahteine a8939eec28 Readability of MENU_MULTIPLIER_ITEM
Last commit before bed.
2015-02-20 02:08:41 -08:00
Scott Lahteine 09e09b308e Tweaky spacing adjustments 2015-02-20 01:22:56 -08:00
Scott Lahteine e3fd3e8fa4 Fix typos in checkExtruderAutoFans 2015-02-20 00:08:59 -08:00
Scott Lahteine c610471b0c Add PID_PARAMS_PER_EXTRUDER conditional 2015-02-20 00:00:19 -08:00
Scott Lahteine 2d6fa9ce80 Proper implementation of PID menu items
- Make this work per #1344
2015-02-19 23:54:06 -08:00
wgm4321 b8e79dce89 Fix compilation errors when encoder multiplier is disabled 2015-02-19 21:51:23 -05:00
wgm4321 65e1fc71be Add encoder rate multiplier 2015-02-19 21:42:57 -05:00
Scott Lahteine c9465c33cf Merge branch 'thinkyhead-fixup_ramps_boards' into Development
Merge resolving conflicts
2015-02-19 17:36:49 -08:00
Scott Lahteine 623119619c Merge branch 'fixup_ramps_boards' of https://github.com/thinkyhead/Marlin into thinkyhead-fixup_ramps_boards
Merge commit
2015-02-19 17:36:00 -08:00
Scott Lahteine 859c8d3fef Azteeg X3 overrides too 2015-02-19 17:28:38 -08:00
Scott Lahteine 7891eacf21 Merge branch 'Development' into fixup_ramps_boards
- Also apply cleanup for #1514
2015-02-19 17:26:22 -08:00
Scott Lahteine b12cd1f841 Merge pull request #1514 from 2PrintBeta/Development
Initial definitions for the Boards BAM&DICE + BAM&DICE Due
2015-02-19 17:17:34 -08:00
Scott Lahteine 1600506545 Merge remote-tracking branch 'upstream/Development' into marlin_configurator 2015-02-19 15:15:55 -08:00
Scott Lahteine 5d0c93ae10 Keep config boxes in view on wide screen 2015-02-19 03:41:41 -08:00
Scott Lahteine 335b7680c9 Tooltip code, widescreen layout, hide auto-expands
Slightly better layout for wide screens.
2015-02-19 03:11:16 -08:00
domonoky 15b73386b5 Add pin definitions for the Boards BAM&DICE + BAM&DICE Due 2015-02-19 11:53:31 +01:00
Scott Lahteine 08c236059e Merge pull request #1505 from thinkyhead/issue_1499
Bed leveling probe behavior issue?
2015-02-19 01:24:17 -08:00
Scott Lahteine ab419795b3 Merge pull request #1511 from MagoKimbra/Reset_Alert_message_M600
Reset Alert message when finish M600 command
2015-02-19 01:19:56 -08:00
Scott Lahteine f238c7428d Merge branch 'Development' into marlin_configurator
Latest upstream changes
2015-02-18 21:56:17 -08:00
Scott Lahteine da275c72ab Cleanup Github reply.data.content before atob() 2015-02-18 21:45:38 -08:00
MagoKimbra 159196d1e9 Reset Alert message when finish M600 command 2015-02-18 21:33:38 +01:00
daid 266ff227cf Merge pull request #1510 from docdawning/Development
Trivial spelling correction
2015-02-17 20:59:32 +01:00
DocDawning dfd4e74a5c Trivial spelling correction 2015-02-17 12:37:05 -07:00
AnHardt 6cdcd6c6d1 Fix iss#1492
Introduced lcd_strlen() and lcd_strlen_P().
Replaced the old functions where necessary.
Reworked language_ru.h.

Speeded up test for zero length string in cardreader.cpp
2015-02-16 13:53:58 +01:00
Scott Lahteine c033904693 Updated config file section markers 2015-02-15 23:25:57 -08:00
Scott Lahteine 84a87a5b1c Fix up configs a little 2015-02-15 23:19:22 -08:00
Scott Lahteine 63a5ff7ab9 Merge pull request #1489 from tommil/Development
Updated Finnish language file
2015-02-15 23:02:11 -08:00
Scott Lahteine efb0491d40 Merge branch 'Development' into issue_1499
Merging latest upstream changes
2015-02-15 22:59:07 -08:00
Scott Lahteine 8309b4f408 Merge branch 'Development' into marlin_configurator
Merging latest upstream changes
2015-02-15 22:58:04 -08:00
Scott Lahteine 961998cf91 Merge pull request #1496 from thinkyhead/issue_1493
Megatronics 3 servo pins
2015-02-15 22:00:14 -08:00
Scott Lahteine 59e92a2db4 Merge pull request #1506 from thinkyhead/issue_1504
Issue #1504 – K8200 Z_ENABLE_PIN
2015-02-15 21:59:30 -08:00
Scott Lahteine b71322e793 Issue #1504 – K8200 Z_ENABLE_PIN
- K8200 uses a non-standard RAMPS with Z_ENABLE=63 ??
- Assuming from previous input that 3DRAG is the same.
2015-02-15 21:56:23 -08:00
Scott Lahteine 978d114c73 Bed leveling probe behavior issue?
The `float` keyword should not be on these vars because they conceal
the outer vars, preventing them from obtaining known values before
being passed in `set_bed_level_equation_3pts`. Possibly related to
`Z_RAISE_BETWEEN_PROBING` not functioning.
2015-02-15 20:51:27 -08:00
Scott Lahteine 7c6236761a Merge branch 'Development' into issue_1493
Merging latest upstream changes
2015-02-15 20:45:35 -08:00
Scott Lahteine 9875352dd8 Merge branch 'Development' into marlin_configurator
Merging latest upstream changes
2015-02-15 20:44:21 -08:00
MarcelMo d28f5b9e82 Support for simple customisable AutoZProbing area
When probing PCB´s I had the problem that i needed auto-leveling for specific areas (it´s never the same size).
Not much code, but very useful.
Now I use simply G29 L5 R55 F5 B35 P3 to probe a 4x6cm PCB before milling.
I used int for values... might be wrong...
I hope this time I got the right development tree. (tried first with https://github.com/MarlinFirmware/Marlin/pull/1130/commits)
2015-02-15 15:58:29 +01:00
Tommi Lamberg 3e6ae25481 Merge branch 'Development' of https://github.com/tommil/Marlin into Development 2015-02-15 12:21:57 +02:00
Tommi Lamberg 513ff94b89 Merge remote-tracking branch 'upstream/Development' into Development 2015-02-15 12:21:45 +02:00
Scott Lahteine 83cb702e72 Config sections, multi-field values, toggles, etc
- Auto-detect “switchable” items where possible
- Handle switchable multi-value fields
- Add standard sections to config form
- Add section markers to configurations
- Add value options to configurations
- Remove and re-add fields for loaded configs
- Preserve sections across configs
- Preserve non-added fields
- Style added fields wider & newline by default
2015-02-14 23:44:01 -08:00
Tommi Lamberg 07a9165ca2 Merge remote-tracking branch 'upstream/Development' into Development 2015-02-13 21:09:52 +02:00
alexborro afc737ca0c Fix CoreXY Homing Routine.
Fixed how stepper ISR figure it out when the head (extruder) is going to
Min or Max direction.
Added Homing to Max Endstops.
2015-02-13 14:38:05 -02:00
Scott Lahteine ec53c6309a More fields, options in config, fix tooltips 2015-02-13 03:02:56 -08:00
Scott Lahteine 68184af57b Merge branch 'Development' into marlin_configurator
Latest upstream commits
2015-02-12 21:59:26 -08:00
Scott Lahteine 7866fa161f Merge pull request #1476 from Natealus/Development
Compiling errors with 4 Extruders defined and Viki 2 Implementation
2015-02-12 16:56:55 -08:00
Scott Lahteine 8cfdd3e8a4 Merge pull request #1423 from MoonCactus/Development
Multi-line G-code commands
2015-02-12 16:29:30 -08:00
Natealus ea9e49b20d ARRAY_BY_EXTRUDERS 4th hotend PID parameters 2015-02-12 00:56:47 -07:00
Scott Lahteine d0ad8a978c Megatronics 3 servo pins
- Naive implementation, assuming the data sheet pin numbers correspond
to Arduino pin numbers.
2015-02-11 23:46:27 -08:00
Scott Lahteine e74138b2be More robust fetch code, download buttons
- Fetch code now handles github, local, or http: access
- Download button creates a time-stamped inline download
- More complete error messages
- Show warnings when approaching the hourly fetch quota (limit
reloading!)
- Added my test domain (where the _htaccess is deployed)
- `_htaccess` file added to set Access-Control-Allow-Origin “*”
- Marlin logo with css
- Limit selectable areas to avoid annoying selections
- Messages now persist until dismissed
- Default repo for files set to thinkyhead, ‘marlin_configurator’ branch
- Cosmetic changes
2015-02-11 04:59:07 -08:00
Tommi Lamberg 622a531d9c Fixed error in translation 2015-02-11 08:50:48 +02:00
Tommi Lamberg 290ab42d22 Updated Finnish translations 2015-02-11 08:37:07 +02:00
Jérémie FRANCOIS 22a7985445 reverted to upstream 2015-02-11 07:12:55 +01:00
Jérémie FRANCOIS b3bda57ca2 reverted to upstream 2015-02-11 07:12:02 +01:00
Jérémie FRANCOIS 9d75a56b56 Merge remote-tracking branch 'upstream/Development' into Development
Conflicts:
	Marlin/Configuration.h
	Marlin/Marlin_main.cpp
2015-02-11 06:38:36 +01:00
Tommi Lamberg 0a59fee763 Merge remote-tracking branch 'upstream/Development' into Development 2015-02-11 06:53:43 +02:00
Scott Lahteine d75cd69de4 Merge pull request #1488 from Wurstnase/Development
Bedleveling: X and Y must be Integers not Float!
2015-02-10 16:02:55 -08:00
Scott Lahteine eb5889b3da Merge pull request #1479 from AnHardt/en_first
#include "language_en.h" before the national language in language.h
2015-02-10 15:33:45 -08:00
kieranc b9ed873827 Enable PID debugging for heated bed 2015-02-10 14:13:06 +01:00
kieranc 0a19109476 Enable PID debugging for heated bed 2015-02-10 14:11:44 +01:00
Tommi Lamberg a4f939cc27 Updated Finnish language file 2015-02-10 10:48:33 +02:00
Wurstnase 4546c92f5b X and Y must be Integers not Float!
https://github.com/Wurstnase/Marlin/blob/Development/Marlin/Configuration.h#L427
2015-02-10 09:00:48 +01:00
Scott Lahteine 32d4dd073f Merge pull request #1487 from AnHardt/iss1485
Fix for #1485
2015-02-09 21:41:07 -08:00
Scott Lahteine f92b0dc6c7 Merge pull request #1486 from Souko/patch-1
Update ultralcd_st7920_u8glib_rrd.h
2015-02-09 21:32:54 -08:00
AnHardt c246026bda Sorry. 2015-02-10 00:23:39 +01:00
AnHardt 07e488cfae Fix for #1485 2015-02-10 00:13:46 +01:00
Souko e7ecf14d0c Update ultralcd_st7920_u8glib_rrd.h
Fixed delay-times during Init. REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER won't get initialized on some Boards because delay was to short.
2015-02-09 21:46:06 +01:00
Scott Lahteine 8be25389f2 Merge pull request #1477 from AnHardt/languagetoconfig
Make display language configurable in Configuration.h
2015-02-09 05:36:57 -08:00
Scott Lahteine 52c3cf6d34 Fix a logging error 2015-02-09 05:07:05 -08:00
Scott Lahteine ba24a09f24 Use api.github to get Configurations
- Make api.github the default source for configurations
- Remove configurations from the configurator
- Continuation and enhancements
2015-02-09 04:34:57 -08:00
Natealus f4b0a40abb Additional fixes to temperature.cpp and found another missing line
Looks like INVERT_E3_DIR was missing in the configuration.h also as I
did a test compile with 4 extruders and Azteeg X3 Pro defined. So I also
added those lines too. Additional formatting to make the comments line
up better in that section.
2015-02-08 15:43:58 -07:00
AnHardt 3aac2df057 Now the oter way around.
Include of language_en.h now behind national language.

All "#define MSG_STR_*" now surrounded by #ifndef and #endif.
2015-02-08 20:41:20 +01:00
AnHardt 488633bf44 #include "language_en.h" before the national language in language.h
+ May decrease the workload for feature developers. They may omit to
update all the language files but "language_en.h". When loading _en
first, all new features give some display, but the new in English.

- May throw some additional warnings about redefinition during compile.
2015-02-08 14:26:24 +01:00
AnHardt 8e92729141 Make display language configurable in Configuration.h 2015-02-08 13:45:22 +01:00
Natealus 38a500d05c Viki 2 Implementation
I've insert the define and pointer entries for the Viki 2 and miniViki
from Panucatt in all of the example configs and main config. With these
additions and with pins done in the old single pin.h style...I was able
to get the display working fine save for needing to turn Delta Segments
per Second down. But that's a common graphics lcd issue being looked
into right now.

I need assistance in understanding how the new divided pins files fit
together because my previous attempts at trying to get it to work
appropriately didn't seem successful. This originally came from trying
to find out how to swap the XYZ Min and Max Endstop pins in the Azteeg
X3 Pro. It only comes with one set of connectors and they're Min
Endstops. My previous experience didn't turn out well trying to tell the
firmware to home to the Min Endstops so the best solution I found was to
swap the pins in the firmware. If I'm missing a conflict with a setup
other than delta please let me know, but it makes sense in my setup.
2015-02-08 03:14:59 -07:00
Natealus 697ee2dc50 Compiling errors with 4 Extruders defined
Here were a few changes that I had to make/add lines for the 4th hotend.
A compiling problem in the Temperature.cpp and missing lines in
configuration.h and configuration_adv.h. I added these lines in all of
the example configs too.
2015-02-08 01:05:05 -07:00
Jérémie FRANCOIS 85e5aa4011 Generalized enqueue_commands_P, and moved them to Marlin_main as they should 2015-02-07 23:24:20 +01:00
Scott Lahteine 4228758f1d Clean up and improve tooltips, show the name 2015-02-07 11:58:19 -08:00
Scott Lahteine 0116320d2c Strip slashes off the front of tooltips 2015-02-07 11:04:10 -08:00
Scott Lahteine 69240d41b0 Offset the timing of the pulsing animation 2015-02-07 10:45:56 -08:00
Scott Lahteine 78b9428f4e Avoid capturing disabled items in comments 2015-02-07 10:34:16 -08:00
Scott Lahteine 5d159851e5 Fix positioning of tooltip 2015-02-07 09:03:00 -08:00
Scott Lahteine c99f1de9f3 Fix tooltips blocking clicks 2015-02-07 07:39:10 -08:00
Scott Lahteine 1a548c1bc1 Find nearby comments and make them into tooltips 2015-02-07 06:20:04 -08:00
Scott Lahteine c093ea36e6 Merge pull request #1472 from thinkyhead/issue_1471_fix
Fan speed and 4th extruder on graphical LCD
2015-02-07 03:03:04 -08:00
Scott Lahteine 90fa1345b0 Fix purge + refresh of define info 2015-02-07 03:02:26 -08:00
Scott Lahteine aa67b38a44 Fan speed and 4th extruder on graphical LCD
- Display fan speed 0-1 as “—“ and 254-255 as “100%”.
- Display 4th extruder instead of the heated bed
2015-02-07 02:44:35 -08:00
Scott Lahteine 7850ae2f4f Merge branch 'Development' into marlin_configurator
Merge latest Development
2015-02-07 02:20:25 -08:00
Scott Lahteine 2647402095 Use info.repl in updateDefineFromField, fix regex 2015-02-07 02:04:44 -08:00
Scott Lahteine 12a3975341 Close section tag, add String.prototype.lineCount 2015-02-07 00:46:14 -08:00
Scott Lahteine 4bb72f9480 Highlight the edited line
- Add a span to the edited text line to provide a highlight
- Scroll and highlight for switch checkboxes also
- Clean up initialization
- More API documentation
- Smarter handling of asynchronous file loading during init
2015-02-06 23:46:16 -08:00
Scott Lahteine 37c43a7ab3 Scroll to reveal on switches as well 2015-02-06 18:09:14 -08:00
Scott Lahteine 9c0adae3cd Scroll to setting position in file when edited
- Animate scrolling to the edited item’s position
- Sanity check file drops and show warnings
- Fix form init / refresh on new configuration drop
- Document the API methods that get/set defines
2015-02-06 17:57:31 -08:00
Scott Lahteine 4d341bb758 Copy configs into subfolder
Browsers may not want to load files outside the folder, but they may be
okay with these relative references within the folder.
2015-02-06 14:58:47 -08:00
Scott Lahteine 1a3c7d91f1 Merge pull request #1470 from thinkyhead/fix_eeprom_typo
Fix bad typo in ConfigurationStore.cpp
2015-02-06 14:44:28 -08:00
Scott Lahteine 72856166a9 Fix bad typo in ConfigurationStore.cpp 2015-02-06 14:43:58 -08:00
Scott Lahteine b51204cc1c Add fieldsets and make them into tabs 2015-02-05 20:28:39 -08:00
Scott Lahteine 56769ba4f8 Make comment/uncomment a little neater 2015-02-05 19:39:42 -08:00
Scott Lahteine 94bebf31ac Pre-collect info about options on field init
- When initializing fields use the configuration to determine the format
- Cache the line for each option for fastest string compare / replace
- Add logging levels for debugging
2015-02-05 19:30:11 -08:00
Scott Lahteine 32aaadc301 Include minimized jQuery 2.1.3 2015-02-05 11:50:42 -08:00
Scott Lahteine 53f6bbdfe0 Try a stepper for the serial port 2015-02-05 11:44:43 -08:00
Scott Lahteine ac7a4358d6 Add a responsive file uploader
- Specify HTML5
- Allow drag and drop for loading configurations
2015-02-05 11:14:31 -08:00
Scott Lahteine 09a385d9b0 Add "use strict" to the top. 2015-02-05 08:22:51 -08:00
Scott Lahteine b2627200ea Get thermistors from config, add temp sensors 2015-02-05 08:19:09 -08:00
Scott Lahteine ef18bfdd3f An in-place browser-based configurator utility
- A web form with fields for configuration values
- Reads and parses standard config files
- Modifies configurations dynamically in-place
2015-02-05 07:05:29 -08:00
Scott Lahteine 3490a19103 Merge pull request #1466 from CONSULitAS/Development_K8200_de
K8200: Example Configuration.h fixed
2015-02-04 17:28:04 -08:00
CONSULitAS cfbb94a2a8 K8200: Example Configuration.h fixed
Example Configuration.h: fixed strange white characters preventing
compilation in lines 1 and 3 - oops
2015-02-04 10:35:10 +01:00
Scott Lahteine b65c5d8ec6 Merge pull request #1464 from AnHardt/iss1448-Menu
Unified menu selection - by hilighting - made first column avilable
2015-02-03 22:43:29 -08:00
Scott Lahteine 6250cc9a8d Merge pull request #1465 from CONSULitAS/Development_K8200_de
K8200: Example Configurations back in sync and readme update
2015-02-03 22:38:57 -08:00
CONSULitAS 0de5083aff K8200: Example Configurations readme.md updated
Example Configurations for K8200 readme.md updated
* readme.md: added description for german umlaut support on LCD
2015-02-04 00:24:51 +01:00
CONSULitAS c421ffd520 K8200: Example Configuration_adv.h back in sync
Example Configuration_adv.h for K8200 back in sync
* Configuration_adv.h: rebased and added missing changes for 4th
extruder
2015-02-04 00:19:18 +01:00
CONSULitAS 0575dd10de K8200: Example Configuration.h back in sync
Example Configuration.h for K8200 back in sync
* Configuration.h: rebased and added missing changes
* Configuration.h: updated comments for K8200
2015-02-04 00:15:50 +01:00
AnHardt f708884808 Introduced new function lcd_implementation_mark_as_selected()
New function now drops the prechar (select character) and makes the first
column usable for text.
Marking the line is now constantly made by highlighting (reverse).

Replaced selection code in:
lcd_implementation_drawmenu_generic()
_drawmenu_setting_edit_generic()
_drawmenu_sd()

with new function.
2015-02-03 23:35:33 +01:00
Scott Lahteine b6ca50a2cc Merge pull request #1463 from thinkyhead/cleanup_recent_merge
Apply some cleanup for recent merge
2015-02-03 12:06:47 -08:00
Scott Lahteine cc56f36870 Merge pull request #1461 from thinkyhead/issue_1453_redo
Apply fix for M600 filament change
2015-02-03 11:52:09 -08:00
Scott Lahteine 8663f4bbaf Apply some cleanup for recent merge
Combine 1/(rows+1) with u8g.getHeight() to get rowHeight and just use
that.
2015-02-03 11:48:49 -08:00
Scott Lahteine fed931afda Merge pull request #1462 from AnHardt/iss1447-Edit
Fixes issue #1447 - Overlapping of long descriptions with values.
2015-02-03 11:36:04 -08:00
Scott Lahteine 0cb1029311 remove extra plan_buffer_line 2015-02-03 11:26:36 -08:00
AnHardt 9381bfe7f9 Fixes issue #1447 - Overlapping of long descriptions with values. 2015-02-03 20:15:16 +01:00
Scott Lahteine b97a950f53 Apply fix for M600 filament change
- Patch from #1453 for delta movement plan
- Fix: Set X with code X instead of adding to X
2015-02-03 09:57:16 -08:00
Scott Lahteine 04ce708031 Merge pull request #1457 from AnHardt/bootsplash
Reworked bootsplash for DOGM displays another time - saved 1786 bytes
2015-02-03 09:19:54 -08:00
AnHardt 0e41882b5c Merge https://github.com/MarlinFirmware/Marlin into bootsplash 2015-02-03 18:05:38 +01:00
AnHardt 2abf1ad940 Distribute recent changes in Configuration.h to the examples. 2015-02-03 17:59:04 +01:00
Scott Lahteine 86c0583525 Merge pull request #1459 from AnHardt/lcd-width
Adjust LCD_WIDTH to make better use of DOGM LCDs 2
2015-02-03 08:29:03 -08:00
AnHardt 33f8580255 Merge branch 'lcd-width' into b- 2015-02-03 14:45:58 +01:00
AnHardt 0c24bb6cfc Adjust LCD_WIDTH to make better use of DOGM LCDs 2015-02-03 14:21:43 +01:00
AnHardt b1dbd765c6 Centralise definition of fonts for DOGM displays
Prework for issue #1448 and #1447

Will merge in when pull request #1457 is in.
2015-02-03 13:10:09 +01:00
AnHardt 65642592ee Added dualline version. 2015-02-03 12:25:36 +01:00
AnHardt f9cc1df00b Droped URL from bootsplash. 2015-02-03 11:14:27 +01:00
AnHardt c20606b8d7 Replaced some literal constants with defines
Replaced calculation to centre bitmap with fixed values.
Saved 20 bytes.
2015-02-03 09:52:29 +01:00
AnHardt 3602474c25 Replace solitaire use of u8g_font_5x8 font and replace with u8g_font_6x10_marlin
and win another 1694 bytes.
2015-02-03 09:07:57 +01:00
AnHardt f5fd94d62a Kick suspicious loop an win 72 bytes.
No visible impact.
2015-02-03 08:56:00 +01:00
Scott Lahteine 6cce924cd0 Merge pull request #1455 from thinkyhead/fix_hd44780_inversion
Fix HD44780 misspelled as HD44870
2015-02-02 22:53:24 -08:00
Scott Lahteine b3973ed224 Fix HD44780 misspelled as HD44870 2015-02-02 22:33:58 -08:00
Scott Lahteine d8b7f29fa2 Merge pull request #1452 from thinkyhead/fix_M200_bug
M200 cleanup, normalization of EXTRUDER loops
2015-02-02 21:58:15 -08:00
Scott Lahteine 6d81968db5 Merge pull request #1450 from docdawning/Development
Normalized section headers, added some headers, added help URLs for newb...
2015-02-02 21:17:06 -08:00
DocDawning 5bb3933b21 Fixed n00bsauce 2015-02-02 14:18:53 -07:00
DocDawning a507431400 Merge branch 'Development' of https://github.com/docdawning/Marlin into Development 2015-02-02 14:13:03 -07:00
DocDawning d109cd940b Normalized all configuration files to include my new section headers and the like. 2015-02-02 14:11:21 -07:00
DocDawning 055c4beaf9 Normalized section headers, added some headers, added help URLs for newbies 2015-02-02 14:11:09 -07:00
Scott Lahteine 9dc5de6166 Hide code that makes veteran geeks go "aha!" 2015-02-02 05:55:55 -08:00
Scott Lahteine bd387068bb Apply loops for extruders elsewhere also 2015-02-02 05:27:27 -08:00
Scott Lahteine 4a146d584b Loop, since the pending feature can use an array 2015-02-02 05:16:17 -08:00
Scott Lahteine bca884bf72 Realized it's not a bug, but cleanup code anyway 2015-02-02 04:41:31 -08:00
Scott Lahteine 137ba7b590 Merge pull request #1449 from AnHardt/LostInTranslation3
Solid improvements. Merging.
2015-02-01 18:37:20 -08:00
DocDawning 8e287c2762 Normalized section headers, added some headers, added help URLs for newbies 2015-02-01 17:06:38 -07:00
AnHardt 2dd43a82b1 Ups. #else added 2015-02-01 14:16:35 +01:00
AnHardt 26e55471f8 Update example configurations. 2015-02-01 13:46:32 +01:00
AnHardt 85385be132 Removed now automatic define of DISPLAY_CHARSET_DOGM + improved description. 2015-02-01 13:33:25 +01:00
AnHardt 0e40408ee5 Make exemplaric use of new display charsets in language_en.h and languag_de.h 2015-02-01 13:20:58 +01:00
AnHardt 8dce5a6644 Improve new charset featur.
Select DOGM-displays automaticly.
Give hint where to find charsets.
Add '²' and '³' characters.
2015-02-01 13:09:59 +01:00
Scott Lahteine 0cec0b73bc Merge pull request #1446 from thinkyhead/bq_hephestos_support
Add support for BQ Prusa i3 "Hephestos"
2015-02-01 03:43:44 -08:00
Scott Lahteine c009c81e65 make marlin-main the default 2015-01-31 23:11:28 -08:00
Scott Lahteine f4ebc02555 marlin url 2015-01-31 23:09:12 -08:00
Scott Lahteine 0af9a0bf57 url to firmware downloads 2015-01-31 22:19:45 -08:00
Scott Lahteine 5f8dd92905 toss in a fix for .ru 2015-01-31 21:58:38 -08:00
Scott Lahteine 3f3ad9b3ad typo 2015-01-31 21:42:53 -08:00
Scott Lahteine 07639053fb Add support for BQ Prusa i3 "Hephestos" 2015-01-31 21:38:30 -08:00
Scott Lahteine 4f4cd7a2c0 Merge pull request #1445 from blubbfish/patch-3
Avoid compiling error
2015-01-31 21:03:18 -08:00
Philip Schell fb7c636ecf Avoid compiling error
Only a missing ","... now it will compile again
2015-02-01 01:33:04 +01:00
alexborro 787d6fb61a Update RUMBA pins file
Add FAN1_PIN and SERVO0_PIN
2015-01-31 18:03:28 -02:00
Scott Lahteine 5fd5105d44 Merge pull request #1439 from clefranc/Development
Fix nozzle in temperature menu
2015-01-30 19:05:45 -08:00
Scott Lahteine b40dd814b0 Merge pull request #1434 from AnHardt/LostInTranslation2
Introduction of a system to feed displays with the correct charsets. Example in language_de.h
2015-01-30 18:35:02 -08:00
AnHardt 76bf93efcb Revert "get STR_THERMOMETER from ultralcd_implementation_hitachi_HD44780.h"
This reverts commit 4d5b0e2037.
2015-01-30 22:42:44 +01:00
AnHardt 4d5b0e2037 get STR_THERMOMETER from ultralcd_implementation_hitachi_HD44780.h 2015-01-30 22:20:10 +01:00
Christian Lefrançois 33408a4dfc Update ultralcd.cpp
Fix number of nozzle displayed in temperature menu.
2015-01-30 11:16:13 -05:00
AnHardt 6e6e3cf443 merged https://github.com/MarlinFirmware/Marlin.git 2015-01-30 11:05:29 +01:00
AnHardt b3ca430a20 Inducted the defined placeholders in the translation table. 2015-01-30 10:35:14 +01:00
AnHardt e045034c3f Included Configuration.h to read the defined charsets.
Defined the charsets plus a default.
2015-01-30 10:31:58 +01:00
AnHardt 27c638803e Defined three charsets. 2015-01-30 10:28:22 +01:00
Scott Lahteine b033783e0f Merge pull request #1438 from thinkyhead/cleanup_recent_additions
Clean up some formatting
2015-01-29 19:10:49 -08:00
Scott Lahteine 073c59c50a Clean up some formatting
- Also partial cleanup of Marlin_main.cpp with a smidgen of Doxygen.
2015-01-29 18:52:21 -08:00
AnHardt 9a4d4b3a2f translated Deltamenu 2015-01-29 13:19:32 +01:00
AnHardt 8aa6487b4b MSG_ENDSTOP_ABORT = 'Endstop abort' > 'Endstop Abbr. Ein' 2015-01-29 13:12:55 +01:00
AnHardt 666ad7106b Translated redundand: define MSG_INIT_SDCARD and MSG_CNG_SDCARD 2015-01-29 13:09:12 +01:00
AnHardt e5c45fbe8c Infoscreen messages end with a '.' if not to long.
MSG_NO_MOVE = 'Kein Zug.' > 'Motoren Eingesch.' hat mich grau Haare gekostet.
Die englisch Meldung will sagen - Du kannst jetz am Extruder arbeiten, die
Achsen sind bockiert, die Motoren sperren die Achsen weil sie unter Strom
stehen, weil sie eingeschaltet sind.
2015-01-29 13:02:21 +01:00
AnHardt 1e22137e27 MSG_STOP_PRINT = 'Druck stoppen' > 'SD-Druck Abbruch'
to work out that this can't be resumed.
2015-01-29 12:41:46 +01:00
AnHardt 05d2ebd118 MSG_WATCH > 'Beobachten' > 'Info' 2015-01-29 12:29:31 +01:00
AnHardt 06cba91c39 eye candy 2 2015-01-29 12:26:21 +01:00
AnHardt 9352c9547f MSG_SPEED = 'Geschw' > 'Geschw.' 2015-01-29 12:13:44 +01:00
AnHardt 0dfb0162f3 eye candy. 2015-01-29 12:07:01 +01:00
AnHardt 7222b27501 MSG_MOVE_AXIS = 'Achsen bewegen' > 'Bewegen'. Is Extruder an axis? 2015-01-29 12:02:58 +01:00
AnHardt a6f808c9b1 remove unused #define MSG_RETRACT 2015-01-29 11:58:50 +01:00
AnHardt 152fa579f5 MSG_SWITCH_PS_OFF = 'Switch Power Off' -> 'Netzteil Aus' 2015-01-29 11:55:36 +01:00
AnHardt 7a32b742f3 MSG_SWITCH_PS_ON = 'Switch Power On' ->'Netzteil Ein' 2015-01-29 11:50:51 +01:00
AnHardt 4e176d2ce8 MSG_SET_ORIGIN = 'Setze Nullpunkt' ->'Setze Null hier' 2015-01-29 11:45:18 +01:00
AnHardt 1f8c8ad3ed MSG_SET_HOME_OFFSETS = 'Set home offsets' ->'Setze Home hier' 2015-01-29 11:39:35 +01:00
AnHardt 0e8836ce5e MSG_AUTO_HOME = 'Auto Nullpunkt' ->'Home' 2015-01-29 11:36:07 +01:00
AnHardt 56d3e6615d MSG_DISABLE_STEPPERS = 'Stepper abschalt.' -> 'Motoren Aus'# 2015-01-29 11:19:10 +01:00
Scott Lahteine 1258980832 Merge pull request #1429 from bq/Development
Add bq Witbox 3D printer
2015-01-29 01:14:18 -08:00
Victor Andueza 766762a4dc Change url link 2015-01-29 09:28:50 +01:00
Scott Lahteine 7df9ca051c Merge pull request #1428 from thinkyhead/issue_1388_eeprom
Make EEPROM storage consistent
2015-01-28 22:58:04 -08:00
Scott Lahteine fe3810f073 yeah, what he said 2015-01-28 22:27:15 -08:00
Scott Lahteine 6137bbd484 use eeprom read correctly 2015-01-28 22:10:31 -08:00
Scott Lahteine 45805c2b76 Merge pull request #1432 from blubbfish/patch-1
Fixing wrong pin to heater extruder 2 <-> 3
2015-01-28 21:33:24 -08:00
Scott Lahteine 9bc9051405 Flag EEPROM write errors on serial output
- Also adds a language string for the error.
- Also adds SERIAL_EOL as an alias for SERIAL_ECHOLN(“”)
2015-01-28 21:19:51 -08:00
Scott Lahteine ff99ca3040 Fix alignment of Restore following PIDTEMP
Should be reading 4 x 4 PID values instead of 4 x 3
2015-01-28 20:48:32 -08:00
Philip Schell 6c285930cb Fixing wrong pin to heater extruder 2 <-> 3
Extruder 2 and 3 was swapped
2015-01-28 23:57:22 +01:00
Victor Andueza 0d4ce27b79 Add pins_WITBOX file 2015-01-28 17:26:50 +01:00
Victor Andueza 13118cde33 Add bq Witbox 3D printer 2015-01-28 16:52:36 +01:00
Scott Lahteine 093fedfde8 Make EEPROM storage consistent
Update ConfigurationStore to always write dummy values for disabled
options, including FWRETRACT, DELTA, and SCARA. Update the EEPROM
version to “V15.” Also fixes a buffer overrun with axis_scaling in
Config_ResetDefault.
2015-01-28 01:08:48 -08:00
Scott Lahteine 34377ee512 Merge pull request #1427 from thinkyhead/fewer_preheat_strings
Remove language strings that only add a number
2015-01-27 22:10:08 -08:00
Scott Lahteine 7378a7fef4 Merge pull request #1408 from thinkyhead/cleanup_servo
Formatting cleanup of quiet sources
2015-01-27 22:09:04 -08:00
Scott Lahteine 5fbef6bed2 Merge pull request #1409 from thinkyhead/rename_lastnr
Rename lastnr to autostart_index and...
2015-01-27 22:07:23 -08:00
Scott Lahteine 53eea611b8 Fix MSG_NOZZLE 2015-01-27 22:00:32 -08:00
Scott Lahteine d7211a5324 Changes for Portuguese too 2015-01-27 21:53:08 -08:00
Scott Lahteine 0a21727c0a Portuguese (pt) and Brazilian Portuguese (pt-br) 2015-01-27 21:45:21 -08:00
Scott Lahteine c90f2e77d8 Remove language strings that only add a number
This won’t reduce the string storage in the end, but it makes the
language files smaller. Also removed remaining unused strings.
2015-01-27 21:36:58 -08:00
Scott Lahteine 34758088c5 Merge pull request #1416 from thinkyhead/cleanup_pins
Split up pins.h to make pins more manageable
2015-01-27 16:03:28 -08:00
Scott Lahteine 2ce4a102ee Add support for Megatronics 3 a la #1426 2015-01-27 15:54:46 -08:00
Scott Lahteine eacd931fad Merge branch 'cleanup_pins' of https://github.com/thinkyhead/Marlin into cleanup_pins
Remote has diverged, so pull
2015-01-27 15:50:08 -08:00
Scott Lahteine ae4b348d77 Make sure _Ex_PINS is defined
Also fix analogInputToDigitalPin so it uses proper C hex notation
2015-01-27 15:36:47 -08:00
Scott Lahteine 80be6f3f91 tweak tweak 2015-01-27 15:36:47 -08:00
Scott Lahteine ebe78cb36f tweak 2015-01-27 15:36:47 -08:00
Scott Lahteine 82474fef8a Max endstop pins disabled by configuration
There’s no need to ask users to uncomment Max Endstop pins when they
have them. These will be set to -1 later if the endstop option is
disabled.
2015-01-27 15:33:21 -08:00
Scott Lahteine 8045e4d60d Add support for 4th extruder
#1405 includes some changes to pins.h for a 4th extruder. This commit
applies those changes. It also deals with a possible problem with
SENSITIVE_PINS.
2015-01-27 15:33:21 -08:00
Scott Lahteine df4f3e7712 cleanup 2015-01-27 15:32:34 -08:00
Scott Lahteine b6ecbd8cc4 cleanup 2015-01-27 15:32:34 -08:00
Scott Lahteine 4e573134de Cleanup heading 2015-01-27 15:32:34 -08:00
Scott Lahteine 574a5ab72a Split up pins to make it more manageable
Hopefully this is helpful to organization and future expansion….
2015-01-27 15:32:34 -08:00
Scott Lahteine b697bb260e Make sure _Ex_PINS is defined
Also fix analogInputToDigitalPin so it uses proper C hex notation
2015-01-27 15:19:03 -08:00
Scott Lahteine ab1ddcd89d Merge pull request #1425 from clefranc/Development
EEPROM data not aligned
2015-01-27 14:26:11 -08:00
clefranc d55c62bf9f Update ConfigurationStore.cpp
Moved #endif to allow filament settings to print.
2015-01-27 13:28:37 -05:00
clefranc e779641c73 Update ConfigurationStore.cpp
Added PIDTEMP dummy write to align EEPROM read/write operation.
2015-01-27 13:25:47 -05:00
Scott Lahteine baac6e242d Merge pull request #1419 from AnHardt/bootsplash
repair Bootsplash
2015-01-27 00:30:29 -08:00
Scott Lahteine a425111eb7 Merge pull request #1421 from blubbfish/patch-2
Fixing the language files for the 4th extruder
2015-01-27 00:04:23 -08:00
AnHardt 75cf302da3 example configurations changed to meet Configuration.h 2015-01-27 00:01:33 +01:00
Philip Schell 61fd45a0c2 Add 4th extruder 2015-01-26 21:22:00 +01:00
Philip Schell 2650be4921 Add 4th extruder 2015-01-26 21:21:31 +01:00
Philip Schell a9763d894e Add 4th extruder 2015-01-26 21:20:56 +01:00
Philip Schell 4949088302 Add 4th extruder 2015-01-26 21:20:04 +01:00
Philip Schell fc5204bd42 Add 4th extruder 2015-01-26 21:17:35 +01:00
Philip Schell 9834818ef7 Add 4th extruder 2015-01-26 21:16:23 +01:00
Philip Schell 8696963154 Add 4th extruder 2015-01-26 21:15:24 +01:00
Philip Schell ee8a7419f4 Add 4th extruder 2015-01-26 21:14:18 +01:00
Philip Schell e18403235d Add 4th extruder 2015-01-26 21:12:55 +01:00
Philip Schell 7baee555f4 Add 4th extruder 2015-01-26 21:11:49 +01:00
Philip Schell cebc7daf2a Add 4th extruder 2015-01-26 21:10:42 +01:00
Philip Schell ef4c7abb21 Update language_es.h
Add 4th extruder
2015-01-26 21:09:24 +01:00
Philip Schell 22e591518a Update language_de.h
Add 4th extruder
2015-01-26 21:08:13 +01:00
Philip Schell a20c35bb38 Update language_ca.h
Add 4th extruder
2015-01-26 21:04:31 +01:00
Jérémie FRANCOIS dd301be52d Added suport for multiline G-code commands in the LCD menus 2015-01-26 18:50:29 +01:00
AnHardt aa48056c03 Made centering of bootlogo work and removed contraproductiv setScale2x2() in dogm_lcd_implementation.h 2015-01-26 17:26:22 +01:00
AnHardt 0d219b3e14 Make centering of STRING_SPLASH work 2015-01-26 16:00:10 +01:00
AnHardt 59315330dd Remove definition of VERSION_STRING and replace where usend with STRING_VERSION 2015-01-26 15:52:01 +01:00
AnHardt 8c792c7b22 Make STRING_VERSION and VERSION_STRING the same 2015-01-26 15:40:44 +01:00
Scott Lahteine a231764523 tweak tweak 2015-01-26 05:18:43 -08:00
Scott Lahteine acf4a12fc3 tweak 2015-01-26 05:17:08 -08:00
Scott Lahteine 74b40b039a Merge branch 'cleanup_pins' of https://github.com/thinkyhead/Marlin into cleanup_pins
Pull for divergence.
2015-01-26 05:09:33 -08:00
Scott Lahteine 812fafac80 Max endstop pins disabled by configuration
There’s no need to ask users to uncomment Max Endstop pins when they
have them. These will be set to -1 later if the endstop option is
disabled.
2015-01-26 05:08:41 -08:00
Scott Lahteine a0a97c9c4c cleanup 2015-01-26 05:08:40 -08:00
Scott Lahteine aa23e75eb8 Cleanup heading 2015-01-26 05:08:40 -08:00
Scott Lahteine 89282ebaa6 Split up pins to make it more manageable
Hopefully this is helpful to organization and future expansion….
2015-01-26 05:08:40 -08:00
Scott Lahteine b87ec5da73 Max endstop pins disabled by configuration
There’s no need to ask users to uncomment Max Endstop pins when they
have them. These will be set to -1 later if the endstop option is
disabled.
2015-01-25 20:08:51 -08:00
Scott Lahteine e5a7f34fa4 Add support for 4th extruder
#1405 includes some changes to pins.h for a 4th extruder. This commit
applies those changes. It also deals with a possible problem with
SENSITIVE_PINS.
2015-01-25 19:43:43 -08:00
Scott Lahteine 865ca0ef04 Merge pull request #1405 from MagoKimbra/4th-extruders
All the additions look proper. I can't think of any other extruder-count-related items that you might have missed. So, with some optimism, I will merge this for testing.
2015-01-25 19:30:51 -08:00
Scott Lahteine b51a583f08 cleanup 2015-01-25 19:20:25 -08:00
Scott Lahteine 5347ac2766 cleanup 2015-01-25 18:50:09 -08:00
Scott Lahteine b684f7e92b Cleanup heading 2015-01-25 18:42:16 -08:00
Scott Lahteine 86f1d1cfc3 Split up pins to make it more manageable
Hopefully this is helpful to organization and future expansion….
2015-01-25 18:40:00 -08:00
MagoKimbra 3021f7f743 Fix PID_dT
Add PID_dT in temeprature.cpp
2015-01-25 17:56:14 +01:00
Scott Lahteine 415d95a298 Merge pull request #1401 from thinkyhead/issue_1379_printrboard_lcd
Proposed fix to #1379. Printrboard I2C LCD support
2015-01-24 16:38:09 -08:00
Scott Lahteine a7b02975b7 No TEMP1 or TEMP2 pins for TEENSYLU || PRINTRBOARD
Pins 2 and 3 are probably general-use pins, since the filament sensor
uses pin 2.
2015-01-24 05:10:48 -08:00
Scott Lahteine 3ec0f7cfc0 Merge branch 'issue_1379_printrboard_lcd' of https://github.com/thinkyhead/Marlin into issue_1379_printrboard_lcd
Diverged from origin
2015-01-24 05:01:26 -08:00
Scott Lahteine 6723388f7f Proposed fix to #1379. Printrboard I2C LCD support 2015-01-24 05:01:02 -08:00
Scott Lahteine 09eff0c4db Merge branch 'rename_lastnr' of https://github.com/thinkyhead/Marlin into rename_lastnr
Diverged from origin
2015-01-24 04:58:11 -08:00
Scott Lahteine 03c9cb60e8 Rename lastnr to autostart_index and...
Replace instances of the number 13 with FILENAME_LENGTH where
appropriate.
2015-01-24 04:57:44 -08:00
MagoKimbra ef5959a705 Fix Temperature
Githun insert this line when i merge with actual Branch development...
2015-01-24 13:49:29 +01:00
MagoKimbra 3d4ee6c868 Merge branch '4th-extruders' of https://github.com/MagoKimbra/Marlin into 4th-extruders
Conflicts:
	Marlin/temperature.cpp
2015-01-24 13:41:15 +01:00
MagoKimbra 986e723eeb Add 4th extruder 2015-01-24 13:37:58 +01:00
Scott Lahteine 9552e59306 Merge pull request #1402 from thinkyhead/issue_1227_max6675_spi
Borrow from Ultimaker to fix MAX6675 SPI conflict
2015-01-24 04:06:42 -08:00
Scott Lahteine 49765fc75d Merge branch 'issue_1227_max6675_spi' of https://github.com/thinkyhead/Marlin into issue_1227_max6675_spi
Branches diverged
2015-01-24 03:50:04 -08:00
Scott Lahteine f16bdd2ff2 Borrow from Ultimaker to fix MAX6675 SPI conflict
Changes to temperature.cpp from Ultimaker fork, intended to address
#1226 and #1227
2015-01-24 03:49:15 -08:00
Scott Lahteine 1ed3913333 Rename lastnr to autostart_index and...
Replace instances of the number 13 with FILENAME_LENGTH where
appropriate.
2015-01-23 22:55:13 -08:00
Scott Lahteine 06c3b37933 Formatting cleanup of quiet sources
Formatting for code-folding plus minor style changes to less active
code.
2015-01-23 22:26:52 -08:00
Scott Lahteine 23fcd1ecb2 Merge pull request #1407 from thinkyhead/cleanup_marlinserial
Formatting cleanup of quiet sources
2015-01-23 21:33:43 -08:00
Scott Lahteine fd78902194 Formatting cleanup of quiet sources 2015-01-23 21:11:50 -08:00
Scott Lahteine 5c1814383a Merge pull request #1390 from floyd871/Development
Show Custom M_Code for Z-Probe Offset when entering M503
2015-01-23 20:08:23 -08:00
MagoKimbra 0ebf896070 Add 4th extruder 2015-01-23 23:13:06 +01:00
Michael Neumann a9d7ab9530 Update ConfigurationStore.cpp
Done
2015-01-23 21:05:27 +01:00
Scott Lahteine a244bcb953 Merge pull request #1403 from thinkyhead/issue_1356
Fix Issue #1356 – remove EXTRUDER1_Z_OFFSET
2015-01-23 10:51:39 -08:00
Scott Lahteine 3a9a3e5ed8 Fix Issue #1356 – remove EXTRUDER1_Z_OFFSET
This define is not used.
2015-01-23 10:51:06 -08:00
Scott Lahteine e770489f27 Borrow from Ultimaker to fix MAX6675 SPI conflict
Changes to temperature.cpp from Ultimaker fork, intended to address
#1226 and #1227
2015-01-23 10:37:39 -08:00
Scott Lahteine 54d5b52a2e Merge pull request #1399 from beanz/use-bed-defines-not-extruder-ones
Code wont compile with extruder but without bed runaway protection defined.
2015-01-23 08:36:25 -08:00
Mark Hindess 0ce252ba7a This ifdef is for bed code so should use bed constants for testing.
Without this fix, the code wont compile with extruder but without bed
runaway protection defined.
2015-01-23 16:30:13 +00:00
Scott Lahteine 0218ad45a1 Proposed fix to #1379. Printrboard I2C LCD support 2015-01-23 07:42:26 -08:00
Scott Lahteine 9040446780 Merge pull request #1395 from AnHardt/iss1394
removed function step_wait() from stepper.cpp
2015-01-23 06:58:10 -08:00
Scott Lahteine 25f79c5010 Merge pull request #1391 from CONSULitAS/Development-newBoard_K8200
Add: Board for Vellemann K8200 (derived from 3Drag)
2015-01-23 06:08:38 -08:00
Scott Lahteine 9ce75ab7de Merge pull request #1386 from roglio/Development
Fixing a build error for melzi and gfx display
2015-01-23 06:00:24 -08:00
Scott Lahteine 99e6ce901b Merge pull request #1393 from thinkyhead/issue_1385_timing
Add proper delay in stepper.cpp
2015-01-23 03:33:39 -08:00
Scott Lahteine 15a00a5a7c Add 1µs delay in other appropriate spots 2015-01-23 03:24:45 -08:00
AnHardt 23cb899c5a removed function step_wait() from stepper.cpp
removed function step_wait() from stepper.cpp because its used nowhere.
2015-01-21 16:30:45 +01:00
Scott Lahteine d9d4a78e0f Add proper delay in stepper.cpp
Issue #1385 describes a delay that the compiler is optimizing out and
this solution.
2015-01-21 01:51:29 -08:00
CONSULitAS d1322dafc9 Add: Example Configuration for Vellemann K8200 - based on new BOARD_K8200 #1391
# Add: Example Configuration for Vellemann K8200 - based on new
BOARD_K8200 #1391

* K8200: new folder in example_configurations for Vellemann K8200 (3Drag
clone - should work with 3Drag http://reprap.org/wiki/3drag, too. Please
report)
* K8200/Configuration.h/Configuration_adv.h: updated manually with
parameters form genuine Vellemann Firmware "firmware_k8200_marlinv2"
based on the recent development branch

I tested the changes on my K8200 with 20x4-LCD and Arduino 1.0.5 for
Windows (SD library added to IDE manually) - everything works well
2015-01-20 23:13:44 +01:00
CONSULitAS 3b50a5e2e6 Add: Board for Vellemann K8200 (derived from 3Drag)
## Add: Board for Vellemann K8200 (derived from 3Drag)

* Boards.h: updated comment for board 3Drag - K8200 removed
* Boards.h: added `BOARD_K8200` with ID 78

* language.h.: machine name and firmware URL for new board

* pins.h: added `K8200` to any `#if` with `3Drag` and corresponding
comments
2015-01-20 20:46:20 +01:00
Michael Neumann 2d454da3af Update ConfigurationStore.cpp
Show Custom M Code when entering M503
2015-01-20 16:21:44 +01:00
Scott Lahteine 4f35de991a Merge pull request #1383 from CONSULitAS/Development
Update Boards.h for Vellemann K8200 - comment only
2015-01-19 15:59:38 -08:00
Scott Lahteine 91f7cc2e6d Merge pull request #1380 from chertykov/Development
Remove hardcoded programmer option (-cwiring).
2015-01-19 15:43:14 -08:00
roglio 22571ca13d Revert "Configuration for Aurora Z605"
This reverts commit 935ee968a7.
2015-01-19 15:02:11 +01:00
roglio 935ee968a7 Configuration for Aurora Z605
Still not fine tuned but working.
2015-01-19 11:18:52 +01:00
roglio ccdbeda526 Fixing a build error for melzi and gfx display
When a melzi board and a full gfx are both selected, the build fails
blaming for some missing defines.

This is a fix for the issue: now my configuration works.
2015-01-19 10:43:26 +01:00
CONSULitAS e13f159343 Update Boards.h for Vellemann K8200 - comment only
## Update Boards.h for Vellemann K8200 - comment only

* Boards.h: updated comment for board 3Drag - K8200 uses same board
2015-01-19 00:53:17 +01:00
CONSULitAS 51c7f2fd5a Revert "## Add: Example Configuration for Vellemann K8200"
This reverts commit 5333590ac2.
2015-01-19 00:37:57 +01:00
CONSULitAS 5333590ac2 ## Add: Example Configuration for Vellemann K8200
* K8200: new folder in example_configurations for Vellemann K8200 (3Drag
clone - should work with 3Drag too, please report)

* K8200/language.h: updated machine name and URL for K8200

* K8200/Configuration.h/Configuration_adv.h: updated manually with
parameters
form genuine Vellemann Firmware "firmware_k8200_marlinv2" based on the
recent development branch

* K8200/files by Vellemann: added folder with original files from
Vellemann homepage, since there is no GitHub fork you could link to by
them

I tested the changes on my K8200 with 20x4-LCD and Arduino 1.0.5 for
Windows - everything works well
2015-01-19 00:28:55 +01:00
Denis Chertykov ba3ac40b9d Remove hardcoded programmer option (-cwiring). Use variable AVRDUDE_PROGRAMMER.
Change default value of AVRDUDE_PROGRAMMER to 'wiring'.
2015-01-18 20:18:43 +03:00
daid 993bcd370f Merge pull request #1373 from MarlinFirmware/revert-1350-Development
Revert "Reduce PROGMEM warnings"
2015-01-16 16:48:41 +01:00
daid 53f971095d Revert "Reduce PROGMEM warnings" 2015-01-16 16:48:22 +01:00
Bo Herrmannsen 5c7e38478b Merge pull request #1369 from PxT/patch-1
Update printrboard pin assignments
2015-01-16 15:35:42 +01:00
PxT 67b597ad46 Update printrboard pin assignments
Backported from Printrbot branch, allows the fan to work correctly.
2015-01-15 19:48:40 -08:00
Bo Herrmannsen 88fe6777bf Update README.md 2015-01-16 04:29:12 +01:00
galexander1 1a2f796dc7 Merge pull request #1368 from MarlinFirmware/revert-1357-SDlib
Revert "Move Sd library out into library"
2015-01-15 18:52:44 -05:00
galexander1 d4880a9e60 Revert "Move Sd library out into library" 2015-01-15 18:52:10 -05:00
Bo Herrmannsen ccdb086fc8 Merge pull request #1363 from PxT/patch-1
Fixes #1361
2015-01-15 10:57:44 +01:00
Bo Herrmannsen 5151db5c2f Merge pull request #1349 from msutas/patch-2
Improvement - G29 Option for Not Retracting Servo
2015-01-15 10:56:31 +01:00
Bo Herrmannsen 1746b2582b Merge pull request #1332 from Sniffle/Development
Rambo FAN_PIN documentation and servo support
2015-01-15 10:56:17 +01:00
Bo Herrmannsen 4b51b5a46d Merge pull request #1357 from odewdney/SDlib
Move Sd library out into library
2015-01-15 10:56:07 +01:00
Bo Herrmannsen f2cb4a3655 Merge pull request #1353 from thawkins/Development
fix avrdude upload in makefile
2015-01-15 10:55:33 +01:00
Bo Herrmannsen 2d398393bd Merge pull request #1359 from PxT/patch-2
Update GCodes.md
2015-01-15 10:54:44 +01:00
PxT 9fd4292923 Fixes #1361 2015-01-13 10:59:50 -08:00
PxT d4c8cfe1f2 Update GCodes.md
Removed remaining angle brackets which are not displayed properly in Github-flavored Markdown.
2015-01-13 09:23:13 -08:00
odewdney cf50c0eff8 Arduino.h case sensitive include 2015-01-13 14:30:28 +00:00
odewdney abdb974d7f Changed dir sep from windows to unix 2015-01-13 14:22:57 +00:00
odewdney db3b4d0c98 Add library to build 2015-01-13 14:19:20 +00:00
odewdney f84ff4ba7d Move SD Fat library out of main src 2015-01-13 13:31:55 +00:00
Bo Herrmannsen ab074dac17 Merge pull request #1344 from grob6000/independent_pid
Independent PID parameters for each extruder
2015-01-13 12:10:37 +01:00
Bo Herrmannsen d4a665694a Merge pull request #1350 from odewdney/Development
Reduce PROGMEM warnings
2015-01-13 11:26:50 +01:00
Bo Herrmannsen b6623a0d49 Merge pull request #1351 from PxT/patch-1
Update GCodes.md
2015-01-13 11:26:24 +01:00
odewdney 9d9c859ac1 First move of SdFat library 2015-01-13 08:04:32 +00:00
Tim Hawkins 5045d17a39 fix avrdude upload in makefile 2015-01-13 13:01:43 +08:00
PxT 848475a5b0 Update GCodes.md
Sort Gcodes numerically, other minor formatting changes
2015-01-12 13:28:31 -08:00
msutas 3a5a6f42fb Corrected the ABL grid option
G29 E was not retracting the probe on the last probe point when used with ABL grid. Corrected.
2015-01-12 11:07:46 +02:00
odewdney cd55a93a13 re-add blank line 2015-01-11 19:22:35 +00:00
odewdney 23bfe30036 moved include themister to temperature.c 2015-01-11 18:18:32 +00:00
odewdney 538859669d Removing compiler warnings for progmem 2015-01-11 18:14:21 +00:00
Bo Herrmannsen 46843bd927 adding back notes on servo power 2015-01-11 14:18:38 +01:00
Bo Herrmannsen d9cd8e9e69 starting to add back note on ramps servo power 2015-01-11 14:16:33 +01:00
grob6000 bf2c923db5 Make multiple PID parameters a config option
* Adds config parameter `PID_PARAMS_PER_EXTRUDER` - allows single PID
parameters to be used where this would be preferable (e.g. dual
identical extruders)
* When disabled, will use `float Kp, Ki, Kd, Kc;` as before.
Preprocessor macros used to switch between.
* ultralcd.cpp defines extra menus for extra parameters only where
required
* M301 reports `e:xx` only if independent pid parameters enabled
* EEPROM structure still leaves space for 3 extruders worth, when undef
will save single parameter to all extruder positions, but only read the
first
* Switching off saves approx 330 B with no LCD enabled, 2634B with LCD
(RRD) enabled: this is significant.
* LCD modifications should be tested.
2015-01-11 13:50:17 +11:00
grob6000 0877aa0fe0 Merge remote-tracking branch 'upstream/Development' into independent_pid 2015-01-11 11:32:58 +11:00
msutas e0beb98fd3 Improvement - G29 Option for Not Retracting Servo
This change introduces an improvement to G29 command on Marlin.

Auto bed leveling operation's reliability is based on the repeatability of the Z-probe switch and the servo. This change introduces an option to G29 command. When the G29 command is sent with an "e" option, during auto bed levelling the servo is not retracted between probes which decreases the bias on auto bed levelling resulting from servo.

G29 command does the auto bed probing as it is.

G29 E command engages the servo on first probing point, probes all points and retracts the servo after probing the last point.

Please comment your opinions, test on your printer and check the code on a programmer's perspective. (I am not a good programmer.)
2015-01-10 17:25:39 +02:00
Bo Herrmannsen 1d4af46496 Merge pull request #1348 from stv0g/LogoLCD
Adding new Marlin to splash screen
2015-01-10 16:08:03 +01:00
grob6000 7d32c7f36d Multiple PID parameter edit for ultralcd
* Depending on extruder count, will add menu items for ultralcd to edit
individual PID parameters for each extruder
* Added menu items to each language_xx.h
* Builds OK, but recommend testing with typical LCD
2015-01-11 01:14:02 +11:00
Steffen Vogel 69dc411ae0 Merge branch 'Development' of github.com:MarlinFirmware/Marlin into LogoLCD
Conflicts:
	Marlin/dogm_lcd_implementation.h
2015-01-10 14:57:11 +01:00
Steffen Vogel d74394369b Merge pull request #1343 from thinkyhead/dogm_progress_bar
DOGLCD and LCD_PROGRESS_BAR to coexist
2015-01-10 11:37:15 +01:00
grob6000 3e2af67ce3 Fix R-H compatibility
* R-H reads incorrect M301 line from EEPROM output if more than one is
present. Reverted to original output format, using only E0 value.
2015-01-10 16:44:28 +11:00
grob6000 37c7e8300f Independent PID parameters for each extruder
* Variables Kp, Ki, Kd, Kc now arrays of size EXTRUDERS
* M301 gains (optional, default=0) E parameter to define which
extruder's settings to modify. Tested, works with Repetier Host's EEPROM
config window, albeit only reads/updates settings for E0.
* All Kp, Ki, Kd, Kc parameters saved in EEPROM (version now v14), up to
3 extruders supported (same as Marlin in general)
2015-01-10 16:35:12 +11:00
Scott Lahteine 326b925557 DOGLCD and LCD_PROGRESS_BAR to coexist
Small changes (and formatting to confuse the diff’er) which first
allows DOGLCD and LCD_PROGRESS_BAR to be enabled in tandem, then a
#warning (rather than error) that the extra progress bar / message
options don’t apply to graphical displays at this time. This leaves
open perhaps combining the progress bar and message area in some future
(or forked custom) graphical LCD display arrangement (at which time the
relevant variables may be moved into ultralcd.cpp with externs in
ultralcd.h). I also added a conditional error that the progress bar and
the filament display may not work well together.
2015-01-09 18:16:56 -08:00
Steffen Vogel 6e8e9bb41e added link to IRC web chat, archive and mailing list 2015-01-09 22:28:47 +01:00
Bo Herrmannsen 5b4daf2669 removed hangout... only one asked for it 2015-01-09 22:08:36 +01:00
Erik van der Zalm 1aade4a8e2 Merge branch 'Development' of https://github.com/MarlinFirmware/Marlin into Development 2015-01-09 21:33:29 +01:00
Erik van der Zalm 8a2e84e3f1 Possible fix for FWRETRACT with 0 zlift. 2015-01-09 21:33:02 +01:00
Steffen Vogel 905aab3b85 added missing #endif 2015-01-09 20:23:38 +01:00
Steffen Vogel b9cf1465a7 updated LCD bouts with new strings and bitmaps
new version is pretty generic and should work in most scenarios
2015-01-09 18:49:59 +01:00
Steffen Vogel c7632be5cc added high and low resolutions version of splash screen logo (saving code size) 2015-01-09 18:49:24 +01:00
Steffen Vogel 8f0dba7cbf adding string for bouts splash string to config 2015-01-09 18:48:30 +01:00
Steffen Vogel eafa98e6f4 added two black/white versions of the Marlin Logo for the LCD
splashscreen
2015-01-09 17:52:23 +01:00
Bo Herrmannsen d94109e886 updated logo post and ver info 2015-01-09 15:51:15 +01:00
Bo Herrmannsen cd33b5b062 changed logo and ver info
logo is now 110 pixels wide and starts 9 pixels in from top left corner and also 9 pixels down from same corner... this will give a 9 pixel border all way round

ver info is placed centered and there is a 9 pixel from bottom of display to ver info
2015-01-09 15:44:47 +01:00
Bo Herrmannsen 9b6c1cfda6 removed unneeded lines in welcome msg 2015-01-09 15:20:41 +01:00
Bo Herrmannsen ffa09f86f4 moved ver info 5 spaces to the right 2015-01-09 13:31:23 +01:00
Alex Borro 2bbb68be8a Fix calculation of BAL grid fitting into the bed
The previous calc was wrong. Between N points there are only N-1 gaps,
not N.

So changing AUTO_BED_LEVELING_GRID_POINTS to
(AUTO_BED_LEVELING_GRID_POINTS-1)
2015-01-09 10:17:33 -02:00
Bo Herrmannsen 590caafa2d changed ver info 2015-01-09 13:17:08 +01:00
Bo Herrmannsen 3bb9b31515 changed boot logo a bit to test if fat wall goes away 2015-01-09 12:51:21 +01:00
Bo Herrmannsen 47881574ed Merge pull request #1336 from stv0g/Documentation
Documentation restructuring
2015-01-08 20:35:45 +01:00
Steffen Vogel 26337a56cc Merge branch 'Documentation' of github.com:stv0g/Marlin into Documentation 2015-01-08 20:02:56 +01:00
Steffen Vogel eaa462279e Merge branch 'Development' of github.com:MarlinFirmware/Marlin into Documentation
Conflicts:
	README.md
2015-01-08 20:02:40 +01:00
Steffen Vogel 6712179502 updated milestone link 2015-01-08 19:57:09 +01:00
Steffen Vogel 6dc9e87b68 added missing bracket 2015-01-08 19:55:33 +01:00
Steffen Vogel 38669a56cb updated credits 2015-01-08 19:54:46 +01:00
Steffen Vogel 49b759b804 added credits 2015-01-08 19:48:56 +01:00
Steffen Vogel 6388be0731 reformatting 2015-01-08 19:38:52 +01:00
Steffen Vogel c98d87935a reformatting 2015-01-08 19:37:36 +01:00
Steffen Vogel 11a42c3215 fixed formatting issue 2015-01-08 19:26:23 +01:00
Steffen Vogel d19ef56199 started hardware list 2015-01-08 19:21:57 +01:00
Steffen Vogel bc91167363 moved licence to Documentation (its linked from the frontpage) to get a cleaner top level dir 2015-01-08 18:59:40 +01:00
Steffen Vogel fd68d0074b added missing gcodes description 2015-01-08 18:59:40 +01:00
Steffen Vogel cf88d61c20 added links to reprap.org and the license 2015-01-08 18:59:40 +01:00
Steffen Vogel 4a1f34c522 added logo to README 2015-01-08 18:58:57 +01:00
Steffen Vogel e351eec169 added logo for GitHub Readme 2015-01-08 18:58:08 +01:00
Steffen Vogel 6f137bbe3e updated compilation/configuring instructions 2015-01-08 18:58:08 +01:00
Steffen Vogel 5db6ffc03e fixed line endings 2015-01-08 18:58:08 +01:00
Steffen Vogel abea094f90 fixed hyperlinks 2015-01-08 18:57:33 +01:00
Steffen Vogel 04eafe3d04 splitted huge README.md in several sections and moved them to the
Documentation directory
2015-01-08 18:55:32 +01:00
Erik van der Zalm a06700a14b Revert "issue 968 for dev branch" 2015-01-08 18:54:06 +01:00
andrewsil1 489b4fd3a5 Fix grammar/typos in new Configuration.h option
(For the SLOW_PWM_HEATERS option)
2015-01-08 18:54:06 +01:00
Bo Herrmannsen fdf9dbb6fe added link to google hangout 2015-01-08 18:54:06 +01:00
Todd Swindoll 506353892e Rambo Pin documentation and servo support
Updated pins reference and servo support.

cross referenced between Rambo 1.1, 1.2, and 1.3
2015-01-07 11:02:05 -06:00
Wurstnase 5de8cce7bf Merge pull request #2 from MarlinFirmware/development
Dev-Pull
2015-01-06 21:07:47 +01:00
odewdney 652895d656 try different proproc for CI failure 2015-01-04 11:15:23 +00:00
odewdney 39fae9e3a3 Fix progmem warning
Borrow code from https://github.com/arduino/Arduino/issues/1793
2015-01-03 21:30:16 +00:00
854 changed files with 126724 additions and 305061 deletions
+23
View File
@@ -0,0 +1,23 @@
--style=google
--keep-one-line-blocks
--indent=spaces=2
--indent-preproc-block
--indent-preproc-define
--indent-col1-comments
--remove-brackets
--break-after-logical
--delete-empty-lines
--pad-oper
--pad-header
--unpad-paren
--align-pointer=type
--align-reference=type
--attach-classes
--attach-inlines
--keep-one-line-statements
--indent-namespaces
+12
View File
@@ -1,3 +1,12 @@
// Our automatic versioning scheme generates the following file
// NEVER put it in the repository
_Version.h
// All of the following OS, IDE and compiler generated file
// references should be moved from this file
// They are needed, but they belong in your global .gitignore
// rather than in a per-project file such as this
*.o
applet/
*~
@@ -6,3 +15,6 @@ applet/
*.bak
*.DS_Store
*.idea
*.s
*.i
*.ii
Binary file not shown.
-3
View File
@@ -1,3 +0,0 @@
[InternetShortcut]
URL=http://docs.platformio.org/page/projectconf.html#envs-dir
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1 +0,0 @@
!<arch>
-1
View File
@@ -1 +0,0 @@
7139b6316d7ee09825c8b66954eab4443fcf0d83
-40
View File
@@ -1,40 +0,0 @@
{
"description": "A library for monochrome TFTs and OLEDs",
"repository": {
"url": "https://github.com/olikraus/U8glib_Arduino",
"type": "git"
},
"platforms": [
"atmelavr",
"atmelsam"
],
"export": {
"exclude": [
"extras",
"docs",
"tests",
"test",
"*.doxyfile",
"*.pdf"
],
"include": null
},
"authors": [
{
"maintainer": true,
"name": "oliver",
"url": null,
"email": "olikraus@gmail.com"
}
],
"keywords": [
"display"
],
"id": 7,
"name": "U8glib",
"frameworks": [
"arduino"
],
"version": "1.19.1",
"homepage": "https://github.com/olikraus/u8glib"
}
-30
View File
@@ -1,30 +0,0 @@
# U8glib
A graphics library with support for many different monochrome displays.
![nhd_oled180.jpg](https://github.com/olikraus/u8glib/wiki/otherpic/nhd_oled180.jpg) ![dogs102_180.jpg](https://github.com/olikraus/u8glib/wiki/otherpic/dogs102_180.jpg)
Left: NHD-2.7-12864 OLED (SSD1325), right: EA DOGS102 LCD (UC1701)
* [Gallery](https://github.com/olikraus/u8glib/wiki/gallery)
* [Bintray](https://bintray.com/olikraus/u8glib) download links:
* [U8glib for Arduino](https://bintray.com/olikraus/u8glib/Arduino)
* [U8glib for AVR](https://bintray.com/olikraus/u8glib/AVR)
* [U8glib for ARM](https://bintray.com/olikraus/u8glib/ARM)
* Converter for BDF fonts: [bdf2u8g_101.exe on google drive](https://drive.google.com/folderview?id=0B5b6Dv0wCeCRLWJkYTh2TUlYVDg&usp=sharing).
* Supported environments:
* [Arduino (ATMEGA and ARM)](http://www.arduino.cc/)
* [AVR (ATMEGA)](https://github.com/olikraus/u8glib/wiki/avr)
* [ARM (with example for LPC1114)](https://github.com/olikraus/u8glib/wiki/lpc1114)
* Library for graphic LCDs and OLEDs
* [U8glib documentation and tutorials](https://github.com/olikraus/u8glib/wiki)
* Graphical user interface library (GUI) available: [M2tklib](http://code.google.com/p/m2tklib/)
* COM interfaces: Software SPI, Hardware SPI, 8Bit parallel
* Large number of [fonts](https://github.com/olikraus/u8glib/wiki/fontsize)
* Monospaced and proportional fonts
* Mouse-Cursor support
* Landscape and portrait mode
* Many supported [devices](https://github.com/olikraus/u8glib/wiki/device) (SSD1325, ST7565, ST7920, UC1608, UC1610, UC1701, PCD8544, PCF8812, KS0108, LC7981, SBN1661, SSD1306, SH1106, T6963, LD7032)
* Well-defined interface to the device subsystem
@@ -1,9 +0,0 @@
name=U8glib
version=1.19.1
author=oliver <olikraus@gmail.com>
maintainer=oliver <olikraus@gmail.com>
sentence=A library for monochrome TFTs and OLEDs
paragraph=Supported display controller: SSD1306, SSD1309, SSD1322, SSD1325, SSD1327, SH1106, UC1601, UC1610, UC1611, UC1701, ST7565, ST7920, KS0108, LC7981, PCD8544, PCF8812, SBN1661, TLS8204, T6963.
category=Display
url=https://github.com/olikraus/u8glib
architectures=avr,sam
-81
View File
@@ -1,81 +0,0 @@
The U8glib code (http://code.google.com/p/u8glib/) is licensed under the terms of
the new-bsd license (two-clause bsd license).
See also: http://www.opensource.org/licenses/bsd-license.php
The repository and optionally the releases contain icons, which are
derived from the WPZOOM Developer Icon Set:
http://www.wpzoom.com/wpzoom/new-freebie-wpzoom-developer-icon-set-154-free-icons/
WPZOOM Developer Icon Set by WPZOOM is licensed under a Creative Commons
Attribution-ShareAlike 3.0 Unported License.
Fonts are licensed under different conditions.
See http://code.google.com/p/u8glib/wiki/fontgroup for
detailed information on the licensing conditions for each font.
============ X11 Fonts COUR, HELV, NCEN, TIM, SYMB ============
For fonts derived from the following files, the license below applies.
COURB08.BDF COURB10.BDF COURB12.BDF COURB14.BDF COURB18.BDF
COURB24.BDF COURR08.BDF COURR10.BDF COURR12.BDF COURR14.BDF
COURR18.BDF COURR24.BDF HELVB08.BDF HELVB10.BDF HELVB12.BDF HELVB14.BDF
HELVB18.BDF HELVB24.BDF HELVR08.BDF HELVR10.BDF HELVR12.BDF HELVR14.BDF
HELVR18.BDF HELVR24.BDF NCENB08.BDF NCENB10.BDF NCENB12.BDF
NCENB14.BDF NCENB18.BDF NCENB24.BDF NCENR08.BDF NCENR10.BDF
NCENR12.BDF NCENR14.BDF NCENR18.BDF NCENR24.BDF SYMB08.BDF SYMB10.BDF
SYMB12.BDF SYMB14.BDF SYMB18.BDF SYMB24.BDF TIMB08.BDF TIMB10.BDF
TIMB12.BDF TIMB14.BDF TIMB18.BDF TIMB24.BDF TIMR08.BDF TIMR10.BDF
TIMR12.BDF TIMR14.BDF TIMR18.BDF TIMR24.BDF
Copyright 1984-1989, 1994 Adobe Systems Incorporated.
Copyright 1988, 1994 Digital Equipment Corporation.
Adobe is a trademark of Adobe Systems Incorporated which may be
registered in certain jurisdictions.
Permission to use these trademarks is hereby granted only in
association with the images described in this file.
Permission to use, copy, modify, distribute and sell this software
and its documentation for any purpose and without fee is hereby
granted, provided that the above copyright notices appear in all
copies and that both those copyright notices and this permission
notice appear in supporting documentation, and that the names of
Adobe Systems and Digital Equipment Corporation not be used in
advertising or publicity pertaining to distribution of the software
without specific, written prior permission. Adobe Systems and
Digital Equipment Corporation make no representations about the
suitability of this software for any purpose. It is provided "as
is" without express or implied warranty.
============ BSD License for U8glib Code ============
Universal 8bit Graphics Library (http://code.google.com/p/u8glib/)
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-80
View File
@@ -1,80 +0,0 @@
/*
U8glib.cpp
C++ Interface
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "U8glib.h"
#if defined(U8G_WITH_PINLIST)
uint8_t U8GLIB::initSPI(u8g_dev_t *dev, uint8_t sck, uint8_t mosi, uint8_t cs, uint8_t a0, uint8_t reset)
{
prepare();
return u8g_InitSPI(&u8g, dev, sck, mosi, cs, a0, reset);
}
uint8_t U8GLIB::initHWSPI(u8g_dev_t *dev, uint8_t cs, uint8_t a0, uint8_t reset)
{
prepare();
return u8g_InitHWSPI(&u8g, dev, cs, a0, reset);
}
uint8_t U8GLIB::initI2C(u8g_dev_t *dev, uint8_t options)
{
prepare();
return u8g_InitI2C(&u8g, dev, options);
}
uint8_t U8GLIB::init8Bit(u8g_dev_t *dev, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
uint8_t en, uint8_t cs1, uint8_t cs2, uint8_t di, uint8_t rw, uint8_t reset)
{
prepare();
return u8g_Init8Bit(&u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw, reset);
}
uint8_t U8GLIB::init8BitFixedPort(u8g_dev_t *dev, uint8_t en, uint8_t cs, uint8_t di, uint8_t rw, uint8_t reset)
{
prepare();
return u8g_Init8BitFixedPort(&u8g, dev, en, cs, di, rw, reset);
}
uint8_t U8GLIB::initRW8Bit(u8g_dev_t *dev, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
uint8_t cs, uint8_t a0, uint8_t wr, uint8_t rd, uint8_t reset)
{
prepare();
return u8g_InitRW8Bit(&u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, cs, a0, wr, rd, reset);
}
#endif
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,177 +0,0 @@
/*
u8g_bitmap.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
void u8g_DrawHBitmap(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t cnt, const uint8_t *bitmap)
{
while( cnt > 0 )
{
u8g_Draw8Pixel(u8g, x, y, 0, *bitmap);
bitmap++;
cnt--;
x+=8;
}
}
void u8g_DrawBitmap(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t cnt, u8g_uint_t h, const uint8_t *bitmap)
{
if ( u8g_IsBBXIntersection(u8g, x, y, cnt*8, h) == 0 )
return;
while( h > 0 )
{
u8g_DrawHBitmap(u8g, x, y, cnt, bitmap);
bitmap += cnt;
y++;
h--;
}
}
void u8g_DrawHBitmapP(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t cnt, const u8g_pgm_uint8_t *bitmap)
{
while( cnt > 0 )
{
u8g_Draw8Pixel(u8g, x, y, 0, u8g_pgm_read(bitmap));
bitmap++;
cnt--;
x+=8;
}
}
void u8g_DrawBitmapP(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t cnt, u8g_uint_t h, const u8g_pgm_uint8_t *bitmap)
{
if ( u8g_IsBBXIntersection(u8g, x, y, cnt*8, h) == 0 )
return;
while( h > 0 )
{
u8g_DrawHBitmapP(u8g, x, y, cnt, bitmap);
bitmap += cnt;
y++;
h--;
}
}
/*=========================================================================*/
static void u8g_DrawHXBM(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, const uint8_t *bitmap)
{
uint8_t d;
x+=7;
while( w >= 8 )
{
u8g_Draw8Pixel(u8g, x, y, 2, *bitmap);
bitmap++;
w-= 8;
x+=8;
}
if ( w > 0 )
{
d = *bitmap;
x -= 7;
do
{
if ( d & 1 )
u8g_DrawPixel(u8g, x, y);
x++;
w--;
d >>= 1;
} while ( w > 0 );
}
}
void u8g_DrawXBM(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, const uint8_t *bitmap)
{
u8g_uint_t b;
b = w;
b += 7;
b >>= 3;
if ( u8g_IsBBXIntersection(u8g, x, y, w, h) == 0 )
return;
while( h > 0 )
{
u8g_DrawHXBM(u8g, x, y, w, bitmap);
bitmap += b;
y++;
h--;
}
}
static void u8g_DrawHXBMP(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, const u8g_pgm_uint8_t *bitmap)
{
uint8_t d;
x+=7;
while( w >= 8 )
{
u8g_Draw8Pixel(u8g, x, y, 2, u8g_pgm_read(bitmap));
bitmap++;
w-= 8;
x+=8;
}
if ( w > 0 )
{
d = u8g_pgm_read(bitmap);
x -= 7;
do
{
if ( d & 1 )
u8g_DrawPixel(u8g, x, y);
x++;
w--;
d >>= 1;
} while ( w > 0 );
}
}
void u8g_DrawXBMP(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h, const u8g_pgm_uint8_t *bitmap)
{
u8g_uint_t b;
b = w;
b += 7;
b >>= 3;
if ( u8g_IsBBXIntersection(u8g, x, y, w, h) == 0 )
return;
while( h > 0 )
{
u8g_DrawHXBMP(u8g, x, y, w, bitmap);
bitmap += b;
y++;
h--;
}
}
@@ -1,382 +0,0 @@
/*
u8g_circle.c
Utility to draw empty and filled circles.
Universal 8bit Graphics Library
Copyright (c) 2011, bjthom@gmail.com
u8g_DrawCircle & u8g_DrawDisc by olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Addition to the U8G Library 02/25/12
*/
#include "u8g.h"
#ifdef OLD_CODE
void circ_upperRight(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0) {
u8g_DrawPixel(u8g, x0 + x, y0 - y);
u8g_DrawPixel(u8g, x0 + y, y0 - x);
}
void circ_upperLeft(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0) {
u8g_DrawPixel(u8g, x0 - x, y0 - y);
u8g_DrawPixel(u8g, x0 - y, y0 - x);
}
void circ_lowerRight(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0) {
u8g_DrawPixel(u8g, x0 + x, y0 + y);
u8g_DrawPixel(u8g, x0 + y, y0 + x);
}
void circ_lowerLeft(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0) {
u8g_DrawPixel(u8g, x0 - x, y0 + y);
u8g_DrawPixel(u8g, x0 - y, y0 + x);
}
void circ_all(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0) {
circ_upperRight(u8g, x, y, x0, y0);
circ_upperLeft(u8g, x, y, x0, y0);
circ_lowerRight(u8g, x, y, x0, y0);
circ_lowerLeft(u8g, x, y, x0, y0);
}
void u8g_DrawEmpCirc(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
{
if ( u8g_IsBBXIntersection(u8g, x0-rad-1, y0-rad-1, 2*rad+1, 2*rad+1) == 0)
return;
int f = 1 - rad;
int ddF_x = 1;
int ddF_y = -2*rad;
uint8_t x = 0;
uint8_t y = rad;
void ( *circ_util )(u8g_t *, u8g_uint_t, u8g_uint_t, u8g_uint_t, u8g_uint_t);
switch (option)
{
case U8G_CIRC_UPPER_RIGHT:
u8g_DrawPixel(u8g, x0, y0 - rad);
u8g_DrawPixel(u8g, x0 + rad, y0);
circ_util = circ_upperRight;
break;
case U8G_CIRC_UPPER_LEFT:
u8g_DrawPixel(u8g, x0, y0 - rad);
u8g_DrawPixel(u8g, x0 - rad, y0);
circ_util = circ_upperLeft;
break;
case U8G_CIRC_LOWER_RIGHT:
u8g_DrawPixel(u8g, x0, y0 + rad);
u8g_DrawPixel(u8g, x0 + rad, y0);
circ_util = circ_lowerRight;
break;
case U8G_CIRC_LOWER_LEFT:
u8g_DrawPixel(u8g, x0, y0 + rad);
u8g_DrawPixel(u8g, x0 - rad, y0);
circ_util = circ_lowerLeft;
break;
default:
case U8G_CIRC_ALL:
u8g_DrawPixel(u8g, x0, y0 + rad);
u8g_DrawPixel(u8g, x0, y0 - rad);
u8g_DrawPixel(u8g, x0 + rad, y0);
u8g_DrawPixel(u8g, x0 - rad, y0);
circ_util = circ_all;
break;
}
while( x < y )
{
if(f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;
circ_util(u8g, x, y, x0, y0);
}
}
void u8g_DrawFillCirc(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
{
if ( u8g_IsBBXIntersection(u8g, x0-rad-1, y0-rad-1, 2*rad+1, 2*rad+1) == 0)
return;
int f = 1 - rad;
int ddF_x = 1;
int ddF_y = -2*rad;
uint8_t x = 0;
uint8_t y = rad;
// Draw vertical diameter at the horiz. center
// u8g_DrawVLine(u8g, x0, y0 - rad, 2*rad+1);
if (option == U8G_CIRC_UPPER_LEFT || option == U8G_CIRC_UPPER_RIGHT) {
u8g_DrawVLine(u8g, x0, y0 - rad, rad+1);
}
else if (option == U8G_CIRC_LOWER_LEFT || option == U8G_CIRC_LOWER_RIGHT) {
u8g_DrawVLine(u8g, x0, y0, rad+1);
}
else {
u8g_DrawVLine(u8g, x0, y0 - rad, 2*rad+1);
}
while( x < y )
{
if(f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;
//Draw vertical lines from one point to another
switch (option)
{
case U8G_CIRC_UPPER_RIGHT:
u8g_DrawVLine(u8g, x0+x, y0-y, y+1);
u8g_DrawVLine(u8g, x0+y, y0-x, x+1);
break;
case U8G_CIRC_UPPER_LEFT:
u8g_DrawVLine(u8g, x0-x, y0-y, y+1);
u8g_DrawVLine(u8g, x0-y, y0-x, x+1);
break;
case U8G_CIRC_LOWER_RIGHT:
u8g_DrawVLine(u8g, x0+x, y0, y+1);
u8g_DrawVLine(u8g, x0+y, y0, x+1);
break;
case U8G_CIRC_LOWER_LEFT:
u8g_DrawVLine(u8g, x0-x, y0, y+1);
u8g_DrawVLine(u8g, x0-y, y0, x+1);
break;
case U8G_CIRC_ALL:
u8g_DrawVLine(u8g, x0+x, y0-y, 2*y+1);
u8g_DrawVLine(u8g, x0-x, y0-y, 2*y+1);
u8g_DrawVLine(u8g, x0+y, y0-x, 2*x+1);
u8g_DrawVLine(u8g, x0-y, y0-x, 2*x+1);
break;
}
}
}
#endif
/*=========================================================================*/
static void u8g_draw_circle_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option) U8G_NOINLINE;
static void u8g_draw_circle_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option)
{
/* upper right */
if ( option & U8G_DRAW_UPPER_RIGHT )
{
u8g_DrawPixel(u8g, x0 + x, y0 - y);
u8g_DrawPixel(u8g, x0 + y, y0 - x);
}
/* upper left */
if ( option & U8G_DRAW_UPPER_LEFT )
{
u8g_DrawPixel(u8g, x0 - x, y0 - y);
u8g_DrawPixel(u8g, x0 - y, y0 - x);
}
/* lower right */
if ( option & U8G_DRAW_LOWER_RIGHT )
{
u8g_DrawPixel(u8g, x0 + x, y0 + y);
u8g_DrawPixel(u8g, x0 + y, y0 + x);
}
/* lower left */
if ( option & U8G_DRAW_LOWER_LEFT )
{
u8g_DrawPixel(u8g, x0 - x, y0 + y);
u8g_DrawPixel(u8g, x0 - y, y0 + x);
}
}
void u8g_draw_circle(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
{
u8g_int_t f;
u8g_int_t ddF_x;
u8g_int_t ddF_y;
u8g_uint_t x;
u8g_uint_t y;
f = 1;
f -= rad;
ddF_x = 1;
ddF_y = 0;
ddF_y -= rad;
ddF_y *= 2;
x = 0;
y = rad;
u8g_draw_circle_section(u8g, x, y, x0, y0, option);
while ( x < y )
{
if (f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;
u8g_draw_circle_section(u8g, x, y, x0, y0, option);
}
}
void u8g_DrawCircle(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
{
/* check for bounding box */
{
u8g_uint_t radp, radp2;
radp = rad;
radp++;
radp2 = radp;
radp2 *= 2;
if ( u8g_IsBBXIntersection(u8g, x0-radp, y0-radp, radp2, radp2) == 0)
return;
}
/* draw circle */
u8g_draw_circle(u8g, x0, y0, rad, option);
}
static void u8g_draw_disc_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option) U8G_NOINLINE;
static void u8g_draw_disc_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option)
{
/* upper right */
if ( option & U8G_DRAW_UPPER_RIGHT )
{
u8g_DrawVLine(u8g, x0+x, y0-y, y+1);
u8g_DrawVLine(u8g, x0+y, y0-x, x+1);
}
/* upper left */
if ( option & U8G_DRAW_UPPER_LEFT )
{
u8g_DrawVLine(u8g, x0-x, y0-y, y+1);
u8g_DrawVLine(u8g, x0-y, y0-x, x+1);
}
/* lower right */
if ( option & U8G_DRAW_LOWER_RIGHT )
{
u8g_DrawVLine(u8g, x0+x, y0, y+1);
u8g_DrawVLine(u8g, x0+y, y0, x+1);
}
/* lower left */
if ( option & U8G_DRAW_LOWER_LEFT )
{
u8g_DrawVLine(u8g, x0-x, y0, y+1);
u8g_DrawVLine(u8g, x0-y, y0, x+1);
}
}
void u8g_draw_disc(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
{
u8g_int_t f;
u8g_int_t ddF_x;
u8g_int_t ddF_y;
u8g_uint_t x;
u8g_uint_t y;
f = 1;
f -= rad;
ddF_x = 1;
ddF_y = 0;
ddF_y -= rad;
ddF_y *= 2;
x = 0;
y = rad;
u8g_draw_disc_section(u8g, x, y, x0, y0, option);
while ( x < y )
{
if (f >= 0)
{
y--;
ddF_y += 2;
f += ddF_y;
}
x++;
ddF_x += 2;
f += ddF_x;
u8g_draw_disc_section(u8g, x, y, x0, y0, option);
}
}
void u8g_DrawDisc(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rad, uint8_t option)
{
/* check for bounding box */
{
u8g_uint_t radp, radp2;
radp = rad;
radp++;
radp2 = radp;
radp2 *= 2;
if ( u8g_IsBBXIntersection(u8g, x0-radp, y0-radp, radp2, radp2) == 0)
return;
}
/* draw disc */
u8g_draw_disc(u8g, x0, y0, rad, option);
}
-156
View File
@@ -1,156 +0,0 @@
/*
u8g_clip.c
procedures for clipping
taken over from procs in u8g_pb.c
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Notes
This is one of the most critical parts of u8glib. It must be fast, but still reliable.
Based on the intersection program (see tools folder), there is minimized version of
the condition for the intersaction test:
minimized version
---1----0 1 b1 <= a2 && b1 > b2
-----1--0 1 b2 >= a1 && b1 > b2
---1-1--- 1 b1 <= a2 && b2 >= a1
It includes the assumption, that a1 <= a2 is always true (correct, because
a1, a2 are the page dimensions.
The direct implementation of the above result is done in:
uint8_t u8g_is_intersection_boolean(u8g_uint_t a0, u8g_uint_t a1, u8g_uint_t v0, u8g_uint_t v1)
However, this is slower than a decision tree version:
static uint8_t u8g_is_intersection_decision_tree(u8g_uint_t a0, u8g_uint_t a1, u8g_uint_t v0, u8g_uint_t v1)
Also suprising is, that the macro implementation is slower than the inlined version.
The decision tree is based on the expansion of the truth table.
*/
#include "u8g.h"
#ifdef __GNUC__
#define U8G_ALWAYS_INLINE __inline__ __attribute__((always_inline))
#else
#define U8G_ALWAYS_INLINE
#endif
/*
intersection assumptions:
a1 <= a2 is always true
minimized version
---1----0 1 b1 <= a2 && b1 > b2
-----1--0 1 b2 >= a1 && b1 > b2
---1-1--- 1 b1 <= a2 && b2 >= a1
*/
#ifdef OLD_CODE_WHICH_IS_TOO_SLOW
static uint8_t u8g_is_intersection_boolean(u8g_uint_t a0, u8g_uint_t a1, u8g_uint_t v0, u8g_uint_t v1)
{
uint8_t c1, c2, c3, tmp;
c1 = v0 <= a1;
c2 = v1 >= a0;
c3 = v0 > v1;
tmp = c1;
c1 &= c2;
c2 &= c3;
c3 &= tmp;
c1 |= c2;
c1 |= c3;
return c1 & 1;
}
#endif
#define U8G_IS_INTERSECTION_MACRO(a0,a1,v0,v1) ((uint8_t)( (v0) <= (a1) ) ? ( ( (v1) >= (a0) ) ? ( 1 ) : ( (v0) > (v1) ) ) : ( ( (v1) >= (a0) ) ? ( (v0) > (v1) ) : ( 0 ) ))
//static uint8_t u8g_is_intersection_decision_tree(u8g_uint_t a0, u8g_uint_t a1, u8g_uint_t v0, u8g_uint_t v1) U8G_ALWAYS_INLINE;
static uint8_t U8G_ALWAYS_INLINE u8g_is_intersection_decision_tree(u8g_uint_t a0, u8g_uint_t a1, u8g_uint_t v0, u8g_uint_t v1)
{
/* surprisingly the macro leads to larger code */
/* return U8G_IS_INTERSECTION_MACRO(a0,a1,v0,v1); */
if ( v0 <= a1 )
{
if ( v1 >= a0 )
{
return 1;
}
else
{
if ( v0 > v1 )
{
return 1;
}
else
{
return 0;
}
}
}
else
{
if ( v1 >= a0 )
{
if ( v0 > v1 )
{
return 1;
}
else
{
return 0;
}
}
else
{
return 0;
}
}
}
uint8_t u8g_IsBBXIntersection(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h)
{
register u8g_uint_t tmp;
tmp = y;
tmp += h;
tmp--;
if ( u8g_is_intersection_decision_tree(u8g->current_page.y0, u8g->current_page.y1, y, tmp) == 0 )
return 0;
tmp = x;
tmp += w;
tmp--;
return u8g_is_intersection_decision_tree(u8g->current_page.x0, u8g->current_page.x1, x, tmp);
}
@@ -1,173 +0,0 @@
/*
u8g_com_api.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
uint8_t u8g_InitCom(u8g_t *u8g, u8g_dev_t *dev, uint8_t clk_cycle_time)
{
return dev->com_fn(u8g, U8G_COM_MSG_INIT, clk_cycle_time, NULL);
}
void u8g_StopCom(u8g_t *u8g, u8g_dev_t *dev)
{
dev->com_fn(u8g, U8G_COM_MSG_STOP, 0, NULL);
}
/* cs contains the chip number, which should be enabled */
void u8g_SetChipSelect(u8g_t *u8g, u8g_dev_t *dev, uint8_t cs)
{
dev->com_fn(u8g, U8G_COM_MSG_CHIP_SELECT, cs, NULL);
}
void u8g_SetResetLow(u8g_t *u8g, u8g_dev_t *dev)
{
dev->com_fn(u8g, U8G_COM_MSG_RESET, 0, NULL);
}
void u8g_SetResetHigh(u8g_t *u8g, u8g_dev_t *dev)
{
dev->com_fn(u8g, U8G_COM_MSG_RESET, 1, NULL);
}
void u8g_SetAddress(u8g_t *u8g, u8g_dev_t *dev, uint8_t address)
{
dev->com_fn(u8g, U8G_COM_MSG_ADDRESS, address, NULL);
}
uint8_t u8g_WriteByte(u8g_t *u8g, u8g_dev_t *dev, uint8_t val)
{
return dev->com_fn(u8g, U8G_COM_MSG_WRITE_BYTE, val, NULL);
}
uint8_t u8g_WriteSequence(u8g_t *u8g, u8g_dev_t *dev, uint8_t cnt, uint8_t *seq)
{
return dev->com_fn(u8g, U8G_COM_MSG_WRITE_SEQ, cnt, seq);
}
uint8_t u8g_WriteSequenceP(u8g_t *u8g, u8g_dev_t *dev, uint8_t cnt, const uint8_t *seq)
{
return dev->com_fn(u8g, U8G_COM_MSG_WRITE_SEQ_P, cnt, (void *)seq);
}
/*
sequence := { direct_value | escape_sequence }
direct_value := 0..254
escape_sequence := value_255 | sequence_end | delay | adr | cs | not_used
value_255 := 255 255
sequence_end = 255 254
delay := 255 0..127
adr := 255 0x0e0 .. 0x0ef
cs := 255 0x0d0 .. 0x0df
not_used := 255 101..254
#define U8G_ESC_DLY(x) 255, ((x) & 0x7f)
#define U8G_ESC_CS(x) 255, (0xd0 | ((x)&0x0f))
#define U8G_ESC_ADR(x) 255, (0xe0 | ((x)&0x0f))
#define U8G_ESC_VCC(x) 255, (0xbe | ((x)&0x01))
#define U8G_ESC_END 255, 254
#define U8G_ESC_255 255, 255
#define U8G_ESC_RST(x) 255, (0xc0 | ((x)&0x0f))
*/
uint8_t u8g_WriteEscSeqP(u8g_t *u8g, u8g_dev_t *dev, const uint8_t *esc_seq)
{
uint8_t is_escape = 0;
uint8_t value;
for(;;)
{
value = u8g_pgm_read(esc_seq);
if ( is_escape == 0 )
{
if ( value != 255 )
{
if ( u8g_WriteByte(u8g, dev, value) == 0 )
return 0;
}
else
{
is_escape = 1;
}
}
else
{
if ( value == 255 )
{
if ( u8g_WriteByte(u8g, dev, value) == 0 )
return 0;
}
else if ( value == 254 )
{
break;
}
else if ( value >= 0x0f0 )
{
/* not yet used, do nothing */
}
else if ( value >= 0xe0 )
{
u8g_SetAddress(u8g, dev, value & 0x0f);
}
else if ( value >= 0xd0 )
{
u8g_SetChipSelect(u8g, dev, value & 0x0f);
}
else if ( value >= 0xc0 )
{
u8g_SetResetLow(u8g, dev);
value &= 0x0f;
value <<= 4;
value+=2;
u8g_Delay(value);
u8g_SetResetHigh(u8g, dev);
u8g_Delay(value);
}
else if ( value >= 0xbe )
{
/* not yet implemented */
/* u8g_SetVCC(u8g, dev, value & 0x01); */
}
else if ( value <= 127 )
{
u8g_Delay(value);
}
is_escape = 0;
}
esc_seq++;
}
return 1;
}
@@ -1,94 +0,0 @@
/*
u8g_com_api_16gr.c
Extension of the com api for devices with 16 graylevels (4 bit per pixel).
This should fit to the 8h and 16h architectures (pb8v1, pb8v2, pb16v1, pb16v2),
mainly intended for SSD OLEDs
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
/* interpret b as a monochrome bit pattern, write value 15 for high bit and value 0 for a low bit */
/* topbit (msb) is sent last */
/* example: b = 0x083 will send 0xff, 0x00, 0x00, 0xf0 */
uint8_t u8g_WriteByteBWTo16GrDevice(u8g_t *u8g, u8g_dev_t *dev, uint8_t b)
{
static uint8_t buf[4];
static uint8_t map[4] = { 0, 0x00f, 0x0f0, 0x0ff };
buf [3] = map[b & 3];
b>>=2;
buf [2] = map[b & 3];
b>>=2;
buf [1] = map[b & 3];
b>>=2;
buf [0] = map[b & 3];
return dev->com_fn(u8g, U8G_COM_MSG_WRITE_SEQ, 4, buf);
}
uint8_t u8g_WriteSequenceBWTo16GrDevice(u8g_t *u8g, u8g_dev_t *dev, uint8_t cnt, uint8_t *ptr)
{
do
{
if ( u8g_WriteByteBWTo16GrDevice(u8g, dev, *ptr++) == 0 )
return 0;
cnt--;
} while( cnt != 0 );
return 1;
}
/* interpret b as a 4L bit pattern, write values 0x000, 0x004, 0x008, 0x00c */
uint8_t u8g_WriteByte4LTo16GrDevice(u8g_t *u8g, u8g_dev_t *dev, uint8_t b)
{
//static uint8_t map[16] = { 0x000, 0x004, 0x008, 0x00c, 0x040, 0x044, 0x048, 0x04c, 0x080, 0x084, 0x088, 0x08c, 0x0c0, 0x0c4, 0x0c8, 0x0cc};
//static uint8_t map[16] = { 0x000, 0x004, 0x00a, 0x00f, 0x040, 0x044, 0x04a, 0x04f, 0x0a0, 0x0a4, 0x0aa, 0x0af, 0x0f0, 0x0f4, 0x0fa, 0x0ff};
static uint8_t map[16] = { 0x000, 0x040, 0x0a0, 0x0f0, 0x004, 0x044, 0x0a4, 0x0f4, 0x00a, 0x04a, 0x0aa, 0x0fa, 0x00f, 0x04f, 0x0af, 0x0ff};
uint8_t bb;
bb = b;
bb &= 15;
b>>=4;
dev->com_fn(u8g, U8G_COM_MSG_WRITE_BYTE, map[bb], NULL);
return dev->com_fn(u8g, U8G_COM_MSG_WRITE_BYTE, map[b], NULL);
}
uint8_t u8g_WriteSequence4LTo16GrDevice(u8g_t *u8g, u8g_dev_t *dev, uint8_t cnt, uint8_t *ptr)
{
do
{
if ( u8g_WriteByte4LTo16GrDevice(u8g, dev, *ptr++) == 0 )
return 0;
cnt--;
} while( cnt != 0 );
return 1;
}
@@ -1,75 +0,0 @@
/*
u8g_com_arduino_common.c
shared procedures for the arduino communication procedures
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#if defined(ARDUINO)
#if ARDUINO < 100
#include <WProgram.h>
#else
#include <Arduino.h>
#endif
void u8g_com_arduino_digital_write(u8g_t *u8g, uint8_t pin_index, uint8_t value)
{
uint8_t pin;
pin = u8g->pin_list[pin_index];
if ( pin != U8G_PIN_NONE )
digitalWrite(pin, value);
}
/* this procedure does not set the RW pin */
void u8g_com_arduino_assign_pin_output_high(u8g_t *u8g)
{
uint8_t i;
/* skip the RW pin, which is the last pin in the list */
for( i = 0; i < U8G_PIN_LIST_LEN-1; i++ )
{
if ( u8g->pin_list[i] != U8G_PIN_NONE )
{
pinMode(u8g->pin_list[i], OUTPUT);
digitalWrite(u8g->pin_list[i], HIGH);
}
}
}
#endif
@@ -1,254 +0,0 @@
/*
u8g_arduino_fast_parallel.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PIN_D0 8
PIN_D1 9
PIN_D2 10
PIN_D3 11
PIN_D4 4
PIN_D5 5
PIN_D6 6
PIN_D7 7
PIN_CS1 14
PIN_CS2 15
PIN_RW 16
PIN_DI 17
PIN_EN 18
u8g_Init8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw, reset)
u8g_Init8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16, U8G_PIN_NONE)
Update for ATOMIC operation done (01 Jun 2013)
U8G_ATOMIC_OR(ptr, val)
U8G_ATOMIC_AND(ptr, val)
U8G_ATOMIC_START();
U8G_ATOMIC_END();
*/
#include "u8g.h"
#if defined(ARDUINO)
#if ARDUINO < 100
//#include <WProgram.h>
#include <wiring_private.h>
#include <pins_arduino.h>
#else
#include <Arduino.h>
#endif
#define PIN_D0 8
#define PIN_D1 9
#define PIN_D2 10
#define PIN_D3 11
#define PIN_D4 4
#define PIN_D5 5
#define PIN_D6 6
#define PIN_D7 7
#define PIN_CS1 14
#define PIN_CS2 15
#define PIN_RW 16
#define PIN_DI 17
#define PIN_EN 18
//#define PIN_RESET
#if defined(__PIC32MX)
/* CHIPKIT PIC32 */
static volatile uint32_t *u8g_data_port[8];
static uint32_t u8g_data_mask[8];
#else
static volatile uint8_t *u8g_data_port[8];
static uint8_t u8g_data_mask[8];
#endif
static void u8g_com_arduino_fast_parallel_init(u8g_t *u8g)
{
u8g_data_port[0] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D0]));
u8g_data_mask[0] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D0]);
u8g_data_port[1] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D1]));
u8g_data_mask[1] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D1]);
u8g_data_port[2] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D2]));
u8g_data_mask[2] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D2]);
u8g_data_port[3] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D3]));
u8g_data_mask[3] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D3]);
u8g_data_port[4] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D4]));
u8g_data_mask[4] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D4]);
u8g_data_port[5] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D5]));
u8g_data_mask[5] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D5]);
u8g_data_port[6] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D6]));
u8g_data_mask[6] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D6]);
u8g_data_port[7] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D7]));
u8g_data_mask[7] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D7]);
}
/* atomic protection must be done by calling function */
static void u8g_com_arduino_fast_write_data_pin(uint8_t pin, uint8_t val)
{
if ( val != 0 )
*u8g_data_port[pin] |= u8g_data_mask[pin];
else
*u8g_data_port[pin] &= ~u8g_data_mask[pin];
}
void u8g_com_arduino_fast_parallel_write(u8g_t *u8g, uint8_t val)
{
U8G_ATOMIC_START();
u8g_com_arduino_fast_write_data_pin( 0, val&1 );
val >>= 1;
u8g_com_arduino_fast_write_data_pin( 1, val&1 );
val >>= 1;
u8g_com_arduino_fast_write_data_pin( 2, val&1 );
val >>= 1;
u8g_com_arduino_fast_write_data_pin( 3, val&1 );
val >>= 1;
u8g_com_arduino_fast_write_data_pin( 4, val&1 );
val >>= 1;
u8g_com_arduino_fast_write_data_pin( 5, val&1 );
val >>= 1;
u8g_com_arduino_fast_write_data_pin( 6, val&1 );
val >>= 1;
u8g_com_arduino_fast_write_data_pin( 7, val&1 );
val >>= 1;
U8G_ATOMIC_END();
/* EN cycle time must be 1 micro second */
u8g_com_arduino_digital_write(u8g, U8G_PI_EN, HIGH);
u8g_MicroDelay(); /* delay by 1000ns, reference: ST7920: 140ns, SBN1661: 100ns */
u8g_com_arduino_digital_write(u8g, U8G_PI_EN, LOW);
u8g_10MicroDelay(); /* ST7920 commands: 72us */
u8g_10MicroDelay(); /* ST7920 commands: 72us */
}
uint8_t u8g_com_arduino_fast_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
u8g_com_arduino_fast_parallel_init(u8g);
/* setup the RW pin as output and force it to low */
if ( u8g->pin_list[U8G_PI_RW] != U8G_PIN_NONE )
{
pinMode(u8g->pin_list[U8G_PI_RW], OUTPUT);
u8g_com_arduino_digital_write(u8g, U8G_PI_RW, LOW);
}
/* set all pins (except RW pin) */
u8g_com_arduino_assign_pin_output_high(u8g);
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS1, HIGH);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS2, HIGH);
}
else if ( arg_val == 1 )
{
/* enable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS1, LOW);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS2, HIGH);
}
else if ( arg_val == 2 )
{
/* enable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS1, HIGH);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS2, LOW);
}
else
{
/* enable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS1, LOW);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS2, LOW);
}
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_com_arduino_fast_parallel_write(u8g, arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_arduino_fast_parallel_write(u8g, *ptr++);
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_arduino_fast_parallel_write(u8g, u8g_pgm_read(ptr));
ptr++;
arg_val--;
}
}
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g_com_arduino_digital_write(u8g, U8G_PI_DI, arg_val);
break;
case U8G_COM_MSG_RESET:
if ( u8g->pin_list[U8G_PI_RESET] != U8G_PIN_NONE )
u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val);
break;
}
return 1;
}
#else
uint8_t u8g_com_arduino_fast_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif /* ARDUINO */
@@ -1,438 +0,0 @@
/*
u8g_com_arduino_hw_spi.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
SPI Clock Cycle Type
SSD1351 50ns 20 MHz
SSD1322 300ns 3.3 MHz
SSD1327 300ns
SSD1306 300ns
ST7565 400ns 2.5 MHz
ST7920 400ns
Arduino DUE
PA25 MISO
PA26 MOSI 75
PA27 SCLK 76
typedef struct {
WoReg SPI_CR; (Spi Offset: 0x00) Control Register
RwReg SPI_MR; (Spi Offset: 0x04) Mode Register
RoReg SPI_RDR; (Spi Offset: 0x08) Receive Data Register
WoReg SPI_TDR; (Spi Offset: 0x0C) Transmit Data Register
RoReg SPI_SR; (Spi Offset: 0x10) Status Register
WoReg SPI_IER; (Spi Offset: 0x14) Interrupt Enable Register
WoReg SPI_IDR; (Spi Offset: 0x18) Interrupt Disable Register
RoReg SPI_IMR; (Spi Offset: 0x1C) Interrupt Mask Register
RoReg Reserved1[4];
RwReg SPI_CSR[4]; (Spi Offset: 0x30) Chip Select Register
RoReg Reserved2[41];
RwReg SPI_WPMR; (Spi Offset: 0xE4) Write Protection Control Register
RoReg SPI_WPSR; (Spi Offset: 0xE8) Write Protection Status Register
} Spi;
Power Management Controller (PMC)
arduino-1.5.2/hardware/arduino/sam/system/CMSIS/Device/ATMEL/sam3xa/include/instance/instance_pmc.h
- enable PIO
REG_PMC_PCER0 = 1UL << ID_PIOA
- enable SPI
REG_PMC_PCER0 = 1UL << ID_SPI0
- enable PIOA and SPI0
REG_PMC_PCER0 = (1UL << ID_PIOA) | (1UL << ID_SPI0);
Parallel Input/Output Controller (PIO)
arduino-1.5.2/hardware/arduino/sam/system/CMSIS/Device/ATMEL/sam3xa/include/instance/instance_pioa.h
- enable special function of the pin: disable PIO on A26 and A27:
REG_PIOA_PDR = 0x0c000000
PIOA->PIO_PDR = 0x0c000000
SPI
SPI0->SPI_CR = SPI_CR_SPIDIS
SPI0->SPI_CR = SPI_CR_SWRST ;
SPI0->SPI_CR = SPI_CR_SWRST ;
SPI0->SPI_CR = SPI_CR_SPIEN
Bit 0: Master Mode = 1 (active)
Bit 1: Peripheral Select = 0 (fixed)
Bit 2: Chip Select Decode Mode = 1 (4 to 16)
Bit 4: Mode Fault Detection = 1 (disabled)
Bit 5: Wait Data Read = 0 (disabled)
Bit 7: Loop Back Mode = 0 (disabled)
Bit 16-19: Peripheral Chip Select = 0 (chip select 0)
SPI0->SPI_MR = SPI_MR_MSTR | SPI_MR_PCSDEC | SPI_MR_MODFDIS
Bit 0: Clock Polarity = 0
Bit 1: Clock Phase = 0
Bit 4-7: Bits = 0 (8 Bit)
Bit 8-15: SCBR = 1
SPI0->SPI_CSR[0] = SPI_CSR_SCBR(x) Serial Baud Rate
SCBR / 84000000 > 50 / 1000000000
SCBR / 84 > 5 / 100
SCBR > 50 *84 / 1000 --> SCBR=5
SCBR > 300*84 / 1000 --> SCBR=26
SCBR > 400*84 / 1000 --> SCBR=34
Arduino Due test code:
REG_PMC_PCER0 = (1UL << ID_PIOA) | (1UL << ID_SPI0);
REG_PIOA_PDR = 0x0c000000;
SPI0->SPI_CR = SPI_CR_SPIDIS;
SPI0->SPI_CR = SPI_CR_SWRST;
SPI0->SPI_CR = SPI_CR_SWRST;
SPI0->SPI_CR = SPI_CR_SPIEN;
SPI0->SPI_MR = SPI_MR_MSTR | SPI_MR_PCSDEC | SPI_MR_MODFDIS;
SPI0->SPI_CSR[0] = SPI_CSR_SCBR(30);
for(;;)
{
while( (SPI0->SPI_SR & SPI_SR_TDRE) == 0 )
;
SPI0->SPI_TDR = 0x050;
}
*/
#include "u8g.h"
#if defined(ARDUINO)
#if defined(__AVR__)
#define U8G_ARDUINO_ATMEGA_HW_SPI
/* remove the definition for attiny */
#if __AVR_ARCH__ == 2
#undef U8G_ARDUINO_ATMEGA_HW_SPI
#endif
#if __AVR_ARCH__ == 25
#undef U8G_ARDUINO_ATMEGA_HW_SPI
#endif
#endif
#if defined(U8G_ARDUINO_ATMEGA_HW_SPI)
#include <avr/interrupt.h>
#include <avr/io.h>
#if ARDUINO < 100
#include <WProgram.h>
/* fixed pins */
#if defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__) // Sanguino.cc board
#define PIN_SCK 7
#define PIN_MISO 6
#define PIN_MOSI 5
#define PIN_CS 4
#else // Arduino Board
#define PIN_SCK 13
#define PIN_MISO 12
#define PIN_MOSI 11
#define PIN_CS 10
#endif // (__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__)
#else
#include <Arduino.h>
/* use Arduino pin definitions */
#define PIN_SCK SCK
#define PIN_MISO MISO
#define PIN_MOSI MOSI
#define PIN_CS SS
#endif
//static uint8_t u8g_spi_out(uint8_t data) U8G_NOINLINE;
static uint8_t u8g_spi_out(uint8_t data)
{
/* unsigned char x = 100; */
/* send data */
SPDR = data;
/* wait for transmission */
while (!(SPSR & (1<<SPIF)))
;
/* clear the SPIF flag by reading SPDR */
return SPDR;
}
uint8_t u8g_com_arduino_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_INIT:
u8g_com_arduino_assign_pin_output_high(u8g);
pinMode(PIN_SCK, OUTPUT);
digitalWrite(PIN_SCK, LOW);
pinMode(PIN_MOSI, OUTPUT);
digitalWrite(PIN_MOSI, LOW);
/* pinMode(PIN_MISO, INPUT); */
pinMode(PIN_CS, OUTPUT); /* system chip select for the atmega board */
digitalWrite(PIN_CS, HIGH);
/*
SPR1 SPR0
0 0 fclk/4
0 1 fclk/16
1 0 fclk/64
1 1 fclk/128
*/
SPCR = 0;
SPCR = (1<<SPE) | (1<<MSTR)|(0<<SPR1)|(0<<SPR0)|(0<<CPOL)|(0<<CPHA);
#ifdef U8G_HW_SPI_2X
SPSR = (1 << SPI2X); /* double speed, issue 89 */
#else
if ( arg_val <= U8G_SPI_CLK_CYCLE_50NS )
{
SPSR = (1 << SPI2X); /* double speed, issue 89 */
}
#endif
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g_com_arduino_digital_write(u8g, U8G_PI_A0, arg_val);
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
}
else
{
/* enable */
u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, LOW);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
}
break;
case U8G_COM_MSG_RESET:
if ( u8g->pin_list[U8G_PI_RESET] != U8G_PIN_NONE )
u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val);
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_spi_out(arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_spi_out(*ptr++);
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_spi_out(u8g_pgm_read(ptr));
ptr++;
arg_val--;
}
}
break;
}
return 1;
}
/* #elif defined(__18CXX) || defined(__PIC32MX) */
#elif defined(__SAM3X8E__) // Arduino Due, maybe we should better check for __SAM3X8E__
#include <Arduino.h>
/* use Arduino pin definitions */
#define PIN_SCK SCK
#define PIN_MISO MISO
#define PIN_MOSI MOSI
#define PIN_CS SS
static uint8_t u8g_spi_out(uint8_t data)
{
/* wait until tx register is empty */
while( (SPI0->SPI_SR & SPI_SR_TDRE) == 0 )
;
/* send data */
SPI0->SPI_TDR = (uint32_t)data;
return data;
}
uint8_t u8g_com_arduino_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_INIT:
u8g_com_arduino_assign_pin_output_high(u8g);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
/* Arduino Due specific code */
/* enable PIOA and SPI0 */
REG_PMC_PCER0 = (1UL << ID_PIOA) | (1UL << ID_SPI0);
/* disable PIO on A26 and A27 */
REG_PIOA_PDR = 0x0c000000;
/* reset SPI0 (from sam lib) */
SPI0->SPI_CR = SPI_CR_SPIDIS;
SPI0->SPI_CR = SPI_CR_SWRST;
SPI0->SPI_CR = SPI_CR_SWRST;
SPI0->SPI_CR = SPI_CR_SPIEN;
u8g_MicroDelay();
/* master mode, no fault detection, chip select 0 */
SPI0->SPI_MR = SPI_MR_MSTR | SPI_MR_PCSDEC | SPI_MR_MODFDIS;
/* Polarity, Phase, 8 Bit data transfer, baud rate */
/* x * 1000 / 84 --> clock cycle in ns
5 * 1000 / 84 = 58 ns
SCBR > 50 *84 / 1000 --> SCBR=5
SCBR > 300*84 / 1000 --> SCBR=26
SCBR > 400*84 / 1000 --> SCBR=34
*/
if ( arg_val <= U8G_SPI_CLK_CYCLE_50NS )
{
SPI0->SPI_CSR[0] = SPI_CSR_SCBR(5) | 1;
}
else if ( arg_val <= U8G_SPI_CLK_CYCLE_300NS )
{
SPI0->SPI_CSR[0] = SPI_CSR_SCBR(26) | 1;
}
else if ( arg_val <= U8G_SPI_CLK_CYCLE_400NS )
{
SPI0->SPI_CSR[0] = SPI_CSR_SCBR(34) | 1;
}
else
{
SPI0->SPI_CSR[0] = SPI_CSR_SCBR(84) | 1;
}
u8g_MicroDelay();
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g_com_arduino_digital_write(u8g, U8G_PI_A0, arg_val);
u8g_MicroDelay();
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable */
u8g_MicroDelay(); /* this delay is required to avoid that the display is switched off too early --> DOGS102 with DUE */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
u8g_MicroDelay();
}
else
{
/* enable */
//u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, LOW);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
u8g_MicroDelay();
}
break;
case U8G_COM_MSG_RESET:
if ( u8g->pin_list[U8G_PI_RESET] != U8G_PIN_NONE )
u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val);
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_spi_out(arg_val);
u8g_MicroDelay();
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_spi_out(*ptr++);
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_spi_out(u8g_pgm_read(ptr));
ptr++;
arg_val--;
}
}
break;
}
return 1;
}
#else /* U8G_ARDUINO_ATMEGA_HW_SPI */
#endif /* U8G_ARDUINO_ATMEGA_HW_SPI */
#else /* ARDUINO */
uint8_t u8g_com_arduino_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif /* ARDUINO */
@@ -1,234 +0,0 @@
/*
u8g_arduino_no_en_parallel.c
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PIN_D0 8
PIN_D1 9
PIN_D2 10
PIN_D3 11
PIN_D4 4
PIN_D5 5
PIN_D6 6
PIN_D7 7
PIN_CS1 14
PIN_CS2 15
PIN_RW 16
PIN_DI 17
PIN_EN 18
u8g_Init8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw, reset)
u8g_Init8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16, U8G_PIN_NONE)
Update for ATOMIC operation done (01 Jun 2013)
U8G_ATOMIC_OR(ptr, val)
U8G_ATOMIC_AND(ptr, val)
U8G_ATOMIC_START();
U8G_ATOMIC_END();
*/
#include "u8g.h"
#if defined(ARDUINO)
#if ARDUINO < 100
//#include <WProgram.h>
#include <wiring_private.h>
#include <pins_arduino.h>
#else
#include <Arduino.h>
#endif
//#define PIN_RESET
#if defined(__PIC32MX)
/* CHIPKIT PIC32 */
static volatile uint32_t *u8g_data_port[8];
static uint32_t u8g_data_mask[8];
#else
static volatile uint8_t *u8g_data_port[8];
static uint8_t u8g_data_mask[8];
#endif
static void u8g_com_arduino_no_en_parallel_init(u8g_t *u8g)
{
u8g_data_port[0] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D0]));
u8g_data_mask[0] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D0]);
u8g_data_port[1] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D1]));
u8g_data_mask[1] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D1]);
u8g_data_port[2] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D2]));
u8g_data_mask[2] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D2]);
u8g_data_port[3] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D3]));
u8g_data_mask[3] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D3]);
u8g_data_port[4] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D4]));
u8g_data_mask[4] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D4]);
u8g_data_port[5] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D5]));
u8g_data_mask[5] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D5]);
u8g_data_port[6] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D6]));
u8g_data_mask[6] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D6]);
u8g_data_port[7] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D7]));
u8g_data_mask[7] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D7]);
}
/* No atomic protcetion. This is done by caller */
static void u8g_com_arduino_no_en_write_data_pin(uint8_t pin, uint8_t val)
{
if ( val != 0 )
{
*u8g_data_port[pin] |= u8g_data_mask[pin];
}
else
{
*u8g_data_port[pin] &= ~u8g_data_mask[pin];
}
}
void u8g_com_arduino_no_en_parallel_write(u8g_t *u8g, uint8_t val)
{
U8G_ATOMIC_START();
u8g_com_arduino_no_en_write_data_pin( 0, val&1 );
val >>= 1;
u8g_com_arduino_no_en_write_data_pin( 1, val&1 );
val >>= 1;
u8g_com_arduino_no_en_write_data_pin( 2, val&1 );
val >>= 1;
u8g_com_arduino_no_en_write_data_pin( 3, val&1 );
val >>= 1;
u8g_com_arduino_no_en_write_data_pin( 4, val&1 );
val >>= 1;
u8g_com_arduino_no_en_write_data_pin( 5, val&1 );
val >>= 1;
u8g_com_arduino_no_en_write_data_pin( 6, val&1 );
val >>= 1;
u8g_com_arduino_no_en_write_data_pin( 7, val&1 );
val >>= 1;
U8G_ATOMIC_END();
/* EN cycle time must be 1 micro second, digitalWrite is slow enough to do this */
if ( u8g->pin_list[U8G_PI_CS_STATE] == 1 )
{
u8g_MicroDelay();
u8g_com_arduino_digital_write(u8g, U8G_PI_CS1, HIGH);
u8g_MicroDelay();
u8g_com_arduino_digital_write(u8g, U8G_PI_CS1, LOW);
u8g_MicroDelay();
}
else if ( u8g->pin_list[U8G_PI_CS_STATE] == 2 )
{
u8g_MicroDelay();
u8g_com_arduino_digital_write(u8g, U8G_PI_CS2, HIGH);
u8g_MicroDelay();
u8g_com_arduino_digital_write(u8g, U8G_PI_CS2, LOW);
u8g_MicroDelay();
}
}
uint8_t u8g_com_arduino_no_en_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
u8g_com_arduino_no_en_parallel_init(u8g);
/* setup the RW pin as output and force it to low */
if ( u8g->pin_list[U8G_PI_RW] != U8G_PIN_NONE )
{
pinMode(u8g->pin_list[U8G_PI_RW], OUTPUT);
u8g_com_arduino_digital_write(u8g, U8G_PI_RW, LOW);
}
/* set all pins (except RW pin) */
u8g_com_arduino_assign_pin_output_high(u8g);
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_CHIP_SELECT:
/*
0: nothing selected
1: CS1 will be used as enable line
2: CS2 will be used as enable line
this will be used in the u8g_com_arduino_no_en_parallel_write() procedure
*/
u8g->pin_list[U8G_PI_CS_STATE] = arg_val;
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_com_arduino_no_en_parallel_write(u8g, arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_arduino_no_en_parallel_write(u8g, *ptr++);
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_arduino_no_en_parallel_write(u8g, u8g_pgm_read(ptr));
ptr++;
arg_val--;
}
}
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g_com_arduino_digital_write(u8g, U8G_PI_DI, arg_val);
break;
case U8G_COM_MSG_RESET:
if ( u8g->pin_list[U8G_PI_RESET] != U8G_PIN_NONE )
u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val);
break;
}
return 1;
}
#else
uint8_t u8g_com_arduino_no_en_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif /* ARDUINO */
@@ -1,184 +0,0 @@
/*
u8g_com_arduino_parallel.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PIN_D0 8
PIN_D1 9
PIN_D2 10
PIN_D3 11
PIN_D4 4
PIN_D5 5
PIN_D6 6
PIN_D7 7
PIN_CS1 14
PIN_CS2 15
PIN_RW 16
PIN_DI 17
PIN_EN 18
u8g_Init8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw, reset)
u8g_Init8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16, U8G_PIN_NONE)
*/
#include "u8g.h"
#if defined(ARDUINO)
#if ARDUINO < 100
#include <WProgram.h>
#else
#include <Arduino.h>
#endif
void u8g_com_arduino_parallel_write(u8g_t *u8g, uint8_t val)
{
u8g_com_arduino_digital_write(u8g, U8G_PI_D0, val&1);
val >>= 1;
u8g_com_arduino_digital_write(u8g, U8G_PI_D1, val&1);
val >>= 1;
u8g_com_arduino_digital_write(u8g, U8G_PI_D2, val&1);
val >>= 1;
u8g_com_arduino_digital_write(u8g, U8G_PI_D3, val&1);
val >>= 1;
u8g_com_arduino_digital_write(u8g, U8G_PI_D4, val&1);
val >>= 1;
u8g_com_arduino_digital_write(u8g, U8G_PI_D5, val&1);
val >>= 1;
u8g_com_arduino_digital_write(u8g, U8G_PI_D6, val&1);
val >>= 1;
u8g_com_arduino_digital_write(u8g, U8G_PI_D7, val&1);
/* EN cycle time must be 1 micro second, digitalWrite is slow enough to do this */
u8g_com_arduino_digital_write(u8g, U8G_PI_EN, HIGH);
u8g_MicroDelay(); /* delay by 1000ns, reference: ST7920: 140ns, SBN1661: 100ns */
u8g_com_arduino_digital_write(u8g, U8G_PI_EN, LOW);
u8g_10MicroDelay(); /* ST7920 commands: 72us */
}
uint8_t u8g_com_arduino_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
/* setup the RW pin as output and force it to low */
if ( u8g->pin_list[U8G_PI_RW] != U8G_PIN_NONE )
{
pinMode(u8g->pin_list[U8G_PI_RW], OUTPUT);
u8g_com_arduino_digital_write(u8g, U8G_PI_RW, LOW);
}
/* set all pins (except RW pin) */
u8g_com_arduino_assign_pin_output_high(u8g);
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS1, HIGH);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS2, HIGH);
}
else if ( arg_val == 1 )
{
/* enable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS1, LOW);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS2, HIGH);
}
else if ( arg_val == 2 )
{
/* enable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS1, HIGH);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS2, LOW);
}
else
{
/* enable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS1, LOW);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS2, LOW);
}
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_com_arduino_parallel_write(u8g, arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_arduino_parallel_write(u8g, *ptr++);
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_arduino_parallel_write(u8g, u8g_pgm_read(ptr));
ptr++;
arg_val--;
}
}
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g_com_arduino_digital_write(u8g, U8G_PI_DI, arg_val);
break;
case U8G_COM_MSG_RESET:
if ( u8g->pin_list[U8G_PI_RESET] != U8G_PIN_NONE )
u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val);
break;
}
return 1;
}
#else
uint8_t u8g_com_arduino_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif /* ARDUINO */
@@ -1,177 +0,0 @@
/*
u8g_arduino_port_d_wr.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Assumes PORTD for 8 bit data transfer.
EN is assumed to be a low active write signal (WR)
ILI9325D_320x240 from iteadstudio.com
RS=19, WR=18, CS=17, RST=16
u8g_Init8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw, reset)
u8g_Init8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16, U8G_PIN_NONE)
Update for ATOMIC operation done (01 Jun 2013)
U8G_ATOMIC_OR(ptr, val)
U8G_ATOMIC_AND(ptr, val)
U8G_ATOMIC_START();
U8G_ATOMIC_END();
*/
#include "u8g.h"
#if defined(ARDUINO) && defined(PORTD)
#if ARDUINO < 100
#include <WProgram.h>
#else
#include <Arduino.h>
#endif
static void u8g_com_arduino_port_d_8bit_wr(u8g_t *u8g, uint8_t val)
{
PORTD = val;
/* WR cycle time must be 1 micro second, digitalWrite is slow enough to do this */
u8g_com_arduino_digital_write(u8g, U8G_PI_EN, LOW);
u8g_com_arduino_digital_write(u8g, U8G_PI_EN, HIGH);
}
uint8_t u8g_com_arduino_port_d_wr_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
#ifdef UCSR0B
UCSR0B = 0; // disable USART 0
#endif
U8G_ATOMIC_START();
DDRD = 0x0ff;
PORTD = 0x0ff;
U8G_ATOMIC_END();
/* setup the RW pin as output and force it to low */
if ( u8g->pin_list[U8G_PI_RW] != U8G_PIN_NONE )
{
pinMode(u8g->pin_list[U8G_PI_RW], OUTPUT);
u8g_com_arduino_digital_write(u8g, U8G_PI_RW, HIGH);
}
/* set all pins (except RW pin) */
u8g_com_arduino_assign_pin_output_high(u8g);
u8g_com_arduino_digital_write(u8g, U8G_PI_EN, HIGH);
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS1, HIGH);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS2, HIGH);
}
else if ( arg_val == 1 )
{
/* enable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS1, LOW);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS2, HIGH);
}
else if ( arg_val == 2 )
{
/* enable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS1, HIGH);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS2, LOW);
}
else
{
/* enable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS1, LOW);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS2, LOW);
}
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_com_arduino_port_d_8bit_wr(u8g, arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_arduino_port_d_8bit_wr(u8g, *ptr++);
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_arduino_port_d_8bit_wr(u8g, u8g_pgm_read(ptr));
ptr++;
arg_val--;
}
}
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g_com_arduino_digital_write(u8g, U8G_PI_DI, arg_val);
break;
case U8G_COM_MSG_RESET:
if ( u8g->pin_list[U8G_PI_RESET] != U8G_PIN_NONE )
u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val);
break;
}
return 1;
}
#else
uint8_t u8g_com_arduino_port_d_wr_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif /* ARDUINO && PORTD */
@@ -1,212 +0,0 @@
/*
u8g_com_arduino_ssd_i2c.c
com interface for arduino (AND atmega) and the SSDxxxx chip (SOLOMON) variant
I2C protocol
ToDo: Rename this to u8g_com_avr_ssd_i2c.c
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Special pin usage:
U8G_PI_I2C_OPTION additional options
U8G_PI_A0_STATE used to store the last value of the command/data register selection
U8G_PI_SET_A0 1: Signal request to update I2C device with new A0_STATE, 0: Do nothing, A0_STATE matches I2C device
U8G_PI_SCL clock line (NOT USED)
U8G_PI_SDA data line (NOT USED)
U8G_PI_RESET reset line (currently disabled, see below)
Protocol:
SLA, Cmd/Data Selection, Arguments
The command/data register is selected by a special instruction byte, which is sent after SLA
The continue bit is always 0 so that a (re)start is equired for the change from cmd to/data mode
*/
#include "u8g.h"
#if defined(U8G_WITH_PINLIST)
#define I2C_SLA (0x3c*2)
//#define I2C_CMD_MODE 0x080
#define I2C_CMD_MODE 0x000
#define I2C_DATA_MODE 0x040
uint8_t u8g_com_arduino_ssd_start_sequence(u8g_t *u8g)
{
/* are we requested to set the a0 state? */
if ( u8g->pin_list[U8G_PI_SET_A0] == 0 )
return 1;
/* setup bus, might be a repeated start */
if ( u8g_i2c_start(I2C_SLA) == 0 )
return 0;
if ( u8g->pin_list[U8G_PI_A0_STATE] == 0 )
{
if ( u8g_i2c_send_byte(I2C_CMD_MODE) == 0 )
return 0;
}
else
{
if ( u8g_i2c_send_byte(I2C_DATA_MODE) == 0 )
return 0;
}
u8g->pin_list[U8G_PI_SET_A0] = 0;
return 1;
}
uint8_t u8g_com_arduino_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
//u8g_com_arduino_digital_write(u8g, U8G_PI_SCL, HIGH);
//u8g_com_arduino_digital_write(u8g, U8G_PI_SDA, HIGH);
//u8g->pin_list[U8G_PI_A0_STATE] = 0; /* inital RS state: unknown mode */
u8g_i2c_init(u8g->pin_list[U8G_PI_I2C_OPTION]);
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_RESET:
/* Currently disabled, but it could be enable. Previous restrictions have been removed */
/* u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val); */
break;
case U8G_COM_MSG_CHIP_SELECT:
u8g->pin_list[U8G_PI_A0_STATE] = 0;
u8g->pin_list[U8G_PI_SET_A0] = 1; /* force a0 to set again, also forces start condition */
if ( arg_val == 0 )
{
/* disable chip, send stop condition */
u8g_i2c_stop();
}
else
{
/* enable, do nothing: any byte writing will trigger the i2c start */
}
break;
case U8G_COM_MSG_WRITE_BYTE:
//u8g->pin_list[U8G_PI_SET_A0] = 1;
if ( u8g_com_arduino_ssd_start_sequence(u8g) == 0 )
return u8g_i2c_stop(), 0;
if ( u8g_i2c_send_byte(arg_val) == 0 )
return u8g_i2c_stop(), 0;
// u8g_i2c_stop();
break;
case U8G_COM_MSG_WRITE_SEQ:
//u8g->pin_list[U8G_PI_SET_A0] = 1;
if ( u8g_com_arduino_ssd_start_sequence(u8g) == 0 )
return u8g_i2c_stop(), 0;
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
if ( u8g_i2c_send_byte(*ptr++) == 0 )
return u8g_i2c_stop(), 0;
arg_val--;
}
}
// u8g_i2c_stop();
break;
case U8G_COM_MSG_WRITE_SEQ_P:
//u8g->pin_list[U8G_PI_SET_A0] = 1;
if ( u8g_com_arduino_ssd_start_sequence(u8g) == 0 )
return u8g_i2c_stop(), 0;
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
if ( u8g_i2c_send_byte(u8g_pgm_read(ptr)) == 0 )
return 0;
ptr++;
arg_val--;
}
}
// u8g_i2c_stop();
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g->pin_list[U8G_PI_A0_STATE] = arg_val;
u8g->pin_list[U8G_PI_SET_A0] = 1; /* force a0 to set again */
#ifdef OLD_CODE
if ( i2c_state != 0 )
{
u8g_i2c_stop();
i2c_state = 0;
}
if ( u8g_com_arduino_ssd_start_sequence(arg_val) == 0 )
return 0;
/* setup bus, might be a repeated start */
/*
if ( u8g_i2c_start(I2C_SLA) == 0 )
return 0;
if ( arg_val == 0 )
{
i2c_state = 1;
if ( u8g_i2c_send_byte(I2C_CMD_MODE) == 0 )
return 0;
}
else
{
i2c_state = 2;
if ( u8g_i2c_send_byte(I2C_DATA_MODE) == 0 )
return 0;
}
*/
#endif
break;
}
return 1;
}
#else /* defined(U8G_WITH_PINLIST) */
uint8_t u8g_com_arduino_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif /* defined(U8G_WITH_PINLIST) */
@@ -1,293 +0,0 @@
/*
u8g_com_arduino_st7920_hw_spi.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
A special HW SPI interface for ST7920 controller
*/
#include "u8g.h"
#if defined(ARDUINO)
#if ARDUINO < 100
#include <WProgram.h>
#include "wiring_private.h"
#include "pins_arduino.h"
#else
#include <Arduino.h>
#include "wiring_private.h"
#endif
#if defined(__AVR__)
#define U8G_ARDUINO_ATMEGA_HW_SPI
/* remove the definition for attiny */
#if __AVR_ARCH__ == 2
#undef U8G_ARDUINO_ATMEGA_HW_SPI
#endif
#if __AVR_ARCH__ == 25
#undef U8G_ARDUINO_ATMEGA_HW_SPI
#endif
#endif
#if defined(U8G_ARDUINO_ATMEGA_HW_SPI)
#include <avr/interrupt.h>
#include <avr/io.h>
#if ARDUINO < 100
/* fixed pins */
#if defined(__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__) // Sanguino.cc board
#define PIN_SCK 7
#define PIN_MISO 6
#define PIN_MOSI 5
#define PIN_CS 4
#else // Arduino Board
#define PIN_SCK 13
#define PIN_MISO 12
#define PIN_MOSI 11
#define PIN_CS 10
#endif // (__AVR_ATmega644P__) || defined(__AVR_ATmega1284P__)
#else
/* use Arduino pin definitions */
#define PIN_SCK SCK
#define PIN_MISO MISO
#define PIN_MOSI MOSI
#define PIN_CS SS
#endif
static uint8_t u8g_arduino_st7920_hw_spi_shift_out(u8g_t *u8g, uint8_t val) U8G_NOINLINE;
static uint8_t u8g_arduino_st7920_hw_spi_shift_out(u8g_t *u8g, uint8_t val)
{
/* send data */
SPDR = val;
/* wait for transmission */
while (!(SPSR & (1<<SPIF)))
;
/* clear the SPIF flag by reading SPDR */
return SPDR;
}
static void u8g_com_arduino_st7920_write_byte_hw_spi_seq(u8g_t *u8g, uint8_t rs, uint8_t *ptr, uint8_t len)
{
uint8_t i;
if ( rs == 0 )
{
/* command */
u8g_arduino_st7920_hw_spi_shift_out(u8g, 0x0f8);
}
else if ( rs == 1 )
{
/* data */
u8g_arduino_st7920_hw_spi_shift_out(u8g, 0x0fa);
}
while( len > 0 )
{
u8g_arduino_st7920_hw_spi_shift_out(u8g, *ptr & 0x0f0);
u8g_arduino_st7920_hw_spi_shift_out(u8g, *ptr << 4);
ptr++;
len--;
u8g_10MicroDelay();
}
for( i = 0; i < 4; i++ )
u8g_10MicroDelay();
}
static void u8g_com_arduino_st7920_write_byte_hw_spi(u8g_t *u8g, uint8_t rs, uint8_t val) U8G_NOINLINE;
static void u8g_com_arduino_st7920_write_byte_hw_spi(u8g_t *u8g, uint8_t rs, uint8_t val)
{
uint8_t i;
if ( rs == 0 )
{
/* command */
u8g_arduino_st7920_hw_spi_shift_out(u8g, 0x0f8);
}
else if ( rs == 1 )
{
/* data */
u8g_arduino_st7920_hw_spi_shift_out(u8g, 0x0fa);
}
else
{
/* do nothing, keep same state */
}
u8g_arduino_st7920_hw_spi_shift_out(u8g, val & 0x0f0);
u8g_arduino_st7920_hw_spi_shift_out(u8g, val << 4);
for( i = 0; i < 4; i++ )
u8g_10MicroDelay();
}
uint8_t u8g_com_arduino_st7920_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
u8g_com_arduino_assign_pin_output_high(u8g);
/* code from u8g_com-arduino_hw_spi.c */
pinMode(PIN_SCK, OUTPUT);
digitalWrite(PIN_SCK, LOW);
pinMode(PIN_MOSI, OUTPUT);
digitalWrite(PIN_MOSI, LOW);
/* pinMode(PIN_MISO, INPUT); */
pinMode(PIN_CS, OUTPUT); /* system chip select for the atmega board */
digitalWrite(PIN_CS, HIGH);
//u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
#ifdef OBSOLETE
DDRB |= _BV(3); /* D0, MOSI */
DDRB |= _BV(5); /* SCK */
DDRB |= _BV(2); /* slave select */
PORTB &= ~_BV(3); /* D0, MOSI = 0 */
PORTB &= ~_BV(5); /* SCK = 0 */
#endif
/*
SPR1 SPR0
0 0 fclk/4
0 1 fclk/16
1 0 fclk/64
1 1 fclk/128
*/
SPCR = 0;
/* 20 Dez 2012: set CPOL and CPHA to 1 !!! */
SPCR = (1<<SPE) | (1<<MSTR)|(0<<SPR1)|(0<<SPR0)|(1<<CPOL)|(1<<CPHA);
#ifdef U8G_HW_SPI_2X
SPSR = (1 << SPI2X); /* double speed, issue 89 */
#endif
u8g->pin_list[U8G_PI_A0_STATE] = 0; /* inital RS state: command mode */
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_RESET:
if ( u8g->pin_list[U8G_PI_RESET] != U8G_PIN_NONE )
u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val);
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable, note: the st7920 has an active high chip select */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
}
else
{
/* enable */
//u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, LOW);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
}
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_com_arduino_st7920_write_byte_hw_spi(u8g, u8g->pin_list[U8G_PI_A0_STATE], arg_val);
// u8g->pin_list[U8G_PI_A0_STATE] = 2;
//u8g_arduino_sw_spi_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK], arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ:
u8g_com_arduino_st7920_write_byte_hw_spi_seq(u8g, u8g->pin_list[U8G_PI_A0_STATE], (uint8_t *)arg_ptr, arg_val);
/*
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_arduino_st7920_write_byte_hw_spi(u8g, u8g->pin_list[U8G_PI_A0_STATE], *ptr++);
arg_val--;
}
}
*/
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_arduino_st7920_write_byte_hw_spi(u8g, u8g->pin_list[U8G_PI_A0_STATE], u8g_pgm_read(ptr) );
// u8g->pin_list[U8G_PI_A0_STATE] = 2;
ptr++;
arg_val--;
}
}
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g->pin_list[U8G_PI_A0_STATE] = arg_val;
break;
}
return 1;
}
#else
uint8_t u8g_com_arduino_st7920_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif
#else /* ARDUINO */
uint8_t u8g_com_arduino_st7920_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif /* ARDUINO */
@@ -1,330 +0,0 @@
/*
u8g_com_arduino_st7920_spi.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
A special SPI interface for ST7920 controller
Update for ATOMIC operation done (01 Jun 2013)
U8G_ATOMIC_OR(ptr, val)
U8G_ATOMIC_AND(ptr, val)
U8G_ATOMIC_START();
U8G_ATOMIC_END();
*/
#include "u8g.h"
#if defined(ARDUINO)
#if ARDUINO < 100
#include <WProgram.h>
#include "wiring_private.h"
#include "pins_arduino.h"
#else
#include <Arduino.h>
#include "wiring_private.h"
#endif
#if defined(__AVR__)
static uint8_t u8g_bitData, u8g_bitNotData;
static uint8_t u8g_bitClock, u8g_bitNotClock;
static volatile uint8_t *u8g_outData;
static volatile uint8_t *u8g_outClock;
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin)
{
u8g_outData = portOutputRegister(digitalPinToPort(dataPin));
u8g_outClock = portOutputRegister(digitalPinToPort(clockPin));
u8g_bitData = digitalPinToBitMask(dataPin);
u8g_bitClock = digitalPinToBitMask(clockPin);
u8g_bitNotClock = u8g_bitClock;
u8g_bitNotClock ^= 0x0ff;
u8g_bitNotData = u8g_bitData;
u8g_bitNotData ^= 0x0ff;
}
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val) U8G_NOINLINE;
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
{
uint8_t cnt = 8;
uint8_t bitData = u8g_bitData;
uint8_t bitNotData = u8g_bitNotData;
uint8_t bitClock = u8g_bitClock;
uint8_t bitNotClock = u8g_bitNotClock;
volatile uint8_t *outData = u8g_outData;
volatile uint8_t *outClock = u8g_outClock;
U8G_ATOMIC_START();
bitData |= *outData;
bitNotData &= *outData;
do
{
if ( val & 128 )
*outData = bitData;
else
*outData = bitNotData;
/*
*outClock |= bitClock;
val <<= 1;
cnt--;
*outClock &= bitNotClock;
*/
val <<= 1;
*outClock &= bitNotClock;
cnt--;
// removed micro delays, because AVRs are too slow and the delay is not required
//u8g_MicroDelay();
*outClock |= bitClock;
//u8g_MicroDelay();
} while( cnt != 0 );
U8G_ATOMIC_END();
}
#elif defined(__18CXX) || defined(__PIC32MX)
uint16_t dog_bitData, dog_bitNotData;
uint16_t dog_bitClock, dog_bitNotClock;
volatile uint32_t *dog_outData;
volatile uint32_t *dog_outClock;
volatile uint32_t dog_pic32_spi_tmp;
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin)
{
dog_outData = portOutputRegister(digitalPinToPort(dataPin));
dog_outClock = portOutputRegister(digitalPinToPort(clockPin));
dog_bitData = digitalPinToBitMask(dataPin);
dog_bitClock = digitalPinToBitMask(clockPin);
dog_bitNotClock = dog_bitClock;
dog_bitNotClock ^= 0x0ffff;
dog_bitNotData = dog_bitData;
dog_bitNotData ^= 0x0ffff;
}
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
{
uint8_t cnt = 8;
U8G_ATOMIC_START();
do
{
if ( val & 128 )
*dog_outData |= dog_bitData;
else
*dog_outData &= dog_bitNotData;
val <<= 1;
//u8g_MicroDelay();
//*dog_outClock |= dog_bitClock;
*dog_outClock &= dog_bitNotClock;
cnt--;
u8g_MicroDelay();
//*dog_outClock &= dog_bitNotClock;
*dog_outClock |= dog_bitClock;
u8g_MicroDelay();
} while( cnt != 0 );
U8G_ATOMIC_END();
}
#else
/* default interface, Arduino DUE (__arm__) */
uint8_t u8g_data_pin;
uint8_t u8g_clock_pin;
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin)
{
u8g_data_pin = dataPin;
u8g_clock_pin = clockPin;
}
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
{
uint8_t cnt = 8;
do
{
if ( val & 128 )
digitalWrite(u8g_data_pin, HIGH);
else
digitalWrite(u8g_data_pin, LOW);
val <<= 1;
//u8g_MicroDelay();
digitalWrite(u8g_clock_pin, LOW);
cnt--;
u8g_MicroDelay();
digitalWrite(u8g_clock_pin, HIGH);
u8g_MicroDelay();
} while( cnt != 0 );
}
#endif
static void u8g_com_arduino_st7920_write_byte_seq(uint8_t rs, uint8_t *ptr, uint8_t len)
{
uint8_t i;
if ( rs == 0 )
{
/* command */
u8g_com_arduino_do_shift_out_msb_first(0x0f8);
}
else if ( rs == 1 )
{
/* data */
u8g_com_arduino_do_shift_out_msb_first(0x0fa);
}
while( len > 0 )
{
u8g_com_arduino_do_shift_out_msb_first(*ptr & 0x0f0);
u8g_com_arduino_do_shift_out_msb_first(*ptr << 4);
ptr++;
len--;
u8g_10MicroDelay();
}
for( i = 0; i < 4; i++ )
u8g_10MicroDelay();
}
static void u8g_com_arduino_st7920_write_byte(uint8_t rs, uint8_t val)
{
uint8_t i;
if ( rs == 0 )
{
/* command */
u8g_com_arduino_do_shift_out_msb_first(0x0f8);
}
else if ( rs == 1 )
{
/* data */
u8g_com_arduino_do_shift_out_msb_first(0x0fa);
}
u8g_com_arduino_do_shift_out_msb_first(val & 0x0f0);
u8g_com_arduino_do_shift_out_msb_first(val << 4);
for( i = 0; i < 4; i++ )
u8g_10MicroDelay();
}
uint8_t u8g_com_arduino_st7920_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
u8g_com_arduino_assign_pin_output_high(u8g);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
// u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, LOW);
u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, HIGH);
u8g_com_arduino_digital_write(u8g, U8G_PI_MOSI, LOW);
u8g_com_arduino_init_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK]);
u8g->pin_list[U8G_PI_A0_STATE] = 0; /* inital RS state: command mode */
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_RESET:
if ( u8g->pin_list[U8G_PI_RESET] != U8G_PIN_NONE )
u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val);
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable, note: the st7920 has an active high chip select */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
}
else
{
/* enable */
//u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, HIGH);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
/* 28 Dec 2013 reassign pins, fixes issue with more than one display */
/* issue 227 */
u8g_com_arduino_init_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK]);
}
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_com_arduino_st7920_write_byte( u8g->pin_list[U8G_PI_A0_STATE], arg_val);
//u8g->pin_list[U8G_PI_A0_STATE] = 2;
//u8g_arduino_sw_spi_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK], arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ:
u8g_com_arduino_st7920_write_byte_seq(u8g->pin_list[U8G_PI_A0_STATE], (uint8_t *)arg_ptr, arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_arduino_st7920_write_byte(u8g->pin_list[U8G_PI_A0_STATE], u8g_pgm_read(ptr) );
//u8g->pin_list[U8G_PI_A0_STATE] = 2;
ptr++;
arg_val--;
}
}
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g->pin_list[U8G_PI_A0_STATE] = arg_val;
break;
}
return 1;
}
#else /* ARDUINO */
uint8_t u8g_com_arduino_st7920_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif /* ARDUINO */
@@ -1,143 +0,0 @@
/*
u8g_arduino_std_sw_spi.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#if defined(ARDUINO)
#if ARDUINO < 100
#include <WProgram.h>
#else
#include <Arduino.h>
#endif
void u8g_arduino_sw_spi_shift_out(uint8_t dataPin, uint8_t clockPin, uint8_t val)
{
uint8_t i = 8;
do
{
if ( val & 128 )
digitalWrite(dataPin, HIGH);
else
digitalWrite(dataPin, LOW);
val <<= 1;
u8g_MicroDelay(); /* 23 Sep 2012 */
//delay(1);
digitalWrite(clockPin, HIGH);
u8g_MicroDelay(); /* 23 Sep 2012 */
//delay(1);
digitalWrite(clockPin, LOW);
u8g_MicroDelay(); /* 23 Sep 2012 */
//delay(1);
i--;
} while( i != 0 );
}
uint8_t u8g_com_arduino_std_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
u8g_com_arduino_assign_pin_output_high(u8g);
u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, LOW);
u8g_com_arduino_digital_write(u8g, U8G_PI_MOSI, LOW);
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_RESET:
if ( u8g->pin_list[U8G_PI_RESET] != U8G_PIN_NONE )
u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val);
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
}
else
{
/* enable */
u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, LOW);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
}
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_arduino_sw_spi_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK], arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_arduino_sw_spi_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK], *ptr++);
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_arduino_sw_spi_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK], u8g_pgm_read(ptr));
ptr++;
arg_val--;
}
}
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g_com_arduino_digital_write(u8g, U8G_PI_A0, arg_val);
break;
}
return 1;
}
#else /* ARDUINO */
uint8_t u8g_com_arduino_std_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif /* ARDUINO */
@@ -1,301 +0,0 @@
/*
u8g_arduino_sw_spi.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Update for ATOMIC operation done (01 Jun 2013)
U8G_ATOMIC_OR(ptr, val)
U8G_ATOMIC_AND(ptr, val)
U8G_ATOMIC_START();
U8G_ATOMIC_END();
*/
#include "u8g.h"
#if defined(ARDUINO)
#if ARDUINO < 100
#include <WProgram.h>
#include "wiring_private.h"
#include "pins_arduino.h"
#else
#include <Arduino.h>
#include "wiring_private.h"
#endif
/*=========================================================*/
/* Arduino, AVR */
#if defined(__AVR__)
uint8_t u8g_bitData, u8g_bitNotData;
uint8_t u8g_bitClock, u8g_bitNotClock;
volatile uint8_t *u8g_outData;
volatile uint8_t *u8g_outClock;
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin)
{
u8g_outData = portOutputRegister(digitalPinToPort(dataPin));
u8g_outClock = portOutputRegister(digitalPinToPort(clockPin));
u8g_bitData = digitalPinToBitMask(dataPin);
u8g_bitClock = digitalPinToBitMask(clockPin);
u8g_bitNotClock = u8g_bitClock;
u8g_bitNotClock ^= 0x0ff;
u8g_bitNotData = u8g_bitData;
u8g_bitNotData ^= 0x0ff;
}
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val) U8G_NOINLINE;
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
{
uint8_t cnt = 8;
uint8_t bitData = u8g_bitData;
uint8_t bitNotData = u8g_bitNotData;
uint8_t bitClock = u8g_bitClock;
uint8_t bitNotClock = u8g_bitNotClock;
volatile uint8_t *outData = u8g_outData;
volatile uint8_t *outClock = u8g_outClock;
U8G_ATOMIC_START();
do
{
if ( val & 128 )
*outData |= bitData;
else
*outData &= bitNotData;
*outClock |= bitClock;
val <<= 1;
cnt--;
*outClock &= bitNotClock;
} while( cnt != 0 );
U8G_ATOMIC_END();
}
/*=========================================================*/
/* Arduino, Chipkit */
#elif defined(__18CXX) || defined(__PIC32MX)
uint16_t dog_bitData, dog_bitNotData;
uint16_t dog_bitClock, dog_bitNotClock;
volatile uint32_t *dog_outData;
volatile uint32_t *dog_outClock;
volatile uint32_t dog_pic32_spi_tmp;
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin)
{
dog_outData = portOutputRegister(digitalPinToPort(dataPin));
dog_outClock = portOutputRegister(digitalPinToPort(clockPin));
dog_bitData = digitalPinToBitMask(dataPin);
dog_bitClock = digitalPinToBitMask(clockPin);
dog_bitNotClock = dog_bitClock;
dog_bitNotClock ^= 0x0ffff;
dog_bitNotData = dog_bitData;
dog_bitNotData ^= 0x0ffff;
}
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
{
uint8_t cnt = 8;
U8G_ATOMIC_START();
do
{
if ( val & 128 )
*dog_outData |= dog_bitData;
else
*dog_outData &= dog_bitNotData;
val <<= 1;
/*
There must be some delay here. However
fetching the adress dog_outClock is enough delay, so
do not place dog_outClock in a local variable. This will
break the procedure
*/
*dog_outClock |= dog_bitClock;
cnt--;
*dog_outClock &= dog_bitNotClock;
/*
little additional delay after clk pulse, done by 3x32bit reads
from I/O. Optimized for PIC32 with 80 MHz.
*/
dog_pic32_spi_tmp = *dog_outClock;
dog_pic32_spi_tmp = *dog_outClock;
dog_pic32_spi_tmp = *dog_outClock;
} while( cnt != 0 );
U8G_ATOMIC_END();
}
/*=========================================================*/
/* Arduino Due */
#elif defined(__SAM3X8E__)
/* Due */
void u8g_digital_write_sam_high(uint8_t pin)
{
PIO_Set( g_APinDescription[pin].pPort, g_APinDescription[pin].ulPin) ;
}
void u8g_digital_write_sam_low(uint8_t pin)
{
PIO_Clear( g_APinDescription[pin].pPort, g_APinDescription[pin].ulPin) ;
}
static uint8_t u8g_sam_data_pin;
static uint8_t u8g_sam_clock_pin;
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin)
{
u8g_sam_data_pin = dataPin;
u8g_sam_clock_pin = clockPin;
}
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
{
uint8_t i = 8;
do
{
if ( val & 128 )
u8g_digital_write_sam_high(u8g_sam_data_pin);
else
u8g_digital_write_sam_low(u8g_sam_data_pin);
val <<= 1;
//u8g_MicroDelay();
u8g_digital_write_sam_high(u8g_sam_clock_pin);
u8g_MicroDelay();
u8g_digital_write_sam_low(u8g_sam_clock_pin);
u8g_MicroDelay();
i--;
} while( i != 0 );
}
#else
/* empty interface */
static void u8g_com_arduino_init_shift_out(uint8_t dataPin, uint8_t clockPin)
{
}
static void u8g_com_arduino_do_shift_out_msb_first(uint8_t val)
{
}
#endif
uint8_t u8g_com_arduino_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
u8g_com_arduino_assign_pin_output_high(u8g);
u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, LOW);
u8g_com_arduino_digital_write(u8g, U8G_PI_MOSI, LOW);
u8g_com_arduino_init_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK]);
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_RESET:
if ( u8g->pin_list[U8G_PI_RESET] != U8G_PIN_NONE )
u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val);
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
}
else
{
/* enable */
u8g_com_arduino_digital_write(u8g, U8G_PI_SCK, LOW);
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
/* issue 227 */
u8g_com_arduino_init_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK]);
}
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_com_arduino_do_shift_out_msb_first( arg_val );
//u8g_arduino_sw_spi_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK], arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_arduino_do_shift_out_msb_first(*ptr++);
// u8g_arduino_sw_spi_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK], *ptr++);
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_arduino_do_shift_out_msb_first( u8g_pgm_read(ptr) );
//u8g_arduino_sw_spi_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK], u8g_pgm_read(ptr));
ptr++;
arg_val--;
}
}
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g_com_arduino_digital_write(u8g, U8G_PI_A0, arg_val);
break;
}
return 1;
}
#else /* ARDUINO */
uint8_t u8g_com_arduino_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif /* ARDUINO */
@@ -1,403 +0,0 @@
/*
u8g_com_arduino_t6963.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PIN_D0 8
PIN_D1 9
PIN_D2 10
PIN_D3 11
PIN_D4 4
PIN_D5 5
PIN_D6 6
PIN_D7 7
PIN_CS 14
PIN_A0 15
PIN_RESET 16
PIN_WR 17
PIN_RD 18
u8g_InitRW8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, cs, a0, wr, rd, reset)
u8g_InitRW8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16)
Update for ATOMIC operation done (01 Jun 2013)
U8G_ATOMIC_OR(ptr, val)
U8G_ATOMIC_AND(ptr, val)
U8G_ATOMIC_START();
U8G_ATOMIC_END();
*/
#include "u8g.h"
#if defined(ARDUINO)
#if ARDUINO < 100
//#include <WProgram.h>
#include <wiring_private.h>
#include <pins_arduino.h>
#else
#include <Arduino.h>
#endif
#if defined(__PIC32MX)
/* CHIPKIT PIC32 */
static volatile uint32_t *u8g_output_data_port[8];
static volatile uint32_t *u8g_input_data_port[8];
static volatile uint32_t *u8g_mode_port[8];
static uint32_t u8g_data_mask[8];
#else
static volatile uint8_t *u8g_output_data_port[8];
static volatile uint8_t *u8g_input_data_port[8];
static volatile uint8_t *u8g_mode_port[8];
static uint8_t u8g_data_mask[8];
#endif
static void u8g_com_arduino_t6963_init(u8g_t *u8g)
{
u8g_output_data_port[0] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D0]));
u8g_input_data_port[0] = portInputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D0]));
u8g_mode_port[0] = portModeRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D0]));
u8g_data_mask[0] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D0]);
u8g_output_data_port[1] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D1]));
u8g_input_data_port[1] = portInputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D1]));
u8g_mode_port[1] = portModeRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D1]));
u8g_data_mask[1] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D1]);
u8g_output_data_port[2] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D2]));
u8g_input_data_port[2] = portInputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D2]));
u8g_mode_port[2] = portModeRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D2]));
u8g_data_mask[2] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D2]);
u8g_output_data_port[3] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D3]));
u8g_input_data_port[3] = portInputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D3]));
u8g_mode_port[3] = portModeRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D3]));
u8g_data_mask[3] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D3]);
u8g_output_data_port[4] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D4]));
u8g_input_data_port[4] = portInputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D4]));
u8g_mode_port[4] = portModeRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D4]));
u8g_data_mask[4] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D4]);
u8g_output_data_port[5] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D5]));
u8g_input_data_port[5] = portInputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D5]));
u8g_mode_port[5] = portModeRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D5]));
u8g_data_mask[5] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D5]);
u8g_output_data_port[6] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D6]));
u8g_input_data_port[6] = portInputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D6]));
u8g_mode_port[6] = portModeRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D6]));
u8g_data_mask[6] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D6]);
u8g_output_data_port[7] = portOutputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D7]));
u8g_input_data_port[7] = portInputRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D7]));
u8g_mode_port[7] = portModeRegister(digitalPinToPort(u8g->pin_list[U8G_PI_D7]));
u8g_data_mask[7] = digitalPinToBitMask(u8g->pin_list[U8G_PI_D7]);
}
static void u8g_com_arduino_t6963_write_data_pin(uint8_t pin, uint8_t val)
{
/* no ATOMIC protection required here, this is done by calling procedure */
if ( val != 0 )
*u8g_output_data_port[pin] |= u8g_data_mask[pin];
else
*u8g_output_data_port[pin] &= ~u8g_data_mask[pin];
}
static void u8g_com_arduino_t6963_set_port_output(void)
{
uint8_t i;
U8G_ATOMIC_START();
for( i = 0; i < 8; i++ )
{
#if defined(__PIC32MX)
/* CHIPKIT PIC32 */
*u8g_mode_port[i] |= u8g_data_mask[i];
#elif defined(__AVR__)
*u8g_mode_port[i] |= u8g_data_mask[i];
#else
/* TODO: use generic Arduino API */
*u8g_mode_port[i] |= u8g_data_mask[i];
#endif
}
U8G_ATOMIC_END();
}
static void u8g_com_arduino_t6963_set_port_input(void)
{
uint8_t i;
U8G_ATOMIC_START();
for( i = 0; i < 8; i++ )
{
#if defined(__PIC32MX)
/* CHIPKIT PIC32 */
*u8g_mode_port[i] &= ~u8g_data_mask[i];
#elif defined(__AVR__)
/* avr */
*u8g_mode_port[i] &= ~u8g_data_mask[i];
*u8g_output_data_port[i] &= ~u8g_data_mask[i]; // no pullup
#else
/* TODO: use generic Arduino API */
*u8g_mode_port[i] &= ~u8g_data_mask[i];
*u8g_output_data_port[i] &= ~u8g_data_mask[i]; // no pullup
#endif
}
U8G_ATOMIC_END();
}
static void u8g_com_arduino_t6963_write(u8g_t *u8g, uint8_t val)
{
U8G_ATOMIC_START();
u8g_com_arduino_t6963_write_data_pin( 0, val&1 );
val >>= 1;
u8g_com_arduino_t6963_write_data_pin( 1, val&1 );
val >>= 1;
u8g_com_arduino_t6963_write_data_pin( 2, val&1 );
val >>= 1;
u8g_com_arduino_t6963_write_data_pin( 3, val&1 );
val >>= 1;
u8g_com_arduino_t6963_write_data_pin( 4, val&1 );
val >>= 1;
u8g_com_arduino_t6963_write_data_pin( 5, val&1 );
val >>= 1;
u8g_com_arduino_t6963_write_data_pin( 6, val&1 );
val >>= 1;
u8g_com_arduino_t6963_write_data_pin( 7, val&1 );
val >>= 1;
U8G_ATOMIC_END();
u8g_com_arduino_digital_write(u8g, U8G_PI_WR, 0);
u8g_MicroDelay(); /* 80ns, reference: t6963 datasheet */
u8g_com_arduino_digital_write(u8g, U8G_PI_WR, 1);
u8g_MicroDelay(); /* 10ns, reference: t6963 datasheet */
}
static uint8_t u8g_com_arduino_t6963_read(u8g_t *u8g)
{
uint8_t val = 0;
u8g_com_arduino_digital_write(u8g, U8G_PI_RD, 0);
u8g_MicroDelay(); /* 150ns, reference: t6963 datasheet */
U8G_ATOMIC_START();
/* only read bits 0, 1 and 3 */
if ( (*u8g_input_data_port[3] & u8g_data_mask[3]) != 0 )
val++;
val <<= 1;
val <<= 1;
if ( (*u8g_input_data_port[1] & u8g_data_mask[1]) != 0 )
val++;
val <<= 1;
if ( (*u8g_input_data_port[0] & u8g_data_mask[0]) != 0 )
val++;
U8G_ATOMIC_END();
u8g_com_arduino_digital_write(u8g, U8G_PI_RD, 1);
u8g_MicroDelay(); /* 10ns, reference: t6963 datasheet */
return val;
}
#define U8G_STATUS_TIMEOUT 50
static uint8_t u8g_com_arduino_t6963_until_01_ok(u8g_t *u8g)
{
long x;
u8g_com_arduino_t6963_set_port_input();
x = millis();
x += U8G_STATUS_TIMEOUT;
for(;;)
{
if ( (u8g_com_arduino_t6963_read(u8g) & 3) == 3 )
break;
if ( x < millis() )
return 0;
}
u8g_com_arduino_t6963_set_port_output();
return 1;
}
static uint8_t u8g_com_arduino_t6963_until_3_ok(u8g_t *u8g)
{
long x;
u8g_com_arduino_t6963_set_port_input();
x = millis();
x += U8G_STATUS_TIMEOUT;
for(;;)
{
if ( (u8g_com_arduino_t6963_read(u8g) & 8) == 8 )
break;
if ( x < millis() )
return 0;
}
u8g_com_arduino_t6963_set_port_output();
return 1;
}
static uint8_t u8g_com_arduino_t6963_write_cmd(u8g_t *u8g, uint8_t val)
{
u8g_com_arduino_digital_write(u8g, U8G_PI_A0, 1);
if ( u8g_com_arduino_t6963_until_01_ok(u8g) == 0 )
return 0;
u8g_com_arduino_digital_write(u8g, U8G_PI_A0, 1);
u8g_com_arduino_t6963_write(u8g, val);
return 1;
}
static uint8_t u8g_com_arduino_t6963_write_data(u8g_t *u8g, uint8_t val)
{
u8g_com_arduino_digital_write(u8g, U8G_PI_A0, 1);
if ( u8g_com_arduino_t6963_until_01_ok(u8g) == 0 )
return 0;
u8g_com_arduino_digital_write(u8g, U8G_PI_A0, 0);
u8g_com_arduino_t6963_write(u8g, val);
return 1;
}
static uint8_t u8g_com_arduino_t6963_write_auto_data(u8g_t *u8g, uint8_t val)
{
u8g_com_arduino_digital_write(u8g, U8G_PI_A0, 1);
if ( u8g_com_arduino_t6963_until_3_ok(u8g) == 0 )
return 0;
u8g_com_arduino_digital_write(u8g, U8G_PI_A0, 0);
u8g_com_arduino_t6963_write(u8g, val);
return 1;
}
uint8_t u8g_com_arduino_t6963_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
u8g->pin_list[U8G_PI_A0_STATE] = 0;
u8g_com_arduino_t6963_init(u8g);
/* setup the RW (equal to WR) pin as output and force it to high */
if ( u8g->pin_list[U8G_PI_WR] != U8G_PIN_NONE )
{
pinMode(u8g->pin_list[U8G_PI_WR], OUTPUT);
u8g_com_arduino_digital_write(u8g, U8G_PI_WR, HIGH);
}
/* set all pins (except WR pin) */
u8g_com_arduino_assign_pin_output_high(u8g);
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable, active low chip select */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, HIGH);
}
else
{
/* enable */
u8g_com_arduino_digital_write(u8g, U8G_PI_CS, LOW);
}
break;
case U8G_COM_MSG_WRITE_BYTE:
if ( u8g->pin_list[U8G_PI_A0_STATE] == 0 )
{
u8g_com_arduino_t6963_write_data(u8g, arg_val);
}
else
{
u8g_com_arduino_t6963_write_cmd(u8g, arg_val);
}
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
u8g_com_arduino_t6963_write_cmd(u8g, 0x0b0); /* auto write */
while( arg_val > 0 )
{
if ( u8g_com_arduino_t6963_write_auto_data(u8g, *ptr++) == 0 )
break;
arg_val--;
}
u8g_com_arduino_t6963_write_cmd(u8g, 0x0b2); /* auto reset */
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
u8g_com_arduino_t6963_write_cmd(u8g, 0x0b0); /* auto write */
while( arg_val > 0 )
{
if ( u8g_com_arduino_t6963_write_auto_data(u8g, u8g_pgm_read(ptr)) == 0 )
break;
ptr++;
arg_val--;
}
u8g_com_arduino_t6963_write_cmd(u8g, 0x0b2); /* auto reset */
}
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 1) or data mode (arg_val = 0) */
u8g->pin_list[U8G_PI_A0_STATE] = arg_val;
//u8g_com_arduino_digital_write(u8g, U8G_PI_DI, arg_val);
break;
case U8G_COM_MSG_RESET:
if ( u8g->pin_list[U8G_PI_RESET] != U8G_PIN_NONE )
u8g_com_arduino_digital_write(u8g, U8G_PI_RESET, arg_val);
break;
}
return 1;
}
#else
uint8_t u8g_com_arduino_t6963_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif /* ARDUINO */
@@ -1,188 +0,0 @@
/*
u8g_com_atmega_hw_spi.c
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Assumes, that
MOSI is at PORTB, Pin 3
and
SCK is at PORTB, Pin 5
Update for ATOMIC operation done (01 Jun 2013)
U8G_ATOMIC_OR(ptr, val)
U8G_ATOMIC_AND(ptr, val)
U8G_ATOMIC_START()
U8G_ATOMIC_END()
*/
#include "u8g.h"
#if defined(__AVR_XMEGA__)
#elif defined(__AVR__)
#define U8G_ATMEGA_HW_SPI
/* remove the definition for attiny */
#if __AVR_ARCH__ == 2
#undef U8G_ATMEGA_HW_SPI
#endif
#if __AVR_ARCH__ == 25
#undef U8G_ATMEGA_HW_SPI
#endif
#endif
#if defined(U8G_ATMEGA_HW_SPI)
#include <avr/interrupt.h>
#include <avr/io.h>
static uint8_t u8g_atmega_spi_out(uint8_t data)
{
/* unsigned char x = 100; */
/* send data */
SPDR = data;
/* wait for transmission */
while (!(SPSR & (1<<SPIF)))
;
/* clear the SPIF flag by reading SPDR */
return SPDR;
}
uint8_t u8g_com_atmega_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_INIT:
u8g_SetPIOutput(u8g, U8G_PI_CS);
u8g_SetPIOutput(u8g, U8G_PI_A0);
u8g_SetPIOutput(u8g, U8G_PI_RESET);
U8G_ATOMIC_START();
DDRB |= _BV(3); /* D0, MOSI */
DDRB |= _BV(5); /* SCK */
DDRB |= _BV(2); /* slave select */
PORTB &= ~_BV(3); /* D0, MOSI = 0 */
PORTB &= ~_BV(5); /* SCK = 0 */
U8G_ATOMIC_END();
u8g_SetPILevel(u8g, U8G_PI_CS, 1);
/*
SPR1 SPR0
0 0 fclk/4 x
0 1 fclk/16
1 0 fclk/64
1 1 fclk/128
*/
SPCR = 0;
SPCR = (1<<SPE) | (1<<MSTR)|(0<<SPR1)|(0<<SPR0)|(0<<CPOL)|(0<<CPHA);
#ifdef U8G_HW_SPI_2X
SPSR = (1 << SPI2X); /* double speed, issue 89 */
#endif
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g_SetPILevel(u8g, U8G_PI_A0, arg_val);
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable */
u8g_SetPILevel(u8g, U8G_PI_CS, 1);
}
else
{
PORTB &= ~_BV(5); /* SCK = 0 */
/* enable */
u8g_SetPILevel(u8g, U8G_PI_CS, 0); /* CS = 0 (low active) */
}
break;
case U8G_COM_MSG_RESET:
u8g_SetPILevel(u8g, U8G_PI_RESET, arg_val);
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_atmega_spi_out(arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_atmega_spi_out(*ptr++);
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_atmega_spi_out(u8g_pgm_read(ptr));
ptr++;
arg_val--;
}
}
break;
}
return 1;
}
#else
uint8_t u8g_com_atmega_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif
@@ -1,183 +0,0 @@
/*
u8g_com_atmega_parallel.c
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PIN_D0 8
PIN_D1 9
PIN_D2 10
PIN_D3 11
PIN_D4 4
PIN_D5 5
PIN_D6 6
PIN_D7 7
PIN_CS1 14
PIN_CS2 15
PIN_RW 16
PIN_DI 17
PIN_EN 18
u8g_Init8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw, reset)
u8g_Init8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16, U8G_PIN_NONE)
*/
#include "u8g.h"
#if defined(__AVR__)
static void u8g_com_atmega_parallel_write(u8g_t *u8g, uint8_t val) U8G_NOINLINE;
static void u8g_com_atmega_parallel_write(u8g_t *u8g, uint8_t val)
{
u8g_SetPILevel(u8g, U8G_PI_D0, val&1);
val >>= 1;
u8g_SetPILevel(u8g, U8G_PI_D1, val&1);
val >>= 1;
u8g_SetPILevel(u8g, U8G_PI_D2, val&1);
val >>= 1;
u8g_SetPILevel(u8g, U8G_PI_D3, val&1);
val >>= 1;
u8g_SetPILevel(u8g, U8G_PI_D4, val&1);
val >>= 1;
u8g_SetPILevel(u8g, U8G_PI_D5, val&1);
val >>= 1;
u8g_SetPILevel(u8g, U8G_PI_D6, val&1);
val >>= 1;
u8g_SetPILevel(u8g, U8G_PI_D7, val&1);
/* EN cycle time must be 1 micro second */
u8g_SetPILevel(u8g, U8G_PI_EN, 1);
u8g_MicroDelay(); /* delay by 1000ns, reference: ST7920: 140ns, SBN1661: 100ns */
u8g_SetPILevel(u8g, U8G_PI_EN, 0);
u8g_10MicroDelay(); /* ST7920 commands: 72us */
u8g_10MicroDelay(); /* ST7920 commands: 72us */
}
uint8_t u8g_com_atmega_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
/* setup the RW pin as output and force it to low */
u8g_SetPIOutput(u8g, U8G_PI_RW);
u8g_SetPILevel(u8g, U8G_PI_RW, 0);
u8g_SetPIOutput(u8g, U8G_PI_D0);
u8g_SetPIOutput(u8g, U8G_PI_D1);
u8g_SetPIOutput(u8g, U8G_PI_D2);
u8g_SetPIOutput(u8g, U8G_PI_D3);
u8g_SetPIOutput(u8g, U8G_PI_D4);
u8g_SetPIOutput(u8g, U8G_PI_D5);
u8g_SetPIOutput(u8g, U8G_PI_D6);
u8g_SetPIOutput(u8g, U8G_PI_D7);
u8g_SetPIOutput(u8g, U8G_PI_EN);
u8g_SetPIOutput(u8g, U8G_PI_CS1);
u8g_SetPIOutput(u8g, U8G_PI_CS2);
u8g_SetPIOutput(u8g, U8G_PI_DI);
u8g_SetPILevel(u8g, U8G_PI_CS1, 1);
u8g_SetPILevel(u8g, U8G_PI_CS2, 1);
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable */
u8g_SetPILevel(u8g, U8G_PI_CS1, 1);
u8g_SetPILevel(u8g, U8G_PI_CS2, 1);
}
else if ( arg_val == 1 )
{
/* enable */
u8g_SetPILevel(u8g, U8G_PI_CS1, 0);
u8g_SetPILevel(u8g, U8G_PI_CS2, 1);
}
else if ( arg_val == 2 )
{
/* enable */
u8g_SetPILevel(u8g, U8G_PI_CS1, 1);
u8g_SetPILevel(u8g, U8G_PI_CS2, 0);
}
else
{
/* enable */
u8g_SetPILevel(u8g, U8G_PI_CS1, 0);
u8g_SetPILevel(u8g, U8G_PI_CS2, 0);
}
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_com_atmega_parallel_write(u8g, arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_atmega_parallel_write(u8g, *ptr++);
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_atmega_parallel_write(u8g, u8g_pgm_read(ptr));
ptr++;
arg_val--;
}
}
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g_SetPILevel(u8g, U8G_PI_DI, arg_val);
break;
case U8G_COM_MSG_RESET:
u8g_SetPILevel(u8g, U8G_PI_RESET, arg_val);
break;
}
return 1;
}
#else
uint8_t u8g_com_atmega_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif /* ARDUINO */
@@ -1,217 +0,0 @@
/*
u8g_com_atmega_st7920_hw_spi.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
A special SPI interface for ST7920 controller with HW SPI Support
Assumes, that
MOSI is at PORTB, Pin 3
and
SCK is at PORTB, Pin 5
Update for ATOMIC operation done (01 Jun 2013)
U8G_ATOMIC_OR(ptr, val)
U8G_ATOMIC_AND(ptr, val)
U8G_ATOMIC_START()
U8G_ATOMIC_END()
*/
#include "u8g.h"
#if defined(__AVR_XMEGA__)
#elif defined(__AVR__)
#define U8G_ATMEGA_HW_SPI
/* remove the definition for attiny */
#if __AVR_ARCH__ == 2
#undef U8G_ATMEGA_HW_SPI
#endif
#if __AVR_ARCH__ == 25
#undef U8G_ATMEGA_HW_SPI
#endif
#endif
#if defined(U8G_ATMEGA_HW_SPI)
#include <avr/interrupt.h>
#include <avr/io.h>
static uint8_t u8g_atmega_st7920_hw_spi_shift_out(u8g_t *u8g, uint8_t val) U8G_NOINLINE;
static uint8_t u8g_atmega_st7920_hw_spi_shift_out(u8g_t *u8g, uint8_t val)
{
/* send data */
SPDR = val;
/* wait for transmission */
while (!(SPSR & (1<<SPIF)))
;
/* clear the SPIF flag by reading SPDR */
return SPDR;
}
static void u8g_com_atmega_st7920_write_byte_hw_spi(u8g_t *u8g, uint8_t rs, uint8_t val) U8G_NOINLINE;
static void u8g_com_atmega_st7920_write_byte_hw_spi(u8g_t *u8g, uint8_t rs, uint8_t val)
{
uint8_t i;
if ( rs == 0 )
{
/* command */
u8g_atmega_st7920_hw_spi_shift_out(u8g, 0x0f8);
}
else if ( rs == 1 )
{
/* data */
u8g_atmega_st7920_hw_spi_shift_out(u8g, 0x0fa);
}
u8g_atmega_st7920_hw_spi_shift_out(u8g, val & 0x0f0);
u8g_atmega_st7920_hw_spi_shift_out(u8g, val << 4);
for( i = 0; i < 4; i++ )
u8g_10MicroDelay();
}
uint8_t u8g_com_atmega_st7920_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
u8g_SetPIOutput(u8g, U8G_PI_CS);
//u8g_SetPIOutput(u8g, U8G_PI_A0);
U8G_ATOMIC_START();
DDRB |= _BV(3); /* D0, MOSI */
DDRB |= _BV(5); /* SCK */
DDRB |= _BV(2); /* slave select */
PORTB &= ~_BV(3); /* D0, MOSI = 0 */
PORTB &= ~_BV(5); /* SCK = 0 */
U8G_ATOMIC_END();
u8g_SetPILevel(u8g, U8G_PI_CS, 1);
/*
SPR1 SPR0
0 0 fclk/4
0 1 fclk/16
1 0 fclk/64
1 1 fclk/128
*/
SPCR = 0;
/* maybe set CPOL and CPHA to 1 */
/* 20 Dez 2012: did set CPOL and CPHA to 1 in Arduino variant! */
/* 24 Jan 2014: implemented, see also issue 221 */
SPCR = (1<<SPE) | (1<<MSTR)|(0<<SPR1)|(0<<SPR0)|(1<<CPOL)|(1<<CPHA);
#ifdef U8G_HW_SPI_2X
SPSR = (1 << SPI2X); /* double speed, issue 89 */
#endif
u8g->pin_list[U8G_PI_A0_STATE] = 0; /* inital RS state: command mode */
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_RESET:
u8g_SetPILevel(u8g, U8G_PI_RESET, arg_val);
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g->pin_list[U8G_PI_A0_STATE] = arg_val;
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable, note: the st7920 has an active high chip select */
u8g_SetPILevel(u8g, U8G_PI_CS, 0);
}
else
{
/* u8g_SetPILevel(u8g, U8G_PI_SCK, 0 ); */
/* enable */
u8g_SetPILevel(u8g, U8G_PI_CS, 1); /* CS = 1 (high active) */
}
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_com_atmega_st7920_write_byte_hw_spi(u8g, u8g->pin_list[U8G_PI_A0_STATE], arg_val);
//u8g->pin_list[U8G_PI_A0_STATE] = 2;
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_atmega_st7920_write_byte_hw_spi(u8g, u8g->pin_list[U8G_PI_A0_STATE], *ptr++);
//u8g->pin_list[U8G_PI_A0_STATE] = 2;
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_atmega_st7920_write_byte_hw_spi(u8g, u8g->pin_list[U8G_PI_A0_STATE], u8g_pgm_read(ptr));
//u8g->pin_list[U8G_PI_A0_STATE] = 2;
ptr++;
arg_val--;
}
}
break;
}
return 1;
}
#else
uint8_t u8g_com_atmega_st7920_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif
@@ -1,170 +0,0 @@
/*
u8g_com_atmega_st7920_spi.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
A special SPI interface for ST7920 controller
*/
#include "u8g.h"
#if defined(__AVR__)
static void u8g_atmega_st7920_sw_spi_shift_out(u8g_t *u8g, uint8_t val) U8G_NOINLINE;
static void u8g_atmega_st7920_sw_spi_shift_out(u8g_t *u8g, uint8_t val)
{
uint8_t i = 8;
do
{
u8g_SetPILevel(u8g, U8G_PI_MOSI, val & 128 );
val <<= 1;
u8g_SetPILevel(u8g, U8G_PI_SCK, 1 );
u8g_MicroDelay(); /* 15 Aug 2012: added for high speed uC */
u8g_SetPILevel(u8g, U8G_PI_SCK, 0 );
u8g_MicroDelay(); /* 15 Aug 2012: added for high speed uC */
i--;
} while( i != 0 );
}
static void u8g_com_atmega_st7920_write_byte(u8g_t *u8g, uint8_t rs, uint8_t val) U8G_NOINLINE;
static void u8g_com_atmega_st7920_write_byte(u8g_t *u8g, uint8_t rs, uint8_t val)
{
uint8_t i;
if ( rs == 0 )
{
/* command */
u8g_atmega_st7920_sw_spi_shift_out(u8g, 0x0f8);
}
else if ( rs == 1 )
{
/* data */
u8g_atmega_st7920_sw_spi_shift_out(u8g, 0x0fa);
}
u8g_atmega_st7920_sw_spi_shift_out(u8g, val & 0x0f0);
u8g_atmega_st7920_sw_spi_shift_out(u8g, val << 4);
for( i = 0; i < 4; i++ )
u8g_10MicroDelay();
}
uint8_t u8g_com_atmega_st7920_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
u8g_SetPIOutput(u8g, U8G_PI_SCK);
u8g_SetPIOutput(u8g, U8G_PI_MOSI);
/* u8g_SetPIOutput(u8g, U8G_PI_A0); */
u8g_SetPIOutput(u8g, U8G_PI_CS);
u8g_SetPIOutput(u8g, U8G_PI_RESET);
u8g_SetPILevel(u8g, U8G_PI_SCK, 0 );
u8g_SetPILevel(u8g, U8G_PI_MOSI, 0 );
u8g_SetPILevel(u8g, U8G_PI_CS, 0 );
/* u8g_SetPILevel(u8g, U8G_PI_A0, 0); */
u8g->pin_list[U8G_PI_A0_STATE] = 0; /* inital RS state: command mode */
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_RESET:
u8g_SetPILevel(u8g, U8G_PI_RESET, arg_val);
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g->pin_list[U8G_PI_A0_STATE] = arg_val;
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable, note: the st7920 has an active high chip select */
u8g_SetPILevel(u8g, U8G_PI_CS, 0);
}
else
{
/* u8g_SetPILevel(u8g, U8G_PI_SCK, 0 ); */
/* enable */
u8g_SetPILevel(u8g, U8G_PI_CS, 1); /* CS = 1 (high active) */
}
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_com_atmega_st7920_write_byte(u8g, u8g->pin_list[U8G_PI_A0_STATE], arg_val);
u8g->pin_list[U8G_PI_A0_STATE] = 2;
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_atmega_st7920_write_byte(u8g, u8g->pin_list[U8G_PI_A0_STATE], *ptr++);
u8g->pin_list[U8G_PI_A0_STATE] = 2;
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_atmega_st7920_write_byte(u8g, u8g->pin_list[U8G_PI_A0_STATE], u8g_pgm_read(ptr));
u8g->pin_list[U8G_PI_A0_STATE] = 2;
ptr++;
arg_val--;
}
}
break;
}
return 1;
}
#else
uint8_t u8g_com_atmega_st7920_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif
@@ -1,141 +0,0 @@
/*
u8g_com_atmega_sw_spi.c
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#if defined(__AVR__)
static void u8g_atmega_sw_spi_shift_out(u8g_t *u8g, uint8_t val) U8G_NOINLINE;
static void u8g_atmega_sw_spi_shift_out(u8g_t *u8g, uint8_t val)
{
uint8_t i = 8;
do
{
u8g_SetPILevel(u8g, U8G_PI_MOSI, val & 128 );
val <<= 1;
u8g_SetPILevel(u8g, U8G_PI_SCK, 1 );
u8g_MicroDelay(); /* 15 Aug 2012: added for high speed uC */
u8g_SetPILevel(u8g, U8G_PI_SCK, 0 );
u8g_MicroDelay(); /* 15 Aug 2012: added for high speed uC */
i--;
} while( i != 0 );
}
uint8_t u8g_com_atmega_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
u8g_SetPIOutput(u8g, U8G_PI_SCK);
u8g_SetPIOutput(u8g, U8G_PI_MOSI);
u8g_SetPIOutput(u8g, U8G_PI_A0);
u8g_SetPIOutput(u8g, U8G_PI_CS);
u8g_SetPIOutput(u8g, U8G_PI_RESET);
u8g_SetPILevel(u8g, U8G_PI_SCK, 0 );
u8g_SetPILevel(u8g, U8G_PI_MOSI, 0 );
u8g_SetPILevel(u8g, U8G_PI_CS, 1 );
u8g_SetPILevel(u8g, U8G_PI_A0, 0);
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g_SetPILevel(u8g, U8G_PI_A0, arg_val);
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable */
u8g_SetPILevel(u8g, U8G_PI_CS, 1);
}
else
{
u8g_SetPILevel(u8g, U8G_PI_SCK, 0 );
/* enable */
u8g_SetPILevel(u8g, U8G_PI_CS, 0); /* CS = 0 (low active) */
}
break;
case U8G_COM_MSG_RESET:
u8g_SetPILevel(u8g, U8G_PI_RESET, arg_val);
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_atmega_sw_spi_shift_out(u8g, arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_atmega_sw_spi_shift_out(u8g, *ptr++);
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_atmega_sw_spi_shift_out(u8g, u8g_pgm_read(ptr));
ptr++;
arg_val--;
}
}
break;
}
return 1;
}
#else
uint8_t u8g_com_atmega_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif
@@ -1,174 +0,0 @@
/*
u8g_com_atxmega_hw_spi.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
Copyright (c) 2015, florianmenne@t-online.de
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
A special SPI interface for ST7920 controller with HW SPI Support
Assumes, that
MOSI is at PORTB, Pin 3
and
SCK is at PORTB, Pin 5
Update for ATOMIC operation done (01 Jun 2013)
U8G_ATOMIC_OR(ptr, val)
U8G_ATOMIC_AND(ptr, val)
U8G_ATOMIC_START()
U8G_ATOMIC_END()
*/
#include "u8g.h"
#if defined(__AVR_XMEGA__)
#define U8G_ATXMEGA_HW_SPI
#endif
#if defined(U8G_ATXMEGA_HW_SPI)
#include <avr/interrupt.h>
#include <avr/io.h>
static uint8_t u8g_atxmega_spi_out(uint8_t data)
{
/* send data */
SPIC.DATA = data;
/* wait for transmission */
while(!(SPIC.STATUS & SPI_IF_bm));
/* clear the SPIF flag by reading SPDR */
return SPIC.DATA;
}
uint8_t u8g_com_atxmega_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_INIT:
u8g_SetPIOutput(u8g, U8G_PI_CS);
u8g_SetPIOutput(u8g, U8G_PI_A0);
u8g_SetPIOutput(u8g, U8G_PI_RESET);
//U8G_ATOMIC_START();
PORTC.DIR |= PIN4_bm | PIN5_bm | PIN7_bm;
PORTC.DIR &= ~PIN6_bm;
//U8G_ATOMIC_END();
u8g_SetPILevel(u8g, U8G_PI_CS, 1);
SPIC.CTRL = 0;
SPIC.CTRL = SPI_PRESCALER_DIV4_gc | // SPI prescaler.
//SPI_CLK2X_bm | //SPI Clock double.
SPI_ENABLE_bm | //Enable SPI module.
//SPI_DORD_bm | //Data order.
SPI_MASTER_bm | //SPI master.
SPI_MODE_0_gc; // SPI mode.
#ifdef U8G_HW_SPI_2X
SPIC.CTRL |= SPI_CLK2X_bm; /* double speed, issue 89 */
#endif
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g_SetPILevel(u8g, U8G_PI_A0, arg_val);
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable */
u8g_SetPILevel(u8g, U8G_PI_CS, 1);
}
else
{
//PORTB &= ~_BV(5); /* SCK = 0 */
PORTC.OUT &= ~PIN7_bm;
/* enable */
u8g_SetPILevel(u8g, U8G_PI_CS, 0); /* CS = 0 (low active) */
}
break;
case U8G_COM_MSG_RESET:
u8g_SetPILevel(u8g, U8G_PI_RESET, arg_val);
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_atxmega_spi_out(arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_atxmega_spi_out(*ptr++);
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_atxmega_spi_out(u8g_pgm_read(ptr));
ptr++;
arg_val--;
}
}
break;
}
return 1;
}
#else
uint8_t u8g_com_atxmega_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif
@@ -1,202 +0,0 @@
/*
u8g_com_atxmega_st7920_hw_spi.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
Copyright (c) 2015, florianmenne@t-online.de
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
A special SPI interface for ST7920 controller with HW SPI Support
Assumes, that
MOSI is at PORTB, Pin 3
and
SCK is at PORTB, Pin 5
Update for ATOMIC operation done (01 Jun 2013)
U8G_ATOMIC_OR(ptr, val)
U8G_ATOMIC_AND(ptr, val)
U8G_ATOMIC_START()
U8G_ATOMIC_END()
*/
#include "u8g.h"
#if defined(__AVR_XMEGA__)
#define U8G_ATXMEGA_HW_SPI
#endif
#if defined(U8G_ATXMEGA_HW_SPI)
#include <avr/interrupt.h>
#include <avr/io.h>
static uint8_t u8g_atxmega_st7920_hw_spi_shift_out(u8g_t *u8g, uint8_t val) U8G_NOINLINE;
static uint8_t u8g_atxmega_st7920_hw_spi_shift_out(u8g_t *u8g, uint8_t val)
{
/* send data */
SPIC.DATA = val;
/* wait for transmission */
while(!(SPIC.STATUS & SPI_IF_bm));
/* clear the SPIF flag by reading SPDR */
return SPIC.DATA;
}
static void u8g_com_atxmega_st7920_write_byte_hw_spi(u8g_t *u8g, uint8_t rs, uint8_t val) U8G_NOINLINE;
static void u8g_com_atxmega_st7920_write_byte_hw_spi(u8g_t *u8g, uint8_t rs, uint8_t val)
{
uint8_t i;
if ( rs == 0 )
{
/* command */
u8g_atxmega_st7920_hw_spi_shift_out(u8g, 0x0f8);
}
else if ( rs == 1 )
{
/* data */
u8g_atxmega_st7920_hw_spi_shift_out(u8g, 0x0fa);
}
u8g_atxmega_st7920_hw_spi_shift_out(u8g, val & 0x0f0);
u8g_atxmega_st7920_hw_spi_shift_out(u8g, val << 4);
for( i = 0; i < 4; i++ )
u8g_10MicroDelay();
}
uint8_t u8g_com_atxmega_st7920_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
u8g_SetPIOutput(u8g, U8G_PI_CS);
//u8g_SetPIOutput(u8g, U8G_PI_A0);
//U8G_ATOMIC_START();
PORTC.DIR |= PIN4_bm | PIN5_bm | PIN7_bm;
PORTC.DIR &= ~PIN6_bm;
//U8G_ATOMIC_END();
u8g_SetPILevel(u8g, U8G_PI_CS, 1);
SPIC.CTRL = 0;
SPIC.CTRL = SPI_PRESCALER_DIV4_gc | // SPI prescaler.
//SPI_CLK2X_bm | //SPI Clock double.
SPI_ENABLE_bm | //Enable SPI module.
//SPI_DORD_bm | //Data order.
SPI_MASTER_bm | //SPI master.
SPI_MODE_0_gc; // SPI mode.
#ifdef U8G_HW_SPI_2X
SPIC.CTRL |= SPI_CLK2X_bm; /* double speed, issue 89 */
#endif
u8g->pin_list[U8G_PI_A0_STATE] = 0; /* inital RS state: command mode */
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_RESET:
u8g_SetPILevel(u8g, U8G_PI_RESET, arg_val);
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g->pin_list[U8G_PI_A0_STATE] = arg_val;
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable, note: the st7920 has an active high chip select */
u8g_SetPILevel(u8g, U8G_PI_CS, 0);
}
else
{
/* u8g_SetPILevel(u8g, U8G_PI_SCK, 0 ); */
/* enable */
u8g_SetPILevel(u8g, U8G_PI_CS, 1); /* CS = 1 (high active) */
}
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_com_atxmega_st7920_write_byte_hw_spi(u8g, u8g->pin_list[U8G_PI_A0_STATE], arg_val);
//u8g->pin_list[U8G_PI_A0_STATE] = 2;
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_atxmega_st7920_write_byte_hw_spi(u8g, u8g->pin_list[U8G_PI_A0_STATE], *ptr++);
//u8g->pin_list[U8G_PI_A0_STATE] = 2;
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_com_atxmega_st7920_write_byte_hw_spi(u8g, u8g->pin_list[U8G_PI_A0_STATE], u8g_pgm_read(ptr));
//u8g->pin_list[U8G_PI_A0_STATE] = 2;
ptr++;
arg_val--;
}
}
break;
}
return 1;
}
#else
uint8_t u8g_com_atxmega_st7920_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif
@@ -1,643 +0,0 @@
/*
u8g_com_i2c.c
generic i2c interface
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
//#define U8G_I2C_WITH_NO_ACK
static uint8_t u8g_i2c_err_code;
static uint8_t u8g_i2c_opt; /* U8G_I2C_OPT_NO_ACK, SAM: U8G_I2C_OPT_DEV_1 */
/*
position values
1: start condition
2: sla transfer
*/
static uint8_t u8g_i2c_err_pos;
void u8g_i2c_clear_error(void)
{
u8g_i2c_err_code = U8G_I2C_ERR_NONE;
u8g_i2c_err_pos = 0;
}
uint8_t u8g_i2c_get_error(void)
{
return u8g_i2c_err_code;
}
uint8_t u8g_i2c_get_err_pos(void)
{
return u8g_i2c_err_pos;
}
#if defined(__AVR_XMEGA__)
#elif defined(__AVR__)
static void u8g_i2c_set_error(uint8_t code, uint8_t pos)
{
if ( u8g_i2c_err_code > 0 )
return;
u8g_i2c_err_code |= code;
u8g_i2c_err_pos = pos;
}
#define U8G_ATMEGA_HW_TWI
/* remove the definition for attiny */
#if __AVR_ARCH__ == 2
#undef U8G_ATMEGA_HW_TWI
#endif
#if __AVR_ARCH__ == 25
#undef U8G_ATMEGA_HW_TWI
#endif
#endif
#if defined(U8G_ATMEGA_HW_TWI)
#include <avr/io.h>
#include <util/twi.h>
void u8g_i2c_init(uint8_t options)
{
/*
TWBR: bit rate register
TWSR: status register (contains preselector bits)
prescalar
0 1
1 4
2 16
3 64
f = F_CPU/(16+2*TWBR*prescalar)
F_CPU = 16MHz
TWBR = 152;
TWSR = 0;
--> 50KHz
TWBR = 72;
TWSR = 0;
--> 100KHz
TWBR = 12;
TWSR = 0;
--> 400KHz
F_CPU/(2*100000)-8 --> calculate TWBR value for 100KHz
*/
u8g_i2c_opt = options;
TWSR = 0;
if ( options & U8G_I2C_OPT_FAST )
{
TWBR = F_CPU/(2*400000)-8;
}
else
{
TWBR = F_CPU/(2*100000)-8;
}
u8g_i2c_clear_error();
}
uint8_t u8g_i2c_wait(uint8_t mask, uint8_t pos)
{
volatile uint16_t cnt = 2000; /* timout value should be > 280 for 50KHz Bus and 16 Mhz CPU, however the start condition might need longer */
while( !(TWCR & mask) )
{
if ( cnt == 0 )
{
if ( u8g_i2c_opt & U8G_I2C_OPT_NO_ACK )
{
return 1; /* all ok */
}
else
{
u8g_i2c_set_error(U8G_I2C_ERR_TIMEOUT, pos);
return 0; /* error */
}
}
cnt--;
}
return 1; /* all ok */
}
/* sla includes all 8 bits (with r/w bit), assums master transmit */
uint8_t u8g_i2c_start(uint8_t sla)
{
register uint8_t status;
/* send start */
TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);
/* wait */
if ( u8g_i2c_wait(_BV(TWINT), 1) == 0 )
return 0;
status = TW_STATUS;
/* check status after start */
if ( status != TW_START && status != TW_REP_START )
{
u8g_i2c_set_error(U8G_I2C_ERR_BUS, 1);
return 0;
}
/* set slave address */
TWDR = sla;
/* enable sla transfer */
TWCR = _BV(TWINT) | _BV(TWEN);
/* wait */
if ( u8g_i2c_wait(_BV(TWINT), 2) == 0 )
return 0;
if ( u8g_i2c_opt & U8G_I2C_OPT_NO_ACK )
{
/* do not check for ACK */
}
else
{
status = TW_STATUS;
/* check status after sla */
if ( status != TW_MT_SLA_ACK )
{
u8g_i2c_set_error(U8G_I2C_ERR_BUS, 2);
return 0;
}
}
return 1;
}
uint8_t u8g_i2c_send_byte(uint8_t data)
{
register uint8_t status;
TWDR = data;
TWCR = _BV(TWINT) | _BV(TWEN);
if ( u8g_i2c_wait(_BV(TWINT), 3) == 0 )
return 0;
if ( u8g_i2c_opt & U8G_I2C_OPT_NO_ACK )
{
/* do not check for ACK */
}
else
{
status = TW_STATUS;
if ( status != TW_MT_DATA_ACK )
{
u8g_i2c_set_error(U8G_I2C_ERR_BUS, 3);
return 0;
}
}
return 1;
}
void u8g_i2c_stop(void)
{
/* write stop */
TWCR = _BV(TWINT) | _BV(TWEN) | _BV(TWSTO);
/* no error is checked for the stop condition */
u8g_i2c_wait(_BV(TWSTO), 4);
}
/*
void twi_send(uint8_t adr, uint8_t data1, uint8_t data2)
{
u8g_i2c_start(adr<<1);
u8g_i2c_send_byte(data1);
u8g_i2c_send_byte(data2);
u8g_i2c_stop();
}
*/
#elif defined(ARDUINO) && defined(__SAM3X8E__)
/* Arduino Due */
#include "Arduino.h"
#include "sam.h"
/*
Controller
TWI0 TWCK0 PA18 A DUE PCB: SCL1
TWI0 TWD0 PA17 A DUE PCB: SDA1
TWI1 TWCK1 PB13 A DUE PCB: SCL 21
TWI1 TWD1 PB12 A DUE PCB: SDA 20
Arduino definitions
#define PIN_WIRE_SDA (20u)
#define PIN_WIRE_SCL (21u)
#define WIRE_INTERFACE TWI1
#define WIRE_INTERFACE_ID ID_TWI1
#define WIRE_ISR_HANDLER TWI1_Handler
#define PIN_WIRE1_SDA (70u)
#define PIN_WIRE1_SCL (71u)
#define WIRE1_INTERFACE TWI0
#define WIRE1_INTERFACE_ID ID_TWI0
#define WIRE1_ISR_HANDLER TWI0_Handler
*/
static void i2c_400KHz_delay(void)
{
/* should be at least 4 */
/* should be 5 for 100KHz transfer speed */
/*
Arduino Due
0x NOP: 470KHz
4x NOP: 450KHz
8x NOP: 430KHz
16x NOP: 400KHz
*/
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
__NOP();
}
static void i2c_100KHz_delay(void)
{
/*
1x u8g_MicroDelay() ca. 130KHz
2x u8g_MicroDelay() ca. 80KHz
*/
u8g_MicroDelay();
u8g_MicroDelay();
}
uint32_t i2c_started = 0;
uint32_t i2c_scl_pin = 0;
uint32_t i2c_sda_pin = 0;
void (*i2c_delay)(void) = i2c_100KHz_delay;
const PinDescription *i2c_scl_pin_desc;
const PinDescription *i2c_sda_pin_desc;
/* maybe this can be optimized */
static void i2c_init(void)
{
i2c_sda_pin_desc = &(g_APinDescription[i2c_sda_pin]);
i2c_scl_pin_desc = &(g_APinDescription[i2c_scl_pin]);
pinMode(i2c_sda_pin, OUTPUT);
digitalWrite(i2c_sda_pin, HIGH);
pinMode(i2c_scl_pin, OUTPUT);
digitalWrite(i2c_scl_pin, HIGH);
PIO_Configure( i2c_sda_pin_desc->pPort, PIO_OUTPUT_0, i2c_sda_pin_desc->ulPin, PIO_OPENDRAIN );
PIO_Configure( i2c_scl_pin_desc->pPort, PIO_OUTPUT_0, i2c_scl_pin_desc->ulPin, PIO_OPENDRAIN );
PIO_Clear( i2c_sda_pin_desc->pPort, i2c_sda_pin_desc->ulPin) ;
PIO_Clear( i2c_scl_pin_desc->pPort, i2c_scl_pin_desc->ulPin) ;
PIO_Configure( i2c_sda_pin_desc->pPort, PIO_INPUT, i2c_sda_pin_desc->ulPin, PIO_DEFAULT ) ;
PIO_Configure( i2c_scl_pin_desc->pPort, PIO_INPUT, i2c_scl_pin_desc->ulPin, PIO_DEFAULT ) ;
i2c_delay();
}
/* actually, the scl line is not observed, so this procedure does not return a value */
static void i2c_read_scl_and_delay(void)
{
uint32_t dwMask = i2c_scl_pin_desc->ulPin;
//PIO_Configure( i2c_scl_pin_desc->pPort, PIO_INPUT, i2c_scl_pin_desc->ulPin, PIO_DEFAULT ) ;
//PIO_SetInput( i2c_scl_pin_desc->pPort, i2c_scl_pin_desc->ulPin, PIO_DEFAULT ) ;
/* set as input */
i2c_scl_pin_desc->pPort->PIO_ODR = dwMask ;
i2c_scl_pin_desc->pPort->PIO_PER = dwMask ;
i2c_delay();
}
static void i2c_clear_scl(void)
{
uint32_t dwMask = i2c_scl_pin_desc->ulPin;
/* set open collector and drive low */
//PIO_Configure( i2c_scl_pin_desc->pPort, PIO_OUTPUT_0, i2c_scl_pin_desc->ulPin, PIO_OPENDRAIN );
//PIO_SetOutput( i2c_scl_pin_desc->pPort, i2c_scl_pin_desc->ulPin, 0, 1, 0);
/* open drain, zero default output */
i2c_scl_pin_desc->pPort->PIO_MDER = dwMask;
i2c_scl_pin_desc->pPort->PIO_CODR = dwMask;
i2c_scl_pin_desc->pPort->PIO_OER = dwMask;
i2c_scl_pin_desc->pPort->PIO_PER = dwMask;
//PIO_Clear( i2c_scl_pin_desc->pPort, i2c_scl_pin_desc->ulPin) ;
}
static uint8_t i2c_read_sda(void)
{
uint32_t dwMask = i2c_sda_pin_desc->ulPin;
//PIO_Configure( i2c_sda_pin_desc->pPort, PIO_INPUT, i2c_sda_pin_desc->ulPin, PIO_DEFAULT ) ;
//PIO_SetInput( i2c_sda_pin_desc->pPort, i2c_sda_pin_desc->ulPin, PIO_DEFAULT ) ;
/* set as input */
i2c_sda_pin_desc->pPort->PIO_ODR = dwMask ;
i2c_sda_pin_desc->pPort->PIO_PER = dwMask ;
return 1;
}
static void i2c_clear_sda(void)
{
uint32_t dwMask = i2c_sda_pin_desc->ulPin;
/* set open collector and drive low */
//PIO_Configure( i2c_sda_pin_desc->pPort, PIO_OUTPUT_0, i2c_sda_pin_desc->ulPin, PIO_OPENDRAIN );
//PIO_SetOutput( i2c_sda_pin_desc->pPort, i2c_sda_pin_desc->ulPin, 0, 1, 0);
/* open drain, zero default output */
i2c_sda_pin_desc->pPort->PIO_MDER = dwMask ;
i2c_sda_pin_desc->pPort->PIO_CODR = dwMask ;
i2c_sda_pin_desc->pPort->PIO_OER = dwMask ;
i2c_sda_pin_desc->pPort->PIO_PER = dwMask ;
//PIO_Clear( i2c_sda_pin_desc->pPort, i2c_sda_pin_desc->ulPin) ;
}
static void i2c_start(void)
{
if ( i2c_started != 0 )
{
/* if already started: do restart */
i2c_read_sda(); /* SDA = 1 */
i2c_delay();
i2c_read_scl_and_delay();
}
i2c_read_sda();
/*
if (i2c_read_sda() == 0)
{
// do something because arbitration is lost
}
*/
/* send the start condition, both lines go from 1 to 0 */
i2c_clear_sda();
i2c_delay();
i2c_clear_scl();
i2c_started = 1;
}
static void i2c_stop(void)
{
/* set SDA to 0 */
i2c_clear_sda();
i2c_delay();
/* now release all lines */
i2c_read_scl_and_delay();
/* set SDA to 1 */
i2c_read_sda();
i2c_delay();
i2c_started = 0;
}
static void i2c_write_bit(uint8_t val)
{
if (val)
i2c_read_sda();
else
i2c_clear_sda();
i2c_delay();
i2c_read_scl_and_delay();
i2c_clear_scl();
}
static uint8_t i2c_read_bit(void)
{
uint8_t val;
/* do not drive SDA */
i2c_read_sda();
i2c_delay();
i2c_read_scl_and_delay();
val = i2c_read_sda();
i2c_delay();
i2c_clear_scl();
return val;
}
static uint8_t i2c_write_byte(uint8_t b)
{
i2c_write_bit(b & 128);
i2c_write_bit(b & 64);
i2c_write_bit(b & 32);
i2c_write_bit(b & 16);
i2c_write_bit(b & 8);
i2c_write_bit(b & 4);
i2c_write_bit(b & 2);
i2c_write_bit(b & 1);
/* read ack from client */
/* 0: ack was given by client */
/* 1: nothing happend during ack cycle */
return i2c_read_bit();
}
void u8g_i2c_init(uint8_t options)
{
u8g_i2c_opt = options;
u8g_i2c_clear_error();
if ( u8g_i2c_opt & U8G_I2C_OPT_FAST )
{
i2c_delay = i2c_400KHz_delay;
}
else
{
i2c_delay = i2c_100KHz_delay;
}
if ( u8g_i2c_opt & U8G_I2C_OPT_DEV_1 )
{
i2c_scl_pin = PIN_WIRE1_SCL;
i2c_sda_pin = PIN_WIRE1_SDA;
//REG_PIOA_PDR = PIO_PB12A_TWD1 | PIO_PB13A_TWCK1;
}
else
{
i2c_scl_pin = PIN_WIRE_SCL;
i2c_sda_pin = PIN_WIRE_SDA;
//REG_PIOA_PDR = PIO_PA17A_TWD0 | PIO_PA18A_TWCK0;
}
i2c_init();
}
/* sla includes also the r/w bit */
uint8_t u8g_i2c_start(uint8_t sla)
{
i2c_start();
i2c_write_byte(sla);
return 1;
}
uint8_t u8g_i2c_send_byte(uint8_t data)
{
return i2c_write_byte(data);
}
void u8g_i2c_stop(void)
{
i2c_stop();
}
#elif defined(U8G_RASPBERRY_PI)
#include <wiringPi.h>
#include <wiringPiI2C.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#define I2C_SLA 0x3c
static int fd=-1;
static uint8_t i2cMode = 0;
void u8g_i2c_init(uint8_t options) {
u8g_i2c_clear_error();
u8g_i2c_opt = options;
if (wiringPiSetup() == -1) {
printf("wiringPi-Error\n");
exit(1);
}
fd = wiringPiI2CSetup(I2C_SLA);
if (fd < 0) {
printf ("Unable to open I2C device 0: %s\n", strerror (errno)) ;
exit (1) ;
}
//u8g_SetPIOutput(u8g, U8G_PI_RESET);
//u8g_SetPIOutput(u8g, U8G_PI_A0);
}
uint8_t u8g_i2c_start(uint8_t sla) {
u8g_i2c_send_mode(0);
return 1;
}
void u8g_i2c_stop(void) {
}
uint8_t u8g_i2c_send_mode(uint8_t mode) {
i2cMode = mode;
}
uint8_t u8g_i2c_send_byte(uint8_t data) {
wiringPiI2CWriteReg8(fd, i2cMode, data);
return 1;
}
uint8_t u8g_i2c_wait(uint8_t mask, uint8_t pos)
{
return 1;
}
#else
/* empty interface */
void u8g_i2c_init(uint8_t options)
{
u8g_i2c_clear_error();
}
uint8_t u8g_i2c_wait(uint8_t mask, uint8_t pos)
{
return 1;
}
uint8_t u8g_i2c_start(uint8_t sla)
{
return 1;
}
uint8_t u8g_i2c_send_byte(uint8_t data)
{
return 1;
}
void u8g_i2c_stop(void)
{
}
#endif
@@ -1,452 +0,0 @@
/*
u8g_com_io.c
abstraction layer for low level i/o
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Update for ATOMIC operation done (01 Jun 2013)
U8G_ATOMIC_OR(ptr, val)
U8G_ATOMIC_AND(ptr, val)
U8G_ATOMIC_START();
U8G_ATOMIC_END();
uint8_t u8g_Pin(uint8_t port, uint8_t bitpos) Convert to internal number: AVR: port*8+bitpos, ARM: port*16+bitpos
void u8g_SetPinOutput(uint8_t internal_pin_number)
void u8g_SetPinInput(uint8_t internal_pin_number)
void u8g_SetPinLevel(uint8_t internal_pin_number, uint8_t level)
uint8_t u8g_GetPinLevel(uint8_t internal_pin_number)
*/
#include "u8g.h"
#if defined(__AVR__)
#include <avr/interrupt.h>
#include <avr/io.h>
typedef volatile uint8_t * IO_PTR;
/* create internal pin number */
uint8_t u8g_Pin(uint8_t port, uint8_t bitpos)
{
port <<= 3;
port += bitpos;
return port;
}
#if defined(__AVR_XMEGA__)
const IO_PTR u8g_avr_ddr_P[] PROGMEM = {
#ifdef PORTA
&PORTA.DIR,
#else
0,
#endif
&PORTB.DIR,
#ifdef PORTC
&PORTC.DIR,
#ifdef PORTD
&PORTD.DIR,
#ifdef PORTE
&PORTE.DIR,
#ifdef PORTF
&PORTF.DIR,
#ifdef PORTR
&PORTR.DIR,
#endif
#endif
#endif
#endif
#endif
};
const IO_PTR u8g_avr_port_P[] PROGMEM = {
#ifdef PORTA
&PORTA.OUT,
#else
0,
#endif
&PORTB.OUT,
#ifdef PORTC
&PORTC.OUT,
#ifdef PORTD
&PORTD.OUT,
#ifdef PORTE
&PORTE.OUT,
#ifdef PORTF
&PORTF.OUT,
#ifdef PORTR
&PORTR.OUT,
#endif
#endif
#endif
#endif
#endif
};
const IO_PTR u8g_avr_pin_P[] PROGMEM = {
#ifdef PORTA
&PORTA.IN,
#else
0,
#endif
&PORTB.IN,
#ifdef PORTC
&PORTC.IN,
#ifdef PORTD
&PORTD.IN,
#ifdef PORTE
&PORTE.IN,
#ifdef PORTF
&PORTF.IN,
#ifdef PORTR
&PORTR.IN,
#endif
#endif
#endif
#endif
#endif
};
#else
const IO_PTR u8g_avr_ddr_P[] PROGMEM = {
#ifdef DDRA
&DDRA,
#else
0,
#endif
&DDRB,
#ifdef DDRC
&DDRC,
#ifdef DDRD
&DDRD,
#ifdef DDRE
&DDRE,
#ifdef DDRF
&DDRF,
#ifdef DDRG
&DDRG,
#ifdef DDRH
&DDRH,
#endif
#endif
#endif
#endif
#endif
#endif
};
const IO_PTR u8g_avr_port_P[] PROGMEM = {
#ifdef PORTA
&PORTA,
#else
0,
#endif
&PORTB,
#ifdef PORTC
&PORTC,
#ifdef PORTD
&PORTD,
#ifdef PORTE
&PORTE,
#ifdef PORTF
&PORTF,
#ifdef PORTG
&PORTG,
#ifdef PORTH
&PORTH,
#endif
#endif
#endif
#endif
#endif
#endif
};
const IO_PTR u8g_avr_pin_P[] PROGMEM = {
#ifdef PINA
&PINA,
#else
0,
#endif
&PINB,
#ifdef PINC
&PINC,
#ifdef PIND
&PIND,
#ifdef PINE
&PINE,
#ifdef PINF
&PINF,
#ifdef PING
&PING,
#ifdef PINH
&PINH,
#endif
#endif
#endif
#endif
#endif
#endif
};
#endif
static volatile uint8_t *u8g_get_avr_io_ptr(const IO_PTR *base, uint8_t offset)
{
volatile uint8_t * tmp;
base += offset;
memcpy_P(&tmp, base, sizeof(volatile uint8_t * PROGMEM));
return tmp;
}
/* set direction to output of the specified pin (internal pin number) */
void u8g_SetPinOutput(uint8_t internal_pin_number)
{
*u8g_get_avr_io_ptr(u8g_avr_ddr_P, internal_pin_number>>3) |= _BV(internal_pin_number&7);
}
void u8g_SetPinInput(uint8_t internal_pin_number)
{
*u8g_get_avr_io_ptr(u8g_avr_ddr_P, internal_pin_number>>3) &= ~_BV(internal_pin_number&7);
}
void u8g_SetPinLevel(uint8_t internal_pin_number, uint8_t level)
{
volatile uint8_t * tmp = u8g_get_avr_io_ptr(u8g_avr_port_P, internal_pin_number>>3);
if ( level == 0 )
{
U8G_ATOMIC_AND(tmp, ~_BV(internal_pin_number&7));
// *tmp &= ~_BV(internal_pin_number&7);
}
else
{
U8G_ATOMIC_OR(tmp, _BV(internal_pin_number&7));
//*tmp |= _BV(internal_pin_number&7);
}
}
uint8_t u8g_GetPinLevel(uint8_t internal_pin_number)
{
volatile uint8_t * tmp = u8g_get_avr_io_ptr(u8g_avr_pin_P, internal_pin_number>>3);
if ( ((*tmp) & _BV(internal_pin_number&7)) != 0 )
return 1;
return 0;
}
#elif defined (__MSP430__)
#include <msp430.h>
typedef volatile uint8_t * IO_PTR;
// MSP430 F5XXX / F6XXX series.
const IO_PTR u8g_msp_ddr_P[] PROGMEM = {
&P1DIR
,&P2DIR
,&P3DIR
,&P4DIR
,&P5DIR
,&P6DIR
,&P7DIR
,&P8DIR
#if defined (__MSP430_HAS_PORT9_R__)
,&P9DIR
#if defined (__MSP430_HAS_PORT10_R__)
,&P10DIR
#endif
#endif
};
const IO_PTR u8g_msp_port_P[] PROGMEM = {
&P1OUT
,&P2OUT
,&P3OUT
,&P4OUT
,&P5OUT
,&P6OUT
,&P7OUT
,&P8OUT
#if defined (__MSP430_HAS_PORT9_R__)
,&P9OUT
#if defined (__MSP430_HAS_PORT10_R__)
,&P10OUT
#endif
#endif
};
const IO_PTR u8g_msp_pin_P[] PROGMEM = {
&P1IN
,&P2IN
,&P3IN
,&P4IN
,&P5IN
,&P6IN
,&P7IN
,&P8IN
#if defined (__MSP430_HAS_PORT9_R__)
,&P9IN
#if defined (__MSP430_HAS_PORT10_R__)
,&P10IN
#endif
#endif
};
uint8_t u8g_Pin(uint8_t port, uint8_t bitpos)
{
port <<= 3;
port += bitpos;
return port;
}
void u8g_SetPinOutput(uint8_t internal_pin_number)
{
uint8_t port = (internal_pin_number >> 3)-1;
uint8_t output = 1 << (internal_pin_number & 0x07);
*u8g_msp_ddr_P[port] |= output;
}
void u8g_SetPinInput(uint8_t internal_pin_number)
{
uint8_t port = (internal_pin_number >> 3)-1;
*u8g_msp_ddr_P[port] &= ~(1 << (internal_pin_number & 0x07));
}
void u8g_SetPinLevel(uint8_t internal_pin_number, uint8_t level)
{
uint8_t port = (internal_pin_number >> 3)-1;
if (level == 0)
{
*u8g_msp_port_P[port] &= ~(1 << (internal_pin_number & 0x07));
}
else
{
*u8g_msp_port_P[port]|= (1 << (internal_pin_number & 0x07));
}
}
uint8_t u8g_GetPinLevel(uint8_t internal_pin_number)
{
uint8_t port = (internal_pin_number >> 3)-1;
uint8_t tmp = *u8g_msp_pin_P[port];
if (tmp & (1 << (internal_pin_number & 0x07)))
{
return 1;
}
return 0;
}
#elif defined(U8G_RASPBERRY_PI)
#include <wiringPi.h>
//#include "/usr/local/include/wiringPi.h"
void u8g_SetPinOutput(uint8_t internal_pin_number) {
pinMode(internal_pin_number, OUTPUT);
}
void u8g_SetPinInput(uint8_t internal_pin_number) {
pinMode(internal_pin_number, INPUT);
}
void u8g_SetPinLevel(uint8_t internal_pin_number, uint8_t level) {
digitalWrite(internal_pin_number, level);
}
uint8_t u8g_GetPinLevel(uint8_t internal_pin_number) {
return digitalRead(internal_pin_number);
}
#else
/* convert "port" and "bitpos" to internal pin number */
uint8_t u8g_Pin(uint8_t port, uint8_t bitpos)
{
port <<= 3;
port += bitpos;
return port;
}
void u8g_SetPinOutput(uint8_t internal_pin_number)
{
}
void u8g_SetPinInput(uint8_t internal_pin_number)
{
}
void u8g_SetPinLevel(uint8_t internal_pin_number, uint8_t level)
{
}
uint8_t u8g_GetPinLevel(uint8_t internal_pin_number)
{
return 0;
}
#endif
#if defined(U8G_WITH_PINLIST)
void u8g_SetPIOutput(u8g_t *u8g, uint8_t pi)
{
uint8_t pin;
pin = u8g->pin_list[pi];
if ( pin != U8G_PIN_NONE )
u8g_SetPinOutput(pin);
}
void u8g_SetPILevel(u8g_t *u8g, uint8_t pi, uint8_t level)
{
uint8_t pin;
pin = u8g->pin_list[pi];
if ( pin != U8G_PIN_NONE )
u8g_SetPinLevel(pin, level);
}
#else /* defined(U8G_WITH_PINLIST) */
void u8g_SetPIOutput(u8g_t *u8g, uint8_t pi)
{
}
void u8g_SetPILevel(u8g_t *u8g, uint8_t pi, uint8_t level)
{
}
#endif /* defined(U8G_WITH_PINLIST) */
@@ -1,168 +0,0 @@
/*
u8g_com_linux_ssd_i2c.c
com interface for linux i2c-dev and the SSDxxxx chip (SOLOMON) variant
I2C protocol
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
Copyright (c) 2015, daniel@redfelineninja.org.uk
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#if defined(U8G_LINUX)
#include <errno.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/i2c-dev.h>
#define I2C_SLA 0x3c
#define I2C_CMD_MODE 0x80
#define I2C_DATA_MODE 0x40
#define MAX_PACKET 64
#ifndef U8G_WITH_PINLIST
#error U8G_WITH_PINLIST is mandatory for this driver
#endif
static void set_cmd_mode(u8g_t *u8g, bool cmd_mode)
{
u8g->pin_list[U8G_PI_A0_STATE] = cmd_mode;
}
static bool get_cmd_mode(u8g_t *u8g)
{
return u8g->pin_list[U8G_PI_A0_STATE];
}
static uint8_t send_data_burst(u8g_t *u8g, int fd, uint8_t *buf, size_t buflen)
{
uint8_t i2cbuf[2*MAX_PACKET];
uint8_t i2clen;
int res;
/* ignore bursts when there is no file open */
if (fd < 0)
return 0;
if (get_cmd_mode(u8g)) {
i2clen = 0;
while (buflen > 0) {
i2cbuf[i2clen++] = I2C_CMD_MODE;
i2cbuf[i2clen++] = *buf++;
buflen--;
}
} else {
i2cbuf[0] = I2C_DATA_MODE;
memcpy(i2cbuf+1, buf, buflen);
i2clen = buflen + 1;
}
res = write(fd, i2cbuf, i2clen);
if (res < 0)
fprintf(stderr, "I2C write failed (%s)\n", strerror(errno));
else if (res != i2clen)
fprintf(stderr, "Incomplete I2C write (%d of %d packet)\n", res, i2clen);
return res == i2clen;
}
uint8_t u8g_com_linux_ssd_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
static int fd = -1;
char dev[24];
switch(msg)
{
case U8G_COM_MSG_INIT:
sprintf(dev, "/dev/i2c-%d", u8g->pin_list[U8G_PI_I2C_OPTION]);
fd = open(dev, O_RDWR);
if (fd < 0) {
fprintf(stderr, "cannot open %s (%s)\n", dev, strerror(errno));
return 0;
}
if (ioctl(fd, I2C_SLAVE, I2C_SLA) < 0) {
fprintf(stderr, "cannot set slave address (%s)\n", strerror(errno));
return 0;
}
break;
case U8G_COM_MSG_STOP:
/* ignored - i2c-dev will automatically stop between writes */
break;
case U8G_COM_MSG_RESET:
/* ignored - no obvious means to reset an SSD via I2C */
break;
case U8G_COM_MSG_CHIP_SELECT:
set_cmd_mode(u8g, true);
break;
case U8G_COM_MSG_WRITE_BYTE:
send_data_burst(u8g, fd, &arg_val, 1);
break;
case U8G_COM_MSG_WRITE_SEQ:
case U8G_COM_MSG_WRITE_SEQ_P: /* no progmem in Linux */
while (arg_val > MAX_PACKET) {
send_data_burst(u8g, fd, arg_ptr, MAX_PACKET);
arg_ptr += MAX_PACKET;
arg_val -= MAX_PACKET;
}
send_data_burst(u8g, fd, arg_ptr, arg_val);
break;
case U8G_COM_MSG_ADDRESS:
/* choose cmd (arg_val = 0) or data mode (arg_val = 1) */
set_cmd_mode(u8g, !arg_val);
break;
}
return 1;
}
#endif /* U8G_LINUX */
@@ -1,221 +0,0 @@
/*
u8g_com_msp430_hw_spi.c
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#if defined(__MSP430__)
#define U8G_MSP430_HW_SPI
#endif
#if defined(U8G_MSP430_HW_SPI)
#include <msp430.h>
#ifndef F_CPU
#error "Please specifiy actual master clock using F_CPU in HZ"
#endif
#ifndef F_SPI
#define F_SPI 1000000UL
#endif
#define U8G_USE_USCIA0 1
#define U8G_USE_USCIB0 2
#define U8G_USE_USCIA1 3
#define U8G_USE_USCIB1 4
#define U8G_USE_USCIA2 5
#define U8G_USE_USCIB2 6
#define U8G_USE_USCIA3 7
#define U8G_USE_USCIB3 8
#ifndef U8G_USE_USCI
#define U8G_USE_USCI U8G_USE_USCIB0
#endif
#if U8G_USE_USCI == 1
#define UCIFG UCA0IFG
#define UCTXBUF UCA0TXBUF
#define UCSTAT UCA0STAT
#define UCCTL0 UCA0CTL0
#define UCCTL1 UCA0CTL1
#define UCBR0 UCA0BR0
#define UCBR1 UCA0BR1
#elif U8G_USE_USCI == 2
#define UCIFG UCB0IFG
#define UCTXBUF UCB0TXBUF
#define UCSTAT UCB0STAT
#define UCCTL0 UCB0CTL0
#define UCCTL1 UCB0CTL1
#define UCBR0 UCB0BR0
#define UCBR1 UCB0BR1
#elif U8G_USE_USCI == 3
#define UCIFG UCA1IFG
#define UCTXBUF UCA1TXBUF
#define UCSTAT UCA1STAT
#define UCCTL0 UCA1CTL0
#define UCCTL1 UCA1CTL1
#define UCBR0 UCA1BR0
#define UCBR1 UCA1BR1
#elif U8G_USE_USCI == 4
#define UCIFG UCB1IFG
#define UCTXBUF UCB1TXBUF
#define UCSTAT UCB1STAT
#define UCCTL0 UCB1CTL0
#define UCCTL1 UCB1CTL1
#define UCBR0 UCB1BR0
#define UCBR1 UCB1BR1
#elif U8G_USE_USCI == 5
#define UCIFG UCA2IFG
#define UCTXBUF UCA2TXBUF
#define UCSTAT UCA2STAT
#define UCCTL0 UCA2CTL0
#define UCCTL1 UCA2CTL1
#define UCBR0 UCA2BR0
#define UCBR1 UCA2BR1
#elif U8G_USE_USCI == 6
#define UCIFG UCB2IFG
#define UCTXBUF UCB2TXBUF
#define UCSTAT UCB2STAT
#define UCCTL0 UCB2CTL0
#define UCCTL1 UCB2CTL1
#define UCBR0 UCB2BR0
#define UCBR1 UCB2BR1
#elif U8G_USE_USCI == 7
#define UCIFG UCA3IFG
#define UCTXBUF UCA3TXBUF
#define UCSTAT UCA3STAT
#define UCCTL0 UCA3CTL0
#define UCCTL1 UCA3CTL1
#define UCBR0 UCA3BR0
#define UCBR1 UCA3BR1
#elif U8G_USE_USCI == 8
#define UCIFG UCB3IFG
#define UCTXBUF UCB3TXBUF
#define UCSTAT UCB3STAT
#define UCCTL0 UCB3CTL0
#define UCCTL1 UCB3CTL1
#define UCBR0 UCB3BR0
#define UCBR1 UCB3BR1
#endif
inline void u8g_msp430_spi_out(uint8_t data)
{
while (!(UCIFG&UCTXIFG));
UCTXBUF = data;
}
uint8_t u8g_com_msp430_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_INIT:
/*
* on MSP430 you need to set PSEL alternative function which
* may not be required on other MCU's - should be handled
* by a low level u8g_SetPinAlternate(pin_number)...
*/
UCCTL1 |= UCSWRST; // **Put state machine in reset**
UCCTL0 |= UCMST|UCSYNC|UCCKPL|UCMSB; // 3-pin, 8-bit SPI master Clock polarity high, MSB
UCCTL1 |= UCSSEL_2; // SMCLK
UCBR0 = (unsigned char)(F_CPU/F_SPI); //
UCBR1 = 0; //
UCCTL1 &= ~UCSWRST; // **Initialize USCI state machine**
u8g_SetPILevel(u8g, U8G_PI_CS, 1);
u8g_SetPILevel(u8g, U8G_PI_A0, 1);
u8g_SetPILevel(u8g, U8G_PI_RESET, 1);
u8g_SetPIOutput(u8g, U8G_PI_CS);
u8g_SetPIOutput(u8g, U8G_PI_A0);
u8g_SetPIOutput(u8g, U8G_PI_RESET);
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g_SetPILevel(u8g, U8G_PI_A0, arg_val);
break;
case U8G_COM_MSG_CHIP_SELECT:
u8g_SetPILevel(u8g, U8G_PI_CS, (arg_val ? 0 : 1));
break;
case U8G_COM_MSG_RESET:
u8g_SetPILevel(u8g, U8G_PI_RESET, arg_val);
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_msp430_spi_out(arg_val);
while ((UCSTAT&UCBUSY));
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_msp430_spi_out(*ptr++);
arg_val--;
}
while ((UCSTAT&UCBUSY));
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_msp430_spi_out(u8g_pgm_read(ptr));
ptr++;
arg_val--;
}
while ((UCSTAT&UCBUSY));
}
break;
}
return 1;
}
#else
uint8_t u8g_com_msp430_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif
@@ -1,63 +0,0 @@
/*
u8g_com_null.c
communication null device
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
uint8_t u8g_com_null_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_CHIP_SELECT:
/* arg_val contains the chip number, which should be enabled */
break;
case U8G_COM_MSG_WRITE_BYTE:
break;
case U8G_COM_MSG_WRITE_SEQ:
break;
}
return 1;
}
@@ -1,107 +0,0 @@
/*
u8g_com_psoc5_ssd_hw_parallel.c
com interface for Cypress PSoC5 and the SSDxxxx chip variant
I2C protocol
Universal 8bit Graphics Library
Copyright (c) 2015, olikraus@gmail.com, schmidt.ronny@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#if defined(U8G_CYPRESS_PSOC5)
#include <project.h>
static uint8 dc = 0; // need to store whether next write is data or command
uint8_t u8g_com_psoc5_ssd_hw_parallel_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_STOP:
// stop the device
GraphicLCDIntf_Stop();
break;
case U8G_COM_MSG_INIT:
// init hardware interfaces, timers, gpios, ...
GraphicLCDIntf_Init();
break;
case U8G_COM_MSG_ADDRESS:
// switch from cmd (arg_val = 0) to data mode (arg_val = 1) or vice versa
dc = arg_val;
break;
case U8G_COM_MSG_CHIP_SELECT:
/* done by the hardware */
break;
case U8G_COM_MSG_RESET:
// toggle the reset pin of the display by value in arg_val
nRES_Write(0);
u8g_10MicroDelay();
nRES_Write(1);
break;
case U8G_COM_MSG_WRITE_BYTE:
// write byte to the device
GraphicLCDIntf_Write8(dc, arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ:
case U8G_COM_MSG_WRITE_SEQ_P:
{
// write a sequence of bytes to the device
register uint8_t *ptr = arg_ptr;
while (arg_val-- > 0)
{
GraphicLCDIntf_Write8(dc, *ptr++);
}
}
break;
}
return 1;
}
#else
uint8_t u8g_com_psoc5_ssd_hw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif
@@ -1,140 +0,0 @@
/*
u8g_com_std_sw_spi.c
Universal 8bit Graphics Library
Copyright (c) 2015, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#if defined(U8G_WITH_PINLIST)
static void u8g_sw_spi_shift_out(uint8_t dataPin, uint8_t clockPin, uint8_t val)
{
uint8_t i = 8;
do
{
if ( val & 128 )
u8g_SetPinLevel(dataPin, 1);
else
u8g_SetPinLevel(dataPin, 0);
val <<= 1;
u8g_MicroDelay(); /* 23 Sep 2012 */
//delay(1);
u8g_SetPinLevel(clockPin, 1);
u8g_MicroDelay(); /* 23 Sep 2012 */
//delay(1);
u8g_SetPinLevel(clockPin, 0);
u8g_MicroDelay(); /* 23 Sep 2012 */
//delay(1);
i--;
} while( i != 0 );
}
uint8_t u8g_com_std_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_INIT:
u8g_SetPIOutput(u8g, U8G_PI_SCK);
u8g_SetPIOutput(u8g, U8G_PI_MOSI);
u8g_SetPIOutput(u8g, U8G_PI_RESET);
u8g_SetPIOutput(u8g, U8G_PI_CS);
u8g_SetPIOutput(u8g, U8G_PI_A0);
u8g_SetPILevel(u8g, U8G_PI_SCK, 0);
u8g_SetPILevel(u8g, U8G_PI_MOSI, 0);
break;
case U8G_COM_MSG_STOP:
break;
case U8G_COM_MSG_RESET:
u8g_SetPILevel(u8g, U8G_PI_RESET, arg_val);
break;
case U8G_COM_MSG_CHIP_SELECT:
if ( arg_val == 0 )
{
/* disable */
u8g_SetPILevel(u8g, U8G_PI_CS, 1);
}
else
{
/* enable */
u8g_SetPILevel(u8g, U8G_PI_SCK, 0);
u8g_SetPILevel(u8g, U8G_PI_CS, 0);
}
break;
case U8G_COM_MSG_WRITE_BYTE:
u8g_sw_spi_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK], arg_val);
break;
case U8G_COM_MSG_WRITE_SEQ:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_sw_spi_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK], *ptr++);
arg_val--;
}
}
break;
case U8G_COM_MSG_WRITE_SEQ_P:
{
register uint8_t *ptr = arg_ptr;
while( arg_val > 0 )
{
u8g_sw_spi_shift_out(u8g->pin_list[U8G_PI_MOSI], u8g->pin_list[U8G_PI_SCK], u8g_pgm_read(ptr));
ptr++;
arg_val--;
}
}
break;
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
u8g_SetPILevel(u8g, U8G_PI_A0, arg_val);
break;
}
return 1;
}
#else
uint8_t u8g_com_std_sw_spi_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
return 1;
}
#endif
@@ -1,99 +0,0 @@
/*
u8g_cursor.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
void u8g_SetCursorFont(u8g_t *u8g, const u8g_pgm_uint8_t *cursor_font)
{
u8g->cursor_font = cursor_font;
}
void u8g_SetCursorStyle(u8g_t *u8g, uint8_t encoding)
{
u8g->cursor_encoding = encoding;
}
void u8g_SetCursorColor(u8g_t *u8g, uint8_t fg, uint8_t bg)
{
u8g->cursor_bg_color = bg;
u8g->cursor_fg_color = fg;
}
void u8g_SetCursorPos(u8g_t *u8g, u8g_uint_t cursor_x, u8g_uint_t cursor_y)
{
u8g->cursor_x = cursor_x;
u8g->cursor_y = cursor_y;
}
void u8g_EnableCursor(u8g_t *u8g)
{
u8g->cursor_fn = u8g_DrawCursor;
}
void u8g_DisableCursor(u8g_t *u8g)
{
u8g->cursor_fn = (u8g_draw_cursor_fn)0;
}
void u8g_DrawCursor(u8g_t *u8g)
{
const u8g_pgm_uint8_t *font;
uint8_t color;
uint8_t encoding = u8g->cursor_encoding;
/* get current values */
color = u8g_GetColorIndex(u8g);
font = u8g->font;
/* draw cursor */
u8g->font = u8g->cursor_font;
encoding++;
u8g_SetColorIndex(u8g, u8g->cursor_bg_color);
/* 27. Jan 2013: replaced call to u8g_DrawGlyph with call to u8g_draw_glyph */
/* required, because y adjustment should not happen to the cursor fonts */
u8g_draw_glyph(u8g, u8g->cursor_x, u8g->cursor_y, encoding);
encoding--;
u8g_SetColorIndex(u8g, u8g->cursor_fg_color);
/* 27. Jan 2013: replaced call to u8g_DrawGlyph with call to u8g_draw_glyph */
/* required, because y adjustment should not happen to the cursor fonts */
/* u8g_DrawGlyph(u8g, u8g->cursor_x, u8g->cursor_y, encoding); */
u8g_draw_glyph(u8g, u8g->cursor_x, u8g->cursor_y, encoding);
/* restore previous values */
u8g->font = font;
u8g_SetColorIndex(u8g, color);
}
-323
View File
@@ -1,323 +0,0 @@
/*
u8g_delay.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
void u8g_Delay(uint16_t val) Delay by "val" milliseconds
void u8g_MicroDelay(void) Delay be one microsecond
void u8g_10MicroDelay(void) Delay by 10 microseconds
*/
#include "u8g.h"
/*==== Part 1: Derive suitable delay procedure ====*/
#if defined(ARDUINO)
# if ARDUINO < 100
# include <WProgram.h>
# else
# include <Arduino.h>
# endif
/* issue 353 */
#if defined(ARDUINO_ARCH_SAMD)
# include <delay.h>
#endif
# if defined(__AVR__)
# define USE_AVR_DELAY
# elif defined(__PIC32MX)
# define USE_PIC32_DELAY
# elif defined(__arm__) /* Arduino Due & Teensy */
# define USE_ARDUINO_DELAY
# else
# define USE_ARDUINO_DELAY
# endif
#elif defined(_GNU_SOURCE)
# define USE_LINUX_DELAY
#elif defined(__MSP430__)
# define USE_MSP430_DELAY
#elif defined(U8G_RASPBERRY_PI)
# define USE_RASPBERRYPI_DELAY
#elif defined(__AVR__)
# define USE_AVR_DELAY
#elif defined(__18CXX)
# define USE_PIC18_DELAY
#elif defined(U8G_CYPRESS_PSOC5)
#define USE_PSOC5_DELAY
#elif defined(__arm__)
/* do not define anything, all procedures are expected to be defined outside u8glib */
/*
void u8g_Delay(uint16_t val);
void u8g_MicroDelay(void);
void u8g_10MicroDelay(void);
*/
#else
# define USE_DUMMY_DELAY
#endif
/*==== Part 2: Definition of the delay procedures ====*/
/*== Raspberry Pi Delay ==*/
#if defined (USE_RASPBERRYPI_DELAY)
#include <wiringPi.h>
//#include "/usr/local/include/wiringPi.h"
void u8g_Delay(uint16_t val) {
//delay(val);
//usleep((uint32_t)val*(uint32_t)1000);
delayMicroseconds((uint32_t)val*(uint32_t)1000);
}
void u8g_MicroDelay(void)
{
usleep(1);
}
void u8g_10MicroDelay(void)
{
usleep(10);
}
#endif
#if defined(USE_LINUX_DELAY)
void u8g_Delay(uint16_t val) {
//delay(val);
usleep((uint32_t)val*(uint32_t)1000);
}
void u8g_MicroDelay(void)
{
usleep(1);
}
void u8g_10MicroDelay(void)
{
usleep(10);
}
#endif
/*== AVR Delay ==*/
#if defined(USE_AVR_DELAY)
#include <avr/interrupt.h>
#include <avr/io.h>
#include <util/delay.h>
/*
Delay by the provided number of milliseconds.
Thus, a 16 bit value will allow a delay of 0..65 seconds
Makes use of the _delay_loop_2
_delay_loop_2 will do a delay of n * 4 prozessor cycles.
with f = F_CPU cycles per second,
n = f / (1000 * 4 )
with f = 16000000 the result is 4000
with f = 1000000 the result is 250
the millisec loop, gcc requires the following overhead:
- movev 1
- subwi 2x2
- bne i 2
==> 7 cycles
==> must be devided by 4, rounded up 7/4 = 2
*/
void u8g_Delay(uint16_t val)
{
/* old version did a call to the arduino lib: delay(val); */
while( val != 0 )
{
_delay_loop_2( (F_CPU / 4000 ) -2);
val--;
}
}
/* delay by one micro second */
void u8g_MicroDelay(void)
{
#if (F_CPU / 4000000 ) > 0
_delay_loop_2( (F_CPU / 4000000 ) );
#endif
}
/* delay by 10 micro seconds */
void u8g_10MicroDelay(void)
{
#if (F_CPU / 400000 ) > 0
_delay_loop_2( (F_CPU / 400000 ) );
#endif
}
#endif
/*== Delay for PIC18 (not tested) ==*/
#if defined(USE_PIC18_DELAY)
#include <delays.h>
#define GetSystemClock() (64000000ul) // Hz
#define GetInstructionClock() (GetSystemClock()/4)
void u8g_Delay(uint16_t val)
{/*
unsigned int _iTemp = (val);
while(_iTemp--)
Delay1KTCYx((GetInstructionClock()+999999)/1000000);
*/
}
void u8g_MicroDelay(void)
{
/* not implemented */
}
void u8g_10MicroDelay(void)
{
/* not implemented */
}
#endif
/*== Arduino Delay ==*/
#if defined(USE_ARDUINO_DELAY)
void u8g_Delay(uint16_t val)
{
#if defined(__arm__)
delayMicroseconds((uint32_t)val*(uint32_t)1000);
#else
delay(val);
#endif
}
void u8g_MicroDelay(void)
{
delayMicroseconds(1);
}
void u8g_10MicroDelay(void)
{
delayMicroseconds(10);
}
#endif
#if defined(USE_PIC32_DELAY)
/*
Assume chipkit here with F_CPU correctly defined
The problem was, that u8g_Delay() is called within the constructor.
It seems that the chipkit is not fully setup at this time, so a
call to delay() will not work. So here is my own implementation.
*/
#define CPU_COUNTS_PER_SECOND (F_CPU/2UL)
#define TICKS_PER_MILLISECOND (CPU_COUNTS_PER_SECOND/1000UL)
#include "plib.h"
void u8g_Delay(uint16_t val)
{
uint32_t d;
uint32_t s;
d = val;
d *= TICKS_PER_MILLISECOND;
s = ReadCoreTimer();
while ( (uint32_t)(ReadCoreTimer() - s) < d )
;
}
void u8g_MicroDelay(void)
{
uint32_t d;
uint32_t s;
d = TICKS_PER_MILLISECOND/1000;
s = ReadCoreTimer();
while ( (uint32_t)(ReadCoreTimer() - s) < d )
;
}
void u8g_10MicroDelay(void)
{
uint32_t d;
uint32_t s;
d = TICKS_PER_MILLISECOND/100;
s = ReadCoreTimer();
while ( (uint32_t)(ReadCoreTimer() - s) < d )
;
}
#endif
#if defined(USE_MSP430_DELAY)
#include <msp430.h>
#ifndef F_CPU
#define F_CPU 1000000UL
#endif
void u8g_Delay(uint16_t val)
{
int t;
for (t=0; t < val; t++)
{
__delay_cycles(F_CPU/1000UL);
}
}
void u8g_MicroDelay(void)
{
__delay_cycles(F_CPU/1000000UL);
}
void u8g_10MicroDelay(void)
{
__delay_cycles(F_CPU/100000UL);
}
#endif
#if defined USE_PSOC5_DELAY
#include <project.h>
void u8g_Delay(uint16_t val) {CyDelay(val);};
void u8g_MicroDelay(void) {CyDelay(1);};
void u8g_10MicroDelay(void) {CyDelay(10);};
#endif
/*== Any other systems: Dummy Delay ==*/
#if defined(USE_DUMMY_DELAY)
void u8g_Delay(uint16_t val)
{
/* do not know how to delay... */
}
void u8g_MicroDelay(void)
{
}
void u8g_10MicroDelay(void)
{
}
#endif
@@ -1,92 +0,0 @@
/*
u8g_dev_flipdisc.c
1-Bit (BW) Driver for flip disc matrix
2x 7 pixel height
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 28
#define HEIGHT 14
#define PAGE_HEIGHT 14
/*
Write data to the flip disc matrix.
This procedure must be implemented by the user.
Arguments:
id: Id for the matrix. Currently always 0.
page: A page has a height of 14 pixel. For a matrix with HEIGHT == 14 this will be always 0
width: The width of the flip disc matrix. Always equal to WIDTH
row1: first data line (7 pixel per byte)
row2: first data line (7 pixel per byte)
*/
void writeFlipDiscMatrix(uint8_t id, uint8_t page, uint8_t width, uint8_t *row1, uint8_t *row2);
void (*u8g_write_flip_disc_matrix)(uint8_t id, uint8_t page, uint8_t width, uint8_t *row1, uint8_t *row2);
void u8g_SetFlipDiscCallback(u8g_t *u8g, void (*cb)(uint8_t id, uint8_t page, uint8_t width, uint8_t *row1, uint8_t *row2))
{
u8g_write_flip_disc_matrix = cb;
}
uint8_t u8g_dev_flipdisc_2x7_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
/* current page: pb->p.page */
/* ptr to the buffer: pb->buf */
(*u8g_write_flip_disc_matrix)(0, pb->p.page, WIDTH, pb->buf, (uint8_t *)(pb->buf)+WIDTH);
}
break;
case U8G_DEV_MSG_CONTRAST:
return 1;
}
return u8g_dev_pb14v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_flipdisc_2x7_bw_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_flipdisc_2x7_bw_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_flipdisc_2x7_bw_buf};
u8g_dev_t u8g_dev_flipdisc_2x7 = { u8g_dev_flipdisc_2x7_bw_fn, &u8g_dev_flipdisc_2x7_bw_pb, u8g_com_null_fn };
@@ -1,130 +0,0 @@
/*
u8g_dev_gprof.c
Device for performance measurement with gprof.
Does not write any data, but uses a buffer.
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 64
#define PAGE_HEIGHT 8
uint8_t u8g_dev_gprof_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg);
uint8_t u8g_pb_dev_gprof_buf[WIDTH];
u8g_pb_t u8g_pb_dev_gprof = { {PAGE_HEIGHT, HEIGHT, 0, 0, 0}, WIDTH, u8g_pb_dev_gprof_buf };
u8g_dev_t u8g_dev_gprof = { u8g_dev_gprof_fn, &u8g_pb_dev_gprof, NULL };
uint8_t u8g_dev_gprof_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
switch(msg)
{
case U8G_DEV_MSG_INIT:
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_FIRST:
u8g_pb_Clear(pb);
u8g_page_First(&(pb->p));
break;
case U8G_DEV_MSG_PAGE_NEXT:
/*
{
uint8_t i, j;
uint8_t page_height;
page_height = pb->p.page_y1;
page_height -= pb->p.page_y0;
page_height++;
for( j = 0; j < page_height; j++ )
{
printf("%02d ", j);
for( i = 0; i < WIDTH; i++ )
{
if ( (u8g_pb_dev_stdout_buf[i] & (1<<j)) != 0 )
printf("#");
else
printf(".");
}
printf("\n");
}
}
*/
if ( u8g_page_Next(&(pb->p)) == 0 )
{
//printf("\n");
return 0;
}
u8g_pb_Clear(pb);
break;
#ifdef U8G_DEV_MSG_IS_BBX_INTERSECTION
case U8G_DEV_MSG_IS_BBX_INTERSECTION:
{
u8g_dev_arg_bbx_t *bbx = (u8g_dev_arg_bbx_t *)arg;
u8g_uint_t x2, y2;
y2 = bbx->y;
y2 += bbx->h;
y2--;
if ( u8g_pb_IsYIntersection(pb, bbx->y, y2) == 0 )
return 0;
/* maybe this one can be skiped... probability is very high to have an intersection, so it would be ok to always return 1 */
x2 = bbx->x;
x2 += bbx->w;
x2--;
if ( u8g_pb_IsXIntersection(pb, bbx->x, x2) == 0 )
return 0;
}
return 1;
#endif
case U8G_DEV_MSG_GET_PAGE_BOX:
u8g_pb_GetPageBox(pb, (u8g_box_t *)arg);
break;
case U8G_DEV_MSG_SET_COLOR_ENTRY:
break;
case U8G_DEV_MSG_SET_XY_CB:
break;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
@@ -1,326 +0,0 @@
/*
u8g_dev_ili9325d_320x240.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Color format
Red: 5 Bit
Green: 6 Bit
Blue: 5 Bit
*/
#include "u8g.h"
#define WIDTH 240
#if defined(U8G_16BIT)
#define HEIGHT 320
#else
/* if the user tries to compile the 8Bit version of the lib, then restrict the height to something which fits to 8Bit */
#define HEIGHT 240
#endif
#define PAGE_HEIGHT 4
/*
reference board for this device:
http://iteadstudio.com/store/index.php?main_page=product_info&cPath=57_58&products_id=55
documentation:
http://iteadstudio.com/Downloadfile/ITDB02_material.rar
datasheet
http://www.newhavendisplay.com/app_notes/ILI9325D.pdf
other libs
http://henningkarlsen.com/electronics/library.php
init sequence
http://code.google.com/p/itdb02/, ITDB02.cpp, iteadstudio.com
*/
static const uint8_t u8g_dev_ili9325d_320x240_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_DLY(50), /* delay 50 ms */
//U8G_ESC_ADR(0), 0x000, 0x0E5, /* only used for none D version: set SRAM internal timing */
//U8G_ESC_ADR(1), 0x078, 0x0f0,
U8G_ESC_ADR(0), 0x000, 0x001, /* Driver Output Control, bits 8 & 10 */
U8G_ESC_ADR(1), 0x001, 0x000,
U8G_ESC_ADR(0), 0x000, 0x002, /* LCD Driving Wave Control, bit 9: Set line inversion */
U8G_ESC_ADR(1), 0x002, 0x000, /* ITDB02 none D verion: 0x007, 0x000 */
U8G_ESC_ADR(0), 0x000, 0x003, /* Entry Mode, GRAM write direction and BGR=1 */
U8G_ESC_ADR(1), 0x010, 0x030,
U8G_ESC_ADR(0), 0x000, 0x004, /* Resize register */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x008, /* Display Control 2: set the back porch and front porch */
U8G_ESC_ADR(1), 0x002, 0x007,
U8G_ESC_ADR(0), 0x000, 0x009, /* Display Control 3 */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x00a, /* Display Control 4: FMARK */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x00c, /* RGB Display Interface Control 1 */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x00d, /* Frame Maker Position */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x00f, /* RGB Display Interface Control 2 */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x010, /* Power Control 1: SAP, BT[3:0], AP, DSTB, SLP, STB */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x011, /* Power Control 2: DC1[2:0], DC0[2:0], VC[2:0] */
U8G_ESC_ADR(1), 0x000, 0x007,
U8G_ESC_ADR(0), 0x000, 0x012, /* Power Control 3: VREG1OUT voltage */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x013, /* Power Control 4: VDV[4:0] for VCOM amplitude */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x007, /* Display Control 1: Operate, but do not display */
U8G_ESC_ADR(1), 0x000, 0x001,
U8G_ESC_DLY(100), /* delay 100 ms */ /* ITDB02 none D verion: 50ms */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_ADR(0), 0x000, 0x010, /* Power Control 1: SAP, BT[3:0], AP, DSTB, SLP, STB */
U8G_ESC_ADR(1), 0x016, 0x090, /* ITDB02 none D verion: 0x010, 0x090 */
U8G_ESC_ADR(0), 0x000, 0x011, /* Power Control 2: SAP, BT[3:0], AP, DSTB, SLP, STB */
U8G_ESC_ADR(1), 0x002, 0x027,
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_ADR(0), 0x000, 0x012, /* Power Control 3: VCI: External, VCI*1.80 */
U8G_ESC_ADR(1), 0x000, 0x00d, /* ITDB02 none D verion: 0x000, 0x01f */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_ADR(0), 0x000, 0x013, /* Power Control 4: VDV[4:0] for VCOM amplitude */
U8G_ESC_ADR(1), 0x012, 0x000, /* ITDB02 none D verion: 0x015, 0x000 */
U8G_ESC_ADR(0), 0x000, 0x029, /* Power Control 7 */
U8G_ESC_ADR(1), 0x000, 0x00a, /* ITDB02 none D verion: 0x000, 0x027 */
U8G_ESC_ADR(0), 0x000, 0x02b, /* Frame Rate: 83 */
U8G_ESC_ADR(1), 0x000, 0x00d,
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_ADR(0), 0x000, 0x020, /* Horizontal GRAM Address Set */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x021, /* Vertical GRAM Address Set */
U8G_ESC_ADR(1), 0x000, 0x000,
/* gamma control */
U8G_ESC_ADR(0), 0x000, 0x030,
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x031,
U8G_ESC_ADR(1), 0x004, 0x004,
U8G_ESC_ADR(0), 0x000, 0x032,
U8G_ESC_ADR(1), 0x000, 0x003,
U8G_ESC_ADR(0), 0x000, 0x035,
U8G_ESC_ADR(1), 0x004, 0x005,
U8G_ESC_ADR(0), 0x000, 0x036,
U8G_ESC_ADR(1), 0x008, 0x008,
U8G_ESC_ADR(0), 0x000, 0x037,
U8G_ESC_ADR(1), 0x004, 0x007,
U8G_ESC_ADR(0), 0x000, 0x038,
U8G_ESC_ADR(1), 0x003, 0x003,
U8G_ESC_ADR(0), 0x000, 0x039,
U8G_ESC_ADR(1), 0x007, 0x007,
U8G_ESC_ADR(0), 0x000, 0x03c,
U8G_ESC_ADR(1), 0x005, 0x004,
U8G_ESC_ADR(0), 0x000, 0x03d,
U8G_ESC_ADR(1), 0x008, 0x008,
U8G_ESC_ADR(0), 0x000, 0x050, /* Horizontal GRAM Start Address */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x051, /* Horizontal GRAM End Address: 239 */
U8G_ESC_ADR(1), 0x000, 0x0EF,
U8G_ESC_ADR(0), 0x000, 0x052, /* Vertical GRAM Start Address */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x053, /* Vertical GRAM End Address: 319 */
U8G_ESC_ADR(1), 0x001, 0x03F,
U8G_ESC_ADR(0), 0x000, 0x060, /* Driver Output Control 2 */
U8G_ESC_ADR(1), 0x0a7, 0x000,
U8G_ESC_ADR(0), 0x000, 0x061, /* Base Image Display Control: NDL,VLE, REV */
U8G_ESC_ADR(1), 0x000, 0x001,
U8G_ESC_ADR(0), 0x000, 0x06a, /* Vertical Scroll Control */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x080, /* Partial Image 1 Display Position */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x081, /* Partial Image 1 RAM Start Address */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x082, /* Partial Image 1 RAM End Address */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x083, /* Partial Image 2 Display Position */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x084, /* Partial Image 2 RAM Start Address */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x085, /* Partial Image 2 RAM End Address */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x090, /* Panel Interface Control 1 */
U8G_ESC_ADR(1), 0x000, 0x010,
U8G_ESC_ADR(0), 0x000, 0x092, /* Panel Interface Control 2 */
U8G_ESC_ADR(1), 0x000, 0x000, /* 0x006, 0x000 */
U8G_ESC_ADR(0), 0x000, 0x007, /* Display Control 1: Operate, display ON */
U8G_ESC_ADR(1), 0x001, 0x033,
U8G_ESC_DLY(10), /* delay 10 ms */
/* write test pattern */
U8G_ESC_ADR(0), 0x000, 0x020, /* Horizontal GRAM Address Set */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x021, /* Vertical GRAM Address Set */
U8G_ESC_ADR(1), 0x000, 0x010,
U8G_ESC_ADR(0), 0x000, 0x022, /* Write Data to GRAM */
U8G_ESC_ADR(1), 0x0fe, 0x0fe,
0x000, 0x000,
0x0fe, 0x0fe,
0x000, 0x000,
0x0fe, 0x0fe,
0x000, 0x000,
0x0fe, 0x0fe,
0x000, 0x000,
0x0fe, 0x0fe,
0x000, 0x000,
0x0fe, 0x0fe,
0x000, 0x000,
0x0fe, 0x0fe,
0x000, 0x000,
0x0fe, 0x0fe,
0x000, 0x000,
0x0fe, 0x0fe,
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ili9325d_320x240_page_seq[] PROGMEM = {
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_ADR(0), 0x000, 0x020, /* Horizontal GRAM Address Set */
U8G_ESC_ADR(1), 0x000, 0x000,
U8G_ESC_ADR(0), 0x000, 0x021, /* Vertical GRAM Address Set */
U8G_ESC_ADR(1),
U8G_ESC_END /* end of sequence */
};
/* convert the internal RGB 332 to 65K high byte */
static uint8_t u8g_dev_ili9325d_get_65K_high_byte(uint8_t color)
{
uint8_t h;
h = color;
h &= 0x0e0;
h |= h>>3;
h &= 0x0f8;
color>>=2;
color &= 7;
h |= color;
return h;
}
/* convert the internal RGB 332 to 65K high byte */
static uint8_t u8g_dev_ili9325d_get_65K_low_byte(uint8_t color)
{
uint8_t l;
l = color;
l <<= 3;
color &= 3;
color <<= 1;
l |= color;
return l;
}
uint8_t u8g_dev_ili9325d_320x240_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_50NS);
//for(;;)
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ili9325d_320x240_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t i;
uint16_t y, j;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
y = pb->p.page_y0;
ptr = pb->buf;
for( i = 0; i < pb->p.page_height; i ++ )
{
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ili9325d_320x240_page_seq);
u8g_WriteByte(u8g, dev, y >> 8 ); /* display ram (cursor) address high byte */
u8g_WriteByte(u8g, dev, y & 255 ); /* display ram (cursor) address low byte */
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_WriteByte(u8g, dev, 0 );
u8g_WriteByte(u8g, dev, 0x022 ); /* start gram data */
u8g_SetAddress(u8g, dev, 1); /* data mode */
for( j = 0; j < pb->width; j++ )
{
u8g_WriteByte(u8g, dev, u8g_dev_ili9325d_get_65K_high_byte(*ptr) );
u8g_WriteByte(u8g, dev, u8g_dev_ili9325d_get_65K_low_byte(*ptr) );
ptr++;
}
y++;
}
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb8h8_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_ili9325d_320x240_8h8_buf[WIDTH*PAGE_HEIGHT] U8G_NOCOMMON ;
u8g_pb_t u8g_ili9325d_320x240_8h8_pb U8G_NOCOMMON = { {PAGE_HEIGHT, HEIGHT, 0, 0, 0}, WIDTH, u8g_ili9325d_320x240_8h8_buf};
u8g_dev_t u8g_dev_ili9325d_320x240_8bit U8G_NOCOMMON = { u8g_dev_ili9325d_320x240_fn, &u8g_ili9325d_320x240_8h8_pb, u8g_com_arduino_port_d_wr_fn };
//u8g_dev_t u8g_dev_ili9325d_320x240_8bit = { u8g_dev_ili9325d_320x240_fn, &u8g_ili9325d_320x240_8h8_pb, u8g_com_arduino_parallel_fn };
//U8G_PB_DEV(u8g_dev_ili9325d_320x240_8bit, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ili9325d_320x240_fn, U8G_COM_PARALLEL);
@@ -1,110 +0,0 @@
/*
u8g_dev_ks0108_128x64.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
ADDRESS = 0 (Command Mode)
0x03f Display On
0x0c0 Start Display at line 0
0x040 | y write to y address (y:0..63)
0x0b8 | x write to page [0..7]
u8g_Init8Bit(u8g, dev, d0, d1, d2, d3, d4, d5, d6, d7, en, cs1, cs2, di, rw, reset)
u8g_Init8Bit(u8g, dev, 8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16, U8G_PIN_NONE)
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 64
#define PAGE_HEIGHT 8
static const uint8_t u8g_dev_ks0108_128x64_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip 1 */
0x03f, /* display on */
0x0c0, /* start at line 0 */
U8G_ESC_DLY(20), /* delay 20 ms */
U8G_ESC_CS(2), /* enable chip 2 */
0x03f, /* display on */
0x0c0, /* start at line 0 */
U8G_ESC_DLY(20), /* delay 20 ms */
U8G_ESC_CS(0), /* disable all chips */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_ks0108_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ks0108_128x64_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 0); /* command mode */
u8g_SetChipSelect(u8g, dev, 2);
u8g_WriteByte(u8g, dev, 0x0b8 | pb->p.page); /* select current page (KS0108b) */
u8g_WriteByte(u8g, dev, 0x040 ); /* set address 0 */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, 64, pb->buf);
u8g_SetChipSelect(u8g, dev, 0);
u8g_SetAddress(u8g, dev, 0); /* command mode */
u8g_SetChipSelect(u8g, dev, 1);
u8g_WriteByte(u8g, dev, 0x0b8 | pb->p.page); /* select current page (KS0108b) */
u8g_WriteByte(u8g, dev, 0x040 ); /* set address 0 */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, 64, 64+(uint8_t *)pb->buf);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_ks0108_128x64, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ks0108_128x64_fn, U8G_COM_PARALLEL);
U8G_PB_DEV(u8g_dev_ks0108_128x64_fast, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ks0108_128x64_fn, U8G_COM_FAST_PARALLEL);
@@ -1,147 +0,0 @@
/*
u8g_dev_lc7981_160x80.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 160
#define HEIGHT 80
#define PAGE_HEIGHT 8
/*
code ideas:
https://github.com/vsergeev/embedded-drivers/tree/master/avr-lc7981
data sheets:
http://www.lcd-module.de/eng/pdf/zubehoer/lc7981.pdf
http://www.lcd-module.de/pdf/grafik/w160-6.pdf
*/
static const uint8_t u8g_dev_lc7981_160x80_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(1), /* instruction mode */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_ADR(1), /* instruction mode */
0x000, /* mode register */
U8G_ESC_ADR(0), /* data mode */
0x032, /* display on (bit 5), master mode on (bit 4), graphics mode on (bit 1)*/
U8G_ESC_ADR(1), /* instruction mode */
0x001, /* character/bits per pixel pitch */
U8G_ESC_ADR(0), /* data mode */
0x007, /* 8 bits per pixel */
U8G_ESC_ADR(1), /* instruction mode */
0x002, /* number of chars/byte width of the screen */
U8G_ESC_ADR(0), /* data mode */
WIDTH/8-1, /* 8 bits per pixel */
U8G_ESC_ADR(1), /* instruction mode */
0x003, /* time division */
U8G_ESC_ADR(0), /* data mode */
0x050, /* Oct 2015: Changed from 7f to 50 (1/80 duty cycle) */
U8G_ESC_ADR(1), /* instruction mode */
0x008, /* display start low */
U8G_ESC_ADR(0), /* data mode */
0x000, /* */
U8G_ESC_ADR(1), /* instruction mode */
0x009, /* display start high */
U8G_ESC_ADR(0), /* data mode */
0x000, /* */
U8G_ESC_DLY(10), /* delay 10 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_lc7981_160x80_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_lc7981_160x80_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t y, i;
uint16_t disp_ram_adr;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_SetChipSelect(u8g, dev, 1);
y = pb->p.page_y0;
ptr = pb->buf;
disp_ram_adr = WIDTH/8;
disp_ram_adr *= y;
for( i = 0; i < 8; i ++ )
{
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x00a ); /* display ram (cursor) address low byte */
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_WriteByte(u8g, dev, disp_ram_adr & 0x0ff );
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x00b ); /* display ram (cursor) address hight byte */
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_WriteByte(u8g, dev, disp_ram_adr >> 8 );
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x00c ); /* write data */
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_WriteSequence(u8g, dev, WIDTH/8, ptr);
ptr += WIDTH/8;
disp_ram_adr += WIDTH/8;
}
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb8h1f_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_lc7981_160x80_8bit, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_lc7981_160x80_fn, U8G_COM_FAST_PARALLEL);
@@ -1,145 +0,0 @@
/*
u8g_dev_lc7981_240x128.c
Hitachi Display SP14N002
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 240
#define HEIGHT 128
#define PAGE_HEIGHT 8
/*
http://www.mark-products.com/graphics.htm#240x128%20Pixel%20Format
*/
static const uint8_t u8g_dev_lc7981_240x128_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(1), /* instruction mode */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_ADR(1), /* instruction mode */
0x000, /* mode register */
U8G_ESC_ADR(0), /* data mode */
0x032, /* display on (bit 5), master mode on (bit 4), graphics mode on (bit 1)*/
U8G_ESC_ADR(1), /* instruction mode */
0x001, /* character/bits per pixel pitch */
U8G_ESC_ADR(0), /* data mode */
0x007, /* 8 bits per pixel */
U8G_ESC_ADR(1), /* instruction mode */
0x002, /* number of chars/byte width of the screen */
U8G_ESC_ADR(0), /* data mode */
WIDTH/8-1, /* 8 bits per pixel */
U8G_ESC_ADR(1), /* instruction mode */
0x003, /* time division */
U8G_ESC_ADR(0), /* data mode */
0x07f, /* */
U8G_ESC_ADR(1), /* instruction mode */
0x008, /* display start low */
U8G_ESC_ADR(0), /* data mode */
0x000, /* */
U8G_ESC_ADR(1), /* instruction mode */
0x009, /* display start high */
U8G_ESC_ADR(0), /* data mode */
0x000, /* */
U8G_ESC_DLY(10), /* delay 10 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_lc7981_240x128_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_lc7981_240x128_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t y, i;
uint16_t disp_ram_adr;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_SetChipSelect(u8g, dev, 1);
y = pb->p.page_y0;
ptr = pb->buf;
disp_ram_adr = WIDTH/8;
disp_ram_adr *= y;
for( i = 0; i < 8; i ++ )
{
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x00a ); /* display ram (cursor) address low byte */
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_WriteByte(u8g, dev, disp_ram_adr & 0x0ff );
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x00b ); /* display ram (cursor) address hight byte */
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_WriteByte(u8g, dev, disp_ram_adr >> 8 );
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x00c ); /* write data */
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_WriteSequence(u8g, dev, WIDTH/8, ptr);
ptr += WIDTH/8;
disp_ram_adr += WIDTH/8;
}
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb8h1f_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_lc7981_240x128_8bit, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_lc7981_240x128_fn, U8G_COM_FAST_PARALLEL);
@@ -1,145 +0,0 @@
/*
u8g_dev_lc7981_240x64.c
Tested with Nan Ya LM_J6_003_
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 240
#define HEIGHT 64
#define PAGE_HEIGHT 8
/*
http://www.mark-products.com/graphics.htm#240x64%20Pixel%20Format
*/
static const uint8_t u8g_dev_lc7981_240x64_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(1), /* instruction mode */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_ADR(1), /* instruction mode */
0x000, /* mode register */
U8G_ESC_ADR(0), /* data mode */
0x032, /* display on (bit 5), master mode on (bit 4), graphics mode on (bit 1)*/
U8G_ESC_ADR(1), /* instruction mode */
0x001, /* character/bits per pixel pitch */
U8G_ESC_ADR(0), /* data mode */
0x007, /* 8 bits per pixel */
U8G_ESC_ADR(1), /* instruction mode */
0x002, /* number of chars/byte width of the screen */
U8G_ESC_ADR(0), /* data mode */
WIDTH/8-1, /* 8 bits per pixel */
U8G_ESC_ADR(1), /* instruction mode */
0x003, /* time division */
U8G_ESC_ADR(0), /* data mode */
0x07f, /* */
U8G_ESC_ADR(1), /* instruction mode */
0x008, /* display start low */
U8G_ESC_ADR(0), /* data mode */
0x000, /* */
U8G_ESC_ADR(1), /* instruction mode */
0x009, /* display start high */
U8G_ESC_ADR(0), /* data mode */
0x000, /* */
U8G_ESC_DLY(10), /* delay 10 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_lc7981_240x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_lc7981_240x64_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t y, i;
uint16_t disp_ram_adr;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_SetChipSelect(u8g, dev, 1);
y = pb->p.page_y0;
ptr = pb->buf;
disp_ram_adr = WIDTH/8;
disp_ram_adr *= y;
for( i = 0; i < 8; i ++ )
{
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x00a ); /* display ram (cursor) address low byte */
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_WriteByte(u8g, dev, disp_ram_adr & 0x0ff );
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x00b ); /* display ram (cursor) address hight byte */
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_WriteByte(u8g, dev, disp_ram_adr >> 8 );
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x00c ); /* write data */
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_WriteSequence(u8g, dev, WIDTH/8, ptr);
ptr += WIDTH/8;
disp_ram_adr += WIDTH/8;
}
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb8h1f_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_lc7981_240x64_8bit, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_lc7981_240x64_fn, U8G_COM_FAST_PARALLEL);
@@ -1,151 +0,0 @@
/*
u8g_dev_lc7981_320x64.c
Note: Requires 16 bit mode (Must be enabled in u8g.h)
Tested with Varitronix MGLS32064-03.pdf
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#ifdef U8G_16BIT
#define WIDTH 320
#else
#define WIDTH 240
#endif
#define HEIGHT 64
#define PAGE_HEIGHT 8
/*
http://www.gaw.ru/pdf/lcd/lcm/Varitronix/graf/MGLS32064-03.pdf
*/
static const uint8_t u8g_dev_lc7981_320x64_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(1), /* instruction mode */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_ADR(1), /* instruction mode */
0x000, /* mode register */
U8G_ESC_ADR(0), /* data mode */
0x032, /* display on (bit 5), master mode on (bit 4), graphics mode on (bit 1)*/
U8G_ESC_ADR(1), /* instruction mode */
0x001, /* character/bits per pixel pitch */
U8G_ESC_ADR(0), /* data mode */
0x007, /* 8 bits per pixel */
U8G_ESC_ADR(1), /* instruction mode */
0x002, /* number of chars/byte width of the screen */
U8G_ESC_ADR(0), /* data mode */
WIDTH/8-1, /* 8 bits per pixel */
U8G_ESC_ADR(1), /* instruction mode */
0x003, /* time division */
U8G_ESC_ADR(0), /* data mode */
0x07f, /* */
U8G_ESC_ADR(1), /* instruction mode */
0x008, /* display start low */
U8G_ESC_ADR(0), /* data mode */
0x000, /* */
U8G_ESC_ADR(1), /* instruction mode */
0x009, /* display start high */
U8G_ESC_ADR(0), /* data mode */
0x000, /* */
U8G_ESC_DLY(10), /* delay 10 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_lc7981_320x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_lc7981_320x64_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t y, i;
uint16_t disp_ram_adr;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_SetChipSelect(u8g, dev, 1);
y = pb->p.page_y0;
ptr = pb->buf;
disp_ram_adr = WIDTH/8;
disp_ram_adr *= y;
for( i = 0; i < 8; i ++ )
{
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x00a ); /* display ram (cursor) address low byte */
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_WriteByte(u8g, dev, disp_ram_adr & 0x0ff );
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x00b ); /* display ram (cursor) address hight byte */
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_WriteByte(u8g, dev, disp_ram_adr >> 8 );
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x00c ); /* write data */
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_WriteSequence(u8g, dev, WIDTH/8, ptr);
ptr += WIDTH/8;
disp_ram_adr += WIDTH/8;
}
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb8h1f_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_lc7981_320x64_8bit, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_lc7981_320x64_fn, U8G_COM_FAST_PARALLEL);
@@ -1,67 +0,0 @@
/*
u8g_dev_null.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
uint8_t u8g_dev_null(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_SET_8PIXEL: /* most often used command */
break;
case U8G_DEV_MSG_SET_PIXEL:
break;
case U8G_DEV_MSG_INIT:
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_FIRST:
break;
case U8G_DEV_MSG_PAGE_NEXT:
break;
#ifdef U8G_DEV_MSG_IS_BBX_INTERSECTION
case U8G_DEV_MSG_IS_BBX_INTERSECTION:
return 1;
#endif
case U8G_DEV_MSG_GET_PAGE_BOX:
break;
case U8G_DEV_MSG_SET_COLOR_ENTRY:
break;
case U8G_DEV_MSG_SET_XY_CB:
break;
}
return 1;
}
@@ -1,141 +0,0 @@
/*
u8g_dev_pcd8544_84x48.c
Display: Nokia 84x48
Status: Tested with PCF8812 Display
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 84
#define HEIGHT 48
#define PAGE_HEIGHT 8
static const uint8_t u8g_dev_pcd8544_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x021, /* activate chip (PD=0), horizontal increment (V=0), enter extended command set (H=1) */
0x006, /* temp. control: b10 = 2 */
0x013, /* bias system 1:48 */
0x0c0, /* medium Vop */
0x020, /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
0x00c, /* display on, normal operation */
U8G_ESC_DLY(100), /* delay 100 ms */
0x020, /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
0x00d, /* display on, invert */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x020, /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
0x00c, /* display on, normal */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_pcd8544_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x020, /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
0x00c, /* display on, normal */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_pcd8544_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x020, /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
0x008, /* display blank */
0x024, /* power down (PD=1), horizontal increment (V=0), enter normal command set (H=0) */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_pcd8544_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_pcd8544_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 0); /* command mode */
u8g_SetChipSelect(u8g, dev, 1);
u8g_WriteByte(u8g, dev, 0x020 ); /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
u8g_WriteByte(u8g, dev, 0x080 ); /* set X address */
u8g_WriteByte(u8g, dev, 0x040 | pb->p.page); /* set Y address */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
/* the contrast adjustment does not work, needs to be analysed */
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_SetChipSelect(u8g, dev, 1);
u8g_WriteByte(u8g, dev, 0x021); /* command mode, extended function set */
u8g_WriteByte(u8g, dev, 0x080 | ( (*(uint8_t *)arg) >> 1 ) );
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_pcd8544_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_pcd8544_sleep_off);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_pcd8544_84x48_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_pcd8544_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_pcd8544_84x48_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_pcd8544_fn, U8G_COM_HW_SPI);
@@ -1,138 +0,0 @@
/*
u8g_dev_pcf8812_96x65.c
Display: Nokia 96x65
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
om6206 comaptible to pcf8812 ?
Status: Tested
Display Controller Seen in
LPH7366 (9 pins, 84x48) PCD8544 Nokia 5110 / 5120 / 5130 / 5160 / 6110 / 6150
LPH7677 (8 pins, 84x48) PCD8544 Nokia 3210
LPH7779 (8 pins, 84x48) PCD8544 Nokia 3310 / 3315 / 3330 / 3110, also 3410?
??? PCD8544 Nokia 5110 / 6110
LPH7690 ? (96x65) PCF8455/OM6202 Nokia 3410
LPH7690 ? (96x65?) SED1565/S1D15605 Nokia 7110 / 3510?
LPH7690 ??? Nokia 6210
*/
#include "u8g.h"
#define WIDTH 96
#define HEIGHT 65
#define PAGE_HEIGHT 8
static const uint8_t u8g_dev_pcf8812_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x021, /* activate chip (PD=0), horizontal increment (V=0), enter extended command set (H=1) */
0x006, /* temp. control: b10 = 2 */
0x013, /* bias system 1:48 */
0x080 | 0x040, /* medium Vop */
0x020, /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
0x00c, /* display on, normal operation */
U8G_ESC_DLY(100), /* delay 100 ms */
0x020, /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
0x00d, /* display on, invert */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x020, /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
0x00c, /* display on, normal */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_pcf8812_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_pcf8812_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 0); /* command mode */
u8g_SetChipSelect(u8g, dev, 1);
u8g_WriteByte(u8g, dev, 0x020 ); /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
u8g_WriteByte(u8g, dev, 0x080 ); /* set X address */
u8g_WriteByte(u8g, dev, 0x040 | pb->p.page); /* set Y address */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
/* mirrored output, not tested*/
/*
{
uint8_t i = pb->width;
while( i > 0 )
{
i--;
u8g_WriteByte(u8g, dev, ((unsigned char *)pb->buf)[i] );
}
}
*/
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
/* the contrast adjustment does not work, needs to be analysed */
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_SetChipSelect(u8g, dev, 1);
u8g_WriteByte(u8g, dev, 0x021); /* command mode, extended function set */
u8g_WriteByte(u8g, dev, 0x080 | ( (*(uint8_t *)arg) >> 1 ) );
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
/* u8g_com_arduino_sw_spi_fn does not work, too fast??? */
U8G_PB_DEV(u8g_dev_pcf8812_96x65_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_pcf8812_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_pcf8812_96x65_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_pcf8812_fn, U8G_COM_HW_SPI);
@@ -1,107 +0,0 @@
/*
u8g_dev_sbn1661_122x32.c
WG12232 display with 2xSBN1661 / SED1520 controller (122x32 display)
At the moment only available in the Arduino Environment
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 122
#define HEIGHT 32
#define PAGE_HEIGHT 8
static const uint8_t u8g_dev_sbn1661_122x32_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip 1 */
0x0af, /* display on */
0x0c0, /* display start at line 0 */
0x0a0, /* a0: ADC forward, a1: ADC reverse */
0x0a9, /* a8: 1/16, a9: 1/32 duty */
U8G_ESC_CS(2), /* enable chip 2 */
0x0af, /* display on */
0x0c0, /* display start at line 0 */
0x0a0, /* a0: ADC forward, a1: ADC reverse */
0x0a9, /* a8: 1/16, a9: 1/32 duty */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_sbn1661_122x32_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_sbn1661_122x32_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 0); /* command mode */
u8g_SetChipSelect(u8g, dev, 1);
u8g_WriteByte(u8g, dev, 0x0b8 | pb->p.page); /* select current page (SBN1661/SED1520) */
u8g_WriteByte(u8g, dev, 0x000 ); /* set X address */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, WIDTH/2, pb->buf);
u8g_SetAddress(u8g, dev, 0); /* command mode */
u8g_SetChipSelect(u8g, dev, 2);
u8g_WriteByte(u8g, dev, 0x0b8 | pb->p.page); /* select current page (SBN1661/SED1520) */
u8g_WriteByte(u8g, dev, 0x000 ); /* set X address */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, WIDTH/2, WIDTH/2+(uint8_t *)pb->buf);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
break;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
/* u8g_com_arduino_sw_spi_fn does not work, too fast??? */
U8G_PB_DEV(u8g_dev_sbn1661_122x32 , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_sbn1661_122x32_fn, u8g_com_arduino_no_en_parallel_fn);
@@ -1,303 +0,0 @@
/*
u8g_dev_ssd1306_128x32.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 Feb 2013: Fixed, Issue 147
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 32
#define PAGE_HEIGHT 8
/* init sequence adafruit 128x32 OLED (NOT TESTED) */
static const uint8_t u8g_dev_ssd1306_128x32_adafruit1_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off, sleep mode */
0x0d5, 0x080, /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */
0x0a8, 0x03f, /* */
0x0d3, 0x000, /* */
0x040, /* start line */
0x08d, 0x010, /* [1] charge pump setting (p62): 0x014 enable, 0x010 disable */
0x020, 0x000, /* */
0x0a1, /* segment remap a0/a1*/
0x0c8, /* c0: scan dir normal, c8: reverse */
0x0da, 0x012, /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */
0x081, 0x09f, /* [1] set contrast control */
0x0d9, 0x022, /* [1] pre-charge period 0x022/f1*/
0x0db, 0x040, /* vcomh deselect level */
0x02e, /* 2012-05-27: Deactivate scroll */
0x0a4, /* output ram to display */
0x0a6, /* none inverted normal display mode */
0x0af, /* display on */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
/* init sequence adafruit 128x32 OLED (NOT TESTED) */
static const uint8_t u8g_dev_ssd1306_128x32_adafruit2_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off, sleep mode */
0x0d5, 0x080, /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */
0x0a8, 0x03f, /* */
0x0d3, 0x000, /* */
0x040, /* start line */
0x08d, 0x014, /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable */
0x020, 0x000, /* */
0x0a1, /* segment remap a0/a1*/
0x0c8, /* c0: scan dir normal, c8: reverse */
0x0da, 0x012, /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */
0x081, 0x0cf, /* [2] set contrast control */
0x0d9, 0x0f1, /* [2] pre-charge period 0x022/f1*/
0x0db, 0x040, /* vcomh deselect level */
0x02e, /* 2012-05-27: Deactivate scroll */
0x0a4, /* output ram to display */
0x0a6, /* none inverted normal display mode */
0x0af, /* display on */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
/* init sequence adafruit 128x32 OLED (TESTED - WORKING 23.02.13), like adafruit3, but with page addressing mode */
static const uint8_t u8g_dev_ssd1306_128x32_adafruit3_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off, sleep mode */
0x0d5, 0x080, /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */
0x0a8, 0x01f, /* Feb 23, 2013: 128x32 OLED: 0x01f, 128x32 OLED 0x03f */
0x0d3, 0x000, /* */
0x040, /* start line */
0x08d, 0x014, /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable */
0x020, 0x002, /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), Feb 23, 2013: 128x32 OLED: 0x002, 128x32 OLED 0x012 */
0x0a1, /* segment remap a0/a1*/
0x0c8, /* c0: scan dir normal, c8: reverse */
0x0da, 0x002, /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */
0x081, 0x0cf, /* [2] set contrast control */
0x0d9, 0x0f1, /* [2] pre-charge period 0x022/f1*/
0x0db, 0x040, /* vcomh deselect level */
0x02e, /* 2012-05-27: Deactivate scroll */
0x0a4, /* output ram to display */
0x0a6, /* none inverted normal display mode */
0x0af, /* display on */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
/* init sequence Univision datasheet (NOT TESTED) */
static const uint8_t u8g_dev_ssd1306_128x32_univision_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off, sleep mode */
0x0d5, 0x080, /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */
0x0a8, 0x03f, /* multiplex ratio */
0x0d3, 0x000, /* display offset */
0x040, /* start line */
0x08d, 0x010, /* charge pump setting (p62): 0x014 enable, 0x010 disable */
0x0a1, /* segment remap a0/a1*/
0x0c8, /* c0: scan dir normal, c8: reverse */
0x0da, 0x012, /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */
0x081, 0x09f, /* set contrast control */
0x0d9, 0x022, /* pre-charge period */
0x0db, 0x040, /* vcomh deselect level */
0x022, 0x000, /* page addressing mode WRONG: 3 byte cmd! */
0x0a4, /* output ram to display */
0x0a6, /* none inverted normal display mode */
0x0af, /* display on */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
/* select one init sequence here */
//define u8g_dev_ssd1306_128x32_init_seq u8g_dev_ssd1306_128x32_univision_init_seq
//define u8g_dev_ssd1306_128x32_init_seq u8g_dev_ssd1306_128x32_adafruit1_init_seq
//define u8g_dev_ssd1306_128x32_init_seq u8g_dev_ssd1306_128x32_adafruit2_init_seq
#define u8g_dev_ssd1306_128x32_init_seq u8g_dev_ssd1306_128x32_adafruit3_init_seq
static const uint8_t u8g_dev_ssd1306_128x32_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr. to 0 */
0x000, /* set lower 4 bit of the col adr. to 4 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd13xx_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd13xx_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_ssd1306_128x32_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x32_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x32_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (SSD1306) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) ); /* 11 Jul 2015: fixed contrast calculation */
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_ssd1306_128x32_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x32_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x32_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (pb->p.page*2)); /* select current page (SSD1306) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
u8g_SetChipSelect(u8g, dev, 0);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x32_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (pb->p.page*2+1)); /* select current page (SSD1306) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) ); /* 11 Jul 2015: fixed contrast calculation */
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
}
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_ssd1306_128x32_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x32_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_ssd1306_128x32_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x32_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_ssd1306_128x32_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x32_fn, U8G_COM_SSD_I2C);
uint8_t u8g_dev_ssd1306_128x32_2x_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_ssd1306_128x32_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1306_128x32_2x_buf};
u8g_dev_t u8g_dev_ssd1306_128x32_2x_sw_spi = { u8g_dev_ssd1306_128x32_2x_fn, &u8g_dev_ssd1306_128x32_2x_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_ssd1306_128x32_2x_hw_spi = { u8g_dev_ssd1306_128x32_2x_fn, &u8g_dev_ssd1306_128x32_2x_pb, U8G_COM_HW_SPI };
u8g_dev_t u8g_dev_ssd1306_128x32_2x_i2c = { u8g_dev_ssd1306_128x32_2x_fn, &u8g_dev_ssd1306_128x32_2x_pb, U8G_COM_SSD_I2C };
@@ -1,457 +0,0 @@
/*
u8g_dev_ssd1306_128x64.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 64
#define PAGE_HEIGHT 8
/* init sequence adafruit 128x64 OLED (NOT TESTED) */
static const uint8_t u8g_dev_ssd1306_128x64_adafruit1_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off, sleep mode */
0x0d5, 0x080, /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */
0x0a8, 0x03f, /* */
0x0d3, 0x000, /* */
0x040, /* start line */
0x08d, 0x010, /* [1] charge pump setting (p62): 0x014 enable, 0x010 disable */
0x020, 0x000, /* */
0x0a1, /* segment remap a0/a1*/
0x0c8, /* c0: scan dir normal, c8: reverse */
0x0da, 0x012, /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */
0x081, 0x09f, /* [1] set contrast control */
0x0d9, 0x022, /* [1] pre-charge period 0x022/f1*/
0x0db, 0x040, /* vcomh deselect level */
0x02e, /* 2012-05-27: Deactivate scroll */
0x0a4, /* output ram to display */
0x0a6, /* none inverted normal display mode */
0x0af, /* display on */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
/* init sequence adafruit 128x64 OLED (NOT TESTED) */
static const uint8_t u8g_dev_ssd1306_128x64_adafruit2_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off, sleep mode */
0x0d5, 0x080, /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */
0x0a8, 0x03f, /* */
0x0d3, 0x000, /* */
0x040, /* start line */
0x08d, 0x014, /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable */
0x020, 0x000, /* */
0x0a1, /* segment remap a0/a1*/
0x0c8, /* c0: scan dir normal, c8: reverse */
0x0da, 0x012, /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */
0x081, 0x0cf, /* [2] set contrast control */
0x0d9, 0x0f1, /* [2] pre-charge period 0x022/f1*/
0x0db, 0x040, /* vcomh deselect level */
0x02e, /* 2012-05-27: Deactivate scroll */
0x0a4, /* output ram to display */
0x0a6, /* none inverted normal display mode */
0x0af, /* display on */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
/* init sequence adafruit 128x64 OLED (NOT TESTED), like adafruit3, but with page addressing mode */
static const uint8_t u8g_dev_ssd1306_128x64_adafruit3_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off, sleep mode */
0x0d5, 0x080, /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */
0x0a8, 0x03f, /* */
0x0d3, 0x000, /* */
0x040, /* start line */
0x08d, 0x014, /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable */
0x020, 0x002, /* 2012-05-27: page addressing mode */
0x0a1, /* segment remap a0/a1*/
0x0c8, /* c0: scan dir normal, c8: reverse */
0x0da, 0x012, /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */
0x081, 0x0cf, /* [2] set contrast control */
0x0d9, 0x0f1, /* [2] pre-charge period 0x022/f1*/
0x0db, 0x040, /* vcomh deselect level */
0x02e, /* 2012-05-27: Deactivate scroll */
0x0a4, /* output ram to display */
0x0a6, /* none inverted normal display mode */
0x0af, /* display on */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
/* init sequence Univision datasheet (NOT TESTED) */
static const uint8_t u8g_dev_ssd1306_128x64_univision_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off, sleep mode */
0x0d5, 0x080, /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */
0x0a8, 0x03f, /* multiplex ratio */
0x0d3, 0x000, /* display offset */
0x040, /* start line */
0x08d, 0x010, /* charge pump setting (p62): 0x014 enable, 0x010 disable */
0x0a1, /* segment remap a0/a1*/
0x0c8, /* c0: scan dir normal, c8: reverse */
0x0da, 0x012, /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */
0x081, 0x09f, /* set contrast control */
0x0d9, 0x022, /* pre-charge period */
0x0db, 0x040, /* vcomh deselect level */
0x022, 0x000, /* page addressing mode WRONG: 3 byte cmd! */
0x0a4, /* output ram to display */
0x0a6, /* none inverted normal display mode */
0x0af, /* display on */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
/* select one init sequence here */
//#define u8g_dev_ssd1306_128x64_init_seq u8g_dev_ssd1306_128x64_univision_init_seq
//#define u8g_dev_ssd1306_128x64_init_seq u8g_dev_ssd1306_128x64_adafruit1_init_seq
// 26. Apr 2014: in this thead: http://forum.arduino.cc/index.php?topic=234930.msg1696754;topicseen#msg1696754
// it is mentiond, that adafruit2_init_seq works better --> this will be used by the ssd1306_adafruit device
//#define u8g_dev_ssd1306_128x64_init_seq u8g_dev_ssd1306_128x64_adafruit2_init_seq
#define u8g_dev_ssd1306_128x64_init_seq u8g_dev_ssd1306_128x64_adafruit3_init_seq
static const uint8_t u8g_dev_ssd1306_128x64_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0 */
0x000, /* set lower 4 bit of the col adr to 0 */
U8G_ESC_END /* end of sequence */
};
/* the sh1106 is compatible to the ssd1306, but is 132x64. display seems to be centered */
static const uint8_t u8g_dev_sh1106_128x64_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0 */
0x002, /* set lower 4 bit of the col adr to 2 (centered display with sh1106) */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd13xx_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd13xx_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_ssd1306_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_adafruit2_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (SSD1306) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
case U8G_DEV_MSG_CONTRAST:
{
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x81);
u8g_WriteByte(u8g, dev, *(uint8_t *) arg);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_ssd1306_adafruit_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (SSD1306) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
case U8G_DEV_MSG_CONTRAST:
{
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x81);
u8g_WriteByte(u8g, dev, *(uint8_t *) arg);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_sh1106_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_sh1106_128x64_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (SSD1306) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
case U8G_DEV_MSG_CONTRAST:
{
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x81);
u8g_WriteByte(u8g, dev, *(uint8_t *) arg);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_ssd1306_128x64_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (pb->p.page*2)); /* select current page (SSD1306) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
u8g_SetChipSelect(u8g, dev, 0);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (pb->p.page*2+1)); /* select current page (SSD1306) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
case U8G_DEV_MSG_CONTRAST:
{
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x81);
u8g_WriteByte(u8g, dev, *(uint8_t *) arg);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
}
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_sh1106_128x64_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_128x64_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_sh1106_128x64_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (pb->p.page*2)); /* select current page (SSD1306) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
u8g_SetChipSelect(u8g, dev, 0);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_sh1106_128x64_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (pb->p.page*2+1)); /* select current page (SSD1306) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
case U8G_DEV_MSG_CONTRAST:
{
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x81);
u8g_WriteByte(u8g, dev, *(uint8_t *) arg);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
}
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_ssd1306_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x64_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_ssd1306_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x64_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_ssd1306_128x64_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_128x64_fn, U8G_COM_SSD_I2C);
U8G_PB_DEV(u8g_dev_ssd1306_adafruit_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_adafruit_128x64_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_ssd1306_adafruit_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_adafruit_128x64_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_ssd1306_adafruit_128x64_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_adafruit_128x64_fn, U8G_COM_SSD_I2C);
uint8_t u8g_dev_ssd1306_128x64_2x_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_ssd1306_128x64_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1306_128x64_2x_buf};
u8g_dev_t u8g_dev_ssd1306_128x64_2x_sw_spi = { u8g_dev_ssd1306_128x64_2x_fn, &u8g_dev_ssd1306_128x64_2x_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_ssd1306_128x64_2x_hw_spi = { u8g_dev_ssd1306_128x64_2x_fn, &u8g_dev_ssd1306_128x64_2x_pb, U8G_COM_HW_SPI };
u8g_dev_t u8g_dev_ssd1306_128x64_2x_i2c = { u8g_dev_ssd1306_128x64_2x_fn, &u8g_dev_ssd1306_128x64_2x_pb, U8G_COM_SSD_I2C };
U8G_PB_DEV(u8g_dev_sh1106_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_sh1106_128x64_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_sh1106_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_sh1106_128x64_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_sh1106_128x64_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_sh1106_128x64_fn, U8G_COM_SSD_I2C);
uint8_t u8g_dev_sh1106_128x64_2x_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_sh1106_128x64_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_sh1106_128x64_2x_buf};
u8g_dev_t u8g_dev_sh1106_128x64_2x_sw_spi = { u8g_dev_sh1106_128x64_2x_fn, &u8g_dev_sh1106_128x64_2x_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_sh1106_128x64_2x_hw_spi = { u8g_dev_sh1106_128x64_2x_fn, &u8g_dev_sh1106_128x64_2x_pb, U8G_COM_HW_SPI };
u8g_dev_t u8g_dev_sh1106_128x64_2x_i2c = { u8g_dev_sh1106_128x64_2x_fn, &u8g_dev_sh1106_128x64_2x_pb, U8G_COM_SSD_I2C };
@@ -1,201 +0,0 @@
/*
u8g_dev_ssd1306_64x48.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 64
#define HEIGHT 48
#define PAGE_HEIGHT 8
/* init sequence buydisplay.com 0.66" 64x48 OLED */
/* http://www.buydisplay.com/download/manual/ER-OLED0.66-1_Series_Datasheet.pdf */
static const uint8_t u8g_dev_ssd1306_64x48_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off, sleep mode */
0x0d5, 0x080, /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */
0x0a8, 0x02f, /* Multiplex Ration, Jul 12, 2015: From 0.66" OLED datasheet */
0x0d3, 0x000, /* */
0x040, /* start line */
0x08d, 0x014, /* charge pump setting (p62): 0x014 enable, 0x010 disable */
//0x020, 0x002, /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), Feb 23, 2013: 64x48 OLED: 0x002, 64x48 OLED 0x012 */
0x0a1, /* segment remap a0/a1*/
0x0c8, /* c0: scan dir normal, c8: reverse */
0x0da, 0x012, /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), Jul 12, 2015: From 0.66" OLED datasheet */
0x081, 0x0cf, /* set contrast control */
0x0d9, 0x022, /* pre-charge period 0x022/f1, from 0.66" OLED datasheet */
0x0db, 0x000, /* vcomh deselect level, from 0.66" OLED datasheet */
0x02e, /* 2012-05-27: Deactivate scroll */
0x0a4, /* output ram to display */
0x0a6, /* none inverted normal display mode */
0x0af, /* display on */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd1306_64x48_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010+2, /* set upper 4 bit of the col adr. to 0, 0.66" OLED starts with offset 32 */
0x000, /* set lower 4 bit of the col adr. to 4 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd13xx_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd13xx_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_ssd1306_64x48_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_64x48_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_64x48_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (SSD1306) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) ); /* 11 Jul 2015: fixed contrast calculation */
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_ssd1306_64x48_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_64x48_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_64x48_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (pb->p.page*2)); /* select current page (SSD1306) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
u8g_SetChipSelect(u8g, dev, 0);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1306_64x48_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (pb->p.page*2+1)); /* select current page (SSD1306) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) ); /* 11 Jul 2015: fixed contrast calculation */
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
}
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_ssd1306_64x48_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_64x48_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_ssd1306_64x48_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_64x48_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_ssd1306_64x48_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1306_64x48_fn, U8G_COM_SSD_I2C);
uint8_t u8g_dev_ssd1306_64x48_2x_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_ssd1306_64x48_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1306_64x48_2x_buf};
u8g_dev_t u8g_dev_ssd1306_64x48_2x_sw_spi = { u8g_dev_ssd1306_64x48_2x_fn, &u8g_dev_ssd1306_64x48_2x_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_ssd1306_64x48_2x_hw_spi = { u8g_dev_ssd1306_64x48_2x_fn, &u8g_dev_ssd1306_64x48_2x_pb, U8G_COM_HW_SPI };
u8g_dev_t u8g_dev_ssd1306_64x48_2x_i2c = { u8g_dev_ssd1306_64x48_2x_fn, &u8g_dev_ssd1306_64x48_2x_pb, U8G_COM_SSD_I2C };
@@ -1,142 +0,0 @@
/*
u8g_dev_ssd1309_128x64.c
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 64
#define PAGE_HEIGHT 8
/* ssd1309 ini sequence*/
static const uint8_t u8g_dev_ssd1309_128x64_init_seq[] PROGMEM={
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0xfd,0x12, /*Command Lock */
0xae, /*Set Display Off */
0xd5,0xa0, /*set Display Clock Divide Ratio/Oscillator Frequency */
0xa8,0x3f, /*Set Multiplex Ratio */
0x3d,0x00, /*Set Display Offset*/
0x40, /*Set Display Start Line*/
0xa1, /*Set Segment Re-Map*/
0xc8, /*Set COM Output Scan Direction*/
0xda,0x12, /*Set COM Pins Hardware Configuration*/
0x81,0xdf, /*Set Current Control */
0xd9,0x82, /*Set Pre-Charge Period */
0xdb,0x34, /*Set VCOMH Deselect Level */
0xa4, /*Set Entire Display On/Off */
0xa6, /*Set Normal/Inverse Display*/
U8G_ESC_VCC(1), /*Power up VCC & Stabilized */
U8G_ESC_DLY(50),
0xaf, /*Set Display On */
U8G_ESC_DLY(50),
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
/* select one init sequence here */
#define u8g_dev_ssd1309_128x64_init_seq u8g_dev_ssd1309_128x64_init_seq
static const uint8_t u8g_dev_ssd1309_128x64_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0 */
0x000, /* set lower 4 bit of the col adr to 4 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd13xx_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd13xx_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_ssd1309_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1309_128x64_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1309_128x64_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (SSD1306) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) ); /* 11 Jul 2015: fixed contrast calculation */
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_ssd1309_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1309_128x64_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_ssd1309_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1309_128x64_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_ssd1309_128x64_i2c, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1309_128x64_fn, U8G_COM_SSD_I2C);
@@ -1,338 +0,0 @@
/*
u8g_dev_ssd1322_nhd31oled_bw.c
1-Bit (BW) Driver for SSD1322 Controller (OLED Display)
Tested with NHD-3.12-25664
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
SSD130x Monochrom OLED Controller
SSD131x Character OLED Controller
SSD132x Graylevel OLED Controller
SSD1331 Color OLED Controller
*/
#include "u8g.h"
/* width must be multiple of 8, largest value is 248 unless u8g 16 bit mode is enabled */
#if defined(U8G_16BIT)
#define WIDTH 256
#else
#define WIDTH 248
#endif
#define HEIGHT 64
#define PAGE_HEIGHT 8
/*
http://www.newhavendisplay.com/app_notes/OLED_25664.txt
http://www.newhavendisplay.com/forum/viewtopic.php?f=15&t=3758
*/
static const uint8_t u8g_dev_ssd1322_1bit_nhd_312_init_seq[] PROGMEM = {
U8G_ESC_DLY(10), /* delay 10 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_ADR(0), /* instruction mode */
0x0fd, /* lock command */
U8G_ESC_ADR(1), /* data mode */
0x012, /* unlock */
U8G_ESC_ADR(0), /* instruction mode */
0x0ae, /* display off, sleep mode */
U8G_ESC_ADR(0), /* instruction mode */
0x0b3,
U8G_ESC_ADR(1), /* data mode */
0x091, /* set display clock divide ratio/oscillator frequency (set clock as 80 frames/sec) */
U8G_ESC_ADR(0), /* instruction mode */
0x0ca, /* multiplex ratio */
U8G_ESC_ADR(1), /* data mode */
0x03f, /* 1/64 Duty (0x0F~0x3F) */
U8G_ESC_ADR(0), /* instruction mode */
0x0a2,
U8G_ESC_ADR(1), /* data mode */
0x000, /* display offset, shift mapping ram counter */
U8G_ESC_ADR(0), /* instruction mode */
0x0a1,
U8G_ESC_ADR(1), /* data mode */
0x000, /* display start line */
U8G_ESC_ADR(0), /* instruction mode */
0x0a0, /* Set Re-Map / Dual COM Line Mode */
U8G_ESC_ADR(1), /* data mode */
0x014, /* was 0x014 */
0x011, /* was 0x011 */
U8G_ESC_ADR(0), /* instruction mode */
0x0ab,
U8G_ESC_ADR(1), /* data mode */
0x001, /* Enable Internal VDD Regulator */
U8G_ESC_ADR(0), /* instruction mode */
0x0b4, /* Display Enhancement A */
U8G_ESC_ADR(1), /* data mode */
0x0a0,
0x005|0x0fd,
U8G_ESC_ADR(0), /* instruction mode */
0x0c1, /* contrast */
U8G_ESC_ADR(1), /* data mode */
0x09f,
U8G_ESC_ADR(0), /* instruction mode */
0x0c7, /* Set Scale Factor of Segment Output Current Control */
U8G_ESC_ADR(1), /* data mode */
0x00f,
U8G_ESC_ADR(0), /* instruction mode */
0x0b9, /* linear gray scale */
U8G_ESC_ADR(0), /* instruction mode */
0x0b1, /* Phase 1 (Reset) & Phase 2 (Pre-Charge) Period Adjustment */
U8G_ESC_ADR(1), /* data mode */
0x0e2,
U8G_ESC_ADR(0), /* instruction mode */
0x0d1, /* Display Enhancement B */
U8G_ESC_ADR(1), /* data mode */
0x082|0x020,
0x020,
U8G_ESC_ADR(0), /* instruction mode */
0x0bb, /* precharge voltage */
U8G_ESC_ADR(1), /* data mode */
0x01f,
U8G_ESC_ADR(0), /* instruction mode */
0x0b6, /* precharge period */
U8G_ESC_ADR(1), /* data mode */
0x008,
U8G_ESC_ADR(0), /* instruction mode */
0x0be, /* vcomh */
U8G_ESC_ADR(1), /* data mode */
0x007,
U8G_ESC_ADR(0), /* instruction mode */
0x0a6, /* normal display */
U8G_ESC_ADR(0), /* instruction mode */
0x0a9, /* exit partial display */
U8G_ESC_ADR(0), /* instruction mode */
0x0af, /* display on */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd1322_1bit_nhd_312_prepare_page_seq[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x015, /* column address... */
U8G_ESC_ADR(1), /* data mode */
0x01c, /* start at column 0 */
0x05b, /* end column */
U8G_ESC_ADR(0), /* instruction mode */
0x075, /* row address... */
U8G_ESC_ADR(1), /* data mode */
U8G_ESC_END /* end of sequence */
};
static void u8g_dev_ssd1322_1bit_prepare_row(u8g_t *u8g, u8g_dev_t *dev, uint8_t delta_row)
{
uint8_t row = ((u8g_pb_t *)(dev->dev_mem))->p.page;
row *= ((u8g_pb_t *)(dev->dev_mem))->p.page_height;
row += delta_row;
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1322_1bit_nhd_312_prepare_page_seq);
u8g_WriteByte(u8g, dev, row); /* start at the selected row */
u8g_WriteByte(u8g, dev, row+1); /* end within the selected row */
u8g_SetAddress(u8g, dev, 0); /* instruction mode mode */
u8g_WriteByte(u8g, dev, 0x05c); /* write to ram */
u8g_SetAddress(u8g, dev, 1); /* data mode */
}
static const uint8_t u8g_dev_ssd13xx_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd13xx_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_ssd1322_nhd31oled_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1322_1bit_nhd_312_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t i;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
uint8_t *p = pb->buf;
u8g_uint_t cnt;
cnt = pb->width;
cnt >>= 3;
for( i = 0; i < pb->p.page_height; i++ )
{
u8g_dev_ssd1322_1bit_prepare_row(u8g, dev, i); /* this will also enable chip select */
#if !defined(U8G_16BIT)
u8g_WriteByte(u8g, dev, 0x0ff);
u8g_WriteByte(u8g, dev, 0x0ff);
#endif
u8g_WriteSequenceBWTo16GrDevice(u8g, dev, cnt, p);
#if !defined(U8G_16BIT)
u8g_WriteByte(u8g, dev, 0x0ff);
u8g_WriteByte(u8g, dev, 0x0ff);
#endif
u8g_MicroDelay(); // for DUE?
u8g_SetChipSelect(u8g, dev, 0);
p+=cnt;
}
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_MicroDelay(); // for DUE?
u8g_SetChipSelect(u8g, dev, 0);
break;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
}
return u8g_dev_pb8h1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_ssd1322_nhd31oled_2x_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1322_1bit_nhd_312_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t i;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
uint8_t *p = pb->buf;
u8g_uint_t cnt;
cnt = pb->width;
cnt >>= 3;
for( i = 0; i < pb->p.page_height; i++ )
{
u8g_dev_ssd1322_1bit_prepare_row(u8g, dev, i); /* this will also enable chip select */
#if !defined(U8G_16BIT)
u8g_WriteByte(u8g, dev, 0x0ff);
u8g_WriteByte(u8g, dev, 0x0ff);
#endif
u8g_WriteSequenceBWTo16GrDevice(u8g, dev, cnt, p);
#if !defined(U8G_16BIT)
u8g_WriteByte(u8g, dev, 0x0ff);
u8g_WriteByte(u8g, dev, 0x0ff);
#endif
u8g_MicroDelay(); // for DUE?
u8g_SetChipSelect(u8g, dev, 0);
p+=cnt;
}
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x0c1); /* 21 May 2013, fixed contrast command */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
break;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
}
return u8g_dev_pb16h1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_bw_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1322_nhd31oled_bw_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_bw_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1322_nhd31oled_bw_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_bw_parallel , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1322_nhd31oled_bw_fn, U8G_COM_FAST_PARALLEL);
#define DWIDTH (WIDTH*2)
uint8_t u8g_dev_ssd1322_nhd31oled_2x_bw_buf[DWIDTH] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_ssd1322_nhd31oled_2x_bw_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1322_nhd31oled_2x_bw_buf};
u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_bw_sw_spi = { u8g_dev_ssd1322_nhd31oled_2x_bw_fn, &u8g_dev_ssd1322_nhd31oled_2x_bw_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_bw_hw_spi = { u8g_dev_ssd1322_nhd31oled_2x_bw_fn, &u8g_dev_ssd1322_nhd31oled_2x_bw_pb, U8G_COM_HW_SPI };
@@ -1,338 +0,0 @@
/*
u8g_dev_ssd1322_nhd31oled_gr.c
2-Bit (4L) Driver for SSD1322 Controller (OLED Display)
Tested with NHD-3.12-25664
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
SSD130x Monochrom OLED Controller
SSD131x Character OLED Controller
SSD132x Graylevel OLED Controller
SSD1331 Color OLED Controller
*/
#include "u8g.h"
/* width must be multiple of 8, largest value is 248 unless u8g 16 bit mode is enabled */
#if defined(U8G_16BIT)
#define WIDTH 256
#else
#define WIDTH 248
#endif
#define HEIGHT 64
//#define PAGE_HEIGHT 8
/*
http://www.newhavendisplay.com/app_notes/OLED_25664.txt
http://www.newhavendisplay.com/forum/viewtopic.php?f=15&t=3758
*/
static const uint8_t u8g_dev_ssd1322_2bit_nhd_312_init_seq[] PROGMEM = {
U8G_ESC_DLY(10), /* delay 10 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_ADR(0), /* instruction mode */
0x0fd, /* lock command */
U8G_ESC_ADR(1), /* data mode */
0x012, /* unlock */
U8G_ESC_ADR(0), /* instruction mode */
0x0ae, /* display off, sleep mode */
U8G_ESC_ADR(0), /* instruction mode */
0x0b3,
U8G_ESC_ADR(1), /* data mode */
0x091, /* set display clock divide ratio/oscillator frequency (set clock as 80 frames/sec) */
U8G_ESC_ADR(0), /* instruction mode */
0x0ca, /* multiplex ratio */
U8G_ESC_ADR(1), /* data mode */
0x03f, /* 1/64 Duty (0x0F~0x3F) */
U8G_ESC_ADR(0), /* instruction mode */
0x0a2,
U8G_ESC_ADR(1), /* data mode */
0x000, /* display offset, shift mapping ram counter */
U8G_ESC_ADR(0), /* instruction mode */
0x0a1,
U8G_ESC_ADR(1), /* data mode */
0x000, /* display start line */
U8G_ESC_ADR(0), /* instruction mode */
0x0a0, /* Set Re-Map / Dual COM Line Mode */
U8G_ESC_ADR(1), /* data mode */
0x014, /* was 0x014 */
0x011, /* was 0x011 */
U8G_ESC_ADR(0), /* instruction mode */
0x0ab,
U8G_ESC_ADR(1), /* data mode */
0x001, /* Enable Internal VDD Regulator */
U8G_ESC_ADR(0), /* instruction mode */
0x0b4, /* Display Enhancement A */
U8G_ESC_ADR(1), /* data mode */
0x0a0,
0x005|0x0fd,
U8G_ESC_ADR(0), /* instruction mode */
0x0c1, /* contrast */
U8G_ESC_ADR(1), /* data mode */
0x09f,
U8G_ESC_ADR(0), /* instruction mode */
0x0c7, /* Set Scale Factor of Segment Output Current Control */
U8G_ESC_ADR(1), /* data mode */
0x00f,
U8G_ESC_ADR(0), /* instruction mode */
0x0b9, /* linear gray scale */
U8G_ESC_ADR(0), /* instruction mode */
0x0b1, /* Phase 1 (Reset) & Phase 2 (Pre-Charge) Period Adjustment */
U8G_ESC_ADR(1), /* data mode */
0x0e2,
U8G_ESC_ADR(0), /* instruction mode */
0x0d1, /* Display Enhancement B */
U8G_ESC_ADR(1), /* data mode */
0x082|0x020,
0x020,
U8G_ESC_ADR(0), /* instruction mode */
0x0bb, /* precharge voltage */
U8G_ESC_ADR(1), /* data mode */
0x01f,
U8G_ESC_ADR(0), /* instruction mode */
0x0b6, /* precharge period */
U8G_ESC_ADR(1), /* data mode */
0x008,
U8G_ESC_ADR(0), /* instruction mode */
0x0be, /* vcomh */
U8G_ESC_ADR(1), /* data mode */
0x007,
U8G_ESC_ADR(0), /* instruction mode */
0x0a6, /* normal display */
U8G_ESC_ADR(0), /* instruction mode */
0x0a9, /* exit partial display */
U8G_ESC_ADR(0), /* instruction mode */
0x0af, /* display on */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd1322_2bit_nhd_312_prepare_page_seq[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x015, /* column address... */
U8G_ESC_ADR(1), /* data mode */
0x01c, /* start at column 0 */
0x05b, /* end column */
U8G_ESC_ADR(0), /* instruction mode */
0x075, /* row address... */
U8G_ESC_ADR(1), /* data mode */
U8G_ESC_END /* end of sequence */
};
static void u8g_dev_ssd1322_2bit_prepare_row(u8g_t *u8g, u8g_dev_t *dev, uint8_t delta_row)
{
uint8_t row = ((u8g_pb_t *)(dev->dev_mem))->p.page;
row *= ((u8g_pb_t *)(dev->dev_mem))->p.page_height;
row += delta_row;
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1322_2bit_nhd_312_prepare_page_seq);
u8g_WriteByte(u8g, dev, row); /* start at the selected row */
u8g_WriteByte(u8g, dev, row+1); /* end within the selected row */
u8g_SetAddress(u8g, dev, 0); /* instruction mode mode */
u8g_WriteByte(u8g, dev, 0x05c); /* write to ram */
u8g_SetAddress(u8g, dev, 1); /* data mode */
}
static const uint8_t u8g_dev_ssd13xx_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd13xx_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_ssd1322_nhd31oled_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1322_2bit_nhd_312_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t i;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
uint8_t *p = pb->buf;
u8g_uint_t cnt;
cnt = pb->width;
cnt >>= 2;
for( i = 0; i < pb->p.page_height; i++ )
{
u8g_dev_ssd1322_2bit_prepare_row(u8g, dev, i); /* this will also enable chip select */
#if !defined(U8G_16BIT)
u8g_WriteByte(u8g, dev, 0x00);
u8g_WriteByte(u8g, dev, 0x00);
#endif
u8g_WriteSequence4LTo16GrDevice(u8g, dev, cnt, p);
#if !defined(U8G_16BIT)
u8g_WriteByte(u8g, dev, 0x00);
u8g_WriteByte(u8g, dev, 0x00);
#endif
u8g_MicroDelay(); // for DUE?
u8g_SetChipSelect(u8g, dev, 0);
p+=cnt;
}
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_MicroDelay(); // for DUE?
u8g_SetChipSelect(u8g, dev, 0);
break;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
}
return u8g_dev_pb8h2_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_ssd1322_nhd31oled_2x_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1322_2bit_nhd_312_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t i;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
uint8_t *p = pb->buf;
u8g_uint_t cnt;
cnt = pb->width;
cnt >>= 2; /* 23 Oct 2013, changed to 2 */
for( i = 0; i < pb->p.page_height; i++ )
{
u8g_dev_ssd1322_2bit_prepare_row(u8g, dev, i); /* this will also enable chip select */
#if !defined(U8G_16BIT)
u8g_WriteByte(u8g, dev, 0x00);
u8g_WriteByte(u8g, dev, 0x00);
#endif
u8g_WriteSequence4LTo16GrDevice(u8g, dev, cnt, p);
#if !defined(U8G_16BIT)
u8g_WriteByte(u8g, dev, 0x00);
u8g_WriteByte(u8g, dev, 0x00);
#endif
u8g_MicroDelay(); // for DUE?
u8g_SetChipSelect(u8g, dev, 0);
p+=cnt;
}
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
break;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
}
return u8g_dev_pb16h2_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_gr_sw_spi , WIDTH, HEIGHT, 4, u8g_dev_ssd1322_nhd31oled_gr_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_gr_hw_spi , WIDTH, HEIGHT, 4, u8g_dev_ssd1322_nhd31oled_gr_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_ssd1322_nhd31oled_gr_parallel , WIDTH, HEIGHT, 4, u8g_dev_ssd1322_nhd31oled_gr_fn, U8G_COM_FAST_PARALLEL);
#define DWIDTH (WIDTH*2)
uint8_t u8g_dev_ssd1322_nhd31oled_2x_gr_buf[DWIDTH] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_ssd1322_nhd31oled_2x_gr_pb = { {8, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1322_nhd31oled_2x_gr_buf};
u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_gr_sw_spi = { u8g_dev_ssd1322_nhd31oled_2x_gr_fn, &u8g_dev_ssd1322_nhd31oled_2x_gr_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_ssd1322_nhd31oled_2x_gr_hw_spi = { u8g_dev_ssd1322_nhd31oled_2x_gr_fn, &u8g_dev_ssd1322_nhd31oled_2x_gr_pb, U8G_COM_HW_SPI };
@@ -1,263 +0,0 @@
/*
u8g_dev_ssd1325_nhd27oled_bw.c
1-Bit (BW) Driver for SSD1325 Controller (OLED Display)
Tested with NHD-2.7-12864UCY3
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
SSD130x Monochrom OLED Controller
SSD131x Character OLED Controller
SSD132x Graylevel OLED Controller
SSD1331 Color OLED Controller
*/
#ifdef OBSOLETE_CODE
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 64
#define PAGE_HEIGHT 8
/* http://www.newhavendisplay.com/app_notes/OLED_2_7_12864.txt */
static const uint8_t u8g_dev_ssd1325_1bit_nhd_27_12864ucy3_init_seq[] PROGMEM = {
U8G_ESC_DLY(10), /* delay 10 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off, sleep mode */
0x0b3, 0x091, /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */
0x0a8, 0x03f, /* multiplex ratio: 0x03f * 1/64 duty */
0x0a2, 0x04c, /* display offset, shift mapping ram counter */
0x0a1, 0x000, /* display start line */
0x0ad, 0x002, /* master configuration: disable embedded DC-DC, enable internal VCOMH */
0x0a0, 0x056, /* remap configuration, vertical address increment, enable nibble remap (upper nibble is left) */
0x086, /* full current range (0x084, 0x085, 0x086) */
0x0b8, /* set gray scale table */
0x01, 0x011, 0x022, 0x032, 0x043, 0x054, 0x065, 0x076,
0x081, 0x070, /* contrast, brightness, 0..128, Newhaven: 0x040 */
0x0b2, 0x051, /* frame frequency (row period) */
0x0b1, 0x055, /* phase length */
0x0bc, 0x010, /* pre-charge voltage level */
0x0b4, 0x002, /* set pre-charge compensation level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */
0x0b0, 0x028, /* enable pre-charge compensation (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */
0x0be, 0x01c, /* VCOMH voltage */
0x0bf, 0x002|0x00d, /* VSL voltage level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */
0x0a5, /* all pixel on */
0x0af, /* display on */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a4, /* normal display mode */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd1325_1bit_nhd_27_12864ucy3_prepare_page_seq[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x015, /* column address... */
0x000, /* start at column 0 */
0x03f, /* end at column 63 (which is y == 127), because there are two pixel in one column */
0x075, /* row address... */
U8G_ESC_END /* end of sequence */
};
static void u8g_dev_ssd1325_1bit_prepare_page(u8g_t *u8g, u8g_dev_t *dev)
{
uint8_t page = ((u8g_pb_t *)(dev->dev_mem))->p.page;
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_1bit_nhd_27_12864ucy3_prepare_page_seq);
page <<= 3;
u8g_WriteByte(u8g, dev, page); /* start at the selected page */
page += 7;
u8g_WriteByte(u8g, dev, page); /* end within the selected page */
u8g_SetAddress(u8g, dev, 1); /* data mode */
}
static void u8g_dev_ssd1325_1bit_2x_prepare_page(u8g_t *u8g, u8g_dev_t *dev, uint8_t is_odd)
{
uint8_t page = ((u8g_pb_t *)(dev->dev_mem))->p.page;
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_1bit_nhd_27_12864ucy3_prepare_page_seq);
page <<= 1;
page += is_odd;
page <<= 3;
u8g_WriteByte(u8g, dev, page); /* start at the selected page */
page += 7;
u8g_WriteByte(u8g, dev, page); /* end within the selected page */
u8g_SetAddress(u8g, dev, 1); /* data mode */
}
/* assumes row autoincrement and activated nibble remap */
#ifdef OLD
static void _OLD_u8g_dev_ssd1325_1bit_write_16_pixel(u8g_t *u8g, u8g_dev_t *dev, uint8_t left, uint8_t right)
{
uint8_t d, cnt;
cnt = 8;
do
{
d = 0;
if ( left & 1 )
d |= 0x0f0;
if ( right & 1 )
d |= 0x00f;
u8g_WriteByte(u8g, dev, d);
left >>= 1;
right >>= 1;
cnt--;
}while ( cnt > 0 );
}
#endif
static void u8g_dev_ssd1325_1bit_write_16_pixel(u8g_t *u8g, u8g_dev_t *dev, uint8_t left, uint8_t right)
{
uint8_t d, cnt;
static uint8_t buf[8];
cnt = 8;
do
{
d = 0;
if ( left & 128 )
d |= 0x0f0;
if ( right & 128 )
d |= 0x00f;
cnt--;
buf[cnt] = d;
left <<= 1;
right <<= 1;
}while ( cnt > 0 );
u8g_WriteSequence(u8g, dev, 8, buf);
}
static void u8g_dev_ssd1325_1bit_write_buffer(u8g_t *u8g, u8g_dev_t *dev, uint8_t is_odd)
{
uint8_t cnt, left, right;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
ptr = pb->buf;
cnt = pb->width;
if ( is_odd )
ptr += cnt;
cnt >>= 1;
do
{
left = *ptr++;
right = *ptr++;
u8g_dev_ssd1325_1bit_write_16_pixel(u8g, dev, left, right);
cnt--;
} while( cnt > 0 );
}
uint8_t u8g_dev_ssd1325_nhd27oled_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_1bit_nhd_27_12864ucy3_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_dev_ssd1325_1bit_prepare_page(u8g, dev);
u8g_dev_ssd1325_1bit_write_buffer(u8g, dev, 0);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
break;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_ssd1325_nhd27oled_2x_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_1bit_nhd_27_12864ucy3_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_dev_ssd1325_1bit_2x_prepare_page(u8g, dev, 0);
u8g_dev_ssd1325_1bit_write_buffer(u8g, dev, 0);
u8g_dev_ssd1325_1bit_2x_prepare_page(u8g, dev, 1);
u8g_dev_ssd1325_1bit_write_buffer(u8g, dev, 1);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
break;
}
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
}
/* disabled, see bw_new.c */
/*
U8G_PB_DEV(u8g_dev_ssd1325_nhd27oled_bw_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1325_nhd27oled_bw_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_ssd1325_nhd27oled_bw_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1325_nhd27oled_bw_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_ssd1325_nhd27oled_bw_parallel , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_ssd1325_nhd27oled_bw_fn, U8G_COM_FAST_PARALLEL);
*/
/*
uint8_t u8g_dev_ssd1325_nhd27oled_2x_bw_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_ssd1325_nhd27oled_2x_bw_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1325_nhd27oled_2x_bw_buf};
u8g_dev_t u8g_dev_ssd1325_nhd27oled_2x_bw_sw_spi = { u8g_dev_ssd1325_nhd27oled_2x_bw_fn, &u8g_dev_ssd1325_nhd27oled_2x_bw_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_ssd1325_nhd27oled_2x_bw_hw_spi = { u8g_dev_ssd1325_nhd27oled_2x_bw_fn, &u8g_dev_ssd1325_nhd27oled_2x_bw_pb, U8G_COM_HW_SPI };
u8g_dev_t u8g_dev_ssd1325_nhd27oled_2x_bw_parallel = { u8g_dev_ssd1325_nhd27oled_2x_bw_fn, &u8g_dev_ssd1325_nhd27oled_2x_bw_pb, U8G_COM_FAST_PARALLEL };
*/
#endif
@@ -1,232 +0,0 @@
/*
u8g_dev_ssd1325_nhd27oled_bw.c
1-Bit (BW) Driver for SSD1325 Controller (OLED Display)
Horizontal architecture, completly rewritten
Tested with NHD-2.7-12864UCY3
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
SSD130x Monochrom OLED Controller
SSD131x Character OLED Controller
SSD132x Graylevel OLED Controller
SSD1331 Color OLED Controller
*/
#include "u8g.h"
/* width must be multiple of 8, largest value is 248 unless u8g 16 bit mode is enabled */
#define WIDTH 128
#define HEIGHT 64
/* http://www.newhavendisplay.com/app_notes/OLED_2_7_12864.txt */
static const uint8_t u8g_dev_ssd1325_nhd_27_12864_init_seq[] PROGMEM = {
U8G_ESC_DLY(10), /* delay 10 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off, sleep mode */
0x0b3, 0x091, /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */
0x0a8, 0x03f, /* multiplex ratio: 0x03f * 1/64 duty */
0x0a2, 0x04c, /* display offset, shift mapping ram counter */
0x0a1, 0x000, /* display start line */
0x0ad, 0x002, /* master configuration: disable embedded DC-DC, enable internal VCOMH */
0x0a0, 0x052, /* remap configuration, horizontal address increment (bit 2 = 0), enable nibble remap (upper nibble is left, bit 1 = 1) */
0x086, /* full current range (0x084, 0x085, 0x086) */
0x0b8, /* set gray scale table */
0x01, 0x011, 0x022, 0x032, 0x043, 0x054, 0x065, 0x076,
0x081, 0x070, /* contrast, brightness, 0..128, Newhaven: 0x040 */
0x0b2, 0x051, /* frame frequency (row period) */
0x0b1, 0x055, /* phase length */
0x0bc, 0x010, /* pre-charge voltage level */
0x0b4, 0x002, /* set pre-charge compensation level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */
0x0b0, 0x028, /* enable pre-charge compensation (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */
0x0be, 0x01c, /* VCOMH voltage */
0x0bf, 0x002|0x00d, /* VSL voltage level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */
0x0a4, /* normal display mode */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd1325_prepare_row_seq[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x015, /* column address... */
0x000, /* start at column 0 */
0x03f, /* end at column 63 (which is y == 127), because there are two pixel in one column */
0x075, /* row address... */
U8G_ESC_END /* end of sequence */
};
static void u8g_dev_ssd1325_prepare_row(u8g_t *u8g, u8g_dev_t *dev, uint8_t delta_row)
{
uint8_t row = ((u8g_pb_t *)(dev->dev_mem))->p.page;
row *= ((u8g_pb_t *)(dev->dev_mem))->p.page_height;
row += delta_row;
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_prepare_row_seq);
u8g_WriteByte(u8g, dev, row); /* start at the selected row */
u8g_WriteByte(u8g, dev, row+1); /* end within the selected row */
//u8g_SetAddress(u8g, dev, 0); /* instruction mode mode */
//u8g_WriteByte(u8g, dev, 0x05c); /* write to ram */
u8g_SetAddress(u8g, dev, 1); /* data mode */
}
static const uint8_t u8g_dev_ssd13xx_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd13xx_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static uint8_t u8g_dev_ssd1325_nhd27oled_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
//case U8G_DEV_MSG_IS_BBX_INTERSECTION:
// return u8g_pb_IsIntersection((u8g_pb_t *)(dev->dev_mem), (u8g_dev_arg_bbx_t *)arg);
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_nhd_27_12864_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t i;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
uint8_t *p = pb->buf;
u8g_uint_t cnt;
cnt = pb->width;
cnt >>= 3;
for( i = 0; i < pb->p.page_height; i++ )
{
u8g_dev_ssd1325_prepare_row(u8g, dev, i); /* this will also enable chip select */
u8g_WriteSequenceBWTo16GrDevice(u8g, dev, cnt, p);
u8g_SetChipSelect(u8g, dev, 0);
p+=cnt;
}
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
break;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
}
return u8g_dev_pb8h1_base_fn(u8g, dev, msg, arg);
}
static uint8_t u8g_dev_ssd1325_nhd27oled_2x_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_nhd_27_12864_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t i;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
uint8_t *p = pb->buf;
u8g_uint_t cnt;
cnt = pb->width;
cnt >>= 3;
for( i = 0; i < pb->p.page_height; i++ )
{
u8g_dev_ssd1325_prepare_row(u8g, dev, i); /* this will also enable chip select */
u8g_WriteSequenceBWTo16GrDevice(u8g, dev, cnt, p);
u8g_SetChipSelect(u8g, dev, 0);
p+=cnt;
}
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
break;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
}
return u8g_dev_pb16h1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_ssd1325_nhd27oled_bw_sw_spi , WIDTH, HEIGHT, 8, u8g_dev_ssd1325_nhd27oled_bw_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_ssd1325_nhd27oled_bw_hw_spi , WIDTH, HEIGHT, 8, u8g_dev_ssd1325_nhd27oled_bw_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_ssd1325_nhd27oled_bw_parallel , WIDTH, HEIGHT, 8, u8g_dev_ssd1325_nhd27oled_bw_fn, U8G_COM_FAST_PARALLEL);
uint8_t u8g_dev_ssd1325_nhd27oled_2x_bw_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_ssd1325_nhd27oled_2x_bw_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1325_nhd27oled_2x_bw_buf};
u8g_dev_t u8g_dev_ssd1325_nhd27oled_2x_bw_sw_spi = { u8g_dev_ssd1325_nhd27oled_2x_bw_fn, &u8g_dev_ssd1325_nhd27oled_2x_bw_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_ssd1325_nhd27oled_2x_bw_hw_spi = { u8g_dev_ssd1325_nhd27oled_2x_bw_fn, &u8g_dev_ssd1325_nhd27oled_2x_bw_pb, U8G_COM_HW_SPI };
u8g_dev_t u8g_dev_ssd1325_nhd27oled_2x_bw_parallel = { u8g_dev_ssd1325_nhd27oled_2x_bw_fn, &u8g_dev_ssd1325_nhd27oled_2x_bw_pb, U8G_COM_FAST_PARALLEL };
@@ -1,255 +0,0 @@
/*
u8g_dev_ssd1325_nhd27oled_gr.c
2-Bit (gray level) Driver for SSD1325 Controller (OLED Display)
Tested with NHD-2.7-12864UCY3
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
SSD130x Monochrom OLED Controller
SSD131x Character OLED Controller
SSD132x Graylevel OLED Controller
SSD1331 Color OLED Controller
*/
#ifdef OBSOLETE_CODE
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 64
/* http://www.newhavendisplay.com/app_notes/OLED_2_7_12864.txt */
static const uint8_t u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_init_seq[] PROGMEM = {
U8G_ESC_DLY(10), /* delay 10 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off, sleep mode */
0x0b3, 0x091, /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */
0x0a8, 0x03f, /* multiplex ratio: 0x03f * 1/64 duty */
0x0a2, 0x04c, /* display offset, shift mapping ram counter */
0x0a1, 0x000, /* display start line */
0x0ad, 0x002, /* master configuration: disable embedded DC-DC, enable internal VCOMH */
0x0a0, 0x056, /* remap configuration, vertical address increment, enable nibble remap (upper nibble is left) */
0x086, /* full current range (0x084, 0x085, 0x086) */
0x0b8, /* set gray scale table */
//0x01, 0x011, 0x022, 0x032, 0x043, 0x054, 0x065, 0x076,
0x01, 0x011, 0x022, 0x032, 0x043, 0x054, 0x077, 0x077, // 4L mode uses 0, 2, 4, 7
0x081, 0x070, /* contrast, brightness, 0..128, Newhaven: 0x040 */
0x0b2, 0x051, /* frame frequency (row period) */
0x0b1, 0x055, /* phase length */
0x0bc, 0x010, /* pre-charge voltage level */
0x0b4, 0x002, /* set pre-charge compensation level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */
0x0b0, 0x028, /* enable pre-charge compensation (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */
0x0be, 0x01c, /* VCOMH voltage */
0x0bf, 0x002|0x00d, /* VSL voltage level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */
0x0a5, /* all pixel on */
0x0af, /* display on */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a4, /* normal display mode */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_prepare_page_seq[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x015, /* column address... */
0x000, /* start at column 0 */
0x03f, /* end at column 63 (which is y == 127), because there are two pixel in one column */
0x075, /* row address... */
U8G_ESC_END /* end of sequence */
};
static void u8g_dev_ssd1325_2bit_prepare_page(u8g_t *u8g, u8g_dev_t *dev)
{
uint8_t page = ((u8g_pb_t *)(dev->dev_mem))->p.page;
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_prepare_page_seq);
page <<= 2;
u8g_WriteByte(u8g, dev, page); /* start at the selected page */
page += 3;
u8g_WriteByte(u8g, dev, page); /* end within the selected page */
u8g_SetAddress(u8g, dev, 1); /* data mode */
}
static void u8g_dev_ssd1325_2bit_2x_prepare_page(u8g_t *u8g, u8g_dev_t *dev, uint8_t is_odd)
{
uint8_t page = ((u8g_pb_t *)(dev->dev_mem))->p.page;
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_prepare_page_seq);
page <<= 1;
page += is_odd;
page <<= 2;
u8g_WriteByte(u8g, dev, page); /* start at the selected page */
page += 3;
u8g_WriteByte(u8g, dev, page); /* end within the selected page */
u8g_SetAddress(u8g, dev, 1); /* data mode */
}
/* assumes row autoincrement and activated nibble remap */
static void u8g_dev_ssd1325_2bit_write_4_pixel(u8g_t *u8g, u8g_dev_t *dev, uint8_t left, uint8_t right)
{
uint8_t d, tmp, cnt;
cnt = 4;
do
{
d = left;
d &= 3;
d <<= 4;
tmp = right;
tmp &= 3;
d |= tmp;
d <<= 2;
u8g_WriteByte(u8g, dev, d);
left >>= 2;
right >>= 2;
cnt--;
}while ( cnt > 0 );
}
static void u8g_dev_ssd1325_2bit_write_buffer(u8g_t *u8g, u8g_dev_t *dev)
{
uint8_t cnt, left, right;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
cnt = pb->width;
cnt >>= 1;
ptr = pb->buf;
do
{
left = *ptr++;
right = *ptr++;
u8g_dev_ssd1325_2bit_write_4_pixel(u8g, dev, left, right);
cnt--;
} while( cnt > 0 );
}
static void u8g_dev_ssd1325_2bit_2x_write_buffer(u8g_t *u8g, u8g_dev_t *dev, uint8_t is_odd)
{
uint8_t cnt, left, right;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
ptr = pb->buf;
cnt = pb->width;
if ( is_odd )
ptr += cnt;
cnt >>= 1;
do
{
left = *ptr++;
right = *ptr++;
u8g_dev_ssd1325_2bit_write_4_pixel(u8g, dev, left, right);
cnt--;
} while( cnt > 0 );
}
static uint8_t u8g_dev_ssd1325_nhd27oled_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_dev_ssd1325_2bit_prepare_page(u8g, dev);
u8g_dev_ssd1325_2bit_write_buffer(u8g, dev);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
return u8g_dev_pb8v2_base_fn(u8g, dev, msg, arg);
}
static uint8_t u8g_dev_ssd1325_nhd27oled_2x_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_dev_ssd1325_2bit_2x_prepare_page(u8g, dev, 0);
u8g_dev_ssd1325_2bit_2x_write_buffer(u8g, dev, 0);
u8g_dev_ssd1325_2bit_2x_prepare_page(u8g, dev, 1);
u8g_dev_ssd1325_2bit_2x_write_buffer(u8g, dev, 1);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
return u8g_dev_pb16v2_base_fn(u8g, dev, msg, arg);
}
//U8G_PB_DEV(u8g_dev_ssd1325_nhd27oled_gr_sw_spi , WIDTH, HEIGHT, 4, u8g_dev_ssd1325_nhd27oled_gr_fn, U8G_COM_SW_SPI);
//U8G_PB_DEV(u8g_dev_ssd1325_nhd27oled_gr_hw_spi , WIDTH, HEIGHT, 4, u8g_dev_ssd1325_nhd27oled_gr_fn, U8G_COM_HW_SPI);
//uint8_t u8g_dev_ssd1325_nhd27oled_2x_buf[WIDTH*2] U8G_NOCOMMON ;
//u8g_pb_t u8g_dev_ssd1325_nhd27oled_2x_pb = { {8, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1325_nhd27oled_2x_buf};
//u8g_dev_t u8g_dev_ssd1325_nhd27oled_2x_gr_sw_spi = { u8g_dev_ssd1325_nhd27oled_2x_gr_fn, &u8g_dev_ssd1325_nhd27oled_2x_pb, U8G_COM_SW_SPI };
//u8g_dev_t u8g_dev_ssd1325_nhd27oled_2x_gr_hw_spi = { u8g_dev_ssd1325_nhd27oled_2x_gr_fn, &u8g_dev_ssd1325_nhd27oled_2x_pb, U8G_COM_HW_SPI };
#endif /* OBSOLETE_CODE */
@@ -1,228 +0,0 @@
/*
u8g_dev_ssd1325_nhd27oled_gr.c
2-Bit (gray level) Driver for SSD1325 Controller (OLED Display)
Rewritten with new architecture
Tested with NHD-2.7-12864UCY3
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
SSD130x Monochrom OLED Controller
SSD131x Character OLED Controller
SSD132x Graylevel OLED Controller
SSD1331 Color OLED Controller
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 64
/* http://www.newhavendisplay.com/app_notes/OLED_2_7_12864.txt */
static const uint8_t u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_init_seq[] PROGMEM = {
U8G_ESC_DLY(10), /* delay 10 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off, sleep mode */
0x0b3, 0x091, /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */
0x0a8, 0x03f, /* multiplex ratio: 0x03f * 1/64 duty */
0x0a2, 0x04c, /* display offset, shift mapping ram counter */
0x0a1, 0x000, /* display start line */
0x0ad, 0x002, /* master configuration: disable embedded DC-DC, enable internal VCOMH */
0x0a0, 0x052, /* remap configuration, horizontal address increment (bit 2 = 0), enable nibble remap (upper nibble is left, bit 1 = 1), old values: 0x0a0 0x0a6 */
0x086, /* full current range (0x084, 0x085, 0x086) */
0x0b8, /* set gray scale table */
//0x01, 0x011, 0x022, 0x032, 0x043, 0x054, 0x065, 0x076,
0x01, 0x011, 0x022, 0x032, 0x043, 0x054, 0x077, 0x077, // 4L mode uses 0, 2, 4, 7
0x081, 0x070, /* contrast, brightness, 0..128, Newhaven: 0x040 */
0x0b2, 0x051, /* frame frequency (row period) */
0x0b1, 0x055, /* phase length */
0x0bc, 0x010, /* pre-charge voltage level */
0x0b4, 0x002, /* set pre-charge compensation level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */
0x0b0, 0x028, /* enable pre-charge compensation (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */
0x0be, 0x01c, /* VCOMH voltage */
0x0bf, 0x002|0x00d, /* VSL voltage level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */
0x0a4, /* normal display mode */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_prepare_page_seq[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x015, /* column address... */
0x000, /* start at column 0 */
0x03f, /* end at column 63 (which is y == 127), because there are two pixel in one column */
0x075, /* row address... */
U8G_ESC_END /* end of sequence */
};
static void u8g_dev_ssd1325_gr_prepare_row(u8g_t *u8g, u8g_dev_t *dev, uint8_t delta_row)
{
uint8_t row = ((u8g_pb_t *)(dev->dev_mem))->p.page;
row *= ((u8g_pb_t *)(dev->dev_mem))->p.page_height;
row += delta_row;
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_prepare_page_seq);
u8g_WriteByte(u8g, dev, row); /* start at the selected row */
u8g_WriteByte(u8g, dev, row+1); /* end within the selected row */
//u8g_SetAddress(u8g, dev, 0); /* instruction mode mode */
//u8g_WriteByte(u8g, dev, 0x05c); /* write to ram */
u8g_SetAddress(u8g, dev, 1); /* data mode */
}
static const uint8_t u8g_dev_ssd13xx_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0ae, /* display off */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd13xx_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static uint8_t u8g_dev_ssd1325_nhd27oled_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t i;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
uint8_t *p = pb->buf;
u8g_uint_t cnt;
cnt = pb->width;
cnt >>= 2;
for( i = 0; i < pb->p.page_height; i++ )
{
u8g_dev_ssd1325_gr_prepare_row(u8g, dev, i); /* this will also enable chip select */
u8g_WriteSequence4LTo16GrDevice(u8g, dev, cnt, p);
u8g_SetChipSelect(u8g, dev, 0);
p+=cnt;
}
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
}
return u8g_dev_pb8h2_base_fn(u8g, dev, msg, arg);
}
static uint8_t u8g_dev_ssd1325_nhd27oled_2x_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1325_2bit_nhd_27_12864ucy3_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t i;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
uint8_t *p = pb->buf;
u8g_uint_t cnt;
cnt = pb->width;
cnt >>= 2;
for( i = 0; i < pb->p.page_height; i++ )
{
u8g_dev_ssd1325_gr_prepare_row(u8g, dev, i); /* this will also enable chip select */
u8g_WriteSequence4LTo16GrDevice(u8g, dev, cnt, p);
u8g_SetChipSelect(u8g, dev, 0);
p+=cnt;
}
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd13xx_sleep_off);
return 1;
}
return u8g_dev_pb16h2_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_ssd1325_nhd27oled_gr_sw_spi , WIDTH, HEIGHT, 4, u8g_dev_ssd1325_nhd27oled_gr_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_ssd1325_nhd27oled_gr_hw_spi , WIDTH, HEIGHT, 4, u8g_dev_ssd1325_nhd27oled_gr_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_ssd1325_nhd27oled_gr_parallel , WIDTH, HEIGHT, 4, u8g_dev_ssd1325_nhd27oled_gr_fn, U8G_COM_FAST_PARALLEL);
uint8_t u8g_dev_ssd1325_nhd27oled_2x_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_ssd1325_nhd27oled_2x_pb = { {8, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1325_nhd27oled_2x_buf};
u8g_dev_t u8g_dev_ssd1325_nhd27oled_2x_gr_sw_spi = { u8g_dev_ssd1325_nhd27oled_2x_gr_fn, &u8g_dev_ssd1325_nhd27oled_2x_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_ssd1325_nhd27oled_2x_gr_hw_spi = { u8g_dev_ssd1325_nhd27oled_2x_gr_fn, &u8g_dev_ssd1325_nhd27oled_2x_pb, U8G_COM_HW_SPI };
@@ -1,299 +0,0 @@
/*
u8g_dev_ssd1327_96x96_gr.c
2-Bit (graylevel) Driver for SSD1327 Controller (OLED Display)
Tested with Seedstudio 96x96 Oled (LY120)
http://www.seeedstudio.com/wiki/index.php?title=Twig_-_OLED_96x96
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
SSD130x Monochrom OLED Controller
SSD131x Character OLED Controller
SSD132x Graylevel OLED Controller
SSD1331 Color OLED Controller
*/
#include "u8g.h"
#define WIDTH 96
#define HEIGHT 96
#define XOFFSET 8
/*
http://www.seeedstudio.com/wiki/index.php?title=Twig_-_OLED_96x96
*/
static const uint8_t u8g_dev_ssd1327_2bit_96x96_init_seq[] PROGMEM = {
U8G_ESC_DLY(10), /* delay 10 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0fd, 0x012, /* unlock display, usually not required because the display is unlocked after reset */
0x0ae, /* display off, sleep mode */
0x0a8, 0x05f, /* multiplex ratio: 0x05f * 1/64 duty */
0x0a1, 0x000, /* display start line */
0x0a2, 0x060, /* display offset, shift mapping ram counter */
//0x0a2, 0x04c, /* NHD: display offset, shift mapping ram counter */
0x0a0, 0x046, /* remap configuration, vertical address increment, enable nibble remap (upper nibble is left) */
//0x0a0, 0x056, /* NHD: remap configuration, vertical address increment, enable nibble remap (upper nibble is left) */
0x0ab, 0x001, /* Enable internal VDD regulator (RESET) */
0x081, 0x053, /* contrast, brightness, 0..128, Newhaven: 0x040, LY120 0x053, 0x070 seems also ok */
0x0b1, 0x051, /* phase length */
0x0b3, 0x001, /* set display clock divide ratio/oscillator frequency */
0x0b9, /* use linear lookup table */
#if 0
0x0b8, /* set gray scale table */
//0x01, 0x011, 0x022, 0x032, 0x043, 0x054, 0x065, 0x076,
0x01, 0x011, 0x022, 0x032, 0x043, 0x054, 0x077, 0x077, // 4L mode uses 0, 2, 4, 7
#endif
0x0bc, 0x008, /* pre-charge voltage level */
0x0be, 0x007, /* VCOMH voltage */
0x0b6, 0x001, /* second precharge */
0x0d5, 0x062, /* enable second precharge, internal vsl (bit0 = 0) */
#if 0
// the following commands are not used by the SeeedGrayOLED sequence */
0x0ad, 0x002, /* master configuration: disable embedded DC-DC, enable internal VCOMH */
0x086, /* full current range (0x084, 0x085, 0x086) */
0x0b2, 0x051, /* frame frequency (row period) */
0x0b4, 0x002, /* set pre-charge compensation level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */
0x0b0, 0x028, /* enable pre-charge compensation (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */
0x0bf, 0x002|0x00d, /* VSL voltage level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */
#endif
0x0a5, /* all pixel on */
//0x02e, /* no scroll (according to SeeedGrayOLED sequence) */
0x0af, /* display on */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a4, /* normal display mode */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a5, /* all pixel on */
0x0af, /* display on */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a4, /* normal display mode */
0x015, /* column address... */
0x008, /* start at column 8, special for the LY120 ??? */
0x037, /* end at column 55, note: there are two pixel in one column */
0x075, /* row address... */
0x008,
0x05f,
U8G_ESC_ADR(1), /* data mode */
0x000f, 0x000f, 0x0000, 0x0000, 0x000f,0x000f,0x0000,0x0000,
0x000f, 0x000f, 0x0000, 0x0000, 0x000f,0x000f,0x0000,0x0000,
0x000f, 0x000f, 0x0000, 0x0000, 0x000f,0x000f,0x0000,0x0000,
0x000f, 0x000f, 0x0000, 0x0000, 0x000f,0x000f,0x0000,0x0000,
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd1327_2bit_96x96_prepare_page_seq[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x015, /* column address... */
XOFFSET, /* start at column 8, special for the LY120 ??? */
0x037, /* end at column 55, note: there are two pixel in one column */
0x075, /* row address... */
U8G_ESC_END /* end of sequence */
};
static void u8g_dev_ssd1327_2bit_prepare_page(u8g_t *u8g, u8g_dev_t *dev)
{
uint8_t page = ((u8g_pb_t *)(dev->dev_mem))->p.page;
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1327_2bit_96x96_prepare_page_seq);
page <<= 2;
u8g_WriteByte(u8g, dev, page); /* start at the selected page */
page += 3;
u8g_WriteByte(u8g, dev, page); /* end within the selected page */
u8g_SetAddress(u8g, dev, 1); /* data mode */
}
static void u8g_dev_ssd1327_2bit_2x_prepare_page(u8g_t *u8g, u8g_dev_t *dev, uint8_t is_odd)
{
uint8_t page = ((u8g_pb_t *)(dev->dev_mem))->p.page;
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1327_2bit_96x96_prepare_page_seq);
page <<= 1;
page += is_odd;
page <<= 2;
u8g_WriteByte(u8g, dev, page); /* start at the selected page */
page += 3;
u8g_WriteByte(u8g, dev, page); /* end within the selected page */
u8g_SetAddress(u8g, dev, 1); /* data mode */
}
/* assumes row autoincrement and activated nibble remap */
static void u8g_dev_ssd1327_2bit_write_4_pixel(u8g_t *u8g, u8g_dev_t *dev, uint8_t left, uint8_t right)
{
uint8_t d, tmp, cnt;
static uint8_t buf[4];
buf[0] = 0;
buf[1] = 0;
buf[2] = 0;
buf[3] = 0;
cnt = 0;
do
{
if ( left == 0 && right == 0 )
break;
d = left;
d &= 3;
d <<= 4;
tmp = right;
tmp &= 3;
d |= tmp;
d <<= 2;
buf[cnt] = d;
left >>= 2;
right >>= 2;
cnt++;
}while ( cnt < 4 );
u8g_WriteSequence(u8g, dev, 4, buf);
}
static void u8g_dev_ssd1327_2bit_write_buffer(u8g_t *u8g, u8g_dev_t *dev)
{
uint8_t cnt, left, right;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
cnt = pb->width;
cnt >>= 1;
ptr = pb->buf;
do
{
left = *ptr++;
right = *ptr++;
u8g_dev_ssd1327_2bit_write_4_pixel(u8g, dev, left, right);
cnt--;
} while( cnt > 0 );
}
static void u8g_dev_ssd1327_2bit_2x_write_buffer(u8g_t *u8g, u8g_dev_t *dev, uint8_t is_odd)
{
uint8_t cnt, left, right;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
ptr = pb->buf;
cnt = pb->width;
if ( is_odd )
ptr += cnt;
cnt >>= 1;
do
{
left = *ptr++;
right = *ptr++;
u8g_dev_ssd1327_2bit_write_4_pixel(u8g, dev, left, right);
cnt--;
} while( cnt > 0 );
}
uint8_t u8g_dev_ssd1327_96x96_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1327_2bit_96x96_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_dev_ssd1327_2bit_prepare_page(u8g, dev);
u8g_dev_ssd1327_2bit_write_buffer(u8g, dev);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
return u8g_dev_pb8v2_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_ssd1327_96x96_2x_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1327_2bit_96x96_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_dev_ssd1327_2bit_2x_prepare_page(u8g, dev, 0);
u8g_dev_ssd1327_2bit_2x_write_buffer(u8g, dev, 0);
u8g_dev_ssd1327_2bit_2x_prepare_page(u8g, dev, 1);
u8g_dev_ssd1327_2bit_2x_write_buffer(u8g, dev, 1);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
return u8g_dev_pb16v2_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_ssd1327_96x96_gr_sw_spi , WIDTH, HEIGHT, 4, u8g_dev_ssd1327_96x96_gr_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_ssd1327_96x96_gr_hw_spi , WIDTH, HEIGHT, 4, u8g_dev_ssd1327_96x96_gr_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_ssd1327_96x96_gr_i2c , WIDTH, HEIGHT, 4, u8g_dev_ssd1327_96x96_gr_fn, U8G_COM_SSD_I2C);
#define DWIDTH (2*WIDTH)
uint8_t u8g_dev_ssd1327_96x96_2x_buf[DWIDTH] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_ssd1327_96x96_2x_pb = { {8, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1327_96x96_2x_buf};
u8g_dev_t u8g_dev_ssd1327_96x96_2x_gr_sw_spi = { u8g_dev_ssd1327_96x96_2x_gr_fn, &u8g_dev_ssd1327_96x96_2x_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_ssd1327_96x96_2x_gr_hw_spi = { u8g_dev_ssd1327_96x96_2x_gr_fn, &u8g_dev_ssd1327_96x96_2x_pb, U8G_COM_HW_SPI };
u8g_dev_t u8g_dev_ssd1327_96x96_2x_gr_i2c = { u8g_dev_ssd1327_96x96_2x_gr_fn, &u8g_dev_ssd1327_96x96_2x_pb, U8G_COM_SSD_I2C };
@@ -1,425 +0,0 @@
/*
u8g_dev_ssd1353_160x128.c
Universal 8bit Graphics Library
Copyright (c) 2015, hugodan3@googlemail.com
Copyright (c) 2013, jamjardavies@gmail.com
Copyright (c) 2013, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
History:
Initial version 8 Mar 2015 hugodan3@googlemail.com. This version has
been derived from the ssd1351 driver by jamjarda. It has
been improved by in-lining time critical functions.
*/
#include "u8g.h"
#define WIDTH 160
#define HEIGHT 128
#define PAGE_HEIGHT 8
#define USE_GREY_TABLE 0
static const uint8_t u8g_dev_ssd1353_160x128_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_DLY(50),
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_DLY(50),
U8G_ESC_CS(1), /* enable chip */
0xFD, /* Command unlock */
U8G_ESC_ADR(1),
0x12,
U8G_ESC_ADR(0),
0xAE, /* Set Display Off */
U8G_ESC_ADR(0),
0xA8,
U8G_ESC_ADR(1),
0x7F, /* Set Multiplex Ratio */
U8G_ESC_ADR(0),
0xA0,
U8G_ESC_ADR(1),
0xB4, /* Set remapping */
U8G_ESC_ADR(0),
0xA1,
U8G_ESC_ADR(1),
0x00, /* Set Display Start Line */
U8G_ESC_ADR(0),
0xA2,
U8G_ESC_ADR(1),
0x00, /* Set Display Offset */
U8G_ESC_ADR(0),
0xB1,
U8G_ESC_ADR(1),
0x32, /* Set Phase Length */
U8G_ESC_ADR(0),
0xB4,
U8G_ESC_ADR(1),
0x04, /* Set Second Precharge Period */
U8G_ESC_ADR(0),
0xA4, /* Set Display Mode ON */
U8G_ESC_ADR(0),
0xB3,
U8G_ESC_ADR(1), /* frame rate */
0x40,
U8G_ESC_ADR(0),
0xBB,
U8G_ESC_ADR(1), /* pre-charge level */
0x08,
U8G_ESC_ADR(0),
0xBE,
U8G_ESC_ADR(1), /* vcomh */
0x3C,
/* color adjustments */
#if USE_GREY_TABLE != 1
U8G_ESC_ADR(0), /* instruction mode */
0x81,
U8G_ESC_ADR(1),
0xC8, /* Set Contrast Color 1*/
U8G_ESC_ADR(0), /* instruction mode */
0x82,
U8G_ESC_ADR(1),
0x80, /* Set Contrast Color 2*/
U8G_ESC_ADR(0), /* instruction mode */
0x83,
U8G_ESC_ADR(1),
0xF8, /* Set Contrast Color 3*/
U8G_ESC_ADR(0), /* instruction mode */
0x87,
U8G_ESC_ADR(1),
0x09, /* Set Master Contrast MAX */
U8G_ESC_ADR(0), /* instruction mode */
0xB9, /* Set CMD Grayscale Linear */
#else
U8G_ESC_ADR(0), /* instruction mode */
0x81,
U8G_ESC_ADR(1),
0xC8, /* Set Contrast Color 1*/
U8G_ESC_ADR(0), /* instruction mode */
0x82,
U8G_ESC_ADR(1),
0xA0, /* Set Contrast Color 2*/
U8G_ESC_ADR(0), /* instruction mode */
0x83,
U8G_ESC_ADR(1),
0xB0, /* Set Contrast Color 3*/
U8G_ESC_ADR(0), /* instruction mode */
0x87,
U8G_ESC_ADR(1),
0x0F, /* Set Master Contrast MAX */
U8G_ESC_ADR(0), /* instruction mode */
0xB8, /* Set CMD Grayscale Lookup */
U8G_ESC_ADR(1),
0x05, 0x06, 0x07, 0x08,
0x09, 0x0a, 0x0b, 0x0c,
0x0D, 0x0E, 0x0F, 0x10,
0x11, 0x12, 0x13, 0x14,
0x15, 0x16, 0x18, 0x1a,
0x1b, 0x1C, 0x1D, 0x1F,
0x21, 0x23, 0x25, 0x27,
0x2A, 0x2D, 0x30, 0x33,
0x36, 0x39, 0x3C, 0x3F,
0x42, 0x45, 0x48, 0x4C,
0x50, 0x54, 0x58, 0x5C,
0x60, 0x64, 0x68, 0x6C,
0x70, 0x74, 0x78, 0x7D,
0x82, 0x87, 0x8C, 0x91,
0x96, 0x9B, 0xA0, 0xA5,
0xAA, 0xAF, 0xB4,
#endif
U8G_ESC_ADR(0),
0xAF, /* Set Display On */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(1),
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_ssd1353_160x128_column_seq[] PROGMEM = {
U8G_ESC_CS(1),
U8G_ESC_ADR(0), 0x15,
U8G_ESC_ADR(1), 0x00, 0x9f,
U8G_ESC_ADR(0), 0x75,
U8G_ESC_ADR(1), 0x00, 0x7f,
U8G_ESC_ADR(0), 0x5c,
U8G_ESC_ADR(1),
U8G_ESC_CS(0),
U8G_ESC_END
};
static const uint8_t u8g_dev_ssd1353_160x128_sleep_on[] PROGMEM = {
U8G_ESC_CS(1),
U8G_ESC_ADR(0), 0xAE,
U8G_ESC_CS(0),
U8G_ESC_END
};
static const uint8_t u8g_dev_ssd1353_160x128_sleep_off[] PROGMEM = {
U8G_ESC_CS(1),
U8G_ESC_ADR(0), 0xAF,
U8G_ESC_CS(0),
U8G_ESC_END
};
#define RGB332_STREAM_BYTES 8
static uint8_t u8g_ssd1353_stream_bytes[RGB332_STREAM_BYTES*3];
uint8_t u8g_dev_ssd1353_160x128_332_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_50NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1353_160x128_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_FIRST:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1353_160x128_column_seq);
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_uint_t x;
uint8_t page_height;
uint8_t i;
uint8_t cnt;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
uint8_t *ptr = pb->buf;
u8g_SetChipSelect(u8g, dev, 1);
page_height = pb->p.page_y1;
page_height -= pb->p.page_y0;
page_height++;
for( i = 0; i < page_height; i++ )
{
for (x = 0; x < pb->width; x+=RGB332_STREAM_BYTES)
{
/* inline operation for better perf */
uint8_t *dest = u8g_ssd1353_stream_bytes;
for( cnt = 0; cnt < RGB332_STREAM_BYTES; cnt++ )
{
uint8_t val = *ptr++;
*dest++ = ((val & 0xe0) >> 2);
*dest++ = ((val & 0x1c) << 1);
*dest++ = ((val & 0x03) << 4);
}
u8g_WriteSequence(u8g, dev, RGB332_STREAM_BYTES*3, u8g_ssd1353_stream_bytes);
}
}
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1353_160x128_sleep_on);
break;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1353_160x128_sleep_off);
break;
}
return u8g_dev_pb8h8_base_fn(u8g, dev, msg, arg);
}
/*
* not tested and not released, just taken from ssd1351
*/
static uint8_t u8g_dev_ssd1353_160x128_r[256];
static uint8_t u8g_dev_ssd1353_160x128_g[256];
static uint8_t u8g_dev_ssd1353_160x128_b[256];
uint8_t u8g_dev_ssd1353_160x128_idx_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
// u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_50NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1353_160x128_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_SET_COLOR_ENTRY:
u8g_dev_ssd1353_160x128_r[ ((u8g_dev_arg_irgb_t *)arg)->idx ] = ((u8g_dev_arg_irgb_t *)arg)->r;
u8g_dev_ssd1353_160x128_g[ ((u8g_dev_arg_irgb_t *)arg)->idx ] = ((u8g_dev_arg_irgb_t *)arg)->g;
u8g_dev_ssd1353_160x128_b[ ((u8g_dev_arg_irgb_t *)arg)->idx ] = ((u8g_dev_arg_irgb_t *)arg)->b;
break;
case U8G_DEV_MSG_PAGE_FIRST:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1353_160x128_column_seq);
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
int x;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
uint8_t *ptr = pb->buf;
u8g_SetChipSelect(u8g, dev, 1);
for (x = 0; x < pb->width; x++)
{
u8g_WriteByte(u8g, dev, u8g_dev_ssd1353_160x128_r[(*ptr)>>2]);
u8g_WriteByte(u8g, dev, u8g_dev_ssd1353_160x128_g[(*ptr)>>2]);
u8g_WriteByte(u8g, dev, u8g_dev_ssd1353_160x128_b[(*ptr)>>2]);
ptr++;
}
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_GET_MODE:
return U8G_MODE_INDEX;
}
return u8g_dev_pb8h8_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_ssd1353_160x128_hicolor_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_50NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1353_160x128_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_FIRST:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1353_160x128_column_seq);
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
uint8_t i, j;
uint8_t page_height;
uint8_t *ptr = pb->buf;
u8g_SetChipSelect(u8g, dev, 1);
page_height = pb->p.page_y1;
page_height -= pb->p.page_y0;
page_height++;
for( j = 0; j < page_height; j++ )
{
for (i = 0; i < pb->width; i+=RGB332_STREAM_BYTES)
{
register uint8_t cnt, low, high, r, g, b;
uint8_t *dest = u8g_ssd1353_stream_bytes;
for( cnt = 0; cnt < RGB332_STREAM_BYTES; cnt++ )
{
low = *ptr++;
high = *ptr++;
r = high & ~7;
r >>= 2;
b = low & 31;
b <<= 1;
g = high & 7;
g <<= 3;
g |= (low>>5)&7;
*dest++ = r;
*dest++ = g;
*dest++ = b;
}
u8g_WriteSequence(u8g, dev, RGB332_STREAM_BYTES*3, u8g_ssd1353_stream_bytes);
}
}
u8g_SetChipSelect(u8g, dev, 0);
}
break; /* continue to base fn */
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1353_160x128_sleep_on);
break;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_ssd1353_160x128_sleep_off);
break;
}
return u8g_dev_pbxh16_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_ssd1353_160x128_byte_buf[WIDTH*PAGE_HEIGHT] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_ssd1353_160x128_byte_pb = { {PAGE_HEIGHT, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1353_160x128_byte_buf};
u8g_dev_t u8g_dev_ssd1353_160x128_332_sw_spi = { u8g_dev_ssd1353_160x128_332_fn, &u8g_dev_ssd1353_160x128_byte_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_ssd1353_160x128_332_hw_spi = { u8g_dev_ssd1353_160x128_332_fn, &u8g_dev_ssd1353_160x128_byte_pb, U8G_COM_HW_SPI };
//u8g_dev_t u8g_dev_ssd1353_160x128_idx_sw_spi = { u8g_dev_ssd1353_160x128_idx_fn, &u8g_dev_ssd1353_160x128_byte_pb, U8G_COM_SW_SPI };
//u8g_dev_t u8g_dev_ssd1353_160x128_idx_hw_spi = { u8g_dev_ssd1353_160x128_idx_fn, &u8g_dev_ssd1353_160x128_byte_pb, U8G_COM_HW_SPI };
/* only half of the height, because two bytes are needed for one pixel */
u8g_pb_t u8g_dev_ssd1353_160x128_hicolor_byte_pb = { {PAGE_HEIGHT/2, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1353_160x128_byte_buf};
u8g_dev_t u8g_dev_ssd1353_160x128_hicolor_sw_spi = { u8g_dev_ssd1353_160x128_hicolor_fn, &u8g_dev_ssd1353_160x128_hicolor_byte_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_ssd1353_160x128_hicolor_hw_spi = { u8g_dev_ssd1353_160x128_hicolor_fn, &u8g_dev_ssd1353_160x128_hicolor_byte_pb, U8G_COM_HW_SPI };
/* the 4x buffer is removed since it does not fit the RAM space of very small MCUs */
#if 0
uint8_t u8g_dev_ssd1353_160x128_4x_byte_buf[WIDTH*PAGE_HEIGHT*4] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_ssd1353_160x128_4x_332_byte_pb = { {PAGE_HEIGHT*4, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1353_160x128_4x_byte_buf};
u8g_dev_t u8g_dev_ssd1353_160x128_4x_332_sw_spi = { u8g_dev_ssd1353_160x128_332_fn, &u8g_dev_ssd1353_160x128_4x_332_byte_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_ssd1353_160x128_4x_332_hw_spi = { u8g_dev_ssd1353_160x128_332_fn, &u8g_dev_ssd1353_160x128_4x_332_byte_pb, U8G_COM_HW_SPI };
u8g_pb_t u8g_dev_ssd1353_160x128_4x_hicolor_byte_pb = { {PAGE_HEIGHT/2*4, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_ssd1353_160x128_4x_byte_buf};
u8g_dev_t u8g_dev_ssd1353_160x128_4x_hicolor_sw_spi = { u8g_dev_ssd1353_160x128_hicolor_fn, &u8g_dev_ssd1353_160x128_4x_hicolor_byte_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_ssd1353_160x128_4x_hicolor_hw_spi = { u8g_dev_ssd1353_160x128_hicolor_fn, &u8g_dev_ssd1353_160x128_4x_hicolor_byte_pb, U8G_COM_HW_SPI };
#endif
@@ -1,203 +0,0 @@
/*
u8g_dev_st7565_64128n.c (Displaytech)
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 64
#define PAGE_HEIGHT 8
/* init sequence from https://github.com/adafruit/ST7565-LCD/blob/master/ST7565/ST7565.cpp */
static const uint8_t u8g_dev_st7565_64128n_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
0x0A2, /* 0x0a2: LCD bias 1/9 (according to Displaytech 64128N datasheet) */
0x0A0, /* Normal ADC Select (according to Displaytech 64128N datasheet) */
0x0c8, /* common output mode: set scan direction normal operation/SHL Select, 0x0c0 --> SHL = 0, normal, 0x0c8 --> SHL = 1 */
0x040, /* Display start line for Displaytech 64128N */
0x028 | 0x04, /* power control: turn on voltage converter */
U8G_ESC_DLY(50), /* delay 50 ms */
0x028 | 0x06, /* power control: turn on voltage regulator */
U8G_ESC_DLY(50), /* delay 50 ms */
0x028 | 0x07, /* power control: turn on voltage follower */
U8G_ESC_DLY(50), /* delay 50 ms */
0x010, /* Set V0 voltage resistor ratio. Setting for controlling brightness of Displaytech 64128N */
0x0a6, /* display normal, bit val 0: LCD pixel off. */
0x081, /* set contrast */
0x01e, /* Contrast value. Setting for controlling brightness of Displaytech 64128N */
0x0af, /* display on */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a5, /* display all points, ST7565 */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a4, /* normal display */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_64128n_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0x10 */
0x000, /* set lower 4 bit of the col adr to 0x00. Changed for DisplayTech 64128N */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_64128n_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0ac, /* static indicator off */
0x000, /* indicator register set (not sure if this is required) */
0x0ae, /* display off */
0x0a5, /* all points on */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_64128n_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0a4, /* all points off */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_st7565_64128n_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_sleep_off);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_st7565_64128n_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
u8g_SetChipSelect(u8g, dev, 0);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_64128n_sleep_off);
return 1;
}
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_st7565_64128n_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_64128n_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_st7565_64128n_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_64128n_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_st7565_64128n_parallel, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_64128n_fn, U8G_COM_PARALLEL);
uint8_t u8g_dev_st7565_64128n_2x_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_st7565_64128n_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_st7565_64128n_2x_buf};
u8g_dev_t u8g_dev_st7565_64128n_2x_sw_spi = { u8g_dev_st7565_64128n_2x_fn, &u8g_dev_st7565_64128n_2x_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_st7565_64128n_2x_hw_spi = { u8g_dev_st7565_64128n_2x_fn, &u8g_dev_st7565_64128n_2x_pb, U8G_COM_HW_SPI };
u8g_dev_t u8g_dev_st7565_64128n_2x_hw_parallel = { u8g_dev_st7565_64128n_2x_fn, &u8g_dev_st7565_64128n_2x_pb, U8G_COM_PARALLEL };
@@ -1,190 +0,0 @@
/*
u8g_dev_st7565_dogm128.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 64
#define PAGE_HEIGHT 8
const uint8_t u8g_dev_st7565_dogm128_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x040, /* set display start line */
0x0a1, /* ADC set to reverse */
0x0c0, /* common output mode: set scan direction normal operation */
0x0a6, /* display normal (none reverse) */
0x0a2, /* LCD bias 1/9 */
0x02f, /* all power control circuits on */
0x0f8, /* set booster ratio to */
0x000, /* 4x */
0x027, /* set V0 voltage resistor ratio to large */
0x081, /* set contrast */
0x018, /* contrast value, EA default: 0x016 */
0x0ac, /* indicator */
0x000, /* disable */
0x0a4, /* normal display (not all on) */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_dogm128_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0 */
0x000, /* set lower 4 bit of the col adr to 0 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_dogm128_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0ac, /* static indicator off */
0x000, /* indicator register set (not sure if this is required) */
0x0ae, /* display off */
0x0a5, /* all points on */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_dogm128_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0a4, /* all points off */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_st7565_dogm128_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_sleep_off);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_st7565_dogm128_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
u8g_SetChipSelect(u8g, dev, 0);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm128_sleep_off);
return 1;
}
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_st7565_dogm128_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_dogm128_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_st7565_dogm128_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_dogm128_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_st7565_dogm128_parallel, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_dogm128_fn, U8G_COM_PARALLEL);
uint8_t u8g_dev_st7565_dogm128_2x_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_st7565_dogm128_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_st7565_dogm128_2x_buf};
u8g_dev_t u8g_dev_st7565_dogm128_2x_sw_spi = { u8g_dev_st7565_dogm128_2x_fn, &u8g_dev_st7565_dogm128_2x_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_st7565_dogm128_2x_hw_spi = { u8g_dev_st7565_dogm128_2x_fn, &u8g_dev_st7565_dogm128_2x_pb, U8G_COM_HW_SPI };
u8g_dev_t u8g_dev_st7565_dogm128_2x_parallel = { u8g_dev_st7565_dogm128_2x_fn, &u8g_dev_st7565_dogm128_2x_pb, U8G_COM_PARALLEL };
@@ -1,157 +0,0 @@
/*
u8g_dev_st7565_dogm132.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 132
#define HEIGHT 32
#define PAGE_HEIGHT 8
static const uint8_t u8g_dev_st7565_dogm132_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x040, /* set display start line to 0 */
0x0a1, /* ADC set to reverse */
0x0c0, /* common output mode */
0x0a6, /* display normal, bit val 0: LCD pixel off. */
0x0a2, /* LCD bias 1/9 */
0x02f, /* all power control circuits on */
0x0f8, /* set booster ratio to */
0x000, /* 4x */
0x023, /* set V0 voltage resistor ratio to large */
0x081, /* set contrast */
0x01f, /* contrast value, EA default: 0x01f */
0x0ac, /* indicator */
0x000, /* disable */
0x0af, /* display on */
#ifdef OBSOLETE_DOGM128
0x040, /* set display start line */
0x0c8, /* set scan direction inverse operation */
0x0a2, /* LCD bias 1/9 */
0x02f, /* all power control circuits on */
0x0f8, /* set booster ratio to */
0x000, /* 4x */
0x027, /* set V0 voltage resistor ratio to large */
0x081, /* set contrast */
0x018, /* contrast value, EA default: 0x016 */
0x0ac, /* indicator */
0x000, /* disable */
0x0af, /* display on */
#endif
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a5, /* display all points, ST7565 */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a4, /* normal display */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_dogm132_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0 */
0x000, /* set lower 4 bit of the col adr to 0 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_dogm132_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0ac, /* static indicator off */
0x000, /* indicator register set (not sure if this is required) */
0x0ae, /* display off */
0x0a5, /* all points on */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_dogm132_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0a4, /* all points off */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_st7565_dogm132_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm132_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm132_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm132_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_dogm132_sleep_off);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_st7565_dogm132_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_dogm132_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_st7565_dogm132_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_dogm132_fn, U8G_COM_HW_SPI);
@@ -1,205 +0,0 @@
/*
u8g_dev_st7565_lm6059.c (Adafruit display)
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 64
#define PAGE_HEIGHT 8
/* init sequence from https://github.com/adafruit/ST7565-LCD/blob/master/ST7565/ST7565.cpp */
static const uint8_t u8g_dev_st7565_lm6059_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
0x0a3, /* 0x0a2: LCD bias 1/9 (suggested for the LM6063), 0x0a3: Used by Adafruit, 0x0a2 does not work */
/* the LM6059 vs LM6063, ADC and SHL have inverted settings */
0x0a0, /* 0x0a1: ADC set to normal (suggested for the LM6059), 0x0a0: Used by Adafruit -> normal mode */
0x0c8, /* common output mode: set scan direction normal operation/SHL Select, 0x0c0 --> SHL = 0, normal, 0x0c8 --> SHL = 1 */
0x060, /* set display start line */
0x028 | 0x04, /* power control: turn on voltage converter */
U8G_ESC_DLY(50), /* delay 50 ms */
0x028 | 0x06, /* power control: turn on voltage regulator */
U8G_ESC_DLY(50), /* delay 50 ms */
0x028 | 0x07, /* power control: turn on voltage follower */
U8G_ESC_DLY(50), /* delay 50 ms */
0x026, /* set V0 voltage resistor ratio to 6 (Adafruit Value, no info from LM6063 Manual) */
0x0a6, /* display normal, bit val 0: LCD pixel off. */
0x081, /* set contrast */
0x018, /* contrast value*/
/*0x0ac,*/ /* indicator */
/*0x000,*/ /* disable */
0x0af, /* display on */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a5, /* display all points, ST7565 */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a4, /* normal display */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_lm6059_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0 */
0x001, /* set lower 4 bit of the col adr */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_lm6059_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0ac, /* static indicator off */
0x000, /* indicator register set (not sure if this is required) */
0x0ae, /* display off */
0x0a5, /* all points on */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_lm6059_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0a4, /* all points off */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_st7565_lm6059_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_sleep_off);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_st7565_lm6059_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
u8g_SetChipSelect(u8g, dev, 0);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6059_sleep_off);
return 1;
}
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_st7565_lm6059_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_lm6059_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_st7565_lm6059_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_lm6059_fn, U8G_COM_HW_SPI);
uint8_t u8g_dev_st7565_lm6059_2x_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_st7565_lm6059_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_st7565_lm6059_2x_buf};
u8g_dev_t u8g_dev_st7565_lm6059_2x_sw_spi = { u8g_dev_st7565_lm6059_2x_fn, &u8g_dev_st7565_lm6059_2x_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_st7565_lm6059_2x_hw_spi = { u8g_dev_st7565_lm6059_2x_fn, &u8g_dev_st7565_lm6059_2x_pb, U8G_COM_HW_SPI };
@@ -1,236 +0,0 @@
/*
u8g_dev_st7565_lm6063.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 64
#define PAGE_HEIGHT 8
#ifdef OLD_ADAFRUIT_CODE
static const uint8_t OLD_u8g_dev_st7565_lm6063_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x040, /* set display start line */
0x0a1, /* ADC set to reverse */
0x0c8, /* common output mode: set scan direction normal operation/SHL Select / 17 Jan: seems to be a bug, must be 0x0c0 */
0x0a6, /* display normal, bit val 0: LCD pixel off. */
0x0a2, /* LCD bias 1/9 */
0x02f, /* all power control circuits on */
/*0x0f8,*/ /* set booster ratio to */
/*0x000, */ /* 4x */
/*0x027,*/ /* set V0 voltage resistor ratio to large */
0x081, /* set contrast */
0x018, /* contrast value*/
0x0ac, /* indicator */
0x000, /* disable */
0x0af, /* display on */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a5, /* display all points, ST7565 */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a4, /* normal display */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
#endif
/* init sequence from https://github.com/adafruit/ST7565-LCD/blob/master/ST7565/ST7565.cpp */
static const uint8_t u8g_dev_st7565_lm6063_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
0x0a3, /* 0x0a2: LCD bias 1/9 (suggested for the LM6063), 0x0a3: Used by Adafruit */
0x0a1, /* 0x0a1: ADC set to reverse (suggested for the LM6063), 0x0a0: Used by Adafruit -> normal mode */
0x0c0, /* common output mode: set scan direction normal operation/SHL Select, 0x0c0 --> SHL = 0, normal, 0x0c8 --> SHL = 1 */
0x040, /* set display start line */
0x028 | 0x04, /* power control: turn on voltage converter */
U8G_ESC_DLY(50), /* delay 50 ms */
0x028 | 0x06, /* power control: turn on voltage regulator */
U8G_ESC_DLY(50), /* delay 50 ms */
0x028 | 0x07, /* power control: turn on voltage follower */
U8G_ESC_DLY(50), /* delay 50 ms */
0x026, /* set V0 voltage resistor ratio to 6 (Adafruit Value, no info from LM6063 Manual) */
0x0a6, /* display normal, bit val 0: LCD pixel off. */
0x081, /* set contrast */
0x018, /* contrast value*/
/*0x0ac,*/ /* indicator */
/*0x000,*/ /* disable */
0x0af, /* display on */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a5, /* display all points, ST7565 */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a4, /* normal display */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_lm6063_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0 */
0x000, /* set lower 4 bit of the col adr to 0 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_st7565_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0ac, /* static indicator off */
0x000, /* indicator register set (not sure if this is required) */
0x0ae, /* display off */
0x0a5, /* all points on */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_st7565_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0a4, /* all points off */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_st7565_lm6063_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6063_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6063_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_st7565_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_st7565_sleep_off);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_st7565_lm6063_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6063_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6063_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
u8g_SetChipSelect(u8g, dev, 0);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_lm6063_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_st7565_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_st7565_sleep_off);
return 1;
}
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_st7565_lm6063_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_lm6063_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_st7565_lm6063_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_lm6063_fn, U8G_COM_HW_SPI);
uint8_t u8g_dev_st7565_lm6063_2x_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_st7565_lm6063_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_st7565_lm6063_2x_buf};
u8g_dev_t u8g_dev_st7565_lm6063_2x_sw_spi = { u8g_dev_st7565_lm6063_2x_fn, &u8g_dev_st7565_lm6063_2x_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_st7565_lm6063_2x_hw_spi = { u8g_dev_st7565_lm6063_2x_fn, &u8g_dev_st7565_lm6063_2x_pb, U8G_COM_HW_SPI };
@@ -1,145 +0,0 @@
/*
u8g_dev_st7565_nhd_c12832.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 32
#define PAGE_HEIGHT 8
static const uint8_t u8g_dev_st7565_c12832_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x040, /* set display start line to 0 */
0x0a0, /* ADC set, values: a0=normal, a1=reverse */
0x0c8, /* common output mode: c0=normal, c8=reverse */
0x0a6, /* display normal, bit val 0: LCD pixel off. */
0x0a2, /* LCD bias 1/9 */
0x02f, /* all power control circuits on */
0x0f8, /* set booster ratio to */
0x000, /* 4x */
0x023, /* set V0 voltage resistor ratio to large */
0x081, /* set contrast */
0x00a, /* contrast value */
0x0ac, /* indicator */
0x000, /* disable */
0x0af, /* display on */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a5, /* display all points, ST7565 */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a4, /* normal display */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_c12832_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0 */
0x000, /* set lower 4 bit of the col adr to 0 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_c12832_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0ac, /* static indicator off */
0x000, /* indicator register set (not sure if this is required) */
0x0ae, /* display off */
0x0a5, /* all points on */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_c12832_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0a4, /* all points off */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_st7565_c12832_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_c12832_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_c12832_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_c12832_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_c12832_sleep_off);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_st7565_nhd_c12832_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_c12832_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_st7565_nhd_c12832_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_c12832_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_st7565_nhd_c12832_parallel, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_c12832_fn, U8G_COM_PARALLEL);
U8G_PB_DEV(u8g_dev_st7565_nhd_c12832_hw_usart_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_c12832_fn, U8G_COM_HW_USART_SPI);
@@ -1,194 +0,0 @@
/*
u8g_dev_st7565_nhd_c12864.c
Support for the NHD-C12864A1Z-FSB-FBW (Newhaven Display)
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 64
#define PAGE_HEIGHT 8
const uint8_t u8g_dev_st7565_nhd_c12864_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(10), /* do reset low pulse with (10*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x040, /* set display start line */
0x0a1, /* ADC set to reverse */
0x0c0, /* common output mode: set scan direction normal operation */
0x0a6, /* display normal, bit val 0: LCD pixel off. */
0x0a2, /* LCD bias 1/9 */
0x02f, /* all power control circuits on */
0x0f8, /* set booster ratio to */
0x000, /* 4x */
0x027, /* set V0 voltage resistor ratio to large */
0x081, /* set contrast */
0x008, /* contrast: 0x008 is a good value for NHD C12864, Nov 2012: User reports that 0x1a is much better */
0x0ac, /* indicator */
0x000, /* disable */
0x0af, /* display on */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a5, /* display all points, ST7565 */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a4, /* normal display */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_nhd_c12864_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0 */
0x004, /* set lower 4 bit of the col adr to 4 (NHD C12864) */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_c12864_sleep_on[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0ac, /* static indicator off */
0x000, /* indicator register set (not sure if this is required) */
0x0ae, /* display off */
0x0a5, /* all points on */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_st7565_c12864_sleep_off[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x0a4, /* all points off */
0x0af, /* display on */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_CS(0), /* disable chip, bugfix 12 nov 2014 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_st7565_nhd_c12864_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_nhd_c12864_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_nhd_c12864_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_c12864_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_c12864_sleep_off);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_st7565_nhd_c12864_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_nhd_c12864_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_nhd_c12864_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
u8g_SetChipSelect(u8g, dev, 0);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_nhd_c12864_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
case U8G_DEV_MSG_SLEEP_ON:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_c12864_sleep_on);
return 1;
case U8G_DEV_MSG_SLEEP_OFF:
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7565_c12864_sleep_off);
return 1;
}
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_st7565_nhd_c12864_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_nhd_c12864_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_st7565_nhd_c12864_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7565_nhd_c12864_fn, U8G_COM_HW_SPI);
uint8_t u8g_dev_st7565_nhd_c12864_2x_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_st7565_nhd_c12864_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_st7565_nhd_c12864_2x_buf};
u8g_dev_t u8g_dev_st7565_nhd_c12864_2x_sw_spi = { u8g_dev_st7565_nhd_c12864_2x_fn, &u8g_dev_st7565_nhd_c12864_2x_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_st7565_nhd_c12864_2x_hw_spi = { u8g_dev_st7565_nhd_c12864_2x_fn, &u8g_dev_st7565_nhd_c12864_2x_pb, U8G_COM_HW_SPI };
@@ -1,420 +0,0 @@
/*
u8g_dev_st7687_c144mvgd.c (1.44" TFT)
Status: Started, but not finished
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 128
#define PAGE_HEIGHT 8
#ifdef FIRST_VERSION
/*
see also: read.pudn.com/downloads115/sourcecode/app/484503/LCM_Display.c__.htm
http://en.pudn.com/downloads115/sourcecode/app/detail484503_en.html
*/
static const uint8_t u8g_dev_st7687_c144mvgd_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
0x001, /* A0=0, SW reset */
U8G_ESC_DLY(200), /* delay 200 ms */
0x0d7, /* EEPROM data auto re-load control */
U8G_ESC_ADR(1), /* data mode */
0x09f, /* ARD = 1 */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0e0, /* EEPROM control in */
U8G_ESC_ADR(1), /* data mode */
0x000, /* */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_DLY(100), /* delay 100 ms */
#ifdef NOT_REQUIRED
0x0fa, /* EEPROM function selection 8.1.66 */
U8G_ESC_ADR(1), /* data mode */
0x000, /* */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_DLY(100), /* delay 100 ms */
#endif
0x0e3, /* Read from EEPROM, 8.1.55 */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0e1, /* EEPROM control out, 8.1.53 */
U8G_ESC_DLY(100), /* delay 100 ms */
//0x028, /* display off */
0x011, /* Sleep out & booster on */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0c0, /* Vop setting, 8.1.42 */
U8G_ESC_ADR(1), /* data mode */
0x000, /* */
0x001, /* 3.6 + 256*0.04 = 13.84 Volt */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0c3, /* Bias selection, 8.1.45 */
U8G_ESC_ADR(1), /* data mode */
0x003,
U8G_ESC_ADR(0), /* instruction mode */
0x0c4, /* Booster setting 8.1.46 */
U8G_ESC_ADR(1), /* data mode */
0x007,
U8G_ESC_ADR(0), /* instruction mode */
0x0c5, /* ??? */
U8G_ESC_ADR(1), /* data mode */
0x001,
U8G_ESC_ADR(0), /* instruction mode */
0x0cb, /* FV3 with Booster x2 control, 8.1.47 */
U8G_ESC_ADR(1), /* data mode */
0x001,
U8G_ESC_ADR(0), /* instruction mode */
0x036, /* Memory data access control, 8.1.28 */
U8G_ESC_ADR(1), /* data mode */
0x080,
U8G_ESC_ADR(0), /* instruction mode */
0x0b5, /* N-line control, 8.1.37 */
U8G_ESC_ADR(1), /* data mode */
0x089,
U8G_ESC_ADR(0), /* instruction mode */
0x0d0, /* Analog circuit setting, 8.1.49 */
U8G_ESC_ADR(1), /* data mode */
0x01d,
U8G_ESC_ADR(0), /* instruction mode */
0x0b7, /* Com/Seg Scan Direction, 8.1.38 */
U8G_ESC_ADR(1), /* data mode */
0x040,
U8G_ESC_ADR(0), /* instruction mode */
0x025, /* Write contrast, 8.1.17 */
U8G_ESC_ADR(1), /* data mode */
0x03f,
U8G_ESC_ADR(0), /* instruction mode */
0x03a, /* Interface pixel format, 8.1.32 */
U8G_ESC_ADR(1), /* data mode */
0x004, /* 3: 12 bit per pixel Type A, 4: 12 bit Type B, 5: 16bit per pixel */
U8G_ESC_ADR(0), /* instruction mode */
0x0b0, /* Display Duty setting, 8.1.34 */
U8G_ESC_ADR(1), /* data mode */
0x07f,
U8G_ESC_ADR(0), /* instruction mode */
0x0f0, /* Frame Freq. in Temp range A,B,C and D, 8.1.59 */
U8G_ESC_ADR(1), /* data mode */
0x007,
0x00c,
0x00c,
0x015,
U8G_ESC_ADR(0), /* instruction mode */
0x0f9, /* Frame RGB Value, 8.1.65 */
U8G_ESC_ADR(1), /* data mode */
0x000,
0x005,
0x008,
0x00a,
0x00c,
0x00e,
0x010,
0x011,
0x012,
0x013,
0x014,
0x015,
0x016,
0x018,
0x01a,
0x01b,
U8G_ESC_ADR(0), /* instruction mode */
0x0f9, /* Frame RGB Value, 8.1.65 */
U8G_ESC_ADR(1), /* data mode */
0x000,
0x000,
0x000,
0x000,
0x033,
0x055,
0x055,
0x055,
U8G_ESC_ADR(0), /* instruction mode */
0x029, /* display on */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
#else
/*
http://www.waitingforfriday.com/images/e/e3/FTM144D01N_test.zip
*/
static const uint8_t u8g_dev_st7687_c144mvgd_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
0x011, /* Sleep out & booster on */
U8G_ESC_DLY(5), /* delay 5 ms */
0x03a, /* Interface pixel format, 8.1.32 */
U8G_ESC_ADR(1), /* data mode */
0x004, /* 3: 12 bit per pixel Type A, 4: 12 bit Type B, 5: 16bit per pixel */
U8G_ESC_ADR(0), /* instruction mode */
0x026, /* SET_GAMMA_CURVE */
U8G_ESC_ADR(1), /* data mode */
0x004,
U8G_ESC_ADR(0), /* instruction mode */
0x0f2, /* GAM_R_SEL */
U8G_ESC_ADR(1), /* data mode */
0x001, /* enable gamma adj */
U8G_ESC_ADR(0), /* instruction mode */
0x0e0, /* POSITIVE_GAMMA_CORRECT */
U8G_ESC_ADR(1), /* data mode */
0x3f,
0x25,
0x1c,
0x1e,
0x20,
0x12,
0x2a,
0x90,
0x24,
0x11,
0x00,
0x00,
0x00,
0x00,
0x00,
U8G_ESC_ADR(0), /* instruction mode */
0x0e1, /* NEGATIVE_GAMMA_CORRECT */
U8G_ESC_ADR(1), /* data mode */
0x20,
0x20,
0x20,
0x20,
0x05,
0x00,
0x15,
0xa7,
0x3d,
0x18,
0x25,
0x2a,
0x2b,
0x2b,
0x3a,
U8G_ESC_ADR(0), /* instruction mode */
0x0b1, /* FRAME_RATE_CONTROL1 */
U8G_ESC_ADR(1), /* data mode */
0x008, /* DIVA = 8 */
0x008, /* VPA = 8 */
U8G_ESC_ADR(0), /* instruction mode */
0x0b4, /* DISPLAY_INVERSION */
U8G_ESC_ADR(1), /* data mode */
0x007, /* NLA = 1, NLB = 1, NLC = 1 (all on Frame Inversion) */
U8G_ESC_ADR(0), /* instruction mode */
0x0c0, /* POWER_CONTROL1 */
U8G_ESC_ADR(1), /* data mode */
0x00a, /* VRH = 10: GVDD = 4.30 */
0x002, /* VC = 2: VCI1 = 2.65 */
U8G_ESC_ADR(0), /* instruction mode */
0x0c1, /* POWER_CONTROL2 */
U8G_ESC_ADR(1), /* data mode */
0x002, /* BT = 2: AVDD = 2xVCI1, VCL = -1xVCI1, VGH = 5xVCI1, VGL = -2xVCI1 */
U8G_ESC_ADR(0), /* instruction mode */
0x0c5, /* VCOM_CONTROL1 */
U8G_ESC_ADR(1), /* data mode */
0x050, /* VMH = 80: VCOMH voltage = 4.5 */
0x05b, /* VML = 91: VCOML voltage = -0.225 */
U8G_ESC_ADR(0), /* instruction mode */
0x0c7, /* VCOM_OFFSET_CONTROL */
U8G_ESC_ADR(1), /* data mode */
0x040, /* nVM = 0, VMF = 64: VCOMH output = VMH, VCOML output = VML */
U8G_ESC_ADR(0), /* instruction mode */
0x02a, /* SET_COLUMN_ADDRESS */
U8G_ESC_ADR(1), /* data mode */
0x000, /* */
0x000, /* */
0x000, /* */
0x07f, /* */
U8G_ESC_ADR(0), /* instruction mode */
0x02b, /* SET_PAGE_ADDRESS */
U8G_ESC_ADR(1), /* data mode */
0x000, /* */
0x000, /* */
0x000, /* */
0x07f, /* */
U8G_ESC_ADR(0), /* instruction mode */
0x036, /* SET_ADDRESS_MODE */
U8G_ESC_ADR(1), /* data mode */
0x000, /* Select display orientation */
U8G_ESC_ADR(0), /* instruction mode */
0x029, /* display on */
0x02c, /* write start */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
#endif
/* calculate bytes for Type B 4096 color display */
static uint8_t get_byte_1(uint8_t v)
{
v >>= 4;
v &= 0x0e;
return v;
}
static uint8_t get_byte_2(uint8_t v)
{
uint8_t w;
w = v;
w &= 3;
w = (w<<2) | w;
v <<= 3;
v &= 0x0e0;
w |= v;
return w;
}
uint8_t u8g_dev_st7687_c144mvgd_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7687_c144mvgd_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t y, i, j;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_SetChipSelect(u8g, dev, 1);
y = pb->p.page_y0;
ptr = pb->buf;
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x02a ); /* Column address set 8.1.20 */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteByte(u8g, dev, 0x000 ); /* x0 */
u8g_WriteByte(u8g, dev, WIDTH-1 ); /* x1 */
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x02b ); /* Row address set 8.1.21 */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteByte(u8g, dev, y ); /* y0 */
u8g_WriteByte(u8g, dev, y+PAGE_HEIGHT-1 ); /* y1 */
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x02c ); /* Memory write 8.1.22 */
u8g_SetAddress(u8g, dev, 1); /* data mode */
for( i = 0; i < PAGE_HEIGHT; i ++ )
{
for( j = 0; j < WIDTH; j ++ )
{
u8g_WriteByte(u8g, dev, get_byte_1(*ptr) );
u8g_WriteByte(u8g, dev, get_byte_2(*ptr) );
ptr++;
}
}
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb8h8_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_st7687_c144mvgd_8h8_buf[WIDTH*8] U8G_NOCOMMON ;
u8g_pb_t u8g_st7687_c144mvgd_8h8_pb = { {8, HEIGHT, 0, 0, 0}, WIDTH, u8g_st7687_c144mvgd_8h8_buf};
u8g_dev_t u8g_dev_st7687_c144mvgd_sw_spi = { u8g_dev_st7687_c144mvgd_fn, &u8g_st7687_c144mvgd_8h8_pb, u8g_com_arduino_sw_spi_fn };
u8g_dev_t u8g_dev_st7687_c144mvgd_8bit = { u8g_dev_st7687_c144mvgd_fn, &u8g_st7687_c144mvgd_8h8_pb, U8G_COM_PARALLEL };
@@ -1,175 +0,0 @@
/*
u8g_dev_st7920_128x64.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 64
#define PAGE_HEIGHT 8
/* init sequence from https://github.com/adafruit/ST7565-LCD/blob/master/ST7565/ST7565.cpp */
static const uint8_t u8g_dev_st7920_128x64_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
U8G_ESC_DLY(100), /* 8 Dez 2012: additional delay 100 ms because of reset*/
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_DLY(50), /* delay 50 ms */
0x038, /* 8 Bit interface (DL=1), basic instruction set (RE=0) */
0x00c, /* display on, cursor & blink off; 0x08: all off */
0x006, /* Entry mode: Cursor move to right ,DDRAM address counter (AC) plus 1, no shift */
0x002, /* disable scroll, enable CGRAM adress */
0x001, /* clear RAM, needs 1.6 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_st7920_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_128x64_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t y, i;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_SetChipSelect(u8g, dev, 1);
y = pb->p.page_y0;
ptr = pb->buf;
for( i = 0; i < 8; i ++ )
{
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x03e ); /* enable extended mode */
if ( y < 32 )
{
u8g_WriteByte(u8g, dev, 0x080 | y ); /* y pos */
u8g_WriteByte(u8g, dev, 0x080 ); /* set x pos to 0*/
}
else
{
u8g_WriteByte(u8g, dev, 0x080 | (y-32) ); /* y pos */
u8g_WriteByte(u8g, dev, 0x080 | 8); /* set x pos to 64*/
}
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, WIDTH/8, ptr);
ptr += WIDTH/8;
y++;
}
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb8h1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_st7920_128x64_4x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_128x64_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t y, i;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_SetChipSelect(u8g, dev, 1);
y = pb->p.page_y0;
ptr = pb->buf;
for( i = 0; i < 32; i ++ )
{
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x03e ); /* enable extended mode */
if ( y < 32 )
{
u8g_WriteByte(u8g, dev, 0x080 | y ); /* y pos */
u8g_WriteByte(u8g, dev, 0x080 ); /* set x pos to 0*/
}
else
{
u8g_WriteByte(u8g, dev, 0x080 | (y-32) ); /* y pos */
u8g_WriteByte(u8g, dev, 0x080 | 8); /* set x pos to 64*/
}
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, WIDTH/8, ptr);
ptr += WIDTH/8;
y++;
}
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb32h1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_st7920_128x64_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7920_128x64_fn, U8G_COM_ST7920_SW_SPI);
U8G_PB_DEV(u8g_dev_st7920_128x64_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7920_128x64_fn, U8G_COM_ST7920_HW_SPI);
U8G_PB_DEV(u8g_dev_st7920_128x64_8bit, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7920_128x64_fn, U8G_COM_FAST_PARALLEL);
U8G_PB_DEV(u8g_dev_st7920_128x64_custom, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7920_128x64_fn, u8g_com_arduino_st7920_custom_fn);
#define QWIDTH (WIDTH*4)
uint8_t u8g_dev_st7920_128x64_4x_buf[QWIDTH] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_st7920_128x64_4x_pb = { {32, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_st7920_128x64_4x_buf};
u8g_dev_t u8g_dev_st7920_128x64_4x_sw_spi = { u8g_dev_st7920_128x64_4x_fn, &u8g_dev_st7920_128x64_4x_pb, U8G_COM_ST7920_SW_SPI };
u8g_dev_t u8g_dev_st7920_128x64_4x_hw_spi = { u8g_dev_st7920_128x64_4x_fn, &u8g_dev_st7920_128x64_4x_pb, U8G_COM_ST7920_HW_SPI };
u8g_dev_t u8g_dev_st7920_128x64_4x_8bit = { u8g_dev_st7920_128x64_4x_fn, &u8g_dev_st7920_128x64_4x_pb, U8G_COM_FAST_PARALLEL };
u8g_dev_t u8g_dev_st7920_128x64_4x_custom = { u8g_dev_st7920_128x64_4x_fn, &u8g_dev_st7920_128x64_4x_pb, u8g_com_arduino_st7920_custom_fn };
@@ -1,151 +0,0 @@
/*
u8g_dev_st7920_192x32.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 192
#define HEIGHT 32
/* init sequence from https://github.com/adafruit/ST7565-LCD/blob/master/ST7565/ST7565.cpp */
static const uint8_t u8g_dev_st7920_192x32_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
U8G_ESC_DLY(100), /* 8 Dez 2012: additional delay 100 ms because of reset*/
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_DLY(50), /* delay 50 ms */
0x038, /* 8 Bit interface (DL=1), basic instruction set (RE=0) */
0x00c, /* display on, cursor & blink off; 0x08: all off */
0x006, /* Entry mode: Cursor move to right ,DDRAM address counter (AC) plus 1, no shift */
0x002, /* disable scroll, enable CGRAM adress */
0x001, /* clear RAM, needs 1.6 ms */
U8G_ESC_DLY(100), /* delay 10 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_st7920_192x32_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_192x32_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t y, i;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_SetChipSelect(u8g, dev, 1);
y = pb->p.page_y0;
ptr = pb->buf;
for( i = 0; i < 8; i ++ )
{
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x03e ); /* enable extended mode */
u8g_WriteByte(u8g, dev, 0x080 | y ); /* y pos */
u8g_WriteByte(u8g, dev, 0x080 ); /* set x pos to 0*/
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, WIDTH/8, ptr);
ptr += WIDTH/8;
y++;
}
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb8h1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_st7920_192x32_4x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_192x32_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t y, i;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_SetChipSelect(u8g, dev, 1);
y = pb->p.page_y0;
ptr = pb->buf;
for( i = 0; i < 32; i ++ )
{
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x03e ); /* enable extended mode */
u8g_WriteByte(u8g, dev, 0x080 | y ); /* y pos */
u8g_WriteByte(u8g, dev, 0x080 ); /* set x pos to 0*/
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, WIDTH/8, ptr);
ptr += WIDTH/8;
y++;
}
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb32h1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_st7920_192x32_sw_spi, WIDTH, HEIGHT, 8, u8g_dev_st7920_192x32_fn, U8G_COM_ST7920_SW_SPI);
U8G_PB_DEV(u8g_dev_st7920_192x32_hw_spi, WIDTH, HEIGHT, 8, u8g_dev_st7920_192x32_fn, U8G_COM_ST7920_HW_SPI);
U8G_PB_DEV(u8g_dev_st7920_192x32_8bit, WIDTH, HEIGHT, 8, u8g_dev_st7920_192x32_fn, U8G_COM_FAST_PARALLEL);
#define QWIDTH (WIDTH*4)
uint8_t u8g_dev_st7920_192x32_4x_buf[QWIDTH] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_st7920_192x32_4x_pb = { {32, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_st7920_192x32_4x_buf};
u8g_dev_t u8g_dev_st7920_192x32_4x_sw_spi = { u8g_dev_st7920_192x32_4x_fn, &u8g_dev_st7920_192x32_4x_pb, U8G_COM_ST7920_SW_SPI };
u8g_dev_t u8g_dev_st7920_192x32_4x_hw_spi = { u8g_dev_st7920_192x32_4x_fn, &u8g_dev_st7920_192x32_4x_pb, U8G_COM_ST7920_HW_SPI };
u8g_dev_t u8g_dev_st7920_192x32_4x_8bit = { u8g_dev_st7920_192x32_4x_fn, &u8g_dev_st7920_192x32_4x_pb, U8G_COM_FAST_PARALLEL };
@@ -1,154 +0,0 @@
/*
u8g_dev_st7920_202x32.c
tested with CFAG20232
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 202
#define HEIGHT 32
#define PAGE_HEIGHT 8
/* init sequence from https://github.com/adafruit/ST7565-LCD/blob/master/ST7565/ST7565.cpp */
static const uint8_t u8g_dev_st7920_202x32_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
U8G_ESC_DLY(100), /* 8 Dez 2012: additional delay 100 ms because of reset*/
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_DLY(50), /* delay 50 ms */
0x038, /* 8 Bit interface (DL=1), basic instruction set (RE=0) */
0x00c, /* display on, cursor & blink off; 0x08: all off */
0x006, /* Entry mode: Cursor move to right ,DDRAM address counter (AC) plus 1, no shift */
0x002, /* disable scroll, enable CGRAM adress */
0x001, /* clear RAM, needs 1.6 ms */
U8G_ESC_DLY(100), /* delay 10 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_st7920_202x32_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_202x32_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t y, i;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_SetChipSelect(u8g, dev, 1);
y = pb->p.page_y0;
ptr = pb->buf;
for( i = 0; i < 8; i ++ )
{
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x03e ); /* enable extended mode */
u8g_WriteByte(u8g, dev, 0x080 | y ); /* y pos */
u8g_WriteByte(u8g, dev, 0x080 ); /* set x pos to 0*/
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, WIDTH/8, ptr);
ptr += WIDTH/8;
y++;
}
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb8h1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_st7920_202x32_4x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_st7920_202x32_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t y, i;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_SetChipSelect(u8g, dev, 1);
y = pb->p.page_y0;
ptr = pb->buf;
for( i = 0; i < 32; i ++ )
{
u8g_SetAddress(u8g, dev, 0); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x03e ); /* enable extended mode */
u8g_WriteByte(u8g, dev, 0x080 | y ); /* y pos */
u8g_WriteByte(u8g, dev, 0x080 ); /* set x pos to 0*/
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, WIDTH/8, ptr);
ptr += WIDTH/8;
y++;
}
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb32h1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_st7920_202x32_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7920_202x32_fn, U8G_COM_ST7920_SW_SPI);
U8G_PB_DEV(u8g_dev_st7920_202x32_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7920_202x32_fn, U8G_COM_ST7920_HW_SPI);
U8G_PB_DEV(u8g_dev_st7920_202x32_8bit, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_st7920_202x32_fn, U8G_COM_FAST_PARALLEL);
#define QWIDTH (WIDTH*4)
uint8_t u8g_dev_st7920_202x32_4x_buf[QWIDTH] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_st7920_202x32_4x_pb = { {32, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_st7920_202x32_4x_buf};
u8g_dev_t u8g_dev_st7920_202x32_4x_sw_spi = { u8g_dev_st7920_202x32_4x_fn, &u8g_dev_st7920_202x32_4x_pb, U8G_COM_ST7920_SW_SPI };
u8g_dev_t u8g_dev_st7920_202x32_4x_hw_spi = { u8g_dev_st7920_202x32_4x_fn, &u8g_dev_st7920_202x32_4x_pb, U8G_COM_ST7920_HW_SPI };
u8g_dev_t u8g_dev_st7920_202x32_4x_8bit = { u8g_dev_st7920_202x32_4x_fn, &u8g_dev_st7920_202x32_4x_pb, U8G_COM_FAST_PARALLEL };
@@ -1,191 +0,0 @@
/*
u8g_dev_t6963_128x64.c
Tested with Varitronix MGLS240128TZ
Universal 8bit Graphics Library
Copyright (c) 2013, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Application Notes for the MGLS 240x128
www.baso.no/content/pdf/T6963C_Application.pdf
Hitachi App Notes:
https://www.sparkfun.com/datasheets/LCD/Monochrome/AN-029-Toshiba_T6963C.pdf
Notes:
The font selection pins should generate the 8x8 font.
For the MGLS240128TZ only FS1 is available on pin 18.
FS1 must be low to generate the 8x8 font.
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 64
#define PAGE_HEIGHT 16
/* text is not used, so settings are not relevant */
static const uint8_t u8g_dev_t6963_128x64_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* data mode */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_ADR(0), /* data mode */
0x000, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x021, /* set cursor position */
U8G_ESC_ADR(0), /* data mode */
0x000, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x022, /* set offset */
U8G_ESC_ADR(0), /* data mode */
0x000, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x040, /* text home */
U8G_ESC_ADR(0), /* data mode */
WIDTH/8, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x041, /* text columns */
U8G_ESC_ADR(0), /* data mode */
0x000, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x042, /* graphics home */
U8G_ESC_ADR(0), /* data mode */
WIDTH/8, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x043, /* graphics columns */
// mode set
// 0x080: Internal CG, OR Mode
// 0x081: Internal CG, EXOR Mode
// 0x083: Internal CG, AND Mode
// 0x088: External CG, OR Mode
// 0x089: External CG, EXOR Mode
// 0x08B: External CG, AND Mode
U8G_ESC_ADR(1), /* instruction mode */
0x080, /* mode register: OR Mode, Internal Character Mode */
U8G_ESC_ADR(1), /* instruction mode */
// display mode
// 0x090: Display off
// 0x094: Graphic off, text on, cursor off, blink off
// 0x096: Graphic off, text on, cursor on, blink off
// 0x097: Graphic off, text on, cursor on, blink on
// 0x098: Graphic on, text off, cursor off, blink off
// 0x09a: Graphic on, text off, cursor on, blink off
// ...
// 0x09c: Graphic on, text on, cursor off, blink off
// 0x09f: Graphic on, text on, cursor on, blink on
0x098, /* mode register: Display Mode, Graphics on, Text off, Cursor off */
U8G_ESC_ADR(0), /* data mode */
0x000, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x024, /* set adr pointer */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_ADR(0), /* data mode */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_t6963_128x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_t6963_128x64_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t y, i;
uint16_t disp_ram_adr;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_SetChipSelect(u8g, dev, 1);
y = pb->p.page_y0;
ptr = pb->buf;
disp_ram_adr = WIDTH/8;
disp_ram_adr *= y;
for( i = 0; i < PAGE_HEIGHT; i ++ )
{
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_WriteByte(u8g, dev, disp_ram_adr&255 ); /* address low byte */
u8g_WriteByte(u8g, dev, disp_ram_adr>>8 ); /* address hight byte */
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x024 ); /* set adr ptr */
u8g_WriteSequence(u8g, dev, WIDTH/8, ptr);
ptr += WIDTH/8;
disp_ram_adr += WIDTH/8;
}
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb16h1_base_fn(u8g, dev, msg, arg);
}
// U8G_PB_DEV(u8g_dev_t6963_128x64_8bit, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_t6963_128x64_fn, U8G_COM_T6963);
uint8_t u8g_dev_t6963_128x64_2x_bw_buf[WIDTH/8*PAGE_HEIGHT] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_t6963_128x64_2x_bw_pb = { {PAGE_HEIGHT, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_t6963_128x64_2x_bw_buf};
u8g_dev_t u8g_dev_t6963_128x64_8bit = { u8g_dev_t6963_128x64_fn, &u8g_dev_t6963_128x64_2x_bw_pb, U8G_COM_T6963 };
@@ -1,195 +0,0 @@
/*
u8g_dev_t6963_240x128.c
Tested with Varitronix MGLS240128TZ
Universal 8bit Graphics Library
Copyright (c) 2013, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Application Notes for the MGLS 240x128
www.baso.no/content/pdf/T6963C_Application.pdf
Hitachi App Notes:
https://www.sparkfun.com/datasheets/LCD/Monochrome/AN-029-Toshiba_T6963C.pdf
Notes:
The font selection pins should generate the 8x8 font.
For the MGLS240128TZ only FS1 is available on pin 18.
FS1 must be low to generate the 8x8 font.
*/
#include "u8g.h"
#define WIDTH 240
#define HEIGHT 128
#define PAGE_HEIGHT 16
/*
http://www.mark-products.com/graphics.htm#240x64%20Pixel%20Format
*/
/* text is not used, so settings are not relevant */
static const uint8_t u8g_dev_t6963_240x128_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* data mode */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_ADR(0), /* data mode */
0x000, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x021, /* set cursor position */
U8G_ESC_ADR(0), /* data mode */
0x000, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x022, /* set offset */
U8G_ESC_ADR(0), /* data mode */
0x000, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x040, /* text home */
U8G_ESC_ADR(0), /* data mode */
WIDTH/8, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x041, /* text columns */
U8G_ESC_ADR(0), /* data mode */
0x000, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x042, /* graphics home */
U8G_ESC_ADR(0), /* data mode */
WIDTH/8, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x043, /* graphics columns */
// mode set
// 0x080: Internal CG, OR Mode
// 0x081: Internal CG, EXOR Mode
// 0x083: Internal CG, AND Mode
// 0x088: External CG, OR Mode
// 0x089: External CG, EXOR Mode
// 0x08B: External CG, AND Mode
U8G_ESC_ADR(1), /* instruction mode */
0x080, /* mode register: OR Mode, Internal Character Mode */
U8G_ESC_ADR(1), /* instruction mode */
// display mode
// 0x090: Display off
// 0x094: Graphic off, text on, cursor off, blink off
// 0x096: Graphic off, text on, cursor on, blink off
// 0x097: Graphic off, text on, cursor on, blink on
// 0x098: Graphic on, text off, cursor off, blink off
// 0x09a: Graphic on, text off, cursor on, blink off
// ...
// 0x09c: Graphic on, text on, cursor off, blink off
// 0x09f: Graphic on, text on, cursor on, blink on
0x098, /* mode register: Display Mode, Graphics on, Text off, Cursor off */
U8G_ESC_ADR(0), /* data mode */
0x000, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x024, /* set adr pointer */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_ADR(0), /* data mode */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_t6963_240x128_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_t6963_240x128_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t y, i;
uint16_t disp_ram_adr;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_SetChipSelect(u8g, dev, 1);
y = pb->p.page_y0;
ptr = pb->buf;
disp_ram_adr = WIDTH/8;
disp_ram_adr *= y;
for( i = 0; i < PAGE_HEIGHT; i ++ )
{
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_WriteByte(u8g, dev, disp_ram_adr&255 ); /* address low byte */
u8g_WriteByte(u8g, dev, disp_ram_adr>>8 ); /* address hight byte */
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x024 ); /* set adr ptr */
u8g_WriteSequence(u8g, dev, WIDTH/8, ptr);
ptr += WIDTH/8;
disp_ram_adr += WIDTH/8;
}
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb16h1_base_fn(u8g, dev, msg, arg);
}
// U8G_PB_DEV(u8g_dev_t6963_240x128_8bit, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_t6963_240x128_fn, U8G_COM_T6963);
uint8_t u8g_dev_t6963_240x128_2x_bw_buf[WIDTH/8*PAGE_HEIGHT] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_t6963_240x128_2x_bw_pb = { {PAGE_HEIGHT, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_t6963_240x128_2x_bw_buf};
u8g_dev_t u8g_dev_t6963_240x128_8bit = { u8g_dev_t6963_240x128_fn, &u8g_dev_t6963_240x128_2x_bw_pb, U8G_COM_T6963 };
@@ -1,195 +0,0 @@
/*
u8g_dev_t6963_240x64.c
Tested with Varitronix MGLS240128TZ
Universal 8bit Graphics Library
Copyright (c) 2013, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Application Notes for the MGLS 240x128
www.baso.no/content/pdf/T6963C_Application.pdf
Hitachi App Notes:
https://www.sparkfun.com/datasheets/LCD/Monochrome/AN-029-Toshiba_T6963C.pdf
Notes:
The font selection pins should generate the 8x8 font.
For the MGLS240128TZ only FS1 is available on pin 18.
FS1 must be low to generate the 8x8 font.
*/
#include "u8g.h"
#define WIDTH 240
#define HEIGHT 64
#define PAGE_HEIGHT 16
/*
http://www.mark-products.com/graphics.htm#240x64%20Pixel%20Format
*/
/* text is not used, so settings are not relevant */
static const uint8_t u8g_dev_t6963_240x64_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* data mode */
U8G_ESC_RST(15), /* do reset low pulse with (15*16)+2 milliseconds (=maximum delay)*/
U8G_ESC_CS(1), /* enable chip */
U8G_ESC_DLY(50), /* delay 50 ms */
U8G_ESC_ADR(0), /* data mode */
0x000, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x021, /* set cursor position */
U8G_ESC_ADR(0), /* data mode */
0x000, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x022, /* set offset */
U8G_ESC_ADR(0), /* data mode */
0x000, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x040, /* text home */
U8G_ESC_ADR(0), /* data mode */
WIDTH/8, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x041, /* text columns */
U8G_ESC_ADR(0), /* data mode */
0x000, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x042, /* graphics home */
U8G_ESC_ADR(0), /* data mode */
WIDTH/8, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x043, /* graphics columns */
// mode set
// 0x080: Internal CG, OR Mode
// 0x081: Internal CG, EXOR Mode
// 0x083: Internal CG, AND Mode
// 0x088: External CG, OR Mode
// 0x089: External CG, EXOR Mode
// 0x08B: External CG, AND Mode
U8G_ESC_ADR(1), /* instruction mode */
0x080, /* mode register: OR Mode, Internal Character Mode */
U8G_ESC_ADR(1), /* instruction mode */
// display mode
// 0x090: Display off
// 0x094: Graphic off, text on, cursor off, blink off
// 0x096: Graphic off, text on, cursor on, blink off
// 0x097: Graphic off, text on, cursor on, blink on
// 0x098: Graphic on, text off, cursor off, blink off
// 0x09a: Graphic on, text off, cursor on, blink off
// ...
// 0x09c: Graphic on, text on, cursor off, blink off
// 0x09f: Graphic on, text on, cursor on, blink on
0x098, /* mode register: Display Mode, Graphics on, Text off, Cursor off */
U8G_ESC_ADR(0), /* data mode */
0x000, /* low byte */
0x000, /* height byte */
U8G_ESC_ADR(1), /* instruction mode */
0x024, /* set adr pointer */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_ADR(0), /* data mode */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_t6963_240x64_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_NONE);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_t6963_240x64_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
uint8_t y, i;
uint16_t disp_ram_adr;
uint8_t *ptr;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_SetChipSelect(u8g, dev, 1);
y = pb->p.page_y0;
ptr = pb->buf;
disp_ram_adr = WIDTH/8;
disp_ram_adr *= y;
for( i = 0; i < PAGE_HEIGHT; i ++ )
{
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_WriteByte(u8g, dev, disp_ram_adr&255 ); /* address low byte */
u8g_WriteByte(u8g, dev, disp_ram_adr>>8 ); /* address hight byte */
u8g_SetAddress(u8g, dev, 1); /* cmd mode */
u8g_WriteByte(u8g, dev, 0x024 ); /* set adr ptr */
u8g_WriteSequence(u8g, dev, WIDTH/8, ptr);
ptr += WIDTH/8;
disp_ram_adr += WIDTH/8;
}
u8g_SetAddress(u8g, dev, 0); /* data mode */
u8g_SetChipSelect(u8g, dev, 0);
}
break;
}
return u8g_dev_pb16h1_base_fn(u8g, dev, msg, arg);
}
// U8G_PB_DEV(u8g_dev_t6963_240x64_8bit, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_t6963_240x64_fn, U8G_COM_T6963);
uint8_t u8g_dev_t6963_240x64_2x_bw_buf[WIDTH/8*PAGE_HEIGHT] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_t6963_240x64_2x_bw_pb = { {PAGE_HEIGHT, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_t6963_240x64_2x_bw_buf};
u8g_dev_t u8g_dev_t6963_240x64_8bit = { u8g_dev_t6963_240x64_fn, &u8g_dev_t6963_240x64_2x_bw_pb, U8G_COM_T6963 };
@@ -1,115 +0,0 @@
/*
u8g_dev_tls8204_84x48.c
Display: Nokia 84x48
Status: Tested with TLS8204V12 Display by Olimex MOD-LCD3310
Contributed: http://code.google.com/p/u8glib/issues/detail?id=126
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 84
#define HEIGHT 48
#define PAGE_HEIGHT 8
static const uint8_t u8g_dev_tls8204_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x021, /* activate chip (PD=0), horizontal increment (V=0), enter extended command set (H=1) */
0x006, /* temp. control: b10 = 2 */
0x04 | !!((66-1)&(1u<<6)),
0x40 | ((66-2) & ((1u<<6)-1)),
0x013, /* bias system 1:48 */
0x0c0, /* medium Vop */
0x020, /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
0x00c, /* display on, normal operation */
U8G_ESC_DLY(100), /* delay 100 ms */
0x020, /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
0x00d, /* display on, invert */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x020, /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
0x00c, /* display on, normal */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_tls8204_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_400NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_tls8204_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_SetAddress(u8g, dev, 0); /* command mode */
u8g_SetChipSelect(u8g, dev, 1);
u8g_WriteByte(u8g, dev, 0x020 ); /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */
u8g_WriteByte(u8g, dev, 0x080 ); /* set X address */
u8g_WriteByte(u8g, dev, 0x040 | pb->p.page); /* set Y address */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
/* the contrast adjustment does not work, needs to be analysed */
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_SetChipSelect(u8g, dev, 1);
u8g_WriteByte(u8g, dev, 0x021); /* command mode, extended function set */
u8g_WriteByte(u8g, dev, 0x080 | ( (*(uint8_t *)arg) >> 1 ) );
u8g_WriteByte(u8g, dev, 0x020); /* command mode, extended function set */
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_tls8204_84x48_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_tls8204_fn, U8G_COM_SW_SPI);
@@ -1,290 +0,0 @@
/*
u8g_dev_uc1610_dogxl160.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 160
#define HEIGHT 104
static const uint8_t u8g_dev_uc1610_dogxl160_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0f1, /* set display height-1 */
0x067, /* */
0x0c0, /* SEG & COM normal */
0x040, /* set display start line */
0x050, /* */
0x02b, /* set panelloading */
0x0eb, /* set bias 1/2 */
0x081, /* set contrast */
0x05f, /* */
0x089, /* set auto increment */
0x0a6, /* normal pixel mode */
0x0d3, /* 0xd3=40% RMS separation for gray levels */
0x0af, /* display on */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a5, /* display all points, ST7565, UC1610 */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a4, /* normal display */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_uc1610_dogxl160_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0 */
0x000, /* set lower 4 bit of the col adr to 0 */
U8G_ESC_END /* end of sequence */
};
static uint8_t u8g_dev_1to2(uint8_t n)
{
register uint8_t a,b,c;
a = n;
a &= 1;
n <<= 1;
b = n;
b &= 4;
n <<= 1;
c = n;
c &= 16;
n <<= 1;
n &= 64;
n |= a;
n |= b;
n |= c;
n |= n << 1;
return n;
}
uint8_t u8g_dev_uc1610_dogxl160_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
int i;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_data_start);
u8g_WriteByte(u8g, dev, 0x060 | (pb->p.page*2) ); /* select current page 1/2 (UC1610) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
for( i = 0; i < WIDTH; i++ )
{
u8g_WriteByte(u8g, dev, u8g_dev_1to2( ((uint8_t *)(pb->buf))[i] ) );
}
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_data_start);
u8g_WriteByte(u8g, dev, 0x060 | (pb->p.page*2+1) ); /* select current page 2/2 (UC1610) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
for( i = 0; i < WIDTH; i++ )
{
u8g_WriteByte(u8g, dev, u8g_dev_1to2( ((uint8_t *)(pb->buf))[i] >> 4 ) );
}
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_uc1610_dogxl160_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_data_start);
u8g_WriteByte(u8g, dev, 0x060 | (pb->p.page) ); /* select current page (UC1610) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
return u8g_dev_pb8v2_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_uc1610_dogxl160_2x_bw_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
int i;
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_data_start);
u8g_WriteByte(u8g, dev, 0x060 | (pb->p.page*4) ); /* select current page 1/2 (UC1610) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
for( i = 0; i < WIDTH; i++ )
{
u8g_WriteByte(u8g, dev, u8g_dev_1to2( ((uint8_t *)(pb->buf))[i] ) );
}
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_data_start);
u8g_WriteByte(u8g, dev, 0x060 | (pb->p.page*4+1) ); /* select current page 2/2 (UC1610) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
for( i = 0; i < WIDTH; i++ )
{
u8g_WriteByte(u8g, dev, u8g_dev_1to2( ((uint8_t *)(pb->buf))[i] >> 4 ) );
}
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_data_start);
u8g_WriteByte(u8g, dev, 0x060 | (pb->p.page*4+2) ); /* select current page 1/2 (UC1610) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
for( i = 0; i < WIDTH; i++ )
{
u8g_WriteByte(u8g, dev, u8g_dev_1to2( ((uint8_t *)((uint8_t *)(pb->buf)+WIDTH))[i] ) );
}
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_data_start);
u8g_WriteByte(u8g, dev, 0x060 | (pb->p.page*4+3) ); /* select current page 2/2 (UC1610) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
for( i = 0; i < WIDTH; i++ )
{
u8g_WriteByte(u8g, dev, u8g_dev_1to2( ((uint8_t *)((uint8_t *)(pb->buf)+WIDTH))[i] >> 4 ) );
}
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_uc1610_dogxl160_2x_gr_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_data_start);
u8g_WriteByte(u8g, dev, 0x060 | (pb->p.page*2) ); /* select current page (UC1610) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_WriteSequence(u8g, dev, WIDTH, pb->buf) == 0 )
return 0;
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1610_dogxl160_data_start);
u8g_WriteByte(u8g, dev, 0x060 | (pb->p.page*2+1) ); /* select current page (UC1610) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_WriteSequence(u8g, dev, WIDTH, (uint8_t *)(pb->buf)+WIDTH) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 1);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
return u8g_dev_pb16v2_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_uc1610_dogxl160_bw_sw_spi, WIDTH, HEIGHT, 8, u8g_dev_uc1610_dogxl160_bw_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_uc1610_dogxl160_bw_hw_spi, WIDTH, HEIGHT, 8, u8g_dev_uc1610_dogxl160_bw_fn, U8G_COM_HW_SPI);
U8G_PB_DEV(u8g_dev_uc1610_dogxl160_gr_sw_spi, WIDTH, HEIGHT, 4, u8g_dev_uc1610_dogxl160_gr_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_uc1610_dogxl160_gr_hw_spi, WIDTH, HEIGHT, 4, u8g_dev_uc1610_dogxl160_gr_fn, U8G_COM_HW_SPI);
uint8_t u8g_dev_uc1610_dogxl160_2x_bw_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_uc1610_dogxl160_2x_bw_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_uc1610_dogxl160_2x_bw_buf};
u8g_dev_t u8g_dev_uc1610_dogxl160_2x_bw_sw_spi = { u8g_dev_uc1610_dogxl160_2x_bw_fn, &u8g_dev_uc1610_dogxl160_2x_bw_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_uc1610_dogxl160_2x_bw_hw_spi = { u8g_dev_uc1610_dogxl160_2x_bw_fn, &u8g_dev_uc1610_dogxl160_2x_bw_pb, U8G_COM_HW_SPI };
uint8_t u8g_dev_uc1610_dogxl160_2x_gr_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_uc1610_dogxl160_2x_gr_pb = { {8, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_uc1610_dogxl160_2x_gr_buf};
u8g_dev_t u8g_dev_uc1610_dogxl160_2x_gr_sw_spi = { u8g_dev_uc1610_dogxl160_2x_gr_fn, &u8g_dev_uc1610_dogxl160_2x_gr_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_uc1610_dogxl160_2x_gr_hw_spi = { u8g_dev_uc1610_dogxl160_2x_gr_fn, &u8g_dev_uc1610_dogxl160_2x_gr_pb, U8G_COM_HW_SPI };
@@ -1,157 +0,0 @@
/*
u8g_dev_uc1701_dogs102.c
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 102
#define HEIGHT 64
#define PAGE_HEIGHT 8
static const uint8_t u8g_dev_dogs102_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0e2, /* soft reset */
0x040, /* set display start line to 0 */
0x0a1, /* ADC set to reverse */
0x0c0, /* common output mode */
0x0a6, /* display normal, bit val 0: LCD pixel off. */
0x0a2, /* LCD bias 1/9 */
0x02f, /* all power control circuits on */
0x027, /* regulator, booster and follower */
0x081, /* set contrast */
0x00e, /* contrast value, EA default: 0x010, previous value for S102: 0x0e */
0x0fa, /* Set Temp compensation */
0x090, /* 0.11 deg/c WP Off WC Off*/
0x0a4, /* normal display */
0x0af, /* display on */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a5, /* display all points, ST7565, UC1610 */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a4, /* normal display */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_dogs102_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0 */
0x000, /* set lower 4 bit of the col adr to 0 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_dogs102_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_dogs102_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_dogs102_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_uc1701_dogs102_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_dogs102_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_dogs102_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
u8g_SetChipSelect(u8g, dev, 0);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_dogs102_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page (ST7565R) */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_uc1701_dogs102_sw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_dogs102_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_uc1701_dogs102_hw_spi , WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_dogs102_fn, U8G_COM_HW_SPI);
uint8_t u8g_dev_uc1701_dogs102_2x_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_uc1701_dogs102_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_uc1701_dogs102_2x_buf};
u8g_dev_t u8g_dev_uc1701_dogs102_2x_sw_spi = { u8g_dev_uc1701_dogs102_2x_fn, &u8g_dev_uc1701_dogs102_2x_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_uc1701_dogs102_2x_hw_spi = { u8g_dev_uc1701_dogs102_2x_fn, &u8g_dev_uc1701_dogs102_2x_pb, U8G_COM_HW_SPI };
@@ -1,158 +0,0 @@
/*
u8g_dev_uc1701_mini12864.c (dealextreme)
Universal 8bit Graphics Library
Copyright (c) 2011, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
#define WIDTH 128
#define HEIGHT 64
#define PAGE_HEIGHT 8
static const uint8_t u8g_dev_uc1701_mini12864_init_seq[] PROGMEM = {
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_RST(1), /* do reset low pulse with (1*16)+2 milliseconds */
U8G_ESC_CS(1), /* enable chip */
0x0e2, /* soft reset */
0x040, /* set display start line to 0 */
0x0a0, /* ADC set to reverse */
0x0c8, /* common output mode */
0x0a6, /* display normal, bit val 0: LCD pixel off. */
0x0a2, /* LCD bias 1/9 */
0x02f, /* all power control circuits on */
0x0f8, /* set booster ratio to */
0x000, /* 4x */
0x023, /* set V0 voltage resistor ratio to large */
0x081, /* set contrast */
0x027, /* contrast value */
0x0ac, /* indicator */
0x000, /* disable */
0x0af, /* display on */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a5, /* display all points, ST7565 */
U8G_ESC_DLY(100), /* delay 100 ms */
U8G_ESC_DLY(100), /* delay 100 ms */
0x0a4, /* normal display */
U8G_ESC_CS(0), /* disable chip */
U8G_ESC_END /* end of sequence */
};
static const uint8_t u8g_dev_uc1701_mini12864_data_start[] PROGMEM = {
U8G_ESC_ADR(0), /* instruction mode */
U8G_ESC_CS(1), /* enable chip */
0x010, /* set upper 4 bit of the col adr to 0 */
0x000, /* set lower 4 bit of the col adr to 4 */
U8G_ESC_END /* end of sequence */
};
uint8_t u8g_dev_uc1701_mini12864_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | pb->p.page); /* select current page */
u8g_SetAddress(u8g, dev, 1); /* data mode */
if ( u8g_pb_WriteBuffer(pb, u8g, dev) == 0 )
return 0;
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
return u8g_dev_pb8v1_base_fn(u8g, dev, msg, arg);
}
uint8_t u8g_dev_uc1701_mini12864_2x_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg)
{
switch(msg)
{
case U8G_DEV_MSG_INIT:
u8g_InitCom(u8g, dev, U8G_SPI_CLK_CYCLE_300NS);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_init_seq);
break;
case U8G_DEV_MSG_STOP:
break;
case U8G_DEV_MSG_PAGE_NEXT:
{
u8g_pb_t *pb = (u8g_pb_t *)(dev->dev_mem);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page)); /* select current page */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, pb->buf);
u8g_SetChipSelect(u8g, dev, 0);
u8g_WriteEscSeqP(u8g, dev, u8g_dev_uc1701_mini12864_data_start);
u8g_WriteByte(u8g, dev, 0x0b0 | (2*pb->p.page+1)); /* select current page */
u8g_SetAddress(u8g, dev, 1); /* data mode */
u8g_WriteSequence(u8g, dev, pb->width, (uint8_t *)(pb->buf)+pb->width);
u8g_SetChipSelect(u8g, dev, 0);
}
break;
case U8G_DEV_MSG_CONTRAST:
u8g_SetChipSelect(u8g, dev, 1);
u8g_SetAddress(u8g, dev, 0); /* instruction mode */
u8g_WriteByte(u8g, dev, 0x081);
u8g_WriteByte(u8g, dev, (*(uint8_t *)arg) >> 2);
u8g_SetChipSelect(u8g, dev, 0);
return 1;
}
return u8g_dev_pb16v1_base_fn(u8g, dev, msg, arg);
}
U8G_PB_DEV(u8g_dev_uc1701_mini12864_sw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1701_mini12864_fn, U8G_COM_SW_SPI);
U8G_PB_DEV(u8g_dev_uc1701_mini12864_hw_spi, WIDTH, HEIGHT, PAGE_HEIGHT, u8g_dev_uc1701_mini12864_fn, U8G_COM_HW_SPI);
uint8_t u8g_dev_uc1701_mini12864_2x_buf[WIDTH*2] U8G_NOCOMMON ;
u8g_pb_t u8g_dev_uc1701_mini12864_2x_pb = { {16, HEIGHT, 0, 0, 0}, WIDTH, u8g_dev_uc1701_mini12864_2x_buf};
u8g_dev_t u8g_dev_uc1701_mini12864_2x_sw_spi = { u8g_dev_uc1701_mini12864_2x_fn, &u8g_dev_uc1701_mini12864_2x_pb, U8G_COM_SW_SPI };
u8g_dev_t u8g_dev_uc1701_mini12864_2x_hw_spi = { u8g_dev_uc1701_mini12864_2x_fn, &u8g_dev_uc1701_mini12864_2x_pb, U8G_COM_HW_SPI };
@@ -1,393 +0,0 @@
/*
u8g_ellipse.c
Utility to draw empty and filled ellipses.
Universal 8bit Graphics Library
Copyright (c) 2011, bjthom@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Addition to the U8G Library as of 02/29/12
Adapted from Bresenham's Algorithm and the following websites:
http://free.pages.at/easyfilter/bresenham.html
http://homepage.smc.edu/kennedy_john/belipse.pdf
*/
#include "u8g.h"
#ifdef WORK_IN_PROGRESS
void u8g_DrawEllipseRect(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t x1, u8g_uint_t y1)
{
int a = abs(x1 - x0);
int b = abs(y1 - y0); //get diameters
int b1 = b&1;
long dx = 4*(1-a)*b*b;
long dy = 4*(b1+1)*a*a;
long err = dx+dy+b1*a*a;
long e2;
if (x0 > x1) { x0 = x1; x1 += a; }
if (y0 > y1) { y0 = y1; }
y0 += (b+1)/2;
y1 = y0-b1;
a *= 8*a;
b1 = 8*b*b;
do {
u8g_DrawPixel(u8g, x1, y0);
u8g_DrawPixel(u8g, x0, y0);
u8g_DrawPixel(u8g, x0, y1);
u8g_DrawPixel(u8g, x1, y1);
e2 = 2*err;
if (e2 >= dx) {
x0++;
x1--;
err += dx += b1;
}
if (e2 <= dy) {
y0++;
y1--;
err += dy += a;
}
} while (x0 <= x1);
while (y0-y1 < b) {
u8g_DrawPixel(u8g, x0-1, y0);
u8g_DrawPixel(u8g, x1+1, y0++);
u8g_DrawPixel(u8g, x0-1, y1);
u8g_DrawPixel(u8g, x1+1, y1--);
}
}
void u8g_DrawEllipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t xr, u8g_uint_t yr)
{
u8g_DrawPixel(u8g, x0, y0+yr);
u8g_DrawPixel(u8g, x0, y0-yr);
u8g_DrawPixel(u8g, x0+xr, y0);
u8g_DrawPixel(u8g, x0-xr, y0);
}
#endif
#if defined(U8G_16BIT)
typedef int32_t u8g_long_t;
#else
typedef int16_t u8g_long_t;
#endif
/*
Source:
ftp://pc.fk0.name/pub/books/programming/bezier-ellipse.pdf
Foley, Computer Graphics, p 90
*/
static void u8g_draw_ellipse_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option) U8G_NOINLINE;
static void u8g_draw_ellipse_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option)
{
/* upper right */
if ( option & U8G_DRAW_UPPER_RIGHT )
{
u8g_DrawPixel(u8g, x0 + x, y0 - y);
}
/* upper left */
if ( option & U8G_DRAW_UPPER_LEFT )
{
u8g_DrawPixel(u8g, x0 - x, y0 - y);
}
/* lower right */
if ( option & U8G_DRAW_LOWER_RIGHT )
{
u8g_DrawPixel(u8g, x0 + x, y0 + y);
}
/* lower left */
if ( option & U8G_DRAW_LOWER_LEFT )
{
u8g_DrawPixel(u8g, x0 - x, y0 + y);
}
}
void u8g_draw_ellipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t option)
{
u8g_uint_t x, y;
u8g_long_t xchg, ychg;
u8g_long_t err;
u8g_long_t rxrx2;
u8g_long_t ryry2;
u8g_long_t stopx, stopy;
rxrx2 = rx;
rxrx2 *= rx;
rxrx2 *= 2;
ryry2 = ry;
ryry2 *= ry;
ryry2 *= 2;
x = rx;
y = 0;
xchg = 1;
xchg -= rx;
xchg -= rx;
xchg *= ry;
xchg *= ry;
ychg = rx;
ychg *= rx;
err = 0;
stopx = ryry2;
stopx *= rx;
stopy = 0;
while( stopx >= stopy )
{
u8g_draw_ellipse_section(u8g, x, y, x0, y0, option);
y++;
stopy += rxrx2;
err += ychg;
ychg += rxrx2;
if ( 2*err+xchg > 0 )
{
x--;
stopx -= ryry2;
err += xchg;
xchg += ryry2;
}
}
x = 0;
y = ry;
xchg = ry;
xchg *= ry;
ychg = 1;
ychg -= ry;
ychg -= ry;
ychg *= rx;
ychg *= rx;
err = 0;
stopx = 0;
stopy = rxrx2;
stopy *= ry;
while( stopx <= stopy )
{
u8g_draw_ellipse_section(u8g, x, y, x0, y0, option);
x++;
stopx += ryry2;
err += xchg;
xchg += ryry2;
if ( 2*err+ychg > 0 )
{
y--;
stopy -= rxrx2;
err += ychg;
ychg += rxrx2;
}
}
}
void u8g_DrawEllipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t option)
{
/* check for bounding box */
{
u8g_uint_t rxp, rxp2;
u8g_uint_t ryp, ryp2;
rxp = rx;
rxp++;
rxp2 = rxp;
rxp2 *= 2;
ryp = ry;
ryp++;
ryp2 = ryp;
ryp2 *= 2;
if ( u8g_IsBBXIntersection(u8g, x0-rxp, y0-ryp, rxp2, ryp2) == 0)
return;
}
u8g_draw_ellipse(u8g, x0, y0, rx, ry, option);
}
static void u8g_draw_filled_ellipse_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option) U8G_NOINLINE;
static void u8g_draw_filled_ellipse_section(u8g_t *u8g, u8g_uint_t x, u8g_uint_t y, u8g_uint_t x0, u8g_uint_t y0, uint8_t option)
{
/* upper right */
if ( option & U8G_DRAW_UPPER_RIGHT )
{
u8g_DrawVLine(u8g, x0+x, y0-y, y+1);
}
/* upper left */
if ( option & U8G_DRAW_UPPER_LEFT )
{
u8g_DrawVLine(u8g, x0-x, y0-y, y+1);
}
/* lower right */
if ( option & U8G_DRAW_LOWER_RIGHT )
{
u8g_DrawVLine(u8g, x0+x, y0, y+1);
}
/* lower left */
if ( option & U8G_DRAW_LOWER_LEFT )
{
u8g_DrawVLine(u8g, x0-x, y0, y+1);
}
}
void u8g_draw_filled_ellipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t option)
{
u8g_uint_t x, y;
u8g_long_t xchg, ychg;
u8g_long_t err;
u8g_long_t rxrx2;
u8g_long_t ryry2;
u8g_long_t stopx, stopy;
rxrx2 = rx;
rxrx2 *= rx;
rxrx2 *= 2;
ryry2 = ry;
ryry2 *= ry;
ryry2 *= 2;
x = rx;
y = 0;
xchg = 1;
xchg -= rx;
xchg -= rx;
xchg *= ry;
xchg *= ry;
ychg = rx;
ychg *= rx;
err = 0;
stopx = ryry2;
stopx *= rx;
stopy = 0;
while( stopx >= stopy )
{
u8g_draw_filled_ellipse_section(u8g, x, y, x0, y0, option);
y++;
stopy += rxrx2;
err += ychg;
ychg += rxrx2;
if ( 2*err+xchg > 0 )
{
x--;
stopx -= ryry2;
err += xchg;
xchg += ryry2;
}
}
x = 0;
y = ry;
xchg = ry;
xchg *= ry;
ychg = 1;
ychg -= ry;
ychg -= ry;
ychg *= rx;
ychg *= rx;
err = 0;
stopx = 0;
stopy = rxrx2;
stopy *= ry;
while( stopx <= stopy )
{
u8g_draw_filled_ellipse_section(u8g, x, y, x0, y0, option);
x++;
stopx += ryry2;
err += xchg;
xchg += ryry2;
if ( 2*err+ychg > 0 )
{
y--;
stopy -= rxrx2;
err += ychg;
ychg += rxrx2;
}
}
}
void u8g_DrawFilledEllipse(u8g_t *u8g, u8g_uint_t x0, u8g_uint_t y0, u8g_uint_t rx, u8g_uint_t ry, uint8_t option)
{
/* check for bounding box */
{
u8g_uint_t rxp, rxp2;
u8g_uint_t ryp, ryp2;
rxp = rx;
rxp++;
rxp2 = rxp;
rxp2 *= 2;
ryp = ry;
ryp++;
ryp2 = ryp;
ryp2 *= 2;
if ( u8g_IsBBXIntersection(u8g, x0-rxp, y0-ryp, rxp2, ryp2) == 0)
return;
}
u8g_draw_filled_ellipse(u8g, x0, y0, rx, ry, option);
}
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,90 +0,0 @@
/*
u8g_line.c
Universal 8bit Graphics Library
Copyright (c) 2012, olikraus@gmail.com
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or other
materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "u8g.h"
void u8g_DrawLine(u8g_t *u8g, u8g_uint_t x1, u8g_uint_t y1, u8g_uint_t x2, u8g_uint_t y2)
{
u8g_uint_t tmp;
u8g_uint_t x,y;
u8g_uint_t dx, dy;
u8g_int_t err;
u8g_int_t ystep;
uint8_t swapxy = 0;
/* no BBX intersection check at the moment, should be added... */
if ( x1 > x2 ) dx = x1-x2; else dx = x2-x1;
if ( y1 > y2 ) dy = y1-y2; else dy = y2-y1;
if ( dy > dx )
{
swapxy = 1;
tmp = dx; dx =dy; dy = tmp;
tmp = x1; x1 =y1; y1 = tmp;
tmp = x2; x2 =y2; y2 = tmp;
}
if ( x1 > x2 )
{
tmp = x1; x1 =x2; x2 = tmp;
tmp = y1; y1 =y2; y2 = tmp;
}
err = dx >> 1;
if ( y2 > y1 ) ystep = 1; else ystep = -1;
y = y1;
#ifndef U8G_16BIT
if ( x2 == 255 )
x2--;
#else
if ( x2 == 0xffff )
x2--;
#endif
for( x = x1; x <= x2; x++ )
{
if ( swapxy == 0 )
u8g_DrawPixel(u8g, x, y);
else
u8g_DrawPixel(u8g, y, x);
err -= (uint8_t)dy;
if ( err < 0 )
{
y += (u8g_uint_t)ystep;
err += (u8g_uint_t)dx;
}
}
}

Some files were not shown because too many files have changed in this diff Show More