Hallo Miteinander, ich bräuchte aktuell mal etwas Hilfe bzw. jemanden der über meinen Code drüber schauen könnte, da ich momentan nicht weiterkomme. Will einen Schrittmotor über ein A4988 betreiben, der Motor soll sich nach links oder rechts bewegen je nachdem welche LDR (PA0+PA1= mehr Licht bekommt. Aktuell dreht sich der Motor zwar, aber nur in eine Richtung egal wie die zwei LDRs Licht bekommen oder abgedunkelt werden. Seit nicht zu hart zu mir bin recht neu dabei :-) hab aber irgendwie das Gefühl das ich irgendetwas banales übersehe. Vielen Dank Code:
1 | #define F_CPU 1000000UL
|
2 | #include <avr/io.h> |
3 | #include <avr/interrupt.h> |
4 | #include <util/delay.h> |
5 | |
6 | |
7 | |
8 | int main(void) |
9 | {
|
10 | |
11 | //Ausgänge und Eingänge Konfig
|
12 | |
13 | DDRB |= (1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4) | (1 << PB5) | (1 << PB6) | (1 << PB7); // PB 0-7 auf Ausgang |
14 | DDRA &= ~( (1 << PA0) | (1 << PA1) ); // PA 0 & 1 auf Eingang (LDRs) |
15 | DDRD |= (1 << PD5) | (1 << PD6); //PD 5 und 6 auf Ausgang |
16 | |
17 | /*DDRD &= ~((1 << PD5) | (1 << PD6)); // PD 5 & 6 auf Eingang (Schalter) Wird erst später angewendet*/
|
18 | |
19 | |
20 | PORTB &= ~((1<<PB2) | (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6) | (1<<PB7)); // PB 2 - 7 auf Low |
21 | |
22 | //ADC Setup
|
23 | |
24 | ADMUX |= (1<<REFS0); // AVCC Refernz mit Kondensator an AREF PIN |
25 | ADCSRA |= (1<<ADEN) | (1<<ADPS2); // ADC anschalten, Division Faktor 16 |
26 | |
27 | //1 Konversion abwarten
|
28 | ADCSRA |= (1<<ADSC); // eine ADC-Wandlung |
29 | while (ADCSRA & (1<<ADSC) ) { // auf Abschluss der Konvertierung warten |
30 | }
|
31 | |
32 | |
33 | |
34 | |
35 | //Hauptschleife
|
36 | |
37 | while (1) |
38 | {
|
39 | |
40 | ADMUX &= ~(1<<MUX0); //ADC0 |
41 | |
42 | ADCSRA |= (1<<ADSC); // eine ADC-Wandlung |
43 | while (ADCSRA & (1<<ADSC) ) { // auf Abschluss der Konvertierung warten |
44 | }
|
45 | |
46 | uint8_t LowR = ADCL; |
47 | uint16_t R_LDR = ADCH<<8 | LowR; |
48 | ADCSRA &= ~(1<<ADEN);//ADC aus |
49 | |
50 | ADMUX |= (1<<MUX0); //ADC1 |
51 | |
52 | |
53 | ADCSRA |= (1<<ADSC); // eine ADC-Wandlung |
54 | while (ADCSRA & (1<<ADSC) ) { // auf Abschluss der Konvertierung warten |
55 | }
|
56 | |
57 | |
58 | uint8_t LowL = ADCL; |
59 | uint16_t L_LDR = ADCH<<8 | LowL; |
60 | ADCSRA &= ~(1<<ADEN); //ADC aus |
61 | |
62 | |
63 | if(R_LDR > L_LDR){ |
64 | |
65 | PORTD |= (1<<PD5); //Richtung rechts? |
66 | PORTD |= (1<<PB6); //Step Puls an |
67 | _delay_us(800); |
68 | PORTB &= ~(1<<PD6); //Step Puls aus |
69 | _delay_us(800); |
70 | |
71 | }
|
72 | else{ |
73 | |
74 | PORTD &= ~(1<<PD5); //Richtung links? |
75 | PORTD |= (1<<PD6); //Step Puls an |
76 | _delay_us(800); |
77 | PORTD &= ~(1<<PB6); //Step Puls aus |
78 | _delay_us(800); |
79 | |
80 | }
|
81 | |
82 | }
|
83 | |
84 | }
|