Hallo,
eigentlich wollte ich ein altes LCD Display mit einem ATTINY2313
ansteuern. Ich habe aber scheinbar Probleme mit einer for-Schleife. Der
letzte Befehl in einer for-Schleife wurde nicht ausgeführt, wenn die
Schleife nur einmal durchlaufen wurde. Bei mehreren Durchläufen wurde
beim ersten Durchlauf der Befehl übersprungen.
Schleifen waren bisher kein Problem für mich. Habe aber das letzte mal
vor einem Jahr programmiert. Ich habe das Programm dann komplett auf den
Problemfall reduziert. Dieses Programm sollte zum Test einmalig nach
einer 0,5 Sekunden eine LED einschalten und nach 0,5 Sekunden wieder
aus. Die LED wird aber nur eingeschalten. Der letzte Befehl wird somit
ignoriert. Bei ähnlichen Konstruktionen mit while oder if passiert das
gleiche. Wo liegt der Fehler?
#ifndef F_CPU
#define F_CPU 8000000UL
#endif
1 | #include <util/delay.h>
|
2 | #include <stdint.h>
|
3 | #include <avr/interrupt.h>
|
4 | #include <avr/io.h>
|
5 |
|
6 | int main( void )
|
7 | {
|
8 | unsigned int c = 0;
|
9 |
|
10 | DDRD |= (1<<PB6); // Pin PB6 an Port D als Ausgang CE + Kontroll LED 1
|
11 |
|
12 | while(1)
|
13 | {
|
14 | for (;c<1;c++)
|
15 | {
|
16 | _delay_ms(500);
|
17 | PORTD &= ~(1<<PB6); //CE an
|
18 | _delay_ms(500);
|
19 | PORTD |= (1<<PB6); //CE aus
|
20 | }
|
21 | }
|
22 | return 0;
|
23 | }
|
Gruß
Andreas