www.mikrocontroller.net

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


Autor: Bauch,Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
//----------------------------------------------------------------------
// Funktion  : Mit Taster LED ansteuern
// Funktion  : Taster 1 = LED-ROT ; Taster 2 = LED-GELB
// Schaltung : Versuchsnummer ...keine Ahnung hab aufgehört zu Zählen
//----------------------------------------------------------------------


//----------------------------------------------------------------------
#define   F_CPU 3686400  // Taktferquenz des myAVR-Boards
#include  <avr\io.h>    // AVR Register und Konstantendefinitionen
//----------------------------------------------------------------------


main ()
{
  DDRD =0b00011000;            //PORT D komplett mit Eingängen (0) beschaltet ; Auf Ausgang (1) Pin 4/5 geschaltet
  PORTD=0b00000110;            //Eingang Pin2&3 Pullup wegen den Tastern

  do                     // Schleifenstart Mainloop
  {
    if(!(PIND&0b00000010))        // Taster1 liegt an Masse, sobald Taster gedrückt, Signal logisch NULL
       {PORTB=0b00001000;}        // LED ROT an PORTB Pin4
    
    else if(!(PIND&0b00000100))      // Taster2 liegt an Masse, sobald Taster gedrückt, Signal logisch NULL
            {PORTB=0b00010000;}      // LED GELB an PORTB Pin5  
  }
  while (true);              // Schleifenende Mainloop
}

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

Vielen Dank

Michael

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Michael

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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sebastian (Gast)
Datum:

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

Autor: Bauch,Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: David Madl (md2k7)
Datum:

Bewertung
0 lesenswert
nicht 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.
../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.
../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.
../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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.