@ Pascal
Muss ich ganz ehrlich zugeben, das mit den Kanälen hab ich nicht gewusst... Muss ich mich noch einlesen.
@ Gast,
Danke für den Link, werd ich mir demnächst mal vornehmen
Ich hab in der zwischenzeit schon experimentiert und das Programm für die " 2-Pin-Variante" geschrieben. ist evtl. noch ein bisschen umständlich,
muss noch optimiert werden:
Code:
#include <avr/io.h>
typedef unsigned char BYTE;
typedef unsigned int WORD;
WORD entladedauer; // Variable für Entladungsdauer
WORD entladen_1; // Variable zum zählen der Entladungsdaue
WORD poti_1; // Variable zum zählen des Widerstandswertes
int main(void)
{
outp (0x01,DDRA); // PORT A: PIN 0 als Ausgang, Rest Eingang
outp (0xFF,DDRB); // PORT B: Ausgabe des ermittelten Wertes
entladedauer = 500; // hier wird die entladedauer festgelegt...
entladen_1 = 0;
poti_1 = 0;
for(;;)
{
if( entladen_1 >= entladedauer ) { // Wenn lange genug entladen
cbi (PORTA, 0); // entladung stoppen ( Pin0 auf LOW )
if( !bit_is_clear (PINA, PIND1)) { // solange der zählpin HIGH ist, zählen
poti_1++;
}
if( bit_is_clear (PINA, PIND1)) { //wenn Zählpin LOW wird,
outp (poti_1, PORTB); //Wert des Widerstands ausgeben
poti_1 = 0; //Wert zurücksetzen für neue Messung
entladen_1 = 0; //Wert zurücksetzten für neue Entladung
}
}else{ // ansonsten wenn Kondensator nicht genügend entladen,
sbi (PORTA, 0); // entladen ( PIN0 auf HIGH )
entladen_1++;
}
}
}
Bei einem Poti mit 10K und einem Kondensator mit 100nF
Erhalte ich am Ausgangsport Werte zwischen 0 und 40.
nicht gerade die beste Auflösung, aber ich werd mal mit den Kondensator und Potiwerten Experimentieren.
Ansonsten Funktioniert es einwandfrei.
Was meint ihr dazu?
ist es umständlicher oder einfacher als über A/D wandler?
(hier bin ich nicht pingebunden....)
Lesezeichen