1 | uint8_t XYZstep(int16_t x, int16_t y,int16_t z,uint8_t lcd)
|
2 | {
|
3 | if(z!=0){
|
4 | if(zkorr==0){zkorr=anschlagfrage();}
|
5 |
|
6 | if((z<=-1) && (zkorr==2)){ z-=85; zkorr=1; }// Z aktzen korektur korrektur wert 85
|
7 | if((z>=1) && (zkorr==1)){ z+=85; zkorr=2; }
|
8 | }
|
9 |
|
10 |
|
11 | // line berechnung intialisirung
|
12 | uint8_t counter=0;
|
13 | uint8_t counter2=0;
|
14 | int16_t x0, y0, x1, y1, dx, dy , sx, sy;
|
15 | x0=0;
|
16 | y0=0;
|
17 | dx= 0;
|
18 | dy= 0;
|
19 | if((x<y) && (x>0) && (y>0)){ //Postiv
|
20 | dx = abs(x), sx = x0<x ? 1 : -1;
|
21 | dy = abs(y), sy = y0<y ? 1 : -1;}
|
22 | if((x>y) && (x>0) && (y>0)){
|
23 | dx = abs(x), sx = x0<x ? 1 : -1;
|
24 | dy = abs(y), sy = y0<y ? 1 : -1;}
|
25 |
|
26 | if((x>y) && (x<0) && (y<0)){ // Negativ
|
27 | dx = -abs(x), sx = x0<x ? 1 : -1;
|
28 | dy = -abs(y), sy = y0<y ? 1 : -1;}
|
29 | if((x<y) && (x<0) && (y<0)){
|
30 | dx = -abs(x), sx = x0<x ? 1 : -1;
|
31 | dy = -abs(y), sy = y0<y ? 1 : -1;}
|
32 |
|
33 | if((x<y) && (x<0) && (y>0)){ //X Negativ Y Positiv
|
34 | dx = -abs(x), sx = x0<x ? 1 : -1;
|
35 | dy = abs(y), sy = y0<y ? 1 : -1;}
|
36 | if((x>y) && (x>0) && (y<0)){ //Y Negativ X Positiv
|
37 | dx = abs(x), sx = x0<x ? 1 : -1;
|
38 | dy = -abs(y), sy = y0<y ? 1 : -1;}
|
39 |
|
40 | int16_t err = dx+dy;
|
41 | int16_t e2;
|
42 |
|
43 | if(x==y || dx<=0 || dy<=0 ){x1=x;y1=y;}
|
44 |
|
45 | //Motor Aktiviern
|
46 | if(x!=0){ POM1_E |=(1<<PIM1_E);} // X Motor1 Aktivieren
|
47 | if(y!=0){ POM2_E |=(1<<PIM2_E);} // Y Motor2 Aktivieren
|
48 | if(z!=0){ POM3_E |=(1<<PIM3_E);} // Z Motor3 Aktivieren
|
49 |
|
50 | while(((x!=0) || (y!=0) || (z!=0)) && (error==0) )
|
51 | {
|
52 | if(error==1){
|
53 | break;
|
54 | }
|
55 | if(tasteload()=='A'){
|
56 | if(menue_taster()){error=1;}else{error=0;}
|
57 | }
|
58 |
|
59 | if(x==y){x=Xstep(x); y=Ystep(y); x0=x1-x; y0=y1-y; } // Gleiche werte
|
60 | if(x==0){y=Ystep(y); y0=y1-y; }
|
61 | if(y==0){x=Xstep(x); x0=x1-x; }
|
62 |
|
63 | if((x>y) && (x>0) && (y>0) ){ // +X größer als +Y
|
64 | if(x0<x1){ x1=x0; Xstep(-1);}
|
65 | if(y0<y1){ y1=y0; Ystep(-1);}
|
66 | if(x0>x1){ x1=x0; Xstep(1);}
|
67 | if(y0>y1){ y1=y0; Ystep(1);}
|
68 | if (x0>=x && y0>=y && z==0){ x=x-x0; y=y-y0; break; }
|
69 | e2 = 2*err;
|
70 |
|
71 | if (e2 > dy) { err -= dy; x0 += sx; }
|
72 | if (e2 < dx) { err += dx; y0 += sy; }
|
73 | }
|
74 |
|
75 | if((x<y) && (x>0) && (y>0) ){ // +X kleiner als +Y
|
76 | if(x0<x1){ x1=x0; Xstep(-1);}
|
77 | if(y0<y1){ y1=y0; Ystep(-1);}
|
78 | if(x0>x1){ x1=x0; Xstep(1);}
|
79 | if(y0>y1){ y1=y0; Ystep(1);}
|
80 | if (x0>=x && y0>=y && z==0){ x=x-x0; y=y-y0; break; }
|
81 | e2 = 2*err;
|
82 |
|
83 | if (e2 < dy) { err += dy; x0 += sx; }
|
84 | if (e2 > dx) { err -= dx; y0 += sy; }
|
85 | }
|
86 | if((x>y) && (x<0) && (y<0) ){ // -X größer als -Y
|
87 | if(x0<x1){ x1=x0; Xstep(-1);}
|
88 | if(y0<y1){ y1=y0; Ystep(-1);}
|
89 | if(x0>x1){ x1=x0; Xstep(1);}
|
90 | if(y0>y1){ y1=y0; Ystep(1);}
|
91 | if (x0<=x && y0<=y && z==0){ x=x-x0; y=y-y0; break; }
|
92 | e2 = 2*err;
|
93 |
|
94 | if (e2 > dy) { err -= dy; x0 += sx; }
|
95 | if (e2 < dx) { err += dx; y0 += sy; }
|
96 | }
|
97 |
|
98 | if((x<y) && (x<0) && (y<0) ){ // -X kleiner als -Y
|
99 | if(x0<x1){ x1=x0; Xstep(-1);}
|
100 | if(y0<y1){ y1=y0; Ystep(-1);}
|
101 | if(x0>x1){ x1=x0; Xstep(1);}
|
102 | if(y0>y1){ y1=y0; Ystep(1);}
|
103 | if (x0<=x && y0<=y && z==0){ x=x-x0; y=y-y0; break; }
|
104 | e2 = 2*err;
|
105 |
|
106 | if (e2 < dy) { err += dy; x0 += sx; }
|
107 | if (e2 > dx) { err -= dx; y0 += sy; }
|
108 | }
|
109 |
|
110 | if((x>y) && (x>0) && (y<0) ){ // +X größer als -Y
|
111 | if(x0<x1){ x1=x0; Xstep(-1);}
|
112 | if(y0<y1){ y1=y0; Ystep(-1);}
|
113 | if(x0>x1){ x1=x0; Xstep(1);}
|
114 | if(y0>y1){ y1=y0; Ystep(1);}
|
115 | if (x0>=x && y0<=y && z==0){ x=x-x0; y=y-y0; break; }
|
116 | e2 = 2*err;
|
117 |
|
118 | if (e2 > dy) { err -= dy; x0 += sx; }
|
119 | if (e2 < dx) { err += dx; y0 += sy; }
|
120 | }
|
121 |
|
122 | if((x<y) && (x<0) && (y>0) ){ // -X kleiner als +Y
|
123 | if(x0<x1){ x1=x0; Xstep(-1);}
|
124 | if(y0<y1){ y1=y0; Ystep(-1);}
|
125 | if(x0>x1){ x1=x0; Xstep(1);}
|
126 | if(y0>y1){ y1=y0; Ystep(1);}
|
127 | if (x0<=x && y0>=y && z==0){ x=x-x0; y=y-y0; break; }
|
128 | e2 = 2*err;
|
129 |
|
130 | if (e2 < dy) { err += dy; x0 += sx; }
|
131 | if (e2 > dx) { err -= dx; y0 += sy; }
|
132 | }
|
133 |
|
134 |
|
135 |
|
136 | //x=Xstep(x);
|
137 | //y=Ystep(y);
|
138 | z=Zstep(z);
|
139 | if(stepspeed<=400 ){stepspeed=400;}
|
140 | counter++;
|
141 | counter2++;
|
142 | if(counter2==20 && (lcd==1 || lcd==2)){
|
143 |
|
144 | if(lcd==1){lcdupdate(x0,y0,z,zkorr);}
|
145 | if(lcd==2){lcdupdate2(x0,y0,z,zkorr,stepspeed);}
|
146 |
|
147 | _delay_us(stepspeed-30); counter2=0;
|
148 |
|
149 | }else{_delay_us(stepspeed);}
|
150 | //if((x==0) || (y==0) || (z==0)){ return ;}
|
151 |
|
152 | //schleife ende
|
153 | }
|
154 | if(lcd==1){lcdupdate(x0,y0,z,zkorr);}
|
155 | if(lcd==2){lcdupdate2(x0,y0,z,zkorr,stepspeed);}
|
156 | _delay_ms(10);
|
157 | //alles off
|
158 | POM1_E &=~(1<<PIM1_E); // X Motor1 Deaktivieren
|
159 | POM2_E &=~(1<<PIM2_E); // Y Motor2 Deaktivieren
|
160 | POM3_E &=~(1<<PIM3_E); // Z Motor3 Deaktivieren
|
161 | POM1_1 &=~((1<<PIM1_1)|(1<<PIM1_2));
|
162 | POM1_2 &=~((1<<PIM1_3)|(1<<PIM1_4));
|
163 | POM2_1 &=~((1<<PIM2_1)|(1<<PIM2_2));
|
164 | POM2_2 &=~((1<<PIM2_3)|(1<<PIM2_4));
|
165 | POM3_1 &=~((1<<PIM3_1)|(1<<PIM3_2));
|
166 | POM3_2 &=~((1<<PIM3_3)|(1<<PIM3_4));
|
167 | return error;
|
168 | }
|