... LED erst eingeschaltet ... nach einer Sekunde ... aus ... Kann mir das jemand in C umschreiben
Zitat von
Arkon
Ä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...
Lesezeichen