Hallo,
hier nun ein kleines modifiziertes Einführungsprogramm für Analog-Digitalwandlung mit dem ATTiny2313 von Günter Schmitt.
Prinzip:
Ladung eines Kondensators.
Vergleich der Spannungen am Analogkomparator-Device.
Auslesen des Registerwertes zwischen Start und
Erreichen des Zähler-Vergleichswertes am Output-Compare-Register OC1
Pin B3 (default).
Besonderheiten:
Pollen des TOV1-Flags im Timer-Interrupt-Flag-Register TIFR
und des ACO-Outputs, bei Toggeln auf "high".
(Es brauchen keine Interrupt-Einsprungadressen definiert und auch keine ISR programmiert zu werden, da das ACI-Flag auch aktiv
rückgesetzt werden kann durch "high", und bis zum nächsten Event
wird es abgefragt.
Trotzdem wird hier nicht ACI sonder ACO gepollt.)
Aktive Ladung und Entladung des Integrators.
Einzelne Bits in Port B werden mit "sbi" und "cbi" gesetzt, genauso das dazugehörige Datenrichtungsregister bitweise zu "tristate" etc.
Da Port B in "Default"-Stellung verwendet wird, bleibt nur noch Port D zur LCD-Initialisierung und -Ausgabe übrig.
Da dieser Port beim ATTina2313 nur 7 statt sonst 8 Bits aufweist, muß bereits in der LCD-Initialisierungsroutine getrickst werden.
Das wird erreicht, indem Registerinhalte von hex 30 auf hex 18, bzw. hex 20 auf hex 10 abgeändert und ab Programmsprung in 4-Bit-Modus mit "lsr" bzw. "ror" um eine Stelle nach rechts geschoben werden. Die Portanschlüsse werden dann auch vorher am LCD-Board umgelötet. Dabei bleiben Pins für Enable und RegisterSelect, sowie Vss und Vcc unverändert, nur Portbit-Pins D4 bis D7 werden zu D3 bis D6 um einen Pin versetzt.
Anschließend wird vor der Ausgabe noch eine Umwandlung in ASCII-Dezimalzahldarstellung vorgenommen, wobei drei Stellen ausreichen.
Die Meßwertanzeige kann durch "rol" verdoppelt werden, da die Skalierung ja nur von 0 bis 127 reicht, so erreicht man Anzeige-Werte auf der LCD von 000 bis 255.
(Wird nun versucht, nochmals mit "rol" zu verdoppeln, muß syntaxmäßig diesem "rol"-Befehl ein clc (Clear Carry Flag) vorangehen, es ergibt sich dann ein Anzeigebereich von 0-255 und in der Mitte des Vergleichs-Spannungsbereichs ein Sprung auf 0 und erneutes Beginnen bei 0 bis 255, da maximal ja nur 8 Bit pro Register zur Verfügung stehen.)
Auf Temperatur bezogen umgemodelt im Programm von 00,0 Grad bis 25,5 Grad.
Die DC-Anpassung des Temperaturfühlers KTY10 folgt noch.
Zunächst also das reine Konversions-Programm.
(Die Anzeige ist doch ziemlich ruhig, ganz im Gegensatz zur auch ausgetesteten Programmvariante 2 mit Interrupts, die von 63 bis 0 und von 0 bis 63 zählt beim Durchdrehen des Potis am "negativen" Eingang AIn1. Dies besagte Programm
(- war wohl die Appnote 401 -) hat auch "nur" eine Auslesemöglichkeit über den Umweg der seriellen Schnittstelle.)
Es grüßt,
Euer Oskar01
P.S.:
Zur korrekten Anzeige des Temperaturwertes muß der Koeffizient des Temperaturfühlers KTY10 berücksichtigt und in einer Folgeschaltung angepaßt werden. Der Temperaturkoeffizient ist ja nicht 1 Volt pro Grad, wie es bei einem IC in einer meiner vorigen Schaltungen der Fall war, sondern wesentlich kleiner.
Hier gibt es nun die Vorgaben, daß zunächst einmal der Fühler mit einem Konstantstrom (1 mA) betrieben werden sollte, dann zum anderen zur Korrektur des Temperaturganges ein Operationsverstärker mit genau dem angepaßten Verstärkungsfaktor einjustierbar im nicht-invertierenden Betrieb laufen muß, sonst muß noch ein weiterer OP-Amp (Verstärkung 1) die Invertierung wieder aufheben.
Ein LM317 scheidet als Konstantstromquelle aus, da er erst ab ca. 10 Milliampere als Konstantstromquelle verwendet werden kann, weil sein eigener Referenzspannungsquellenstrombedarf in den Laststrom mit eingeht. Der Strom ist schon zu hoch. Der KTY10 sollte nicht mit einem höheren Konstantstrom als 2 Milliampere betrieben werden, da er sich sonst selbst zu stark aufheizt und falsche Werte liefert.
Weitere Schwierigkeit: Möchte nur mit 5 Volt Versorgungsspannung arbeiten. Die einschlägigen OP-AMp-Schaltungen für Bandgap-Referenz setzen wohl eine doppelte Versorgungsspannung ( ca. + - 15 Volt) voraus.
Hoffe, die praktikable Schaltung wird demnächst vorgestellt werden können.
hier nun ein kleines modifiziertes Einführungsprogramm für Analog-Digitalwandlung mit dem ATTiny2313 von Günter Schmitt.
Prinzip:
Ladung eines Kondensators.
Vergleich der Spannungen am Analogkomparator-Device.
Auslesen des Registerwertes zwischen Start und
Erreichen des Zähler-Vergleichswertes am Output-Compare-Register OC1
Pin B3 (default).
Besonderheiten:
Pollen des TOV1-Flags im Timer-Interrupt-Flag-Register TIFR
und des ACO-Outputs, bei Toggeln auf "high".
(Es brauchen keine Interrupt-Einsprungadressen definiert und auch keine ISR programmiert zu werden, da das ACI-Flag auch aktiv
rückgesetzt werden kann durch "high", und bis zum nächsten Event
wird es abgefragt.
Trotzdem wird hier nicht ACI sonder ACO gepollt.)
Aktive Ladung und Entladung des Integrators.
Einzelne Bits in Port B werden mit "sbi" und "cbi" gesetzt, genauso das dazugehörige Datenrichtungsregister bitweise zu "tristate" etc.
Da Port B in "Default"-Stellung verwendet wird, bleibt nur noch Port D zur LCD-Initialisierung und -Ausgabe übrig.
Da dieser Port beim ATTina2313 nur 7 statt sonst 8 Bits aufweist, muß bereits in der LCD-Initialisierungsroutine getrickst werden.
Das wird erreicht, indem Registerinhalte von hex 30 auf hex 18, bzw. hex 20 auf hex 10 abgeändert und ab Programmsprung in 4-Bit-Modus mit "lsr" bzw. "ror" um eine Stelle nach rechts geschoben werden. Die Portanschlüsse werden dann auch vorher am LCD-Board umgelötet. Dabei bleiben Pins für Enable und RegisterSelect, sowie Vss und Vcc unverändert, nur Portbit-Pins D4 bis D7 werden zu D3 bis D6 um einen Pin versetzt.
Anschließend wird vor der Ausgabe noch eine Umwandlung in ASCII-Dezimalzahldarstellung vorgenommen, wobei drei Stellen ausreichen.
Die Meßwertanzeige kann durch "rol" verdoppelt werden, da die Skalierung ja nur von 0 bis 127 reicht, so erreicht man Anzeige-Werte auf der LCD von 000 bis 255.
(Wird nun versucht, nochmals mit "rol" zu verdoppeln, muß syntaxmäßig diesem "rol"-Befehl ein clc (Clear Carry Flag) vorangehen, es ergibt sich dann ein Anzeigebereich von 0-255 und in der Mitte des Vergleichs-Spannungsbereichs ein Sprung auf 0 und erneutes Beginnen bei 0 bis 255, da maximal ja nur 8 Bit pro Register zur Verfügung stehen.)
Auf Temperatur bezogen umgemodelt im Programm von 00,0 Grad bis 25,5 Grad.
Die DC-Anpassung des Temperaturfühlers KTY10 folgt noch.
Zunächst also das reine Konversions-Programm.
(Die Anzeige ist doch ziemlich ruhig, ganz im Gegensatz zur auch ausgetesteten Programmvariante 2 mit Interrupts, die von 63 bis 0 und von 0 bis 63 zählt beim Durchdrehen des Potis am "negativen" Eingang AIn1. Dies besagte Programm
(- war wohl die Appnote 401 -) hat auch "nur" eine Auslesemöglichkeit über den Umweg der seriellen Schnittstelle.)
Es grüßt,
Euer Oskar01
P.S.:
Zur korrekten Anzeige des Temperaturwertes muß der Koeffizient des Temperaturfühlers KTY10 berücksichtigt und in einer Folgeschaltung angepaßt werden. Der Temperaturkoeffizient ist ja nicht 1 Volt pro Grad, wie es bei einem IC in einer meiner vorigen Schaltungen der Fall war, sondern wesentlich kleiner.
Hier gibt es nun die Vorgaben, daß zunächst einmal der Fühler mit einem Konstantstrom (1 mA) betrieben werden sollte, dann zum anderen zur Korrektur des Temperaturganges ein Operationsverstärker mit genau dem angepaßten Verstärkungsfaktor einjustierbar im nicht-invertierenden Betrieb laufen muß, sonst muß noch ein weiterer OP-Amp (Verstärkung 1) die Invertierung wieder aufheben.
Ein LM317 scheidet als Konstantstromquelle aus, da er erst ab ca. 10 Milliampere als Konstantstromquelle verwendet werden kann, weil sein eigener Referenzspannungsquellenstrombedarf in den Laststrom mit eingeht. Der Strom ist schon zu hoch. Der KTY10 sollte nicht mit einem höheren Konstantstrom als 2 Milliampere betrieben werden, da er sich sonst selbst zu stark aufheizt und falsche Werte liefert.
Weitere Schwierigkeit: Möchte nur mit 5 Volt Versorgungsspannung arbeiten. Die einschlägigen OP-AMp-Schaltungen für Bandgap-Referenz setzen wohl eine doppelte Versorgungsspannung ( ca. + - 15 Volt) voraus.
Hoffe, die praktikable Schaltung wird demnächst vorgestellt werden können.