A/D-Komparator mit ATTiny2313 und LCD

Oskar01

Mitglied
24. März 2008
267
0
16
Köln
Sprachen
  1. Assembler
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.
 

Anhänge

  • ADC_ATTiny2313.asm
    10,4 KB · Aufrufe: 34
  • ADC_ATiny2313_2.asm
    3,9 KB · Aufrufe: 27
Hi Oskar,

Hallo,
hier nun ein kleines modifiziertes Einführungsprogramm für Analog-Digitalwandlung mit dem ATTiny2313 von Günter Schmitt.
nette Assembler-Sammlung :) Kann man schon einiges draus recyclen :D

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.
Da hab ich für nen Arbeitskollegen schon mal ne Schaltung geplant. Kann ich
ja mal reinstellen.

Gruß
Dino
 
Die zugehörigen Oszillogramme

Hallo,
hier die zugehörigen Schirmbilder von Spannungsverläufen an PB3 und PB0.
Man sieht zunächst den Ladezustand des 1yF-Kondensators bei Digitalanzeige 127 und dann bei Wert 255 (bzw. 63 und 127).

Je länger der Impuls, desto höher die Kondensatorladung.
Die Ladung bricht genau auf der Flanke des Rechtecksignals ab.
Da beginnt dann auch die Entladung wieder.

Viel Spaß.....

Gruß von Oskar01
 

Anhänge

  • adc_127.png
    adc_127.png
    73,1 KB · Aufrufe: 33
  • adc_255.PNG
    adc_255.PNG
    80,9 KB · Aufrufe: 30

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)