-         

Ergebnis 1 bis 5 von 5

Thema: LED Blinken lassen

  1. #1
    Neuer Benutzer Öfters hier Avatar von FuturamaFry
    Registriert seit
    25.08.2013
    Ort
    Essen
    Beiträge
    17

    LED Blinken lassen

    Anzeige

    Hallo,

    kann mir jemand weiterhelfen. Ich bin noch richtiger Anfänger auf dem Gebiet „Programmieren mit C“. Vorher habe ich viel mit Basic (C-Control von Conrad) Programmiert.


    Ich habe jetzt folgende Schaltung aufgebaut:
    ATMega8A mit einem 8Mhz Quarz und eine LED an Port12(PD6) (natürlich mit Vorwiederstand).


    Ich möchte jetzt das die LED erst eingeschaltet wird und dann nach einer Sekunde wieder ausgeschaltet wird. Das ganze dann in einer schleife.

    In Basic so;

    define LED Port[12]

    #Start

    Port12 = on
    pause 50
    Port12 = off

    goto Start


    Kann mir das jemand in C umschreiben?


    Gruss

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2008
    Alter
    32
    Beiträge
    563
    Ähm....nein.....

    Das ist das "Hello World" der µC-Programmierung und mit Tante Google garantiert auch mit den unsinnigsten Stichwörtern auf der ersten Startseite vertreten
    Alles ist möglich. Unmögliches dauert nur etwas länger!

  3. #3
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    7.557
    ... LED erst eingeschaltet ... nach einer Sekunde ... aus ... Kann mir das jemand in C umschreiben
    Zitat Zitat von Arkon Beitrag anzeigen
    Ähm....nein.....
    Schade dass Arkon das Dir das nicht umschreiben kann. Kann hier fast jeder - aber vielleicht interpretierst Du Arkons Bemerkung als lehrerhafte de-Motivation - und schaust Dir trotzdem diese Hilfe (klick mal) an als Einführung in eine kleine Programmstruktur oder diesen Abschnitt (nochnklick) zur Waitfunktion.

    Annahme : Du benutzt den GCC-Compiler in WINAVR. Hier ein langatmiger Code, sehr einfach aufgebaut, mit allerlei nötigen Initialisierungen und Einbindungen von den benutzten GCC-bibliotheken und reichlich Kommentar (hoffentlich nicht zuu unübersichtlich):
    Code:
    /* >> 
      Stand ...
     ================================================================================ =
      Target MCU        : 
      Target Hardware   : 
      Target cpu-frequ. : 
     ================================================================================ =
      Enthaltene Routinen :                
      int main(void)
     ================================================================================ =
      *** Versionsgeschichte:
     ====================
     x00 15Okt13 hhmm
     ================================================================================ =
      *** Aufgabenstellung : LED blinken lassen
    ######>>>>>> Bis hierher eigentlich nur Beschreibungen, damit man später weiß, was .....
     =============================================================================== */
    // Die nötigen Bibliotheken einbinden
      #include <stdlib.h>  
      #include <util/delay.h>       // in älteren avr-libc Versionen <avr/delay.h>
    // ============================================================================== =
    
    // ============================================================================== =
    // ===  HAUPTProgramm =========================================================== =
    // Initialisierungen, LED blinken lassen im 1 sek takt
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     int main(void)
     {                              //
    // - - - - - - - - - - - - - - -
    // Ports+Pins als Ein- (0) oder Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
    //      A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp
      DDRB  = 0b11111100;   // Testweise bzw. Demo für Eingang
      PORTB = 0b00000011;   //   .. mit Pullup
                            //
      DDRC  = 0b11111111;   //
      PORTC = 0b00000000;   //
                            // 
      DDRD  = 0b11111111;   // PD6 mit LED; geschaltet Anode<->Portpin, Kathode<->GND
      PORTD = 0b00000000;   //
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                            //
      while ( 1 )           // Beginn einer Endlosschleife
      {                     //
        PORTD   |=  ( 1<<PB6 );     // LED anknippsen <=> Setzt Portpin PB6 auf high
        _delay_ms( 1000 );          // Bibliotheksfunktion Millisekunden-Waits,
                                    //  .. hier 1000 ms
        PORTD   &= ~( 1<<PB6 );     // LED ausknippsen <=> Setzt Portpin PB6 auf low
                                    //  .. heisst sozusagen: Portpin wird gelöscht
        _delay_ms( 1000 );          // 
      }             // Ende while ( 1 )
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      return 0;             //
     }              // Ende int main(void)
    // ============================================================================== =
    Das geht natürlich vom eigentlichen Programmm, dem modul main, einfacher, weil man so einen Port einfach umschalten kann - da spart man Codezeilen (und natürlich auch Maschinenzeit).
    Code:
    //* >> 
      Stand ...
     ================================================================================ =
      Target MCU        : 
      Target Hardware   : 
      Target cpu-frequ. : 
     ================================================================================ =
      Enthaltene Routinen :                
      int main(void)
     ================================================================================ =
      *** Versionsgeschichte:
     ====================
     x00 15Okt13 hhmm
     ================================================================================ =
      *** Aufgabenstellung : LED blinken lassen
     =============================================================================== */
      #include <stdlib.h>  
      #include <util/delay.h>       // in älteren avr-libc Versionen <avr/delay.h>
    // ============================================================================== =
    
    // ============================================================================== =
    // ===  HAUPTProgramm =========================================================== =
    // Initialisierungen, LED blinken lassen im 1 sek takt
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     int main(void)
     {                              //
    // - - - - - - - - - - - - - - -
    // Ports+Pins als Ein- (0) oder Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
    //      A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp
      DDRB  = 0b11111100;   // Testweise bzw. Demo für Eingang
      PORTB = 0b00000011;   //   .. mit Pullup
                            //
      DDRC  = 0b11111111;   //
      PORTC = 0b00000000;   //
                            // 
      DDRD  = 0b11111111;   // PD6 mit LED; geschaltet Anode<->Portpin, Kathode<->GND
      PORTD = 0b00000000;   //
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                            //
      while ( 1 )           // Beginn einer Endlosschleife
      {                     //
        PORTD   ^=  ( 1<<PB6 );     // LED toggeln <=> Setzt Portpin PB6 auf den
                                    //   jeweils anderen Zustand (umschalten low-high)
        _delay_ms( 1000 );          // Bibliotheksfunktion Millisekunden-Waits,
                                    //  .. hier 1000 ms
      }             // Ende while ( 1 )
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      return 0;             //
     }              // Ende int main(void)
    // ============================================================================== =
    Maschinenzeit: das Beispiel ist wirklich nur ein Beispiel - es zeigt, wie man einen flinken Controller lahmlegt, weil man einfach nur wartet und wartet und wartet und wartet und wartet und wartet und wartet und wartet und ne LED schaltet und wartet und wartet und wartet und wartet und wartet und ne LED...
    Ciao sagt der JoeamBerg

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2008
    Alter
    32
    Beiträge
    563
    Na komm. So böse war das jetzt nicht gemeint. Aber wenn jemand in diesem Forum nach eienr Komplettlösung für sein Projekt fragt wird immer betont, dass wir helfen aber nicht vorkauen.

    Und diese grundlegende Funktion ist nun wirklich Bestandteil aller ernst zu nehmenden µC-Tutorials, das mir bisher unter gekommen ist. In meinen Augen wurde auch hier nur der bequeme Weg gewählt andere für sich arbeiten zu lassen, ohne vorher per 5-Minuten-Google-Recherche den benötigten Aufwand abzuschätzen. Zumal durch die Präsentation von fertigem Code auch der Punkt zu tragen kommt den einer meiner Professoren immer von sich gab: "Kopiert ist nicht gleich kapiert!"

    Ich hätte schreiben sollen: Ich kann es dir umschreiben, will ich aber nicht. Das wäre dann weniger unfähig dafür noch arroganter rüber gekommen
    Alles ist möglich. Unmögliches dauert nur etwas länger!

  5. #5
    Neuer Benutzer Öfters hier Avatar von FuturamaFry
    Registriert seit
    25.08.2013
    Ort
    Essen
    Beiträge
    17
    Vielen dank für die Hilfe !

    Ich habe vorher hier in Forum und auf google geschaut. Ein paar Beispiele habe ich auch gefunden (die aber irgendwie alle nicht funktioniert haben) weil sie entweder mit einer anderen Programmiersprache geschrieben waren oder für ein anderen Chip.

    Ich habe jetzt seit 3 Tagen das aTeVal und war schon am ersten Tag am verzweifeln weil mein PC das Board nicht erkannt hat. Habe erst schon gedacht ich hätte beim Löten ein Fehler gemacht (das Board kommt als Bausatz). Dann hat mein Rechner endlich das Board als „AVRISP mkII“ erkannt. Als nächstes kam dann die Programmiersoftware. In manchen Foren wird richtig darüber gestritten welches die beste und „Für Anfänger geeignete“ Programmiersprache ist. Nach vielen Installationen, PC Neustarts und Deinstallationen habe ich mich für das Atmel Studio 6.0 entschieden. Nach vielen Youtube Videos, wusste ich dann auch wie man das Programm auf den Chip Brennen kann (wie gesagt blutiger Anfänger).

    Und um alles dann zu testen und Treiber- und Lötfehler aus zu schließen wollte ich ein Programm das in meiner Programmiersprache und für mein Chip ist.

    "Kopiert ist nicht gleich kapiert!"
    Jaein. Irgendwie muss ich ja anfangen. Anhand von Beispielen kann man doch am besten lernen

    Jetzt weiß ich wie die Befehle aussehen ein Port auf high und low zu setzten und wie der Befehl für Pause ist. Es kann weiter gehen.

Ähnliche Themen

  1. Led mit 36 khz blinken lassen.
    Von icebreaker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 31.08.2011, 19:55
  2. 4 Led´s unabhängig per Zufall blinken lassen?
    Von DanielSan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 22
    Letzter Beitrag: 20.07.2011, 14:43
  3. Led blinken lassen mit Timer0
    Von sky2 im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 25.12.2009, 19:33
  4. LED blinken lassen während Programm normal weiterläuft
    Von Steffen08 im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 30.03.2009, 22:10
  5. Led's unabhängig voneinander blinken lassen
    Von Thorsten75 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 1
    Letzter Beitrag: 20.03.2007, 13:41

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •