Hallo,
hiermit habe ich direkt 2 Fragen.
zunächst mal mein Programm
1 | #define F_CPU 1000000UL
|
2 | #include <stdlib.h>
|
3 | #include <stdio.h>
|
4 | #include <stdint.h>
|
5 | #include <avr/io.h>
|
6 | #include <util/delay.h>
|
7 |
|
8 | void init_timer(){
|
9 | // Set Fast PWM mode.
|
10 | TCCR0A |= (1<<WGM00) | (1<<WGM01);
|
11 | // Clear 0C0A on compare.
|
12 | TCCR0A |= (1<<COM0A1);
|
13 | // Start timer, no prescaling.
|
14 | TCCR0B |= (1<<CS00) | (1<<CS01);
|
15 | // Duty cycle 0%
|
16 | OCR0A = 0;
|
17 | }
|
18 |
|
19 | void init_servo(){
|
20 | DDRA = 0x00; // PortA als Eingang deklarieren
|
21 | PORTA=0x00; //Ports auf LOW schalten
|
22 | DDRB |= (1<<PB2);
|
23 | }
|
24 |
|
25 | int main(){
|
26 | int i, x;
|
27 | init_servo();
|
28 | init_timer();
|
29 | while(1){
|
30 | if(PINA&(1<<PINA0)){
|
31 | i = 1;
|
32 | while(!(PINA & (1 << PINA0))){
|
33 | i++;
|
34 | OCR0A = i;
|
35 | _delay_ms(20);
|
36 | }
|
37 | while(i<=5){
|
38 | i--;
|
39 | OCR0A = i;
|
40 | _delay_ms(20);
|
41 | }
|
42 | }
|
43 | }
|
44 | return 0;
|
45 | }
|
Ich kann das Programm builden(?) also eine hex-file erstellen, die ich
anschließend auf meinen Attiny2313 machen möchte.
Meine erste Frage bezieht sich auf das Programm AVR-Studio 4. WEnn ich
das Programm debuggen(?) mcöhte, bedeutet es ja so viel, dass ich es in
AVR-Studio simulieren möchte. Dann könnte ich bei I/O View ja eingänge
setzen und sehen, wie sich welcher Ausgang verhält oder? aber immer wenn
ich das machen möchte, stürzt AVR-Studio ab. wei einer woran das liegen
kann?
Meine zweite Frage ist zum Programm ansich. Ich möchte ja, solange wie
er Eingang an PA0 anliegt, dass der Ausgang PB2 ein steigendes PWM
rausgibt. Damit möchte ich einfach nur, dass sich der Servor dreht.
Sobald das Signal an PA0 wieder weg ist, möchte ich, dass sich der Servo
wieder zurückdreht.
Allerdings dreht sich der servo ganz komisch, was ihc zu erklären
versuche:
Obwohl kein Signal anliegt, dreht der servo sich. Zunächst dreht er sich
fast ~80° nach links, macht eine Pause von ca 4 sekunden, dreht sich
noch ein stück weiter nach links (~15°) und dann sofort wieder auf
Startposition. Dort verweilt er wieder ein bisschen und fängt dann
wieder von vorne an.
Auch wenn ich das Signal anlege, macht er genau das selbe. liegt das am
Programm? wenn ja, was habe ich falsch gemacht?
hoffe, dass ich mein Problem verständlich erklärt habe, ansonsten bitte
einfach nochmal nachfragen.