Forum: Projekte & Code 2x3 LED Strom Spannung einfache Kalibrierung Justierung per Software - ATmega8 Assembler


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Bernhard S. (bernhard)


Angehängte Dateien:

Lesenswert?

Ein kleines Beispiel in Assembler für einen ATmega8, 1MHz,
wie 2x3 7-Segmentanzeigen eine Spannung (grün) und einen Strom 
(rot)anzeigen können.

Zwei Tasten "Menue" und "Enter" ermöglichen schnell und einfach die 
Justierung des Systems, also ohne Potentiometer.

Anzeige Spannung 0.00...2.56V (mV Bereich)
                 2.60...99.9V ( V Bereich)

Anzeige Strom    0.00...9.99A

Der Spannungsteiler für ADC0 bitte so dimensionieren, dass die Spannung 
am ADC0-Pin 2,5V (Referenzsspannung) nicht überschreitet.

Optional kann der PWM-Ausgang für die Steuerung eines Lüfters 
verwendet werden, ab 50°C läuft der Lüfter an, ab 70°C volle Pulle.

Die Kalibrierung bzw. Justierung ist relativ einfach.

1. Spannung von 2V anlegen und "CAL   2u" aufrufen + Enter
  (für mV-Bereich)
2. Spannung von 28V anlegen und "CAL 28u" aufrufen + Enter
  (für V-Bereich)
3. Strom 0 Einstellen und "CAL 0 A" aufrufen + Enter
  (für ev. vorhandenen Offset)
4. Strom 1A Einstellen und "CAL 1 A" aufrufen + Enter
  (für max 1A Strom)

4a. alternativ für größere Ströme
  Strom 2A Einstellen und "CAL 2 A" aufrufen + Enter
  (für max 2A Strom)

Die Ergebnisse werden im EEPROM des ATmega8 abgelegt.

Menueführung :

Menue-0: Anzeige Strom und Spannung
Menue-1: Anzeige Temperatur
Menue-2: Anzeige PWM z.B. für Lüftermotor
Menue-3: "CAL  2u" - Kalibrierung 2V für den mV Bereich
Menue-4: "CAL 28u" - Kalibrierung 28V
Menue-5: "CAL 0 A" - Kalibrierung 0A (Offset)
Menue-6: "CAL 1 A" - Kalibrierung 1A
Menue-7: "CAL 2 A" - Kalibrierung 2A
Menue-8: "A 0 xxx" - ADC0 Wert
Menue-9: "A 1 xxx" - ADC1 Wert
Menue-10:"A 2 xxx" - ADC2 Wert
Menue-11:"A 3 xxx" - ADC3 Wert

Bernhard

Nachtag: Dieses Modul passt gut in ein Gehäuse RND 320-KD3005D,
eigentlich wollte ich mit 4-stelligen Anzeigen arbeiten, jedoch die 
Fenster sind dafür zu klein.

: Bearbeitet durch User
von Max B. (citgo)


Lesenswert?

Sehr cool!
Danke dafür, werde ich bestimmt mal aufbauen!

von MaWin (Gast)


Lesenswert?

Es würde der Ablesbarkeit der Anzeige auch ausserhalb des dunklen 
Bastlerzimmers sicherlich helfen, wenn zumindest die Digit-Leitungen mit 
Transistoren zur Stromverstärkung ausgestattet werden, denn 
(5V-2.1V)/100Ohm=29mA*8=232mA schafft so ein ATmega-Pin nichal wenn man 
es sich vor Weihnachten ganz stark wünscht da hat man die 
Datenblattgrenzwerte ums 12-fache gerissen, aber auch die 
Segmentleitungen, dann könnte man sogar auf 60mA für die ganze 
Helligkeit laut Datenblatt hochgehen. Bei (SOT23 reicht schon) MOSFETs 
bräuchte man nichtmal Basisvorwiderstände. Aber entweder andere 'common 
Anode' Anzeigen oder Änderungen am Programm für invertierte Ausgänge.

Der coole Chinese baut das natürlich mit einem SH79F3212 und spart sich 
Treiber und Vorwiderstände und hätte auch 12bit A/D damit nach dem 
kalibrieren nicht plötzlich bei einigen Werten die Anzeige um 2 springt 
und eine Zahl ausgelassen wird.

Der nutzt auch einen OpAmp damit bei 10A nicht 2.56V Spannungsabfall zu 
26W Verlustwärme am shunt führen und verstärkt lieber um Faktor 10, auch 
invertierend. Nur möglichst einen OpAmp besser als LM358, vielleicht 
LT1013.

von Max B. (citgo)


Lesenswert?

MaWin schrieb:
> Es würde der Ablesbarkeit der Anzeige auch ausserhalb des dunklen
> Bastlerzimmers sicherlich helfen, wenn zumindest die Digit-Leitungen mit
> Transistoren zur Stromverstärkung ausgestattet werden

Mh.. stimmt. Ist mir gar nicht aufgefallen, dass hier Transistoren 
fehlen.

Also wenn man da jetzt 4 Transistoren auf die Digit Leitungen setzt dann 
muss man im Programm das Ganze noch invertieren, richtig?

@Bernhard
Könntest du das noch machen?

von MaWin (Gast)


Lesenswert?

Max B. schrieb:
> Also wenn man da jetzt 4 Transistoren auf die Digit Leitungen setzt dann
> muss man im Programm das Ganze noch invertieren, richtig?

Also wenn man nur 6 (nicht 4) Transistoren einsetzt, dann muss das 
Programm nur die Digit-Leitungen invertieren, oder man nimmt 7-Segment 
mit gemeinsamer Anode und muss nur die 8 Segmentleitungen invertieren, 
aber einen Block muss man dann invertieren.

von Max B. (citgo)


Lesenswert?

Sorry, ich meinte 6 Transistoren! Keine Ahnung wie ich auf 4 kam.
Die Segmente haben doch common Anode.

Aber stimmt... Einfacher wäre es doch jeweils 3 Transistoren zu nehmen 
für Spannung/Strom und im Programm zu invertieren.

von A. S. (Gast)


Lesenswert?

MaWin schrieb:
> Es würde der Ablesbarkeit der Anzeige …
> … [viele gute Ratschläge]
> … einen OpAmp besser als LM358, vielleicht LT1013.

Bernhard hat ein simples und gutes Projekt geteilt. Wenn Du ein besseres 
mit weniger Bauteilen hast, dann teile das doch auch. Auf echte Fehler 
hinweisen (Verbindungsfehler im Schaltplan, Typos in der 
Typbezeichnung), OK. Aber an allem rummäkeln ist jetzt kein Ansporn für 
Bernhard, noch mal was geiles zu teilen.

von MaWin (Gast)


Lesenswert?

A. S. schrieb:
> Wenn Du ein besseres mit weniger Bauteilen hast, dann teile das doch
> auch. Auf echte Fehler hinweisen

PortPins mit 232mA zu beaufschlagen ist ein echter Fehler. Auf der 
Platine wäre Platz genug für  14 Transistoren und den OpAmp, entweder 
siegte hier die Faulheit oder das nicht-Nachdenken. Bessere uC-Auswahl 
wurde auch genannt.

Also was willst du ?

Kevin, das hast du schon ganz toll gemacht, das nächste Mal wird es 
bestimmt noch besser.

von A. S. (Gast)


Lesenswert?

MaWin schrieb:
> PortPins mit 232mA zu beaufschlagen ist ein echter Fehler.

Mit welchen Daten genau hast Du dieses Ströme berechnet? Mit den 
typischen Daten des µC jedenfalls nicht.

kommschon: Für den echten MaWin bist Du zu pedantisch und zu 
theoretisch.

von MaWin (Gast)


Lesenswert?

A. S. schrieb:
> Mit welchen Daten genau hast Du dieses Ströme berechnet

Ich hatte extra auch für die Denkfaulsten den Rechenweg oben 
hingeschrieben, aber dann kommst du und bist auch noch lesefaul.

Dass der ATmega das nicht schafft, sieht man schon im Photo, die 3 
Segmente der 7 sind potzhell, die 8 der 0. dunkel und die 5 der 5 
halbhell. Aber manchem doppeläugig Blinden fällt das natürlich nicht 
auf.

von Jens M. (schuchkleisser)


Lesenswert?

MaWin schrieb:
> Dass der ATmega das nicht schafft, sieht man schon im Photo, die 3
> Segmente der 7 sind potzhell, die 8 der 0. dunkel und die 5 der 5
> halbhell. Aber manchem doppeläugig Blinden fällt das natürlich nicht
> auf.

Könnte auch am Multiplex liegen?

Bernhard S. schrieb:
> Ein kleines Beispiel in Assembler für einen ATmega8, 1MHz,
> wie 2x3 7-Segmentanzeigen eine Spannung (grün) und einen Strom
> (rot)anzeigen können.

Danke.

von MaWin (Gast)


Lesenswert?

Jens M. schrieb:
> Könnte auch am Multiplex liegen

Wenn man nicht verstanden hat, wie viel Strom zum Multiplexbetrieb 
notwendig ist, und die Schaltung unterdimensioniert, ist das die Folge 
von Multiplex, ja.

https://dse-faq.elektronik-kompendium.de/dse-faq.htm#F.8.1

von kannAllesBesser! (Gast)


Lesenswert?

Max B. schrieb:
> Sehr cool!
> Danke dafür, werde ich bestimmt mal aufbauen!

nee, werde ich bestimmt nicht, nur pfusch!
schaut euch mal die asm quellen an - ein ahnungsloser der sich mal 
freund, wenn was leuchtet/blinkt.

sw+hw einfach nur schrott!

von A. S. (achs)


Lesenswert?

MaWin schrieb:
> Ich hatte extra auch für die Denkfaulsten den Rechenweg oben
> hingeschrieben, aber dann kommst du und bist auch noch lesefaul.

Ich sehe da nur eine "starke Vereinfachung".

MaWin schrieb:
> (5V-2.1V)/100Ohm=29mA*8=232mA

Du bist also auf meinen Hinweis nicht eingegangen. Gut. Ich mache nicht 
in AVR, darum hab ich mir hier ein Datenblatt geliehen:

http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2486-8-bit-AVR-microcontroller-ATmega8_L_datasheet.pdf

Gehen wir mal von 2V für die LEDs aus, 5V Versorgung, gemeinsamer GND 
und 6 Segmente AN. Mit z.B. 11mA pro Segment wären das etwa 1,6V bzw. 
0,3V an den Outputs, 1,1 am Widerstand und 2 an der LED. Passt also.

Bei 2 Segmenten sind es keine 20mA. Also nicht mal ein Faktor 2. Und 
selbst den könnte man relativ einfach per SW eliminieren.

Das ist mal etwas, das jemand, der noch nie gelötet hat innerhalb 
weniger Stunden komplett aufbauen und mit einem Multimeter in Betrieb 
nehmen kann. Mit Bauteilen aus dem Schrott.

Ja, Transistor wären "richtig", aber dann braucht es schon wieder ein 
wenig mehr ... wie war das noch mit Kathode oder wie das hieß, und wo 
ist die bei diesem Transistor ohne erkennbare Beschriftung....

von MaWin (Gast)


Lesenswert?

A. S. schrieb:
> wie war das noch mit Kathode oder wie das hieß, und wo ist die bei
> diesem Transistor ohne erkennbare Beschriftung....

Wer so ahnungslos durch die Welt tapert, dümmer als Bohnenstroh, sollte 
die Griffel stillhalten, wenn Erwachsene was schreiben.

von Herbert G. (wauwau)


Lesenswert?

hallo,
ich bin schon öfters auf MC-Net-habe aber kaum den Login benutzt;
weil diese Schaltung mich interresiert frage ich an :
Haben Sie auf diesem Schaltplan 2x DVM-festgestellt-
dass die Segmente afgb 2x gleich bezeichnet sind..
wo sind die anderen 3/4 Segmente "cde Dp" ?
in den ASM-Dateien kann ich diese auch NICHT finden...
Bitte um Berichtigung

mfg Herby

von Bernhard S. (bernhard)


Lesenswert?

sorry


.equ BALKEN_A        =PORTB
.equ BALKEN_B        =PORTB
.equ BALKEN_C        =PORTD
.equ BALKEN_D        =PORTD
.equ BALKEN_E        =PORTD
.equ BALKEN_F        =PORTB
.equ BALKEN_G        =PORTB
.equ BALKEN_P        =PORTD

.equ PIN_BALKEN_A      =5
.equ PIN_BALKEN_B      =2
.equ PIN_BALKEN_C      =3
.equ PIN_BALKEN_D      =2
.equ PIN_BALKEN_E      =1
.equ PIN_BALKEN_F      =4
.equ PIN_BALKEN_G      =3
.equ PIN_BALKEN_P      =4

von Herbert G. (wauwau)


Lesenswert?

hallo, schön dass Sie so schnell sind;
ABER:
Balken B+D habe die gleiche Pin #2,
etwas ist da NICHT richtig...
mfg herby

von Bernhard S. (bernhard)


Lesenswert?

Herbert G. schrieb:
> Balken B+D haben die gleiche Pin #2

Korrekt, Lob!

Sie unterscheiden sich im Port.

.equ BALKEN_B        =PORTB
.equ BALKEN_D        =PORTD


Gruß Bernhard

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.