www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe, was ist hier falsch (10-Zeilen-Code.)


Autor: Maxim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Steige gerade von 8252 auf AVR und von Assembler auf C um, habt also 
Verständnis. :D

Habe schon viel ausprobiert und einige Fehler gefunden, aber das Ding 
läuft trotzdem nicht. Es soll immer die LED leuchten wenn ich den Taster 
betätige.
#include <avr/io.h>

#define  led_1    PD6
#define button_1  PIND2

int main(void) {

  DDRD = 0xff;
  DDRD |= (1<<led_1);    //LED-Pin als Ausgang
  DDRD &= ~(1<<button_1);  //Taster-Pin als Eingang

    
  while(1) {
    if(button_1) {
      PORTD |= (1<<led_1);
    } else {
      PORTD &= ~(1<<led_1);
    }  
  }

  return 0;
}

Autor: D. W. (dave) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja.. man darf nicht einfach "if (button_1)" machen. Dieses PIND2 ist 
für den Compiler nur "2" ;) ist halt für den Programmierer leichter zu 
erkennen, was man damit vor 2-3 Jahren mal meinte.

Du musst mit diesem 2 (oder PIND2) das passende Bit im Input-Register 
maskieren.
So:
if(PIND & (1 <<button_1)) {
      PORTD |= (1<<led_1);
    } else {
      PORTD &= ~(1<<led_1);
    }  

Bedeutet:
PIND (Eingänge) werden eingelesen und wird mit 0000 0100 maskiert (2x 
nach links geshiftete 1). Wenn 100 rauskommt, wars gesetz, wenn nicht, 
isses 0 gewesen. Dieses dritte Bit entspricht dann deinem Eingang.

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schau mal hier rein, da gibts auch viele Beispiele:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Autor: Maxim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha, danke!

ps: Den Link kenne ich, ohne den Artikel wäre ich total aufgeschmissen. 
;)

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.