Hallo,
ich habe ein Programm geschrieben, welches einen Servo und eine LED
ansteuern soll
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 | PORTB |= (1<<PB0); //PB0 als Ausgang definieren
|
21 | PORTB &= ~(1<<PB0); // PB0 auf low setzen
|
22 | PORTB |= (1<<PB1); //PB1 als Ausgang definieren
|
23 | PORTB &= ~(1<<PB1); // PB1 auf low setzen
|
24 | DDRB &= ~(1<<PB4); // PB4 als Eingang definieren
|
25 | PORTB |= (1<<PB4); // Interner Pull-Up einschalten
|
26 | }
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | int main(){
|
32 | int i=5;
|
33 | int val=0;
|
34 | init_servo();
|
35 | init_timer();
|
36 | while(1){
|
37 | val = PINB&(1<<PINB4); // Abfrage ob Pin4 high ist
|
38 | if(val){
|
39 | PORTB = 0b00010; // mache LED an Pin1 an
|
40 | while(val){
|
41 | i++; // PWM um eins erhöhen
|
42 | OCR0A = i; // setze PWM
|
43 | _delay_ms(15);
|
44 | val = PINB&(1<<PINB4);
|
45 | }
|
46 | }
|
47 | else{
|
48 | PORTB = 0b00000; // mache LED an Pin1 ausa
|
49 | while(i>=5){
|
50 | i--; // PWM um eins veringern
|
51 | OCR0A = i; // setze PWM
|
52 | _delay_ms(15);
|
53 | }
|
54 | }
|
55 | }
|
56 | return 0;
|
57 | }
|
das ganze soll mit einem Attiny45 gemacht werden. beim kompilieren sagt
er mir, dass es keinen Fehler gibt, also habe ich das ganze aus der
Eingabeaufforderung auf meinem kontroller hochgeladen
avrdude -c STK500v2 -p t45 -P COM5 -B 9 -U flash:w:servo.hex
es ist so, dass die LED sofort schwach leuchtet.
Wenn ich den Eingangspin auf High setze, wird die LED zwar ein bischen
heller (aber auch nciht so hell wie sie sein sollte), aber sonst
passiert nichts.
Der Servo rührt sich gar nciht.
ich habe den Eingangspin noch mit einem 10k Widerstand mit ground
verbunden. also dürfte der Pin eigenglich auf Low stehen.
Habe ich da Fehler in meinem Programm (Davon gehe ich eigentlich schon
aus)?
und kann ich irgendwie direkt über AVR-Studio das Programm auf meinem
Kontroller Programmieren?
Mark