Tooglen von einer LED abfragen

Gast #3962528
Lesenswert?
• ▲
▼
Bei den PIC Controllern kann man ganz einfach eine LED tooglen über 
z.B.:
1
LATDbits.LATD0 ^= 1;

Meine Frage lautet jetzt wie ich eine Abfrage starten kann ob die LED 
getoogelt wurde. Mich interessiert also Nicht ob LED HIGH oder LOW, 
sondern nur ob ihr Zustand sich geändert hat.

Den Zustand abfragen kann ich beispielsweise über
1
if(PORTReadBits(IOPORT_D, BIT_0)) == 1; // == 0

Nur wie ich abfragen kann ob die LED getoogelt wurde ist mir noch nicht 
ganz klar.
Gast #3962566
Lesenswert?
• ▲
▼
@toogle:
mach dir eine variable namens 'toogleTag'
darin spreicherst du bei jedem 'tooglen' den zustand ( 1 / 0 )
setz einen timer darauf an, der den tag vergleicht
dann kannst du die variable als interupt verwenden wenn du sowas 
brauchst und dir kommt das 'tooglen' bei jeder änderung.
lg rudi ;-)

'toogeln' .. 'toggeln' .. umschalten..
solange du weisst was du willst ist es egal ;-)
Gast #3962581
Lesenswert?
• ▲
▼
@OhHa:

@ r_u_d_i
> > solange du weisst was du willst ist es egal ;-)

> Genau.

nö..

@toogle:
option b:
wenn du keinen timer verwenden willst/kannst:
du kannst dir eine weitere bool variable als timer generieren
und in der main, loop oder sonstwo ,
'den' generierten timer bool variable abfragen, ob er für dich 'tooglen' 
soll das komplettiert die sache.

wenn der 'timer' ( macro call )  dann aktiv ist
schreibst in dem macro dann deinen abfragevergleich zur 'getoogleten' 
LED
wenn sich was geändert hat, returnst in einem if vergleich den bool der 
'getoogleten' led mit der du dann weisst, ob die led getooglet' wurde

lg rudi ;-)

@OhHa:

jetzt: genau

;-)
#3962590
Lesenswert?
• ▲
▼
Toogle schrieb:
> Nur wie ich abfragen kann ob die LED getoogelt wurde ist mir noch nicht
> ganz klar.
1
uint8_t latd_old = LATD;
2
LATDbits.LATD0 ^= 1;
3

4
if((LATD ^ latd_old) & (1<<0))
5
{
6
  // Wird ausgeführt, wenn bit 0 von LATD ungleich bit 0
7
  // von latd_old ist.
8
}
Wenn du andere Portbits abfragen willst einfach dass (1<<0) durch 
(1<<bitnummer) ersetzten.

Wenn es kein 8bit PIC ist, einfach das uint8_t durch einen Variablentype 
der gleich viele bits wie ein Port hat ersetzten.
#3962922
Lesenswert?
• ▲
▼
Toogle schrieb:
> Meine Frage lautet jetzt wie ich eine Abfrage starten kann ob die LED
> getoogelt wurde

Gar nicht und es ist auch komplett überflüssig.

Da DU in deinem Programm die LED geTOGGELT hast, weisst du das und musst 
das nicht per Programm erfragen.

Natürlich kannst du das zusätzlich vermerken
1
BOOL getoggelt=FALSE;
2

3
LATDbits.LATD0 ^= 1;
4
getoggelt=TRUE;
und abfragen
1
if(getoggelt) ...
2
getoggelt=FALSE;

Diese ZUSÄTZLICHE Code ist dann eben nötig, wenn du zu vergesslich 
warst, um selbst noch zu wissen, was du neulich getan hast, also dein 
Programm Alzheimer hat.
Gast #3962951
Lesenswert?
• ▲
▼
Man könnte auch auf dem entsprechenden Portpin den Pinchangeinterrupt 
aktivieren. Beim toggeln äh umschalten ;-) wird dann in der zugehörigen 
ISR ein Flag gesetzt, daß man dann später wieder abfragen kann.
;-)
#3963175
Lesenswert?
• ▲
▼
OhHa schrieb:
> Volker SchK schrieb:
>> OhHa schrieb:
>>> Man könnte auch
>>
>> Man könnte vieles,
>
> Wenn das beim PIC so funktioniert wie beim AVR. Sonst den LED-Pin mit
> dem Input Pin für Interrupt on Change Pin HW-mäßig verbinden!?

Oder einen Timer programmieren in dessen Interrupt man den Pin (besser 
das Latch) abfrägt, und das Signal auf einen PIN mit Interrupt-on-Change
ausgibt den man entsprechend konfiguriert hat und dann ...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.