Zeitscheibensysteme

OP #2469231
Lesenswert?

Hallo Zusammen,

ich habe eine Frage bezüglich Zeitscheibensysteme!

Hier ein Auschnitt von meinem Programm:

void Application_init (void)
{  DDRC = DDRC | LED;    // Port Bit PC3 set to Output
  LED_DDR = LED_DDR | LED_Bit; // Set PC2 as Output
  //LED_PORT = LED_PORT | LED_Bit;// LED aus
  blink = 0;
  PORTC = PORTC & ~LED;  // LED on
  LED_PORT = LED_PORT & ~LED_Bit;
  Timer0_init ();  // Timer initialisieren (ist in einem anderen Source 
File)
  sei ();    // Enable global Interrupt
}
//------------- Application 10ms ----------------------------
void Application_10ms ()
{
}
//------------- Application 100ms ---------------------------
void Application_100ms ()
{
  blink = ~blink;
  if (blink)
  {
    LED_PORT = LED_PORT & ~LED_Bit; // LED an
  }
  else
  {
    LED_PORT = LED_PORT | LED_Bit; // LED aus
  }
}
//------------- Application 500ms ---------------------------
void Application_500ms ()
{
}
//------------- Application 500ms ---------------------------
void Application_1s (void)
{
  blink = ~blink;  //-------------- LED blinken --
  if (blink)   {PORTC = PORTC | LED;
        }
  else
        {PORTC = PORTC & ~LED;
        }
}

Ich will das die LED (LED_Bit) 400 ms an und 900 ms aus ist.
Das ganze soll aber in der 100 ms Zeitscheibe ablaufen.

Kann jemand weiterhelfen?

Viele Grüsse
#2469324
Lesenswert?

Judgin F. schrieb:
> Er lässt die LED 500 ms an und dann 500 ms aus.
Sicher? Ich vermute es sind 500ms an und 700ms aus.

Was mir gerade noch aufgefallen ist:
Wie ist blink definiert? Du verwendest diese Variable mehrfach mit 
unterschiedlicher Bedeutung!

> Die Zeiten sollten aber 400 ms an und 900 ms aus sein.
Dann verändere die Zahlen (hier auch mit eigenständigem Zähler):

if( blink_100ms <= 11)  blink_100ms++; else blink_100ms=0;

   if (blink_100ms<=3)

Der Zähler zählt von 0 bis 12, alle 100ms wird inkrementiert. Bei den 
Werten 0 bis 3 ist die LED an, also für 400ms. Bei den Werten 4 bis 12 
ist die LED dann aus, also für 900ms.
#2470028
Lesenswert?

Judgin F. schrieb:
> Dann kann ich ja diese für z.B. zwei Zeitscheiben (also 500 ms und 100
> ms) verwenden. Stimmt das so?

Nein, kannst Du nicht. Die Variable zählt ja die Anzahl der 
Zeitscheiben. Wenn die Variable nun in beiden Zeitscheiben benutzt und 
inkrementiert wird, dann zählt diese (bei 100ms und 500ms) die 
Zeitscheiben zum Zeitpunkt 500ms doppelt.

Daher solltest Du separate Zähler für die einzelnen Zeitscheiben 
verwenden, deswegen habe ich die Bezeichnung blink_100ms verwendet.

Volkmar

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren