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(); }
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.
da fehlts noch viel weiter... http://www.google.de/search?q=site:mikrocontroller.net+avr+pin+togglen AVR-GCC-Tutorial Bitmanipulation
Hi Um welchen Controller handelt es sich denn? Neuere AVRs Toggeln einen Pin durch Schreiben einer 1 in das PIN-Register. MfG Spess
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
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
CodeVision macht das dankenswerter Weise direkt: #define LED1 PortB.0 while (1) {LED1=1; LED1=0; } wird auch direkt in sbi/cbi übersetzt.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.