Forum: Compiler & IDEs Befehl einmalig ausführen (myAVR Board Atmega8 Atmel Studio 6.2)


von Daniel V. (wuddy)


Lesenswert?

Hallo zusammen,

ich scheine in diesem Gebiet doch etwas mehr eingerostet zu sein als ich 
dachte...

Ich hätte gerne, dass mein Bord mir kurz nach dem einschalten einen Port 
schaltet.
Dies soll jedoch nur nach dem einschalten passieren. Mein erster Gedanke 
war:
1
#ifndef F_CPU
2
#define F_CPU 3686400UL  
3
#endif
4
5
#include <avr/io.h>
6
#include <util/delay.h>
7
8
9
int main(void)
10
{
11
 DDRC = 0b00000000;
12
 DDRB = 0b00100111;
13
 DDRD = 0b10000000;
14
 PORTC = 0b00111100;
15
 _delay_ms(2000);
16
 PORTB = 0b00100000;
17
 _delay_ms(1000);
18
  
19
    while(1)
20
    {
21
    if(bit_is_clear(PINC,2))
22
    {
23
      PORTB = 0b00000100;
24
    }
25
    PORTB = 0b00000000;
26
    if(bit_is_clear(PINC,3))
27
    {
28
      PORTB = 0b00000010;
29
    }
30
    PORTB = 0b00000000;
31
    if(bit_is_clear(PINC,4))
32
    {
33
      PORTB = 0b00000001;
34
    }
35
    PORTB = 0b00000000;
36
    if(bit_is_clear(PINC,5))
37
    {
38
      PORTD = 0b10000000;
39
    }
40
    PORTD = 0b00000000;
41
    }
42
}
Jedoch schaltet er den Port immer wieder. Sollte das Programm nicht in 
der while(1) Schleife laufen und auf die Schalter warten?
Was hab ich da falsch gemacht?

von Teo D. (teoderix)


Lesenswert?

Dein Board (welches auch immer) wird wohl einen Reset o.ä. durchführen.

von g457 (Gast)


Lesenswert?

> Sollte das Programm nicht in der while(1) Schleife laufen und auf die
> Schalter warten?

Bis zum Reset. Zeig mal Schaltplan und ∗aussagekräftige∗ Fotos vom 
Aufbau.

von Amateur (Gast)


Lesenswert?

Wenn Du Deinen Port vor der Endlosschleife setzt, so wird diese Aktion 
auch nur einmal ausgeführt.
Wer sagt denn, dass Du während der Initialisierung, mit den Ports nicht 
machen darfst, was Du willst – genauso wie auch später.
Der einzige Unterschied ist doch der, dass der eine Teil nur einmal 
durchlaufen wird, der andere zyklisch.
Schau Dir doch mal die an geschätzt 1000 Stellen referierte 
Grundstruktur eines µP-Programmes an.

von Daniel V. (wuddy)


Lesenswert?

Der Reset, ja da war doch mal was :)
Ich hatte keine 5V an dem Reset-Pin vom Atmega8. Spannung angelegt und 
alles läuft wie es soll.

Vielen Dank Euch!

von g457 (Gast)


Lesenswert?

> Ich hatte keine 5V an dem Reset-Pin vom Atmega8.

Das sollte auch nicht nötig sein.

> Spannung angelegt und alles läuft wie es soll.

Damit hast Du vermutlich die Symptome behoben, aber nicht die Ursache, 
und das möglicherweise sogar nur vorübergehend.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.