Forum: Mikrocontroller und Digitale Elektronik C-Programm für ATmega8


von Bauch,Michael (Gast)


Lesenswert?

Hallo

Ich hab grade erst begonnen mich mit Microcontrollern zu beschäftigen...
Habe mir das myAVR-USB Board mit nem ATmega8 gekauft und versuche nun 
vergeblich ein funktionierendes C-Programm dafür zu schreiben.

Aufbau:
PORTD Pin2 Taster 1
PORTD Pin3 Taster 2
PORTD Pin4 rote LED
PORTD Pin5 gelbe LED

Geplante Funktion:
Drückt man Taster 1 geht die rote LED an
Drückt man Taster 2 geht die grüne LED an

Hier mein Versuch in C
1
//----------------------------------------------------------------------
2
// Funktion  : Mit Taster LED ansteuern
3
// Funktion  : Taster 1 = LED-ROT ; Taster 2 = LED-GELB
4
// Schaltung : Versuchsnummer ...keine Ahnung hab aufgehört zu Zählen
5
//----------------------------------------------------------------------
6
7
8
//----------------------------------------------------------------------
9
#define   F_CPU 3686400  // Taktferquenz des myAVR-Boards
10
#include  <avr\io.h>    // AVR Register und Konstantendefinitionen
11
//----------------------------------------------------------------------
12
13
14
main ()
15
{
16
  DDRD =0b00011000;            //PORT D komplett mit Eingängen (0) beschaltet ; Auf Ausgang (1) Pin 4/5 geschaltet
17
  PORTD=0b00000110;            //Eingang Pin2&3 Pullup wegen den Tastern
18
19
  do                     // Schleifenstart Mainloop
20
  {
21
    if(!(PIND&0b00000010))        // Taster1 liegt an Masse, sobald Taster gedrückt, Signal logisch NULL
22
       {PORTB=0b00001000;}        // LED ROT an PORTB Pin4
23
    
24
    else if(!(PIND&0b00000100))      // Taster2 liegt an Masse, sobald Taster gedrückt, Signal logisch NULL
25
            {PORTB=0b00010000;}      // LED GELB an PORTB Pin5  
26
  }
27
  while (true);              // Schleifenende Mainloop
28
}

Könnt ihr mir sagen wo mein Fehler liegt???

Vielen Dank

Michael

von hans (Gast)


Lesenswert?

Hallo Michael

schau mal deine Ports an
entweder B oder D
gruß hans

von Peter (Gast)


Lesenswert?

seit wann gibt es in C do , while schleifen? Wird der Code überhaupt 
Compiliert?
Probier mal statt des do-while Kostrukts einfach for(;;){} statt dem do 
und des While ganz weg lassen.

von Sebastian (Gast)


Lesenswert?

Peter wrote:
> seit wann gibt es in C do , while schleifen?
Seitdem es C gibt ?

von Bauch,Michael (Gast)


Lesenswert?

...ja compiliert wird das!


Danke an Hans... boar scheisse ich glaub ich brauch ne neue Brille... 
Das ich sowas übersehn habe...*schähm*

Und vorallem häng ich hier seid 2 Stunden und wunder mich warum da 
nichts rauskommt.

Vielen Dank

von Peter D. (peda)


Lesenswert?

Peter wrote:
> seit wann gibt es in C do , while schleifen?

Schon immer.
Man nimmt es, wenn die Schleife auf jeden Fall einmal durchlaufen werden 
soll.
Das kann die for-Schleife nicht.


Peter

von David M. (md2k7)


Lesenswert?

Peter wrote:
> seit wann gibt es in C do , while schleifen?

Seit ihrer Spezifikation?


@ Michael Bauch

Wenn ein Programm nicht kompiliert, sieht man sich der Reihe nach die 
Fehlermeldungen (und Warnungen auch!) an und versucht, sie zu verstehen.
1
../test.c:15: warning: return type defaults to 'int'
Hier hast du gleich mal den Rückgabetyp der "main()"-Funktion vergessen. 
Die sollte int sein.
1
../empty.c:27: error: 'true' undeclared (first use in this function)
Es gibt in reinem C keine Booleans, also Wahrheitswerte. Eine 
if()-Bedingung z.B. ist dann wahr, wenn sie nicht 0 ist. Also für die 
Endlosschleife z.B. while(1) schreiben.
1
../empty.c:28: warning: control reaches end of non-void function
Damit es C-konform wird, schließt man eine Funktion mit Rückgabewert 
(alles außer void) mit einem Return als letzten Befehl ab, z.B. return 
0;


Wie oben bereits erwähnt solltest du, wenn du Port D meinst, auch PORTD 
schreiben.

Gruß
David

P.S. anscheinend hast du dann einen C++ Compiler verwendet. Der fehlende 
Typ der main() wird aber auch vom C++ Compiler bemängelt.

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.