X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=ROM2%2Fmotors.c;h=64158ae56ab5e22b99ca93aae1123661cea2336f;hb=deac3b8b66af0f499d6da73cf5bf8479c7d9fad9;hp=674483942718d3eec5d474fe3da9eee7a480157c;hpb=f454d8fbc15ff6516ba574e23692e8a65b9f16fd;p=uccvend-snackrom.git diff --git a/ROM2/motors.c b/ROM2/motors.c index 6744839..64158ae 100644 --- a/ROM2/motors.c +++ b/ROM2/motors.c @@ -1,6 +1,20 @@ #include "motors.h" #include "vend.h" +const u8 motor_lookup[80] = +{ 1,12,23,34,46,57,68,79, + 11,22,33,44,56,67,78,89, + 21,32,43,54,66,77,88,99, + 31,42,53,64,76,87,98, + 9,41,52,63,74,86,97, + 8,19,51,62,73,84,96, + 7,18,29,61,72,83,94, + 6,17,28,39,71,82,93, + 4,16,27,38,49,81,92, + 3,14,26,37,48,59,91, + 2,13,24,36,47,58,69, +}; + void motor_shift_send(u8 data) { u8 i; /* load it in, MSB first */ @@ -10,9 +24,13 @@ void motor_shift_send(u8 data) { else bclr_misc_output(A3800_MOTOR_DATA); + delay(1); + /* clock pulse */ bset((void*)&_io_ports[M6811_PORTA], PORTA_MOTOR_CLOCK); + delay(1); bclr((void*)&_io_ports[M6811_PORTA], PORTA_MOTOR_CLOCK); + delay(1); data = data << 1; } @@ -37,6 +55,7 @@ void motor_on(u8 slot) { break; default: /* < 8 */ motor_shift_send(1 << col); /* cols from 0..7 */ + bclr((void*)&_io_ports[M6811_PORTA], PORTA_MOTOR_COL_DISABLE); } motor_shift_send(1 << (row-1)); /* rows from 1..8 here */ @@ -78,10 +97,10 @@ bool is_motor(u8 slot) { bool left_home(u8 slot) { u8 i, r = slot%10; if (r >= 5) r--; - r = 1 << r; + r = 1 << (r-1); for (i = 0; i < 5; i++) - if (home_sensors & r == 0) return 1; + if ((home_sensors & r) == 0) return 1; /* it never left */ return 0; @@ -90,11 +109,11 @@ bool left_home(u8 slot) { bool back_home(u8 slot) { u8 i, r = slot%10; if (r >= 5) r--; - r = 1 << r; + r = 1 << (r-1); for (i = 0; i < 5; i++) { if (home_sensors & r) return 1; - if (_io_ports[M6811_PORTE] & PORTE_MOTOR_OVERCURRENT == 0) return 1; + if ((_io_ports[M6811_PORTE] & PORTE_MOTOR_OVERCURRENT) == 0) return 1; } /* it never left */ @@ -114,9 +133,10 @@ bool motor_overcurrent() { } u8 dispense_motor(u8 slot) { - if (!is_motor(slot)) return MOTOR_NOSLOT; + //if (!is_motor(slot)) return MOTOR_NOSLOT; motor_on(slot); + delay(100); if (!left_home(slot)) { motors_off();