Pfad: Home => AVR-Übersicht => Anwendungen => Powerscanner   This page in English: Flag EN Logo
Powerscanner mit ATmega Anwendungen von
AVR-Einchip-Prozessoren AT90S, ATtiny, ATmega und ATxmega
Powerscanner mit ATmega


Unfertiges Projekt
- Hardware ungetestet
- Software noch in Entwicklung
- Nachbau auf eigenes Risiko

Powerscanner: Netzteil-Tester mit Pfiff und ATmega

Du möchtest gerne wissen, wieviel Volt Dein Netzteil bei welcher Stromlast noch hat? Kein Problem hiermit: ein AVR zieht einen steigenden Strom aus dem Netzteil und misst die Spannung dabei. So ein Messzyklus dauert ca. 5 Minuten, dann weißt Du ganz genau, ab wann Dein Netzteil in die Knie geht.

Maximal kann Dein Netzteil bis zu 35 Volt bei maximal 3,3 A liefern, der Scanner ist also auch für größere Netzteile geeignet. Der Maximalstrom kann mittels eines Drehschalters aber auch niedriger eingestellt werden, so dass auch kleinere Netzteile bequem vermessen werden können.

Und das Schönste daran ist: die Spannungs- und Strom-Messwerte werden Dir laufend über eine RS232-Schnittstelle zugesendet und können dort mitgeschrieben werden (ATmega48 oder ATmega324PA) oder zusätzlich noch auf einer LCD dargestellt werden (ATmega324PA).

Die RS232-Schnittstelle kann aber auch Anweisungen empfangen: Spannungen und Ströme können darüber fein justiert werden (die dazu verwendeten Umrechnungsfaktoren werden im EEPROM abgelegt, so dass sich Justieren wirklich dauerhaft lohnt), der Scan-Vorgang kann gestartet, angehalten und fortgesetzt oder beendet werden.

Wie immer auf dieser Webseite gibt es das Folgende völlig für umme (für Nicht-Südhessen: das bedeutet "kostenlos", für Ruhrgebietler: "für lau"):

Top Schaltbild Aufbau Bedienung Software

1 Schaltbilder des Powerscanners

Den Powerscanner gibt es in zwei Versionen:
  1. Die Version mit dem ATmega48 liefert die Messdaten nur über die RS232-Schnittstelle.
  2. Die Version mit dem ATmega324PA liefert die Daten zusätzlich auf einer vierzeiligen LCD-Anzeige und lässt sich mit zwei zusätzlichen Tastern bedienen.

1.1 Schaltbild des Powerscanners mit ATmega48

Powerscanner mit RS232 und ATmega48 Die Schaltung mit dem ATmega48 besteht aus folgenden Teilen:
  1. dem NPN-Leistungs-Darlington-Transisitor TIP 141, dessen Basis aus dem ein- oder dreistufigen RC-Filter aus dem 8/9/10-Bit breiten PWM-Generator des TC1 über den OC1B-Pin pulsweitengesteuert zwischen Null und 5V einstellen kann, verwendbar sind auch viele andere NPN-Darlingtons, wenn sie die nötige thermische Leistung abkönnen und entsprechend gekühlt werden,
  2. aus dem AD-Wandler, der aus dem AVCC-Pin mit Spannung versorgt wird, der auf die interne Referenzspannungsquelle von 1,1V eingestellt ist, die mit einem Abblockkondensator am AREF-Pin versehen ist und
    1. an ADC0 die mit einem Spannungsteiler auf das 1,1-Volt-Niveau herabgeteilte Spannung der Stromversorgung des Testgeräts misst,
    2. an ADC1 die Emitterspannung des Darlingtons misst (Messbereich 0,0 bis 1,1V, 10-Bit-ADC),
    3. an ADC2 die Basisspannung des Darlingtons über einen Spannungsteiler misst und damit das RC-Filter überwacht.
  3. dem seriellen Interface mit dem MAX232, das Senden und Empfang über die TXD- und RXD-Pins erledigt und mit den zwei RTS- und CTS-Leitungen kommuniziert,
  4. dem Quarz an den beiden Prozessoranschlüssen, der nur für die genaue Taktung der seriellen Schnittstelle sorgt uund daher auf 2,457600 MHz Takt eingestellt ist,
  5. dem Drehschalter unten, der sechs verschiedene Emitterwiderstände an den Emitter schaltet, damit den gewünschten Messbereich einstellt und dessen zweite Ebene über vier verschiedene PCINTs die Einstellung dem Controller mitteilt,
  6. der ISP6-Schnittstelle, über die das Flash mit dem Programm und das interne EEPROM mit den Anfangswerten gefüttert werden kann.
Da alle Spannungen und Ströme mit verstellbaren Konstanten berechnet werden, können alle Spannungsteiler sowie die Emitterwiderstände mit 5%- oder 10%-Widerständen bestückt werden und mittels Variation der Rechenkonstanten auf korrekte Werte justiert werden. Alle justierten Konstanten werden im EEPROM angelegt, so dass die Justierung nur einmal und nur nach wesentlichen Änderungen an der Schaltung einmalig erfolgen muss.

Wer die Schaltung auf einem Experimentierboard aufbauen will, findet in der Software-Abteilung geeignete Programme, mit denen die Hardware scheibchenweise überprüft werden kann.

1.2 Schaltbild des Powerscanners mit ATmega324PA

Powerscanner mit RS232, LCD und ATmega324 Die ATmega324PA-Version hat alles, was die ATmega48-Version auch hat, nur an anderen Pins. Zusätzlich hat diese Version noch
  1. eine vierzeilige LCD, die mittels eines 8-Bit-bidirektionen Datenbusses und den drei Kontrollbits LCD-RS, LCD-R/W und LCD-EN angesteuert wird und deren Hintergrundbeleuchtung LCD-BL aus dem PWM-Kanal des TC2 geregelt wird,
  2. ein zusätzliches Potentiometer an ADC3, das die Helligkeit der Hintergrundbeleuchtung regelt,
  3. zwei Tasten S1 und S2, über die die Umrechnungskonstanten für Spannungen und Ströme manuell erhöht und erniedrigt werden können.
Auch für diese Version gibt es geeignete Testprogramme.

1.3 Schaltbild des seriellen Interfaces

Schaltbild des seriellen Interfaces Das serielle Interface ist für beide Schaltungen das gleiche, nur die vier Prozessor-Pins unterscheiden sich ein wenig.

Der MAX232 erzeugt die +/-12V für das Interface mit vier Kondensatoren und hat zwei invertierende TTL-zu-RS232-Treiber sowie zwei invertierende RS232-zu-TTL-Treiber. Damit ist es möglich, nicht nur RXD und TXD, sondern auch die RS232-Protokoll-Kontrollleitungen RTS und CTS zu bedienen.

Die Standard-DB9-Buchse wird mittels einer 10-poligen Flachkabelverbindung an die Prozessorplatine angeschlossen.

1.4 Schaltbilder der RC-Filter des Powerscanners

Einstufiges RC-Filter für Powerscanner Dreistufiges RC-Filter für Powerscanner Dies hier zeigt ein einstufiges und ein dreistufiges RC-Filter für das PWM-Signal, das die Basis des Darlington-Transistors mit Gleichspannung ansteuert.

Zu den Eigenschaften beider Filter sowie eines zweistufigen RC-Filters siehe das Kapitel weiter unten.

1.5 Die Emitterwiderstände des Powerscanners

Die Emitter-Widerstände für den Powerscanner Die Emitter-Widerstände des Darlington-Transistors bestimmen den Strombereich, der von der PWM überstrichen werden soll. Er reicht von 3,3 A in sechs Stufen herunter bis zu 50 mA Vollausschlag.

Die Tabelle zeigt die Widerstandswerte und den damit erreichbaren Strombereich.

Noch ein Wort zu dem Einsatz des mechanischen Drehschalters: damit die hohen Ströme, die zu schalten sind, nicht von Kontaktwiderständen verfälscht werden, sind Mäuseklaviere oder andere minderwertige Schalter dafür nicht geeignet. Die zwei Ebenen des verwendeten Schalters ermöglichen es zudem, die Schalterstellung mittels PCINTs an den Controller mitzuteilen, der die Stromberechnung entsprechend einstellen kann, so dass korrekte Stromangaben möglich sind.

Da es möglich ist, die Stromberechnung fein zu justieren und da die Einstellwerte im EEPROM abgelegt werden, ist es möglich, Widerstände mit schlechterem Genauigkeitsgrad (z. B. mit 10%) zu verwenden. Es muss nur darauf geachtet werden, dass der Widerstand von der thermischen Leistung her ausreichend dimensioniert ist, da sonst durch steigende Temperaturen verursachte Widerstandsänderungen die Genauigkeit der Messung und Umrechnung verringern.
Top Schaltbild Aufbau Bedienung Software

2 Aufbau des Powerscanners

TBD

Top Schaltbild Aufbau Bedienung Software

3 Bedienung des Powerscanners

Die Bedienung der beiden Scanner kann über die serielle Schnittstelle erfolgen, die Befehle dafür sind in der letzten Spalte der untenstehenden Tabelle angegeben. Alle Anweisungen werden nach Eingabe eines Wagenrücklaufs oder Zeilenvorschubs ausgeführt.

Zusätzlich kann die ATmega324PA-Version noch über die beiden Tasten eingestellt werden, so dass der Betrieb auch ohne RS232-Schnittstelle erfolgen kann. Die Bedienung der Tasten erfolgt dann nach folgendem Schema:
  1. Die Taste 1 an INT0 (schwarz) wechselt zum nächsten Einstellmodus.
  2. Die Taste 2 an INT1 (rot) führt den dargestellten Menuepunkt aus.
Es gibt folgende Einstellmodi:
Taste 1LCD-AusgabeTaste 2 bewirktRS232-Anweisungen
Spannung am
Testgerät
erhöhen↑SpannungSpannungsumrechnung erhöhenV+, V++, V=Zahl
absenken↓SpannungSpannungsumrechnung absenkenV-, V--, V=Zahl
Spannung an
der Basis
erhöhen↑BasisBasisspannungsumrechnung erhöhenB+, B++, B=Zahl
absenken↓BasisBasisspannungsumrechnung absenkenB-, B--, B=Zahl
Stromangabeerhöhen↑StromStromumrechnung erhöhenI+, I++, I=Zahl
absenken↓StromStromumrechnung absenkenI-, I--, I=Zahl
Obergrenzeerhöhen↑LimitStrommaximum erhöhenL+, L++, L=Zahl
absenken↓LimitStrommaximum absenkenL-, L--, L=Zahl
Scanstarten→ScanStarten des ScansS
halten↔HaltAnhalten des Scans bei diesem WertH
fortsetzen→ScanFortsetzen des angehaltenen ScansC
beenden←StopBeenden des ScansZ
Top Schaltbild Aufbau Bedienung Software

4 Software für den Powerscanner

  1. Assembler-Quellcodes
  2. Einstellungen im Quellcode
  3. Fuse-Einstellungen
  4. Test-Programme für die Hardware
  5. Funktionsweise der Stromeinstellung
  6. Ermittlung von Spannungen und Strömen
  7. Funktionsweise der Seriellen Schnittstelle
    1. Taktung der seriellen Schnittstelle
    2. Ringpuffer-Organisation
    3. Ringpuffer-Eingabe
    4. Ringpuffer-Ausgabe
  8. Funktionsweise der LCD

4.1 Download der Quellcodes

Die Software befindet sich noch in der Entwicklung.

Zum Assemblieren der ATmega324PA-Variante werden noch die LCD-Routinen hier benötigt. Vor dem Assemblieren bitte die Hinweise in hier beachten.

Beim Brennen noch die Hinweise auf die Einstellung der Fuses hier beachten, dann klappts auch mit der Baudrate.

Top Schaltbild Aufbau Bedienung Software

4.2 Einstellungen vor dem Assemblieren

Bitte darauf achten, dass alle Debug-Schalter auf Null stehen, sonst macht die Software nicht das was man von ihr erwartet.

Im Abschnitt "Adjustable constants" kann man noch die folgenden Einstellungen vornehmen:
Top Schaltbild Aufbau Bedienung Software

4.3 Fuse-Einstellungen

ATmega48 TBD

Original-Fuses beim ATmega324PA Geänderte Fuses beim ATmega324PA Links sind die Orginal-Fuses beim ATmega324PA zu sehen, rechts die geänderten Fuses.

Zu ändern sind die JTAGEN-Fuse und die CKDIV8-Fuse. Die Einstellung auf den externen Quarz muss ebenfalls erfolgen. Das geht alles mit einem Rutsch.

Top Schaltbild Aufbau Bedienung Software

4.4 Hardware-Test-Programme

Für den schrittweisen Test-Aufbau der Schaltung in der Reihenfolge
  1. Quarz und ISP6-Verbindung,
  2. RC-Filter und Darlington-Transistortreiber,
  3. Serielle Schnittstelle, und
  4. beim ATmega324PA die LCD.
habe ich noch ein paar kurze Programme geschrieben, die nur die Hardware testen.

4.4.1 Test des RC-Filters

Um das RC-Filter auszutesten, habe ich die Software
m324pa_tc1 geschrieben. Sie macht Folgendes:
  1. Sie schaltet den OC1B-Ausgang als Ausgangs-Pin.
  2. Sie inittiert den Timer TC1 im 10-, 9- oder 8-Bit-Modus als PWM, mit zwei vorwählbaren PWM-Pulsweiten in Prozent, und
  3. schaltet mit auswählbarer Pausenzeit in Sekunden zwischen beiden Pulsweiten hin und her
  4. .
Alle Parameter können im Quellcode eingestellt werden. In der Default-Einstellung schaltet die PWM im 10-Bit-Modus alle fünf Sekunden zwischen 50 und 51% Pulsweite um.

Das Hin- und Herschalten eignet sich hervorragend zur Beurteilung der Geschwindigkeit, mit der sich das RC-Filter umschalten lässt. Wer lieber nur eine feste Pulsweite braucht, macht beide gleich groß.

Im 10-Bit-Modus liegt die PWM-Frequenz bei quarzstabilen und sauberen 1.200 Hz. Schon am ersten Elko ist die Filterwirkung frappierend groß (R*C = 150 * 100 / 1000000 = 0,015; 1 / 1200 = 0,00083, Filterfaktor = 18), am dritten Elko ist sie auch mit einem AC-Voltmeter oder einem Oszilloskop in der empfindlichsten Einstellung nicht mehr messbar. Auch das Umschalten funktioniert so schnell, dass man praktisch nichts auf dem langsam laufenden Oszilloskop davon sieht.

4.4.2 Test der seriellen Schnittstelle

Das Testprogramm m324pa_serial.asm
  1. initiiert die serielle Schnittstelle mit der im Kopf eingestellten Baudrate (Default: 19k2),
  2. sendet dann im Polling-Modus 40 mal das ASCII-Zeichen "U" zum Synchronisieren des Seriell-Empfängers, und
  3. echot danach im Interrupt-Modus alle eintreffenden Zeichen, so wie empfangen, auf der Sendeleitung, Fehler beim Empfang werden mit "F", "O" oder "P" quittiert.
Die empfangenen Zeichen werden zusätzlich auf Port C ausgegeben, die Pins PB5 (RXC0), PB6 (TXC0) und PB7 (UDRE0) geben den aktuellen Zustand der betreffenden Statusbits an, wenn eine LED mit Vorwiderstand daran gegen Plus angeschlossen wird. Bitte beachten, dass bei hohen Baudraten auch sehr kurze Blinkzeiten vorliegen. Wer also Statusbits beobachten will, nehme eine niedrigere Baudrate (bei 2,457600 MHz kann es bis herab auf 38 Baud gehen).

4.4.3 Test der LCD

Das Testprogramm m324pa_lcd.asm verwendet die Include-Datei lcd.inc, um die LCD zu testen. Im Quellcode sind die Parameter der LCD und die Port-Anschlüsse der LCD anzugeben. Es wird eine Eröffnungsmeldung ausgegeben, 5 Sekunden gewartet und dann die zweite Vorlage auf der LCD dargestellt.

Die LCD wird auf die im Schaltplan angegebenen Pins, im 8-Bit-Modus und mit Schreib-Lese-Zugriff auf das LCD-Busy-Bit eingestellt.

Top Schaltbild Aufbau Bedienung Software

4.5 Funktionsweise der Stromeinstellung

Rest-Schwingung an den RC-Filtern Die Einstellung der Ströme funktioniert so, dass der OC1B-Ausgang ein pulsweiten-moduliertes Signal an das/die RC-Filter ausgibt. Der Ausgang der RC-Filter treibt die Basis des Darlington-Transistors an. Bei hohen Strömen (100 mA und mehr) ist zu beachten, dass der Basisstrom des Darlingtons zu einem Abfallen der Spannung innerhalb der RC-Filterung führt. Ein dreistufiges RC-Filter muss daher eine höhere Pulsweite erhalten, wenn es den gleichen Emitterstrom wie die einstufige Variante erzeugen soll.

Bei einer Taktfrequenz von 2,457600 MHz betragen die PWM-Frequenzen Um nicht allzuviel Zeit beim Einstellen der RC-Filter zu verlieren, wurde als Widerstand der RC-Kombinationen 150Ω gewählt. Beim einstufigen Filter wurde als C 1.000µF gewählt, beim zweistufigen zwei Mal 220µF und beim dreistufigen drei mal 100µF. Diese Auswahl erwies sich als vernünftig, um gute Filterergebnisse zu erreichen.

Bei der einstufigen Variante (VC1-S) ergibt sich noch ein PWM-Ripple von 2,9 mV, was bei der höchsten Stromvariante 0,13 mA Schwankungen verursacht. Bei der zweistufigen Variante (VC2-D) beträgt das Ripple nur noch 90 µV, bei der dreistufigen (VC3-T) nur noch 28,3 µV. Sowohl die zwei- als auch die dreistufige Variante sind brauchbar. Zur Not geht auch die einstufige Variante noch.

Filterantwort bei Compare-Wert-Wechsel Dies hier ist die Filterantwort auf einen Compare-Wert-Wechsel um acht Einheiten abwärts bei der 10-Bit-PWM. Daraus ergibt sich, dass der neue Basisspannungswert nach spätestens 500 ms Wartezeit ausreichend genau eingestellt ist. Da beim Scannen immer nur um eine Einheit gewechselt wird, sind 500 ms großzügig dimensioniert.

Emitterstrom bei Compare-Wert-Wechsel Und so bewegt sich der Emitterstrom bei diesen Spannungen, wenn man 4,7Ω Emitterwiderstand eingeschaltet hat: Der Strom lässt sich mit dem PWM feinfühlig einstellen und regeln. Nach einer halben Sekunde ist der neue Wert am Emitter angekommen.

Aus den unterschiedlichen Werten bei den drei Filterarten sieht man den Einfluss des Basisstroms: obwohl der bei einem Strom von knapp 50 mA recht bescheiden ist (bei hFE = 1.000), ergeben sich doch unterschiedliche Ströme am Emitter. Man kann daher den Basisstrom keineswegs vergessen bei der Simulation. Und schon gar nicht bei RE = 0,33Ω.

Der niedrige Wert für R, der hier verwendet wird (R = 150Ω), führt übrigens zu recht hohen Strömen am OC1B-PWM-Ausgang. Dieser liegt bei ca. 20mA. Dabei machen sich Spannungsverluste in Sink- und in Source-Richtung bereits bemerkbar. Es wurden daher in die Berechnung zu erwartende Spannungen in Sink- und in Source-Richtung am OC1B eingerechnet.

Wer selber rechnen will, findet die entsprechende Rechenseite "mitBasisstrom" dafür im LibreOffice-Calc-Dokument hier.

Top Schaltbild Aufbau Bedienung Software


4.6 Ermittlung von Spannungen und Strömen

Alle Spannungs- und Strommessungen finden mit dem ADC bei einer internen Referenzspannung von 1.1 Volt statt. Um nicht auf einen einzigen Messwert angewiesen zu sein, werden jeweils 64 Messungen auf jedem Kanal aufsummiert, die Summe hat folglich 16 Bit Breite.

Drei unterschiedliche Größen sind daraus zu ermitteln:
  1. die Spannung am Testgerät: sie wird mit zwei Widerständen von 390Ω und 12kΩ herabgeteilt, also um das (12.000 + 390) / 390-fache = 31,769-fache. Damit beim Teilen 1,1 V am AD-Wandler ankommt, muss am Eingang des Teilers 31,769 * 1,1 = 34,946 V anliegen. Damit dies als 34,946 angezeigt werden kann, muss die Zahl mit 100 malgenommen werden. Es wird daher nicht mit 34,946, sondern mit 3.495 malgenommen. Die sich ergebende Ganzzahl kriegt ein Komma hinter der dritten Stelle, so dass 34,95 angezeigt wird.
  2. die Basisspannung am Darlington wird mit einem 11kΩ und 39kΩ-Spannungsteiler herabgeteilt, was einem Teiler von (11 + 39) / 11 = 4,545 entspricht. Damit 5,000V angezeigt werden, muss die Spannung am ADC-Eingang 1,1 V betragen. Die gemessene Summe muss daher mit 5 * 65536 / 65535 = 5,000076 malgenommen werden. Damit drei Nachkommastellen angezeigt werden, wird mit 5.000 malgenommen. Das Komma wird hier nach der vierten Ziffer eingeschmuggelt, so dass 5,000 angezeigt wird.
  3. der Emitterstrom an dem ausgewählten Widerstand ergibt sich als 1,1 / R. Bei 0,33Ω ist das ein Strom von 3,333 A, bei 22Ω sind es 50 mA. Bei 0,33Ω muss die Messwertsumme daher mit 3.333 malgenommen, das Dezimalkomma nach der vierten Ziffer eingefügt werden und die Zahl erhält ein A als Dimension. Bei 22Ω wird mit 5.000 multipliziert, das Komma nach der dritten Stelle eingefügt und als Dimension mA hinzugefügt.


16-Bit-Zahlen und 8-Bit-Zahlen Ein kleines bisschen kniffelig ist das Multiplizieren der 16-Bit-Summe mit dem 16-Bit-Multiplikator. Erstens ergibt das Zahlen mit 32 Bit Länge. Und die Hardware-Multiplikatoren in den ATmega können nur 8-Bit-Multiplikation. Die 16*16-Bit-Multiplikation muss daher in eine Reihe von 8-Bit-Multiplikationen verwandelt werden.

Eine 16-Bit-Zahl ist eine 8-Bit-Zahl, das LSB, und eine weitere 8-Bit-Zahl, das MSB, das aber 256 mal mehr ist als jedes LSB. Die beiden Zahlen lassen sich also in ihre LSBs (L1, L2) und ihre MSBs (M1, M2) zerlegen.

Nun kommt die höhere Arithmetik: wie multipliziert man Klammerausdrücke? Nun, jeder mit jedem. Und da jeder zwei Teile in der Klammer hat, kommen vier Summanden heraus.

Der erste entsteht durch Multiplizieren der beiden MSBs. Da die beide ein 256 vor sich haben, wird daraus ein 65.536. Die beiden Bytes gehören daher in die zwei oberen Bytes des Ergebnisspeichers.

Umgekehrt gehören die beiden Bytes aus der Multiplikation der beiden LSBs in die untersten zwei Bytes des Ergebnisses.

Die beiden Multiplikationen der MSBs mit den LSBs der jeweils anderen Zahl führen zu zwei 16-Bit-Zahlen, die um ein Byte links verschoben (* 256) zu den Bytes zwei und drei des Ergebnisses addiert werden müssen. Treten bei der Addition Ü:berläufe auf, dann werden die in das vierte Byte geschoben.

Das war es dann schon: aus einer 16*16-Bit-Multiplikation werden vier 8*8-Bit-Multiplikationen und ein bisschen Verschieben und Addieren.

Register beim Multiplizieren Das hier sind die Register, die für das Multiplizieren gebraucht werden.

Multiplizieren in Assembler Das hier ist die Assembler-Formulierung der 16-Bit-Multiplikation. Da wir nur die beiden obersten Bytes des Ergebnisses benötigen, werden jeweils 0x80 zu den beiden untersten Ergebnisregistern addiert und ein eventuelles Carry zu den beiden oberen Bytes addiert, um auf Ganzzahlen zu runden.

Die beiden oberen Bytes werden dann von binär in Dezimalzahlen umgewandelt und das Komma an der betreffenden Stelle eingefügt. Nullen vor dem Komma und der ersten Dezimalstelle werden in Leerzeichen verwandelt, die Dimension angefügt und das Ganze an die serielle Schnittstelle bzw. auch an die LCD ausgegeben (bei der ATmega324-Version).

Top Schaltbild Aufbau Bedienung Software

4.7 Funktionsweise der Seriellen Schnittstelle

Die serielle Schnittstelle arbeitet mit dem intern eingebauten USART. Dies stellt sämtliche Hardware zur Verfügung, die man zum Senden und zum Empfang braucht.

4.7.1 Taktung der seriellen Schnittstelle

Damit mit der richtigen Baudrate gesendet und empfangen werden kann, muss der Controller mit einer geeigneten Frequenz getaktet werden. Der Baudratengenerator teilt diese Frequenz durch 16 und durch eine programmierbare Ganzzahl zwischen 1 und 4.096. Dieser Baudratenteiler UBRR wird, vermindert um Eins, beim Initiieren der Schnittstelle in die Baudratenregister geschrieben.

Üblich sind die Baudraten ab 1.200 Bit pro Sekunde in Zweierpotenzen aufwärts. 9k6 oder 19k2 ist für diesen Zweck hier völlig ausreichend, schneller muss es eigentlich gar nicht gehen.

Eignung von Quarzen In der Tabelle "quarze_seriell" im LibreOffice-Calc-Spreadsheet hier sind die handelsüblichen Quarze auf ihre Eignung hin untersucht. Für die angegebenen Baudraten sind die UBRR-Konstanten ermittelt. Konstanten, die ohne Rest teilbar sind, sind gut geeignet und in der Spalte E in grün dargestellt. In gelb dargestellte Teilerwerte sind bedingt geeignet: ihr Teilerwert liegt bis zu 10% über oder unter dem Idealwert, was von der Ungenauigkeit her aber noch im tolerablen Bereich der seriellen Schnittstelle ist.

Rot gekennzeichnete Quarze und Baudraten sind nicht geeignet, da sie Teilerwerte unterhalb von 0,9 haben. Nicht gekennzeichnete Teiler sind außerhalb des zulässigen Toleranzbereichs, diese Kombinationen sollten nicht verwendet werden.

Wie man an der Tabelle sieht, sind viele Quarze für diesen Zweck geeignet, man kann sich also was Passendes aussuchen. Bei mir ist es ein 2,4576-MHz-Quarz bei einer Baudrate von 19k4, was auch als Default bei der Software eingestellt ist.

Top Schaltbild Aufbau Bedienung Software

4.7.2 Organisation der Daten in einem Ringpuffer

Damit alle Messergebnisse fein säuberlich, zuverlässig und bequem übertragen werden können, ist im SRAM ein Ringpuffer angelegt. In diesen werden alle zu sendenden Zeichen abgelegt und bis zum Senden gespeichert. Für Informatiker: es handelt sich um einen First-In-First-Out-Zwischenspeicher.

Erreicht der Ringpuffer sein Ende, wird wieder von vorne begonnen. Bei Eingaben in den Puffer wird überprüft, ob im Puffer noch Platz ist, damit es nicht zu einem Pufferüberlauf kommt. Jedes Schreiben eines Zeichens in den Puffer stößt die Sende-Ausgabe an, sofern der Sender noch nicht gestartet ist.

Die Ringpuffer-Verwaltung verwendet das X-Registerpaar als Eingabe- und das Y-Registerpaar als Ausgabezeiger. Da beide nicht für andere Zwecke gebraucht werden, ist diese Lösung hinnehmbar.

Hier gibt es noch mehr über solche Ringpuffer zu lesen und eine Variante, die ohne diese Registerpaar-Verschwendung auskommt.

Top Schaltbild Aufbau Bedienung Software

4.7.3 Eingabe in den Ringpuffer

Ablage von Daten im Ringpuffer Dies hier ist die Routine, mit der Daten in den Ringpuffer geschrieben werden. Das zu schreibende Byte befindet sich im Vielzweckregister rmp.

Es beginnt mit dem Schreiben des Bytes in den Ringpuffer. Dabei wird die Adresse in X um Eins erhöht. Zeigt der X-Zeiger nun auf eine Position, die jenseits des Ringpuffers liegt, wird der Zeiger auf den Anfang des Ringpuffers gesetzt.

Nun wird überprüft, ob der erhöhte Eingabezeiger im Registerpaar X auf den Ausgabezeiger in Y zeigt. Dies wäre der Fall, wenn die bislang geschriebenen Daten noch nicht gesendet worden wären und ein Pufferüberlauf vorläge. Wenn das der Fall ist, wird von der Eingabeposition in X wieder Eins abgezogen und überprüft, ob X nun vor den Pufferanfang zeigt. Wenn das der Fall ist, wird der X-Zeiger auf die letzte Position des Puffers eingestellt. Das ursprünglich im Puffer abgelegte Byte wird vom nächsten zu schreibenden Byte überschrieben, weil kein Platz im Puffer mehr ist.

Egal ob kein Überlauf oder ein Überlauf erfolgte, wird abschließend das UDR-Interrupt-Enable-Bit gesetzt. Dies bewirkt, dass, sobald das Sende-UDR leer ist, der Sender das nächste zu sendende Byte erhält und ausgesendet wird (siehe nächstes Kapitel).

Top Schaltbild Aufbau Bedienung Software

4.7.4 Senden aus dem Ringpuffer

Senden aus dem Ringpuffer Das Senden aus dem Puffer arbeitet mit dem UDR-Interrupt-Enable-Bit. Immer wenn dies gesetzt ist, verzweigt die Programmausführung an diese Interrupt-Service-Routine, wenn Platz im Sende-Register ist.

Die Routine beginnt mit der Überprüfung, ob der Sendezeiger in Y auf den Eingabezeiger in X zeigt. Wenn dies der Fall ist, dann ist alles gesendet und das USART wird auf das Ende des Sendevorgangs eingestellt, indem das UDR-IE-Bit auf Null gesetzt wird. Da sich die restlichen Bits des zuletzt gesendeten Bytes noch in Verarbeitung befinden, wird stattdessen der TXCIE-Interrupt ermö,glicht. Erst der spätere TXCIE-Interrupt signalisiert, dass alles ausgesendet ist.

Dieser Teil wird mit dem Wiederherstellen des Statusregisters und einem RETI abgeschlossen.

Falls die beiden Zeiger noch ungleich sind, wird das nächste Byte in das Vielzweckregister rmp gelesen und die Adresse um Eins erhöht. Das Byte wird in das USART-Senderegister geschrieben und anschließend wird überprüft, ob die erhöhte Adresse in Y auf jenseits des Ringpuffers zeigt. Wenn das der Fall ist, wird Y auf den Anfang des Ringpuffers gesetzt. Auch dieser Teil der Service-Routine wird mit dem Wiederherstellen des Statusregisters und einem RETI abgeschlossen.

Top Schaltbild Aufbau Bedienung Software

4.8 Funktionsweise der LCD

TBD

Top Schaltbild Aufbau Bedienung Software


©2022 by http://www.avr-asm-tutorial.net