Forum: Mikrocontroller und Digitale Elektronik portpin toggeln


von heinz (Gast)


Lesenswert?

ich möchte gern eine LED toggeln mittels Timer
geht das denn so

#define K1LED_ON()         sbi(K1LED_PORT,K1LED_BIT);
#define K1LED_OFF()   cbi(K1LED_PORT,K1LED_BIT);

 kanalblinktime++;
  if(kanalblinktime == 10)
  {
    kanalblinktime = 0;

   if(K1LED_ON)
     K1LED_OFF();
   else
     K1LED_ON();
}

von Daniel H. (Firma: keine) (commander)


Lesenswert?

Probier es aus und sag es uns.

Wird aber nicht klappen.

von Hannes (Gast)


Lesenswert?

sollte gehen

von Daniel H. (Firma: keine) (commander)


Lesenswert?

Also mir fehlen da etliche Variablendeklarationen, die Main-Loop usw.. 
Also wird es so nicht gehen.

Tut mir leid, aber ich hasse unvollständigen Code, und wenn der Code 
vorhanden wäre könnte der TO es ja selber probieren.

von macht meinen mist. (Gast)


Lesenswert?


von spess53 (Gast)


Lesenswert?

Hi

Um welchen Controller handelt es sich denn? Neuere AVRs Toggeln einen 
Pin durch Schreiben einer 1 in das PIN-Register.

MfG Spess

von Walter S. (avatar)


Lesenswert?

heinz schrieb:
> if(K1LED_ON)

das geht auch nicht

von heinz (Gast)


Lesenswert?

es ist ein mega8
wie ich einen normalen Pin toggele weiss ich
zb.



ISR(TIMER2_OVF_vect)
{
 kanalblinktime++;
  if(kanalblinktime == 10)
  {
    PORTD ^=  (1 << PD2);}
  }
}

meine Frage war wie ich das mit oben ganannter Schreibweise machen 
könnte
den Pin kann ich ja so ein ausschalt
K1LED_ON();  an
K1LED_OFF(); aus
das geht ja aber wie geht das in der schreibweise zu toggeln

von Peter D. (peda)


Lesenswert?

Man kann Bitvariablen definieren, dann ist das einfacher zu schreiben 
und auch besser lesbar:
1
// Access bits like variables
2
struct bits {
3
  uint8_t b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1;
4
} __attribute__((__packed__));
5
#define SBIT_(port,pin) ((*(volatile struct bits*)&port).b##pin)
6
#define  SBIT(x,y)       SBIT_(x,y)
7
8
9
10
#define LED0   SBIT(PORTB, PB3)
11
12
13
void toggle_led0()
14
{
15
  LED0 = !LED0;
16
}


Peter

von H.Joachim S. (crazyhorse)


Lesenswert?

CodeVision macht das dankenswerter Weise direkt:

#define LED1 PortB.0


while (1)
   {LED1=1;
    LED1=0;
   }

wird auch direkt in sbi/cbi übersetzt.

von Michael H. (michael_h45)


Lesenswert?

1
#define K1LED_TGL()   (K1LED_PORT ^= (1 << K1LED_BIT))

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.