Projekt
Hardware
Bedienung
BASIC (1)
BASIC (2)
BASIC (3)
Interna
Beispiele
Erweiterungen
Bibliotheken
Treiber
Programme


Bezugsquellen:
Bausatz
Leerplatine

AVR-ChipBasic2 - Bibliotheken

V1.50 (c) 2006-2015 Jörg Wolfram



1 Die Festkomma-Bibliothek FIXLIB (Bibliothekscode 0x10)



1.1 Allgemeines

Diese Bibliothek erweitert den BASIC-Computer um Festkomma-Berechnungen. Festkomma bedeutet, daß die Stellen vor und nach dem Komma fest vorgegeben sind. Bei dieser Bibliothek lässt sich die Stellenzahl per Initialisierungskommando einstellen. Intern ist eine Darstellung gewählt, die jeweils 2 Stellen (Wertebereich 0...99) in einem Byte zusammenfasst. Somit sind Vor- und Nachkommastellen auch nur in 2-er Schritten einstellbar.
  • 2...32 Vorkomma- und 0...30 Nachkommastellen wählbar
  • Anzahl der verfügbaren Variablen von der Anzahl der Stellen abhängig
  • Belegt den Array-Bereich 256...511
  • Formatierte Textausgabe
  • Eingabe über Text im Array möglich
  • Integer- Datenaustaisch mit dem BASIC-System
  • 4 Grundrechenarten, Vergleiche und weitere Funktionen
Systembedingt haben nur Parameter die auch angegeben wurden einen definierten Wert. Bei einem CALL L,2,0 ist nur der Parameter 1 definiert, der für die Funktion notwendige Parameter 2 aber nicht. Somit wird der Variable 0 der Wert zugewiesen, der sich zu diesem Zeitpunkt gerade an dieser Stelle im RAM befindet.

1.2 Funktionsübersicht

Funktionsnummer Funktion
0 Dummy-Funktion, falls die Bibliothek aus dem Hauptmenu aufgerufen wird
1 Initialisierung
2 Integer-Zuweisung Variable=Wert
3 Zuweisung über Textstring im Array
4 liefert Integerwert der Variablen
5 Textausgabe der Variablen
6 Absolutwert einer Variablen
7 Invers-Wert (0-Variable)
8 Addition V3 = V1 + V2
9 Subtrakion V3 = V1 - V2
10 Multiplikation V3 = V1 * V2
11 Division V3 = V1 / V2
12 Konstantenzuweisung mit vordefinierten Konstanten
13 Vorkomma-Anteil einer Variablen (INT)
14 Nachkomma-Anteil einer Variablen (FRAC)
15 Vergleich zweier Variablen
16 Variable kopieren
17 Variable / 2
18 Variable * 2
19 Script im Arrayspeicher starten


1.2.1 Funktion 0 : Dummy

Dies ist eine Dummy-Funktion, die lediglich 0 zurückliefert falls die Bibliothek aus dem Hauptmenu aufgerufen wird.


Parameter Bedeutung
Parameter 1 ---
Parameter 2 ---
Parameter 3 ---
Rückgabewert 0


1.2.2 Funktion 1 : Initialisierung

Diese Funktion muss vor allen anderen Funktionen aufgerufen werden, um die notwendigen Initialisierungen vorzunehmen. Der Rückgabewert entspricht der Anzahl der Variablen, die eingerichtet wurden und hängt von der Zahl der Vor- und Nachkommastellen ab.


Parameter Bedeutung
Parameter 1 Anzahl der Vorkomma-Bytes - 1 (0...15)
Parameter 2 Anzahl der Nachkomma-Bytes
Parameter 3 ---
Rückgabewert Anzahl der initialisierten Variablen


1.2.3 Funktion 2 : Wertzuweisung von Integerwert

Setzt eine Variable auf einen Integerwert. Die Nachkommastellen werden auf 0 gesetzt


Parameter Bedeutung
Parameter 1 Variablennummer
Parameter 2 Variablenwert
Parameter 3 ---
Rückgabewert 0


1.2.4 Funktion 3 : Wertzuweisung von Textstring

Setzt eine Variable auf einen durch einen Textstring im Array definierten Wert. Als Trennzeichen zwischen Vorkomma- und Nachkommastellen kann sowohl das Komma als auch der Punkt genutzt werden. Beim ersten nicht-numerischen Zeichen im String wird die Konvertierung abgebrochen.


Parameter Bedeutung
Parameter 1 Variablennummer
Parameter 2 Textstart im Array
Parameter 3 ---
Rückgabewert 0


1.2.5 Funktion 4 : Integerwert der Variablen

Gibt den Integerwert der Variablen aus. Dabei wird entsprechend der Nachkommastellen gerundet.


Parameter Bedeutung
Parameter 1 Variablennummer
Parameter 2 ---
Parameter 3 ---
Rückgabewert Integer-Wert der Variablen


1.2.6 Funktion 5 : Textausgabe der Variablen

Gibt den Inhalt der Variablen als Textstring aus. Mit der Angabe von minimalen Vorkommabytes kann eine rechtsbündige Darstellung bewirkt werden. Ist die Anzahl der maximalen Nachkommabytes kleiner als die der Variablen, wird entsprechend gerundet.


Parameter Bedeutung
Parameter 1 Variablennummer
Parameter 2 Bit 7...4: minimale Vorkommabytes -1 Bit 3...0: Nachkommabytes
Parameter 3 (optional Ausgabekanal)
Rückgabewert 0


1.2.7 Funktion 6 : Absolutwert einer Variablen

Der Absolutwert der Variable 1 wird in die Variable 2 gespeichert. V2 = ABS(V1)


Parameter Bedeutung
Parameter 1 Variablennummer von Variable 1
Parameter 2 Variablennummer von Variable 2
Parameter 3 ---
Rückgabewert 0


1.2.8 Funktion 7 : Invers-Wert einer Variablen

Der Invers-Wert von Variable 1 wird in die Variable 2 gespeichert. V2 = -V1


Parameter Bedeutung
Parameter 1 Variablennummer von Variable 1
Parameter 2 Variablennummer von Variable 2
Parameter 3 ---
Rückgabewert 0


1.2.9 Funktion 8 : Addition

Die Summe von Variable 1 und Variable 2 wird in die Variable 3 gespeichert. V3 = V1 + V2


Parameter Bedeutung
Parameter 1 Variablennummer von Variable 1
Parameter 2 Variablennummer von Variable 2
Parameter 3 Variablennummer von Variable 3
Rückgabewert 0


1.2.10 Funktion 9 : Subtraktion

Die Differenz von Variable 1 und Variable 2 wird in die Variable 3 gespeichert. V3 = V1 - V2


Parameter Bedeutung
Parameter 1 Variablennummer von Variable 1
Parameter 2 Variablennummer von Variable 2
Parameter 3 Variablennummer von Variable 3
Rückgabewert 0


1.2.11 Funktion 10 : Multiplikation

Das Produkt von Variable 1 und Variable 2 wird in die Variable 3 gespeichert. V3 = V1 * V2


Parameter Bedeutung
Parameter 1 Variablennummer von Variable 1
Parameter 2 Variablennummer von Variable 2
Parameter 3 Variablennummer von Variable 3
Rückgabewert 0


1.2.12 Funktion 11 : Division

Der Quotient von Variable 1 und Variable 2 wird in die Variable 3 gespeichert. V3 = V1 / V2


Parameter Bedeutung
Parameter 1 Variablennummer von Variable 1
Parameter 2 Variablennummer von Variable 2
Parameter 3 Variablennummer von Variable 3
Rückgabewert 0


1.2.13 Funktion 12 : Konstantenzuweisung

Für 8 vordefinierte Konstanten lässt sich die Wertzuweisung über diese Funktion vereinfachen.


Parameter Bedeutung
Parameter 1 Variablennummer
Parameter 2 Konstantennummer (0...7)
Parameter 3 ---
Rückgabewert 0


Die 8 Konstanten haben 15 gültige Nachkommastellen und sind wie folgt definiert:


Konstantennummer Wert
0 0
1 1
2 PI
3 e (Eulersche Zahl)
4 ln(2)
5 ln(10)
6 SQRT(2)
7 SQRT(3)


1.2.14 Funktion 13 : Vorkomma-Anteil einer Variablen

Der Vorkomma-Anteil der Variable 1 wird in die Variable 2 gespeichert. Genaugenommen werden nur die Nachkomma-Bytes auf 0 gesetzt V2 = INT(V1)


Parameter Bedeutung
Parameter 1 Variablennummer von Variable 1
Parameter 2 Variablennummer von Variable 2
Parameter 3 ---
Rückgabewert 0


1.2.15 Funktion 14 : Nachkomma-Anteil einer Variablen

Der Vorkomma-Anteil der Variable 1 wird in die Variable 2 gespeichert. Genaugenommen werden nur die Vorkomma-Bytes auf 0 gesetzt V2 = FRAC(V1)


Parameter Bedeutung
Parameter 1 Variablennummer von Variable 1
Parameter 2 Variablennummer von Variable 2
Parameter 3 ---
Rückgabewert 0


1.2.16 Funktion 15 : Vergleich zweier Variablen

Variable 1 wird mit Variable 2 verglichen. Ist Variable 1 größer als Variable 2, dann ist der Rückgabewert 1, ist Variable 1 kleiner als Variable 2, ist das Ergebnis 2 und bei Gleichheit beider Variablen wird 0 zurückgeliefert.


Parameter Bedeutung
Parameter 1 Variablennummer von Variable 1
Parameter 2 Variablennummer von Variable 2
Parameter 3 ---
Rückgabewert Vergleichsergebnis (1,0,2)


1.2.17 Funktion 16 : Variable kopieren

Variable 1 wird in die Variable 2 kopiert.


Parameter Bedeutung
Parameter 1 Variablennummer von Variable 1
Parameter 2 Variablennummer von Variable 2
Parameter 3 ---
Rückgabewert 0


1.2.18 Funktion 17 : Multiplikation mit 2

Variable 1 wird durch Bitschieben mit 2 multipliziert und das Ergebnis in die Variable 2 gespeichert. Diese Funktion ist wesentlich schneller als eine entsprechende Multiplikation. V2 = V1 * 2


Parameter Bedeutung
Parameter 1 Variablennummer von Variable 1
Parameter 2 Variablennummer von Variable 2
Parameter 3 ---
Rückgabewert 0


1.2.19 Funktion 18 : Division durch 2

Variable 1 wird durch Bitschieben durch 2 dividiert und das Ergebnis in die Variable 2 gespeichert. Diese Funktion ist wesentlich schneller als eine entsprechende Division. V2 = V1 / 2


Parameter Bedeutung
Parameter 1 Variablennummer von Variable 1
Parameter 2 Variablennummer von Variable 2
Parameter 3 ---
Rückgabewert 0


1.2.20 Funktion 19 : Starten eines Scripts im Array

Da die Bibliothek im Wesentlichen nur die Grundrechenarten bereitstellt, gibt es eine kleine Script-Engine mit der auch komplexere Funktionen relativ einfach berechnet werden können. Dazu muss der Code im ersten Drittel des Arrays (Zellen 0...255) stehen.


Parameter Bedeutung
Parameter 1 Startadresse im Array
Parameter 2 opt. Parameter 1
Parameter 3 opt. Parameter 2
Parameter 4 opt. Parameter 3
Rückgabewert Rückgabewert, je nach Exit-Befehl


Für Schleifen etc. stehen vier 8-Bit Countervariablen zur Verfügung Jeder Befehl besteht aus 2 Bytes, die noch in Halbbytes (Nibbles) unterteilt sind. Ein x steht dafür, dass der Wert des entsprechenden Nibbles nicht ausgewertet wird. Trotzdem ist es sinnvoll diese Nibbles auf 0 zu setzen. Für Schleifen etc. stehen vier 8-Bit Countervariablen zur Verfügung, beim Start eines Scripts werden die ersten drei mit den LOW-Bytes der Parameter 1...3 vorbelegt, Countervariable 4 wird auf 0 gesetzt. Systembedingt haben nur Parameter die angegeben wurden einen definierten Wert. Bei einem CALL 7,19,17 ist nur der Parameter 1 auf 17 gesetzt, Parameter 2 und 3 sind undefiniert.


Code Bedeutung
0 0 0 V Script beenden, Variablenwert (Integer) von Variable v wird zurückgegeben
0 1 x M Script beenden, der Wert von Counter M wird zurückgegeben
0 2 n n E wird zur Script-Position nn gesprungen
0 3 C V Variable V wird mit der Konstanten C initialisiert
0 4 x V Variable V wird mit dem Wert des optionalen Parameters 1 initialisiert
0 5 x V Variable V wird mit dem Wert des optionalen Parameters 2 initialisiert
0 6 x V Variable V wird mit dem Wert des optionalen Parameters 3 initialisiert
1 0 W V W = V
1 1 W V W = ABS(V)
1 2 W V W = -V
1 3 W V W = INT(V)
1 4 W V W = FRAC(V)
1 5 W V W = V * 2
1 6 W V W = V / 2
1 8 W V überspringt die nächste Anweisung, wenn V gleich W ist
1 9 W V überspringt die nächste Anweisung, wenn V ungleich W ist
1 A W V überspringt die nächste Anweisung, wenn V größer W ist
1 B W V überspringt die nächste Anweisung, wenn V kleiner W ist
4 U W V W = U + V
5 U W V W = U - V
6 U W V W = U * V
7 U W V W = U / V
8 M n n der Counter M wird auf nn gesetzt
9 M n n zum Counter M wird nn addiert
A M n n überspringt die nächste Anweisung, wenn der Counter M gleich nn ist
B M n n überspringt die nächste Anweisung, wenn der Counter M ungleich nn ist
C M x n der Counter M wird mit Parameter N initialisiert
andere Codes Keine Funktion (NOP)




1.3 Ein Fraktalprogramm als Beispiel

In den Zeilen 7 bis 10 werden die Koordinaten für X1, X2, Y1 und Y2 eingetragen.

PROGRAM :Fractal 2   
01 LFIND L,16:A=120:B=76
02 IF L=0 ? "keine Matlib":END
03 A=120:B=76:C=4:VM 2:VID 0
04 Z=80:PAL 0,0,1,5,7
05 CALL L,1,1,3:CALL L,2,16,4
06 'Koordinatenvorgaben
07 DA 0,"-0.95#":CALL L,3,0,0
08 DA 0,"-0.72#":CALL L,3,1,0
09 DA 0,"0.17#":CALL L,3,2,0
10 DA 0,"0.33#":CALL L,3,3,0
11
12 'DX(V4) und DY(V5) berechnen
13 CALL L,2,6,A
14 CALL L,9,1,0,7:CALL L,11,7,6,4
15 CALL L,2,6,B
16 CALL L,9,3,2,7:CALL L,11,7,6,5
17 CALL L,16,0,15
18 TSET 0
19 FOR Y=0 TO B-1:FOR X=0 TO A-1
20 CALL L,12,8,0:CALL L,12,9,0
21 I=0
22 CALL L,10,8,8,10:'X^2
23 CALL L,10,9,9,11:'Y^2
24 CALL L,8,10,11,6:CALL L,15,6,16
25 R=~R:IF R=1 GOTO 34
26 CALL L,9,10,11,13:'XT
27 CALL L,8,0,13,13
28 CALL L,10,8,9,14:'YT
29 CALL L,17,14,14:CALL L,8,2,14,14
30 CALL L,16,13,8:CALL L,16,14,9
31 'Iteration zu ende
32 I=I+1:IF I<Z GOTO 22
33 PLOT Y,X,0:GOTO 35
34 D=I%(C-1):PLOT Y,X,D+1
35 IF KEY(0)=$F5 THEN VID 0
36 IF KEY(0)=$F6 THEN VID 1
37 CALL L,8,0,4,0:NEXT
38 CALL L,8,2,5,2
39 CALL L,16,15,0:NEXT
40 TGET S
41 ? @0,0;(S-T)/10;"s ":VID 1
42 GOTO 41
#


2 Die Messroutinen-Bibliothek MEASLIB (Bibliothekscode 0x12)



2.1 Allgemeines

Diese Bibliothek erweitert den BASIC-Computer um Messroutinen für Widerstände, Dioden, Kondensatoren und Induktivitäten in verschiedenen Messbereichen. Mit der unten angegebenen Schaltung werden folgende Messbereiche erreicht:
  • Widerstandsmessbereich von 5 Ohm bis 1 MOhm
  • Dioden-Flussspannung bis 4,88V, maximaler Strom 5mA
  • Kapazitäts-Messbereich von 100pF bis 1000uF
  • Induktivitäts-Messbereich von 20uH bis 800mH
  • Platz für eigenes Messprogramm


2.2 Benötigte Hardware

Auch wenn die benötigte Hardware eher minimalistisch ist, ganz ohne geht es leider nicht. Benutzt werden nur die vier unteren Pins von Port A, so kann auch gleichzeitig ein LCD Modul zur Anzeige angeschlossen werden. Die notwendige Anschlussbeschaltung beschränkt sich auf zwei Widerstände und zwei Schottky-Dioden zum Schutz der Portpins. Im Folgenden werden die die Pins als PA.0 bis PA.3 bezeichnet. Wenn das Ganze direkt (ohne ChipBasic-Board) aufgebaut werden soll, sollten an die vier Portpins zusätzlich 180 Ohm Widerstände in Reihe geschaltet werden.



2.3 Funktionsübersicht

Funktionsnummer Funktion
0 Start des Demonstrationsprogramms (aktuell nicht genutzt)
1 PA.1 auf HIGH, Spannungs-Messung an PA.0 und PA.1
2 PA.2 auf HIGH, Spannungs-Messung an PA.0 und PA.2
3 PA.3 auf HIGH, Spannungs-Messung an PA.0 und PA.3
4 PA.3 von LOW nach HIGH, Zeitmessung bis U(PA.0) > Uref (Auflösung 300ns)
5 PA.3 von LOW nach HIGH, Zeitmessung bis U(PA.0) > Uref (Auflösung 500ns)
6 PA.2 von LOW nach HIGH, Zeitmessung bis U(PA.0) > Uref (Auflösung 300ns)
7 PA.2 von LOW nach HIGH, Zeitmessung bis U(PA.0) > Uref (Auflösung 64us)
8 PA.1 von LOW nach HIGH, Zeitmessung bis U(PA.0) < Uref (Auflösung 300ns)
9 PA.1 von LOW nach HIGH, Zeitmessung bis U(PA.0) < Uref (Auflösung 500ns)
10 PA.2 von LOW nach HIGH, Zeitmessung bis U(PA.0) < Uref (Auflösung 500ns)
11 PA.3 von LOW nach HIGH, Zeitmessung bis U(PA.0) < Uref (Auflösung 300ns)


2.3.1 Funktion 0 : Demo

Startet das eingebaute Demonstrationsprogramm. In der aktuellen Version besteht dieses nur aus einem "RET"


Parameter Bedeutung
Parameter 1 ---
Parameter 2 ---
Parameter 3 ---
Rückgabewert 0


2.3.2 Funktion 1 : PA.1 auf HIGH, Spannungs-Messung an PA.0 und PA.1

Setzt die Portpins von Port A und führt Messungen mit dem ADC an den Pins PA.0 und PA.1 durch. Zur Verbesserung der Genauigkeit werden die Ergebnisse von jeweils 32 Einzelmessungen aufsummiert. Mit der Beispielschaltung lassen sich so Widerstände von ca. 5 Ohm bis 5 KOhm mit akzeptabler Gennauigkeit messen. Der Ablauf ist dabei Folgender:
  • Die Pins PA.0, PA.2 und PA.3 werden als Eingang ohne Pullup geschaltet, PA.1 als Ausgang mit HIGH Pegel
  • Spannung an Pin PA.1 mit AVCC als Referenz 32 mal messen und die Werte ausfsummieren
  • Spannung an Pin PA.0 mit AVCC als Referenz 32 mal messen und die Werte ausfsummieren
  • PA.1 auf LOW Pegel setzen
Rückgabewert ist der Messwert von PA.0, der Messwert von PA.1 wird in die Arrayzelle 1024 abgelegt.


Parameter Bedeutung
Parameter 1 ---
Parameter 2 ---
Parameter 3 ---
Rückgabewert 32 x Messwert von PA.0, Messwert von PA.1 in AR(1024)


2.3.3 Funktion 2 : PA.2 auf HIGH, Spannungs-Messung an PA.0 und PA.2

Diese Funmktion entspricht der Funktion 1 mit dem Unterschied, dass anstelle Pin PA.2 hier der Pin PA.2 als Quelle verwendet wird und in AR(1024) der Messwert von Pin PA.2 steht.

2.3.4 Funktion 3 : PA.3 auf HIGH, Spannungs-Messung an PA.0 und PA.3

Diese Funmktion entspricht der Funktion 1 mit dem Unterschied, dass anstelle Pin PA.2 hier der Pin PA.3 als Quelle verwendet wird und in AR(1024) der Messwert von Pin PA.3 steht.

2.3.5 Funktion 4 : PA.3 von LOW nach HIGH, Zeitmessung bis U(PA.0) > Uref (Auflösung 300ns)

Pin PA.0 wird mit dem Analog-Komparator verbunden, als Vergleichsspannung dient die interne Bandgap-Referenzquelle mit ca. 1,1 Volt. Der Pin PA.3 wird von 0 auf 1 geschaltet und die Zeit gemessen, bis die Spannung an PA.0 größer als die Spannung der Referenzspannungsquelle ist. Die zeitliche Aulösung beträgt 300ns, der maximale Messbereich 60 Mikrosekunden. Es werden 16 Messungen im Abstand von 20ms durchgeführt und die Werte aufaddiert. Der maximal zurückgelieferte Wert beträgt somit 3200. Der Ablauf ist dabei Folgender:
  • Die Pins PA.0, PA.1 und PA.2 werden als Eingang ohne Pullup geschaltet, PA.3 als Ausgang mit LOW Pegel
  • PA.3 AUF HIGH schalten und die Zeit bestimmen, bis die Spannung an PA.0 > Uref ist.
  • Nach 60 Mikrosekunden die Messung abbrechen und PA.3 auf LOW Pegel setzen
  • Das Ganze 15 mal wiederholen
Rückgabewert ist die Summe der einzelnen Zeitmessungen.


Parameter Bedeutung
Parameter 1 ---
Parameter 2 ---
Parameter 3 ---
Rückgabewert 16 x Messwert (in 300 Nanosekunden-Schritten)


2.3.6 Funktion 5 : PA.3 von LOW nach HIGH, Zeitmessung bis U(PA.0) > Uref (Auflösung 500ns)

Diese Funktion entspricht der Funktion 4, allerdings mit einer anderen Zeitauflösung und einem größeren Messbereich. Die zeitliche Aulösung beträgt 500ns, der maximale Messbereich 6,4 Millisekunden. Es werden 16 Messungen im Abstand von 20ms durchgeführt und die Werte aufaddiert. Zum Schluss wird das ergebnis durch 8 geteilt. Der maximal zurückgelieferte Wert beträgt somit 25600. Der Ablauf ist dabei Folgender:
  • Die Pins PA.0, PA.1 und PA.2 werden als Eingang ohne Pullup geschaltet, PA.3 als Ausgang mit LOW Pegel
  • PA.3 AUF HIGH schalten und die Zeit bestimmen, bis die Spannung an PA.0 > Uref ist.
  • Nach 6,4 Millisekunden die Messung abbrechen und PA.3 auf LOW Pegel setzen
  • Das Ganze 15 mal wiederholen, die Messwerte aufaddieren
  • Die Summe der Messwerte durch 8 teilen.
Rückgabewert ist die Summe der einzelnen Zeitmessungen geteilt durch 8.


Parameter Bedeutung
Parameter 1 ---
Parameter 2 ---
Parameter 3 ---
Rückgabewert 2 x Messwert (in 500 Nanosekunden-Schritten)


2.3.7 Funktion 6 : PA.2 von LOW nach HIGH, Zeitmessung bis U(PA.0) > Uref (Auflösung 500ns)

Diese Funktion entspricht der Funktion 5, der LOW-HIGH Übergang findet aber an Pin PA.2 statt.


Parameter Bedeutung
Parameter 1 ---
Parameter 2 ---
Parameter 3 ---
Rückgabewert 2 x Messwert (in 500 Nanosekunden-Schritten)


2.3.8 Funktion 7 : PA.2 von LOW nach HIGH, Zeitmessung bis U(PA.0) > Uref (Auflösung 64us)

Diese Funktion entspricht der Funktion 5, der LOW-HIGH Übergang findet an Pin PA.2 statt. Die zeitliche Aulösung beträgt 64us (Zeilenfrequenz), der maximale Messbereich 262 Millisekunden. Es werden 2 Messungen im Abstand von 20ms durchgeführt und die Werte aufaddiert. Der maximal zurückgelieferte Wert beträgt somit 8192. Der Ablauf ist dabei Folgender:
  • Die Pins PA.0, PA.1 und PA.3 werden als Eingang ohne Pullup geschaltet, PA.2 als Ausgang mit LOW Pegel
  • PA.2 AUF HIGH schalten und die Zeit bestimmen, bis die Spannung an PA.0 > Uref ist.
  • Nach 262 Millisekunden die Messung abbrechen und PA.3 auf LOW Pegel setzen
  • Das Ganze 1 mal wiederholen
Rückgabewert ist die Summe der einzelnen Zeitmessungen.


Parameter Bedeutung
Parameter 1 ---
Parameter 2 ---
Parameter 3 ---
Rückgabewert 2 x Messwert (in 64 Mikrosekunden-Schritten)


2.3.9 Funktion 8 : PA.1 von LOW nach HIGH, Zeitmessung bis U(PA.0) < Uref (Auflösung 300ns)

Pin PA.0 wird mit dem Analog-Komparator verbunden, als Vergleichsspannung dient die interne Bandgap-Referenzquelle mit ca. 1,1 Volt. Der Pin PA.1 wird von 0 auf 1 geschaltet und die Zeit gemessen, bis die Spannung an PA.0 wieder kleiner als die Spannung der Referenzspannungsquelle ist. Die zeitliche Aulösung beträgt 300ns, der maximale Messbereich 60 Mikrosekunden. Es werden 16 Messungen im Abstand von 20ms durchgeführt und die Werte aufaddiert. Der maximal zurückgelieferte Wert beträgt somit 3200. Der Ablauf ist dabei folgender:
  • Die Pins PA.0, PA.2 und PA.3 werden als Eingang ohne Pullup geschaltet, PA.1 als Ausgang mit LOW Pegel
  • PA.1 AUF HIGH schalten und 300ns warten
  • Die Zeit bestimmen, bis die Spannung an PA.0 < Uref ist.
  • Nach 60 Mikrosekunden die Messung abbrechen und PA.1 auf LOW Pegel setzen
  • Das Ganze 15 mal wiederholen
Rückgabewert ist die Summe der einzelnen Zeitmessungen.


Parameter Bedeutung
Parameter 1 ---
Parameter 2 ---
Parameter 3 ---
Rückgabewert 16 x Messwert (in 300 Nanosekunden-Schritten)


2.3.10 Funktion 9 : PA.1 von LOW nach HIGH, Zeitmessung bis U(PA.0) < Uref (Auflösung 500ns)

Diese Funktion entspricht der Funktion 4, allerdings mit einer anderen Zeitauflösung und einem größeren Messbereich. Die zeitliche Aulösung beträgt 500ns, der maximale Messbereich 6,4 Millisekunden. Es werden 16 Messungen im Abstand von 20ms durchgeführt und die Werte aufaddiert. Zum Schluss wird das ergebnis durch 8 geteilt. Der maximal zurückgelieferte Wert beträgt somit 25600. Der Ablauf ist dabei folgender:
  • Die Pins PA.0, PA.2 und PA.3 werden als Eingang ohne Pullup geschaltet, PA.1 als Ausgang mit LOW Pegel
  • PA.1 AUF HIGH schalten und 300ns warten
  • Die Zeit bestimmen, bis die Spannung an PA.0 < Uref ist.
  • Nach 6,4 Millisekunden die Messung abbrechen und PA.1 auf LOW Pegel setzen
  • Das Ganze 15 mal wiederholen, die Messwerte aufaddieren
  • Die Summe der Messwerte durch 8 teilen.
Rückgabewert ist die Summe der einzelnen Zeitmessungen geteilt durch 8.


Parameter Bedeutung
Parameter 1 ---
Parameter 2 ---
Parameter 3 ---
Rückgabewert 2 x Messwert (in 500 Nanosekunden-Schritten)


2.3.11 Funktion 10 : PA.2 von LOW nach HIGH, Zeitmessung bis U(PA.0) < Uref (Auflösung 500ns)

Diese Funktion entspricht der Funktion 9, der LOW-HIGH Übergang findet aber an Pin PA.2 statt.

2.3.12 Funktion 11 : PA.3 von LOW nach HIGH, Zeitmessung bis U(PA.0) < Uref (Auflösung 500ns)

Diese Funktion entspricht der Funktion 9, der LOW-HIGH Übergang findet aber an Pin PA.3 statt.

2.4 Ein Anwendunsbeispiel

Das nachfolgende Beispiel zeigt die komplette Beschaltung inclusive LCD und einem Taster zur Messbereichsumschaltung. Dieses könnte man natürlich auch standalone aufbauen und das Programm System mittels des Clone-Programmes oder den Loader übertragen. Das gäbe dann ein kompaktes Messgerät, natürlich nur wenn die Genauigkeit ausreichend ist. Neben der Mess-Bibliothek wird noch ein LCD-Treiber benötigt, das LCD selbst muss nicht unbedingt angeschlossen sein da parallel die Ausgabe über TV erfolgt.

Mit dem nachfolgenden Programm ergeben sich dann folgende Messbereiche, die mittels des Tasters gewählt werden können.


Messart Messbereich
Widerstand 10Ω ...1MΩ
Diode 0 ... 4,8V
Kapazität 100pF ... 1000μF
Induktivität 10 uH ... 100mH


In den Zeilen 9 bis 13 sind die Skalierungsfaktoren abgelegt. Diese wurden empirisch mit Referenzbauteilen ermittelt, hängen aber zu einem guten Teil von Fertigungstoleranzen bei den eingesetzten Bauteilen (inclusive Controller) ab. Die folgende Tabelle gibt eine Zuordnung über die Skalierungswerte zu den Messbereichen, zum Kalibrieren sollte ein Bauteil genommen werden, welches wertemäßig ungefähr in der Mitte des Messbereiches liegt. Die angegebenen Messbereiche sind nur als Ungefährwerte anzusehen:


Adresse Zeile Messbereich
1026 9 Widerstände 6,5KΩ < R < 1MΩ
1027 9 Widerstände 200Ω < R < 6,5KΩ
1028 9 Widerstände 10Ω < R < 200Ω
1029 10 Diodenspannung 0V < U < 4,8V
1030,1031 (Endwert,Offset) 11 Kondensatoren 0,1nF < C < 72nF
1032,1033 (Endwert,Offset) 11 Kondensatoren 72nF < C < 740nF
1034,1035 (Endwert,Offset) 12 Kondensatoren 740nF < C < 22μF
1036,1037 (Endwert,Offset) 12 Kondensatoren 22μF < C < 1000μF
1038 13 Induktivitäten 50μH < L < 6,7mH
1038 13 Induktivitäten 6,7mH < L < 830mH


PROGRAM:Mess4       
01 E=30:F=31:LFIND V,160
02 IF V=0 GOTO ~L+2
03 VM 7:COLOR 1,5:E=8:F=9
04 LFIND L,18:IF L>0 GOTO ~L+2
05 ? "Keine Messlib ";:END
06 GOSUB 89
07 ? "CB2 KOMPO-Meter":WAIT 20
08 'Korrektur-Faktoren
09 DATA 1026,3320,12000,2150
10 DATA 1029,5000
11 DATA 1030,740,96,7660,6
12 DATA 1034,2190,0,1043,0
13 DATA 1038,6710,8300
14 OUT $47E,15:'disable INPUT
15 GOSUB 25:GOSUB 80:'R
16 IF T=0 GOTO ~L-1
17 GOSUB 41:GOSUB 80:'D
18 IF T=0 GOTO ~L-1
19 GOSUB 48:GOSUB 80:'C
20 IF T=0 GOTO ~L-1
21 GOSUB 70:GOSUB 80:'L
22 IF T=0 GOTO ~L-1
23 GOTO ~L-8
24 'R Messung
25 CALL L,3
26 X=~R:N=AR(1024)-X:Y=AR(1026)
27 IF X>31000 GOTO ~L+4
28 IF X<200 GOTO ~L+4
29 X=X/10:SCALE R,0,Y,0,X,N:CLS
30 ? "(R) ";!$1D;R;" K";%F:RET
31 CLS :? "(R)  > 1 M";%F:RET
32 CALL L,2
33 X=~R:N=AR(1024)-X:Y=AR(1027)
34 IF X<200 GOTO ~L+3
35 X=X/10:SCALE R,0,Y,0,X,N:CLS
36 ? "(R) ";!$0D;R;" ";%F:RET
37 CALL L,1
38 X=~R:N=AR(1024)-X:Y=AR(1028)
39 SCALE R,0,Y,0,X,N:CLS
40 ? "(R) ";!$1D;R;" ";%F:RET
41 'D-Messung
42 CALL L,2:Y=AR(1029)
43 X=~R:IF X>32000 GOTO ~L+3
44 SCALE R,0,Y,0,X,32767:CLS
45 ? "(D) ";!$3D;R;" V":RET
46 CLS :? "(D)  > 4.88 V":RET
47 'C-Messung
48 CALL L,4
49 Y=AR(1030):O=AR(1031)
50 X=~R:IF X>3199 GOTO ~L+3
51 SCALE R,0,Y,0,X-O,32000:CLS
52 ? "(C) ";!$1D;R;" nF":RET
53 CALL L,5
54 Y=AR(1032):O=AR(1033)
55 X=~R:IF X>25000 GOTO ~L+3
56 SCALE R,0,Y,0,X-O,25600:CLS
57 ? "(C) ";!$1D;R;" nF":RET
58 CALL L,6
59 Y=AR(1034):O=AR(1035)
60 X=~R:IF X>25000 GOTO ~L+3
61 SCALE R,0,Y,0,X-O,25600:CLS
62 ? "(C) ";!$2D;R;" ";%E;"F"
63 CALL L,7
64 Y=AR(1036):O=AR(1037)
65 X=~R:IF X>4090 GOTO ~L+3
66 SCALE R,0,Y,0,X-O,4096:CLS
67 ? "(C) ";!$0D;R;" ";%E;"F":RET
68 CLS :? "(C)  OVERFLOW   ":RET
69 'L-Messung
70 ? @0,0;:CALL L,8:Y=AR(1038)
71 X=~R:IF X>3199 GOTO ~L+3
72 SCALE R,0,Y,0,X,3200:CLS
73 ? "(L) ";!$0D;R;" ";%E;"H":RET
74 ? @0,0;:CALL L,9:Y=AR(1039)
75 X=~R:IF X>25599 GOTO ~L+3
76 SCALE R,0,Y,0,X,25600:CLS
77 ? "(L) ";!$1D;R;" mH":RET
78 CLS :? "(L)  OVERFLOW   ":RET
79 'Test auf Tastendruck
80 I=0:T=0
81 'IF IN($807)=0 GOTO ~L-2
82 IF KEY(0)>0 GOTO ~L+3
83 IF IN($807)=0 GOTO ~L+2
84 RETURN
85 SYNC 1:I=I+1:IF I<50 GOTO ~L-3
86 T=1
87 RETURN
88 'my and omega symbols
89 DA 100,0,0,9,9,9,14,8,16
90 DA 108,0,0,14,17,17,10,27,0
91 FOR I=0 TO 15:J=I+100
92 OUT $A00+I,AR(J):NEXT
93 RETURN
#


3 Eine RTC Befehlserweiterung (Bibliothekscode 0x1F)



3.1 Allgemeines

Diese Demo-Bibliothek zeigt, wie der Befehlsumfang des BASIC-Computer erweitert werden kann. Dazu sind folgende Befehle implementiert:

3.2 Funktionsübersicht

Befehl Funktion
_SETSEC n setzt den Sekunden-Wert auf den Parameter n, dabei werden die Grenzen überwacht.
_SETMIN n setzt den Minuten-Wert auf den Parameter n, dabei werden die Grenzen überwacht.
_SETHOUR n setzt den Stunden-Wert auf den Parameter n, dabei werden die Grenzen überwacht.
_SETDAY n setzt den Tage-Wert auf den Parameter n, dabei werden die Grenzen überwacht.
_SETMONTH n setzt den Monats-Wert auf den Parameter n, dabei werden die Grenzen überwacht.
_SETYEAR n setzt den Jahres-Wert auf den Parameter n (0..99)
_GETSEC V liest den Sekunden-Wert in die Variable V ein
_GETMIN V liest den Minuten-Wert in die Variable V ein
_GETHOUR V liest den Stunden-Wert in die Variable V ein
_GETDAY V liest den Tage-Wert in die Variable V ein
_GETMONTH V liest den Monats-Wert in die Variable V ein
_GETYEAR V liest den Jahres-Wert in die Variable V ein

Sämtliche Befehle haben nur eine Dummy-Funktion, eine Anbindung an eine konkrete RTC (z.B. über I2C) sollte aber kein Problem sein.

created with latex2web.pl v0.63 © 2006-2013 Joerg Wolfram