Zitat von
Radio Eriwan
... so, fertig, es ist geschafft ...
Zitat von
SprinterSB
... wie du das geschaltet hast? Einfache die LED zwischen 2 Ports ...
2005: Radio Eriwan hats geschafft. 2010: oberallgeier schaffts nicht und schaffts nicht und . . . .
Code:
...
#define gLED 4 // Grüne LED, Anode nach/von PB 4
// LED grün, klar, 25-3120050 von CSD
#define kLED 3 // LED grün, Kathode+1k nach PB 3
...
// ================================================================================
// ### Laden, Entladen und Zeitmessung bis "low" der LED für Touchsensor
void BL_test1 (void) //
{ //
// - - DDRB3+4 und PORTB3+4 bzw. gLED schalten - - - - - - - - - - - - - - - - -
//DDRB = 0b0001 1000; // DDRB3+4 = 11 <=> beide als Ausgang
//PORTB = 0b0000 0000; // ..und PortB3+4 auf null
DDRB |= ((1<<kLED) | (1<<gLED)); // Datenrichtungsbits als Ausgang
SetBit (PB, gLED); // mal die LED gaaaanz kurz anwerfen
waitms ( 1); // und ein kurzer Blitz
PORTB &= ~(1<<gLED); // Portpin Anode löschen =>
// PB4 ist jetzt mit Anode auf Gnd = laden vorbereiten
SetBit (PB, kLED); // PB3 mit Kathode+1k auf Vcc => Laden LED-Kondensator
waitms ( 1); // und kurz warten zum "aufladen"
// - - Interrupt ausschalten, Werte setzen - - - - - - - - - - - - - - - - - - -
cli(); //
Izeit_2 = 0; // Zeit zurücksetzen auf Null
sei(); //
// - - Interrupt ist an - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - Jetzt kLED auf "Eingang" - - - - - - - - - - - - - - - - - - - - - - - - -
// ClrBit (PB, kLED); // LED auf high prüfen = messen/discharge
DDRB &= ~(1<<kLED); // Kathodenpin als Eingang definieren
ClrBit (PB, kLED); // Pullup löschen (war ein wegen Vcc auf Ausgangspin)
while (1) //
{
if(IsBitClr (PB, kLED)) break; // Schleifenende, wenn Kathode auf low
} // Ende while (1)
cli();
mess = Izeit_2;
sei();
//
info02_mess( mess );
waitms ( 500); // 2 Messungen pro Minute wegen Ausgabe
//
DDRB |= ((1<<kLED) | (1<<gLED)); // Datenrichtungsbits als Ausgang
PORTB &= ~((1<<kLED) | (1<<gLED)); // Beide Portpins löschen
return; //
}
// ================================================================================
Würde sich bitte jemand die Mühe machen und überlegen und schreiben, wo ich den Fehler mache? Danke im Voraus.
Schaltung genau wie oben bereits vorgestellt. Ich verwende einen mega168, 20 MHz, LED wie dargestellt, R = 1k:
............Bild hier
............© MITSUBISHI RESEARCH, P. Dietz, W. Yerazunis, D. Leigh
Nachtrag das Messergebnis. Messzeit unter 50 µs (Wert = 0) heißt hier, dass die Kapazität in weniger als 50 µs entladen ist. Das ist doch viel zu kurz !? Das müsste doch deutlich länger dauern, oder nicht?
............Bild hier
Lesezeichen