Hallo.
Ich hab mich heute mal rangemacht um eine Stromversorgungsplatine zu
basteln.
Dafür verwende ich den Attiny45 auf dem STK500 Board. Testen tue ich auf
einem Steckbrett.
PB1, PB4 sind eingänge
PB2, PB0, PB3 sind Ausgänge
PB5 nicht belegt da Reset
Pin 8 VCC 5+
Pin 4 Gnd 0V
Folgenden Code verwende ich.
Habe schon einiges auskommentiert um den Fehler zu finden.
1 | #include <avr/io.h>
|
2 | #define F_CPU 1000000UL
|
3 | #include <util/delay.h>
|
4 |
|
5 | void long_delay(unsigned int ms)
|
6 | {
|
7 | for(; ms > 0; ms--) _delay_ms(1);
|
8 | }
|
9 |
|
10 |
|
11 | int main( void )
|
12 | {
|
13 | unsigned int time = 0;
|
14 | DDRB = 1 << PB0 | 1 << PB2 | 1 << PB3; //Ausgänge definieren
|
15 | PORTB = 1 << PB2 | 1 << PB3; //PB2, PB3 einschalten
|
16 |
|
17 | long_delay(2500); //2,5sec warten
|
18 |
|
19 | PORTB = 1 << PB0 | 1 << PB2 | 1 << PB3; // PB0 auch einschalten
|
20 | while(~(PINB & PB4)) // Solange in der Schleife bleiben bis PB4 auf Low ist
|
21 | {
|
22 | // In diese Schleife geht er nicht rein. PB4 hab ich direkt auf Masse gezogen oder frei in der luft hängen gelassen.
|
23 | PORTB = !(1 << PB0 | 1 << PB3);
|
24 | /*if(++time == 5000)
|
25 | {
|
26 | PORTB = !(1 << PB0 | 1 << PB2 | 1 << PB3);
|
27 | while(1);
|
28 | }
|
29 | long_delay(1);*/
|
30 | }
|
31 | while(PINB & PB4)
|
32 | {
|
33 | if(PINB & PB1) PORTB = 1 << PB0 | 1 << PB2 | 1 << PB3;
|
34 | else PORTB = 1 << PB2 | 1 << PB3;
|
35 | }
|
36 |
|
37 | PORTB = 0;
|
38 | return 0;
|
39 | }
|
Ich hoffe ihr könnt mir helfen
Mit freundlichen Grüßen
Daniel