Hey zusammen, bin mir mein Programm am umbauen, von ATmega32 auf ATtiny2313. Ist das erste mal das ich einen anderen Controller verwende außer dem mega32. Zu meiner Frage, auf PB2 (OC0A) soll die PWM einen Motor steuern. Aber wenn ich das Programm aufspiele, läuft er sofort los obwohl er keine Anweisung dafür hat. Auf dem anderen Controller lief es, bzw er lief nicht sofort an :) musste ja theoretisch nur die Register ändern.
1 | /* define CPU 8Mhz */
|
2 | #ifndef F_CPU
|
3 | #define F_CPU 8000000
|
4 | #endif
|
5 | |
6 | // Bibliotheken
|
7 | /... |
8 | |
9 | int main(void) |
10 | {
|
11 | |
12 | DDRD |= (1<<PD0); // PD0 = Ausgang |
13 | DDRD |= (1<<PD1); // PD1 = Ausgang |
14 | DDRD &= ~(1<<PD2); // PD2 = Eingang |
15 | DDRD &= ~(1<<PD3); // PD3 = Eingang |
16 | |
17 | DDRB |= (1<<PB0); // PD4 = Ausgang |
18 | DDRB |= (1<<PB1); // PD5 = Ausgang |
19 | DDRB |= (1<<PB2); // PD6 = Ausgang |
20 | |
21 | PORTD |= (1<<PD2); // Pull-Up an PD2 aktivieren |
22 | PORTD |= (1<<PD3); // Pull-Up an PD3 aktivieren |
23 | |
24 | // Interrupt für INT1 initialisieren
|
25 | MCUCR |= (1<<ISC11); // Fallende Flanke löst aus |
26 | GIMSK |= (1<<INT1); // INT0 & INT1 enable |
27 | |
28 | // Timer0/PWM initialisieren
|
29 | TCCR0A |= (1<<WGM01) | (1<<COM0A0); // CTC-Mode | Toggle OC0A @ Compare Match |
30 | TCCR0B |= (1<<CS01); // Prescaler 8 |
31 | |
32 | // Timer1 initialisieren
|
33 | TCCR1B |= (1<<WGM12) | (1<<CS10) | (1<<CS12); // CTC-Modus | Prescaler 1024 |
34 | TIMSK |= (1<<OCIE1A); // Interrupt A bei Timer-Overflow |
35 | OCR1A = 7812; // (Zeit * (uC-Takt/Prescaler)) - 1) --> (1sek * (8000000MHz/1024)) - 1) = 7811.5 Ticks/Sekunde |
36 | |
37 | sei(); |
38 | |
39 | while (1) |
40 | {
|
41 | OCR0A = 0; |
42 | }}
|