Forum: Mikrocontroller und Digitale Elektronik zuweisung einer variable


von Azubi (Gast)


Lesenswert?

Hallo

Ich möchte über eine tastenkombination meine Laufzeit für ein Blinklicht 
bestimmen, bloß weise ich meiner variable "laufzeit" die _delay_ms(xy) 
zu
und dies geht leider nicht weil sie ja keine Rückgabewerte liefern hat 
jmd eine lösung?:

#include <avr/io.h>
#include <util/delay.h>


int main(void)
{
  int  laufzeit;              //variable für die Veränderung der 
Laufzeit

  DDRD=0xFF;
  PORTD= 0xFF;              //Alle LEDS ausschalten

    PORTC=0x0F;                //Aktivierung der Pull-up Widerstände


  switch(PINC)
  {
    case 0xFF: laufzeit= _delay_ms(50);
          break;

    case 0xFB: laufzeit= _delay_ms(100);
          break;

    case 0xF7:  laufzeit= _delay_ms(200);
          break;

    case 0xF3: laufzeit= _delay_ms(500);
          break;

    default:  PORTD= 0x00;

    }

    while(1)
    {
      laufzeit;
      PORTD=0x00;
      laufzeit;
      PORTD=0xFF;

    }



  }

von Peter II (Gast)


Lesenswert?

> Ich möchte über eine tastenkombination meine Laufzeit für ein
> Blinklicht bestimmen

was willst du?

von Phil J. (sunflower_seed)


Lesenswert?

Du gibst hier der Variable Laufzeit nur den Rückgabewert einer Funktion.

Und _delay_ms ist void also hat keinen Rückgabewert 
(http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html)

Das müsste eher unabhängig von allem anderen so aussehen:
1
case 0xFF: laufzeit= 50
2
          break;
3
....

und
1
hile(1)
2
    {
3
      _delay_ms(laufzeit);
4
      PORTD=0x00;
5
      _delay_ms(laufzeit);
6
      PORTD=0xFF;
7
8
    }

von Azubi (Gast)


Lesenswert?

z.B

drücke ich die taster an meinem Port PC0 und PC1 gleichzeitig
dann soll meine LED in einem takt von 500ms blinken

drücke ich nur PC0 soll sie mit 200ms blinken

von troll (Gast)


Lesenswert?

Azubi schrieb:
>       laufzeit;
warning: useless statement. Ich glaub du brauchst ein C-Buch.

Ok, Tipp:
1
void mydelayms(int delay)
2
{
3
  while(delay--)
4
    _delay_ms(1);
5
}
6
//...
7
int laufzeit=725;
8
//...
9
mydelayms(laufzeit);

Nein, delay_ms direkt mit Variable aufrufen geht nicht, Standardfehler, 
siehe libc-Doku oder FOrensuche.

von Azubi (Gast)


Lesenswert?

>Phil.J


saugeil :D :D :D danke

von troll (Gast)


Lesenswert?

Phil J. schrieb:
>http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html
>       _delay_ms(laufzeit);
Zwar verlinkt aber selber nicht gelesen?
>In order for these functions to work as intended, compiler optimizations
>must be enabled, and the delay time must be an expression that is a known
>constant at compile-time.

>saugeil
Nein, falsch. Ich warte schon auf den nächsten Thread "delay geht nicht" 
:-(

von J.-u. G. (juwe)


Lesenswert?

Phil J. schrieb:
> Und _delay_ms ist void also hat keinen Rückgabewert
> (http://www.nongnu.org/avr-libc/user-manual/group__...)

Bitte lese den Inhalt unter dem von Dir geposteten Link auch. Dann 
wüsstest Du, dass das hier:

> _delay_ms(laufzeit);

nicht gemacht werden darf.

von Phil J. (sunflower_seed)


Lesenswert?

Asche auf mein Haupt.
Aber eine passende Lösung wurde ja schon gepostet.

von Ralph (Gast)


Lesenswert?

Und bald kommt die nächste Frage mit
" Wieso werden die Taster nicht erkannt wenn gerade eine LED an ist ? "

von Helmut L. (helmi1)


Lesenswert?

Ralph schrieb:
> " Wieso werden die Taster nicht erkannt wenn gerade eine LED an ist ? "

Na dann gebe ich mal das Stichwort: "Timerinterrupt"

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.