Moin moin,
ich habe eigentlich etwas ganz einfaches vor: Durch einen Impuls
(Taster) sollen ein paar LEDs ein, bzw. ausgeschaltet werden. Beim
ersten mal drücken einschalten, drückt man nach einer weile ein zweites
mal sollen die LEDs wieder ausgehen. Das ganze soll später auf einem
ATtiny13 laufen. Ich habe mal aus meinen C kenntnissen und dem AVR GCC
Tutorial etwas zusammengebastelt. Sieht wie folgt aus:
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | void delay(uint16_t duration){
|
5 | for(;duration>0;duration--){ //Schleife zum aufruf von _delay_ms(1) => duration*1ms
|
6 | _delay_ms(1); //1ms Warten
|
7 | }
|
8 | }
|
9 |
|
10 | int main(void){
|
11 |
|
12 | DDRB &= ~(1<<PINB0); //PINB0 als Eingang
|
13 | PORTB |= (1<<PINB0); //Pullup an PINB0 aktivieren
|
14 |
|
15 | DDRB |= (1<<PINB5); //PINB5 als Ausgang
|
16 |
|
17 | while(1){
|
18 | if (PINB &= (1<<PINB0)){
|
19 | PORTB ^= (1<<PINB5);
|
20 | delay(2000); //2sec delay zum Entprellen
|
21 | }
|
22 | }
|
23 | return 0;
|
24 | }
|
Das ganze läuft im Simulator unter AtmelStudio6 ganz wunderbar. Lade ich
es zum test auf mein ATmega8 Experimentierboard (myAVR) funktioniert es
nicht wie gewollt: Scheinbar stimmt die if Bedingung nicht. Es endet
immer in einer Blinkschaltung. Ich hab aber irgendwie gerade ein Brett
vor dem Kopf und komme nicht drauf was dort der fehler ist. Habt ihr
eine Idee?
Ich verwende ja "delay.h" und bekomme im AtmelStudio die Warnung dass
die CPU Frequenz nicht definiert ist. Kann ich diese Warnung für den
Einsatz auf dem echten µC getrost ignorieren? (Im GCC kann ich ja unter
Symbols die Frequenz selber angeben)
Schönen Restabend euch und danke schonmal im Vorraus für eure Hilfe und
Tipps