Compare commits

...

6 Commits

4 changed files with 191 additions and 74 deletions

View File

@ -25,7 +25,9 @@
// Rotary Encoder Parameters // Rotary Encoder Parameters
#define ROT_PULSE_COUNT 12 #define ROT_PULSE_COUNT 12
#define ROT_WHEEL_RAD 12 #define ROT_DETENTS 24
#define ROT_WHEEL_RAD 13.875
//#define ROT_REVERSE
// Input masks // Input masks
#define BUTTON_V 0x01 #define BUTTON_V 0x01
@ -39,7 +41,7 @@
#define INPUT_MASK (BUTTON_M | ENCODER_M) #define INPUT_MASK (BUTTON_M | ENCODER_M)
// Event queue macros // Event queue macros
#define MAX_EVENT_COUNT 16 #define MAX_EVENT_COUNT 64
#define PTR_INC(x) ((x) = events + ((((x) - events) + 1) % MAX_EVENT_COUNT)) #define PTR_INC(x) ((x) = events + ((((x) - events) + 1) % MAX_EVENT_COUNT))
enum event_e enum event_e
@ -66,6 +68,7 @@ uint8_t *event_write = events;
uint32_t ms = 0; uint32_t ms = 0;
#ifdef ROT_REVERSE
const uint8_t PROGMEM rot_table[16] = const uint8_t PROGMEM rot_table[16] =
{ {
EVENT_NONE, EVENT_ROT_CCW, EVENT_ROT_CW, EVENT_NONE, EVENT_NONE, EVENT_ROT_CCW, EVENT_ROT_CW, EVENT_NONE,
@ -73,6 +76,15 @@ const uint8_t PROGMEM rot_table[16] =
EVENT_ROT_CCW, EVENT_NONE, EVENT_NONE, EVENT_ROT_CW, EVENT_ROT_CCW, EVENT_NONE, EVENT_NONE, EVENT_ROT_CW,
EVENT_NONE, EVENT_ROT_CW, EVENT_ROT_CCW, EVENT_NONE EVENT_NONE, EVENT_ROT_CW, EVENT_ROT_CCW, EVENT_NONE
}; };
#else
const uint8_t PROGMEM rot_table[16] =
{
EVENT_NONE, EVENT_ROT_CW, EVENT_ROT_CCW, EVENT_NONE,
EVENT_ROT_CCW, EVENT_NONE, EVENT_NONE, EVENT_ROT_CW,
EVENT_ROT_CW, EVENT_NONE, EVENT_NONE, EVENT_ROT_CCW,
EVENT_NONE, EVENT_ROT_CCW, EVENT_ROT_CW, EVENT_NONE
};
#endif
const uint8_t PROGMEM unfold_table[16] = const uint8_t PROGMEM unfold_table[16] =
{ {
@ -297,21 +309,10 @@ int main()
} }
} }
if (rot_value / 2 != 0) if (rot_value / (ROT_PULSE_COUNT * 4 / ROT_DETENTS) != 0)
{ {
int8_t rot_abs; count_value_fine += rot_coeff * rot_value;
int8_t adjust; rot_value = 0;
rot_abs = rot_value;
adjust = 1;
if (rot_value < 0)
{
rot_abs = -rot_abs;
adjust = -1;
}
rot_value -= (rot_abs * adjust);
count_value_fine += (rot_coeff * adjust * rot_abs);
if (count_value_fine < 0) if (count_value_fine < 0)
{ {
@ -340,7 +341,7 @@ int main()
} }
count_value = (uint32_t) count_value_fine; count_value = (uint32_t) count_value_fine;
if (0 != sleep_when_ms) if ((0 != sleep_when_ms) && (sleep_when_ms > ms))
{ {
needs_update = 1; needs_update = 1;
} }
@ -360,6 +361,7 @@ int main()
{ {
display_enable(0); display_enable(0);
do_sleep(); do_sleep();
sleep_when_ms = 1;
} }
// STATE_COUNTING // STATE_COUNTING
@ -604,7 +606,19 @@ void display_init()
void display_enable(uint8_t en) void display_enable(uint8_t en)
{ {
display_send_cmd(0xAE | (en & 0x01)); static uint8_t old_state = 1;
if (en != 0)
{
en = 1;
}
if (en != old_state)
{
display_send_cmd(0xAE | (en & 0x01));
}
old_state = en;
} }
void get_symbol16(uint8_t index, uint8_t *out) void get_symbol16(uint8_t index, uint8_t *out)
@ -925,8 +939,8 @@ void write_eeprom_val(uint16_t idx, uint32_t value, uint8_t dir)
void do_sleep() void do_sleep()
{ {
// Disable clock to Timer1, USI, ADC // Disable clock to USI, ADC
PRR |= (1 << PRTIM1) | (1 << PRUSI) | (1 << PRADC); PRR |= (1 << PRUSI) | (1 << PRADC);
// Enable sleep // Enable sleep
MCUCR |= (1 << SE); MCUCR |= (1 << SE);
@ -936,14 +950,14 @@ void do_sleep()
// Reset ms counter // Reset ms counter
cli(); cli();
ms = 0; ms = 2;
sei(); sei();
// Disable sleep // Disable sleep
MCUCR &= ~(1 << SE); MCUCR &= ~(1 << SE);
// Enable clock to Timer1, USI, ADC // Enable clock to USI, ADC
PRR &= ~((1 << PRTIM1) | (1 << PRUSI) | (1 << PRADC)); PRR &= ~((1 << PRUSI) | (1 << PRADC));
} }
void update_display(uint32_t value, uint32_t highlight, uint8_t dir, uint8_t dir_highlight) void update_display(uint32_t value, uint32_t highlight, uint8_t dir, uint8_t dir_highlight)

View File

@ -1,11 +1,15 @@
x_size = 75; x_size = 75;
y_size = 40; y_size = 40;
z_size = 6; z_size = 9;
pcb_x = 70;
pcb_y = 35;
wall_size = 1; wall_size = 1;
hole_rad = 2; hole_rad = 1.5;
filament_x = 10; filament_x = 57.5 - pcb_x/2 - 13 - 1;
filament_size = 2; filament_size = 2;
difference()
{
union() union()
{ {
difference() difference()
@ -18,18 +22,13 @@ union()
{ {
cube([x_size - 2 * wall_size, y_size - 2 * wall_size, z_size], center = true); cube([x_size - 2 * wall_size, y_size - 2 * wall_size, z_size], center = true);
} }
// Fillament Hole
translate([filament_x, 0, wall_size])
{
cube([filament_size, y_size + 1, z_size], center = true);
}
} }
// Hole Mounts // Bottom Hole Mounts
for (i = [-1:1:1]) for (i = [-1:2:1])
{ {
translate([i * 32, ((i == 0) ? 1 : 0) * 29 - 14.5, 0]) translate([i * (pcb_x/2 - 3) - 1, -(pcb_y/2 - 3) - 1, -0.5])
{ {
difference() difference()
{ {
@ -42,22 +41,62 @@ union()
} }
} }
// Bearing Mount // Top Hole Mount
translate([3, 0, 0]) translate([(41 - pcb_x/2) - 1, pcb_y/2 - 3 - 1, -0.5])
{ difference()
cylinder(z_size, 2, 2, $fn = 360, center = true);
}
// Left Walls for fillament
for (i = [-1:2:1])
{
translate([filament_x + i * ((filament_size + wall_size) / 2), 0, 0])
{ {
difference() cylinder(z_size - 1, hole_rad + 1, hole_rad + 1, $fn = 360, center = true);
translate([0, 0, wall_size])
{ {
cube([wall_size, y_size, z_size - 1], center = true); cylinder(z_size - 1, hole_rad, hole_rad, $fn = 360, center = true);
cube([wall_size + 1, 5.625 + i * 0.875, z_size], center = true); }
}
// Fillament Block
translate([filament_x, 0, -0.5])
{
difference()
{
cube([filament_size + wall_size * 2, y_size, z_size - 1], center = true);
translate([13, pcb_y/2 - 12.5 - 1, 0])
{
cylinder(z_size, 13.5, 13.5, $fn = 360, center = true);
} }
} }
} }
}
// Bottom Holes
for (i = [-1:2:1])
{
translate([i * (pcb_x/2 - 3) - 1, -(pcb_y/2 - 3) - 1, -z_size/2 + 1])
{
cylinder(2, 2.8, hole_rad, $fn = 360, center = true);
}
}
// Top Hole
translate([(41 - pcb_x/2) - 1, pcb_y / 2 - 3 - 1, -z_size/2 + 1])
{
cylinder(2, 2.8, hole_rad, $fn = 360, center = true);
}
// Filament Hole
translate([filament_x, 0, -0.5])
{
rotate([90, 0, 0])
{
cylinder(y_size + 1, filament_size/2, filament_size/2, $fn = 360, center = true);
}
}
// Temp
*translate([-x_size/2, y_size/5, 0])
{
cube([x_size, y_size, z_size], center = true);
}
*translate([x_size/1.5, y_size/5, 0])
{
cube([x_size, y_size, z_size], center = true);
}
} }

69
openscad/Front.scad Normal file
View File

@ -0,0 +1,69 @@
x_size = 75;
y_size = 40;
z_size = 13;
pcb_x = 70;
pcb_y = 35;
wall_size = 1;
hole_rad = 2;
screen_x = 30;
screen_y = 12;
union()
{
difference()
{
// Main
cube([x_size, y_size, z_size], center = true);
// Hollow
translate([0, 0, wall_size])
{
cube([x_size - 2 * wall_size, y_size - 2 * wall_size, z_size], center = true);
}
// Display Cutout
translate([pcb_x/2 - screen_x/2 + 1 - 5, pcb_y/2 - screen_y/2 - 1, 0])
{
cube([screen_x, screen_y, z_size + 1], center = true);
}
// Button Cutout
translate([-16 + 1, -12.5 - 1, 0])
{
cube([8, 8, z_size + 1], center = true);
}
// Switch Cutout
translate([0 + 1, -y_size/2 + wall_size/2, z_size/2 - 6/2])
{
cube([5, wall_size * 2, 6], center = true);
}
}
// Bottom Hole Mounts
for (i = [-1:2:1])
{
translate([i * (pcb_x/2 - 3) + 1, -(pcb_y/2 - 3) - 1, 0])
{
difference()
{
cylinder(z_size, hole_rad + 1, hole_rad + 1, $fn = 360, center = true);
translate([0, 0, wall_size])
{
cylinder(z_size, hole_rad, hole_rad, $fn = 360, center = true);
}
}
}
}
// Top Hole Mount
translate([-((41 - pcb_x/2)) + 1, pcb_y/2 - 3 - 1, 0])
difference()
{
cylinder(z_size, hole_rad + 1, hole_rad + 1, $fn = 360, center = true);
translate([0, 0, wall_size])
{
cylinder(z_size, hole_rad, hole_rad, $fn = 360, center = true);
}
}
}

View File

@ -1,26 +1,21 @@
seg = 360; seg = 360;
seg2 = 60; seg2 = 60;
outer = 12; outer = 12;
height = 5; height = 6;
rad = 1; rad = 1;
dist = 1.5; dist = 4;
rotate_extrude($fn = seg) rotate_extrude($fn = seg)
difference() difference()
{ {
square([outer, height]); square([outer, height]);
translate([0, 1.5, 0]) translate([0, height - 3.5, 0])
{ {
square([10.5, height]); square([10.5, 3.5]);
} }
translate([12, height/2 + dist, 0]) translate([outer, height - dist, 0])
{ {
circle(rad, $fn = seg); circle(rad, $fn = seg);
} }
}
translate([12, height/2 - dist, 0])
{
circle(rad, $fn = seg);
}
}