Tooglen von einer LED abfragen

Gast #3962528
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
Das heißt umschalten und nicht toogeln :)

Sonst: Den abgefragten Zustand zwischenspeichern, umschalten, abfragen 
und mit dem gespeicherten vergleichen.
Gast
@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
r_u_d_i schrieb:
> 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

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

Genau.
Gast
@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

;-)
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.
Gast
Toogle schrieb:
> Bei den PIC Controllern kann man ganz einfach eine LED tooglen über
> z.B.:
> LATDbits.LATD0 ^= 1;
>
> Meine Frage lautet jetzt wie ich eine Abfrage starten kann ob die LED
> getoogelt wurde.

In dem obigen Fall wird die LED immer umgeschaltet. Braucht man nicht 
nachfragen.

(Toggle, nicht toogle)
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
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.
;-)
Gast
Man umgeht das ganze Gewusel dadurch, dass man statt des Toggle-Befehls 
dediziert abwechselnd eine 1 oder 0 zum Ausgangspin schickt. Dann weiß 
man im Code verlässlich, was gerade aktuell ist.
Gast
Simpel schrieb:
> Man umgeht das ganze Gewusel dadurch, dass man statt des Toggle-Befehls
> dediziert abwechselnd eine 1 oder 0 zum Ausgangspin schickt. Dann weiß
> man im Code verlässlich, was gerade aktuell ist.

niemals!
Was ist wenn ein Bit umfällt?

;-)
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

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.