Kürzlich
ist mir ein Multimeter kaputt gegangen, mit dem ich auch kleine
Kapazitäten ab 1 pF messen konnte. Ersatz musste her. Mit dem Tiny85
sollte die Aufgabe lösbar sein. Der zu messende Kondensator wird über
einen genauen Widerstand mit 4,99 MOhm aufgeladen. Der Controller misst
die Ladezeit bis der Port B3 als high gelesen wird.
Das Programm arbeitet mit unterschiedlichen Zählschleifen für kleine
und für große Kondensatoren. In der ersten Schleife wird festgestellt,
ob der Kondensator kleiner als 20 nF ist. In dem Fall wird die schnelle
Schleife für die Messung bis 20000 pF aufgerufen. Die
Zählgeschwindigkeit wird mit 10 nop-Befehlen so eingestellt, dass
gerade ganze Picofarad gezählt werden. Ohne Messobjekt werden 30 pF
gemessen, die von allen weitern Ergebnissen subtrahiert werden.
'Tiny85 1 pF ... 1000 nF
$regfile = "attiny85.dat"
$crystal = 8000000
$hwstack = 8
$swstack = 4
$framesize = 4
Dim t As Word
Open "comb.1:9600,8,n,1" For Output As #1
Config Adc = Single , Prescaler = Auto
Do
t=0
ddrb.3=1
Portb.3=0
waitms 20
ddrb.3=0
do
t=t+1
waitus 3500
loop until pinb.3=1 or t>20
if t>20 then
t=0
ddrb.3=1
waitms 20
ddrb.3=0
do
t=t+1
waitus 3500
loop until pinb.3=1
Print #1 , t;
Print #1 , " nF ";
end if
if t<21 then
t=0
ddrb.3=1
waitms 20
ddrb.3=0
do
t=t+1
nop: nop
nop: nop
nop: nop
nop: nop
nop: nop
loop until pinb.3=1
t=t-30
Print #1 , t;
Print #1 , " pF ";
end if
portb.3=0
Waitms 100
Loop
End