10 x 7 Segment Temperatur / Druckanzeige mit 74hc595 "Codefrage"

lastyle

Neues Mitglied
20. Feb. 2011
7
0
0
Sprachen
Hallo zusammen,

sorry das ich mit meinem ersten Posting so direkt mit der Tür ins Haus falle, aber ich habe ein Problem mit meiner umgestalteten Druck und Temperaturanzeige und hoffe das mir hier in diesem Forum jemand helfen kann.

Ich benutze einen Atmega 32 an dem 3 Temperatursensoren und ein Drucksensor angeschlossen sind. Die Gemessen werte werden derzeit über ein 4x20 LCD Display ausgegeben was auch einwandfrei funktioniert.

Jetzt möchte ich aber die Werte aus platzgründen demnächst auf 7-Segment Anzeigen darstellen. Dafür hat ein bekannter mir eine Platine designed die auch schon fertig geätzt und bestückt vorliegt, aber ich bekomme keinen vernünftigen Code zusammen mit dem ich die Segmente ansteuern kann.

Ich habe versucht den aus der FAQ bekannten Code für den Atmega8 auf den Mega32 und meine Anzeigen per SPI zu porten aber das klappt irgendwie nicht.

Wäre eventuell jemand so freundlich und könnte mir helfen einen Code in Bascom zusammenzustellen mit dem ich zumindest einmal Zahlen von 0 bis 9 auf jedem Segment als "Testlauf" darstellen kann ? Den Rest denke ich mal werde ich schon selber hinbekommen.

Ich bin für jede Hilfe dankbar.

Als anhang habe ich mal das Schematic der 7Segment Platine zu besseren Verständnis angehangen.

Gruß Mario
 

Anhänge

  • 7seg-RC11.pdf
    79,1 KB · Aufrufe: 149
Hallo Mario!

Erst einmal willkommen im Forum!
Ich würde mal vorschlagen, dass Du dein bisheriger Code postest, damit wir sehen, was Du bisher versucht hast. Kann ja sein, dass bei Deinem Code nur einen Flüchtigkeitsfehler hat und der ansonsten funktioniert.

Es gibt ja viele Tutorials und Beispielcodes im Internet über das multiplexen von 7-Segment-LEDs mit HC595. Mein Vorschlag wäre, dass Du auf einem Steckboard mal versuchst zuerst mit einem HC595 und einem 7 Segment-Led vernünftige Ausgabe zu erreichen, dann mit 2 oder 3 LED zu multiplexen. Wenn Du auch das erfolgreich hinkriegst, dann wird das für Dich kein Problem mehr sein.

Gruss
Shurikn

Edit: Hab gesehen, dass Du nicht vor hast zu Multiplexen. Also wenn Du das mit dem 7 Segment-LED mit einem HC595 hinkriegst, sollte das kein Problem mehr sein.
 
Hallo Mario !

Willkommen im AVR-PRraxis Forum! :ciao:


Hat dein Bekannter denn die Platine nach deinen Ideen erstellt und bestückt, oder wie ist das entstanden?

Ich meine.... du musst dir ja ein paar Idee dazu gemacht haben, wie du es später programmieren und betreiben möchtest. Auf Grundlage dieser Vorgaben kann dann eine Platine erstellt werden.



Edit: Hab gesehen, dass Du nicht vor hast zu Multiplexen. Also wenn Du das mit dem 7 Segment-LED mit einem HC595 hinkriegst, sollte das kein Problem mehr sein.

Hallo Shurikn!

Wenn ich den Schaltplan richtig deute, dann muss er die Anzeigen am Ende leider doch multiplexen....
Er hat dummerweise nur "einmal" Widerstände für alle Anzeigen verbaut! :rolleyes:

Damit wird das Ganze dann doch aufwändiger.
Verstehe aber auch nicht, warum die 10 Anoden der Anzeigen nicht auch mit Schieberegistern realisiert wurden. :hmmmm:
So benötigt er neben dem Shiftout oder SPI-Mode obendrein auch noch 10 Pin`s am Controller. :cool:



Würde mich nun doch mal interessieren, warum die Platine genau so erstellt wurde.

Grüße,
Cassio
 
Hallo Cassio

Beim genauer hinschauen, habe ich auch bemerkt, dass er gar nicht ans Multiplexen vorbei kommt. Aber ich sehe nicht wo er noch zusätzlich 10 Pins vom Controller aufwenden muss... :confused:

Die Anoden wurden doch mit HC595 realisiert. Er hat doch einfach noch ein Transitor dazazwischen gehängt, oder nicht?

Gruss
Shurikn
 
Die Anoden wurden doch mit HC595 realisiert.


Hallo Shurikn!

Stimmt natürlich!
Da habe ich auf die Schnelle mal nicht richtig hingesehen... :banghead: :rolleyes:

Schei... PDF-Zeichnungen immer. :mad:


OK, dann kann er ja doch alle Daten rausschieben....
Segmente (a-g + DP) und Anzeigen (1-10)

Allerdings muss er es komplett multiplexen.... und das bei 10 Stellen.
Da würde ich von seiner Seite aus auch gleich auf SPI setzen.


Grüße,
Cassio
 
OK, dann kann er ja doch alle Daten rausschieben....
Segmente (a-g + DP) und Anzeigen (1-10)

Allerdings muss er es komplett multiplexen.... und das bei 10 Stellen.
Da würde ich von seiner Seite aus auch gleich auf SPI setzen.


Wo Du recht hast, hast Du recht... :D

Freundliche Grüsse
Shurikn
 
Hallo zusammen,

ich hab mir heute morgen schonmal die PDF angesehen ;) Aber ihr seid ja auch
ganz gut ohne mich zurecht gekommen :p :rolleyes:

Also ohne Multiplex gehts nicht. Bei der Anzahl an Displays sollte man auch
auf jeden Fall die Hardware des SPI-Ports zuhilfe nehmen. Das einzige was
etwas nervt ist die kunterbunte Verteilung der Displays auf den Schieberegistern.

SPI-Port ---> Register1 ---> Register2 ---> Register3
---> letztes Bit ---> ----> ----> ----> erstes Bit
---> #2106#75 ---> ####4398 ----> pecdagbf

Die Ziffern sind die Displays und die Buchstaben die Segmente.
Bei 220 Ohm sind das dann 15mA durch die Segmente ... ok ... geht.
Die Transistoren sind aber ... Suboptimal angeordnet. Das ist Grütze.
Von der Funktion abgesehen macht man das nicht so. Da sollte man
PNPs nehmen mit Basisvorwiderstand. Ob das so mit den NPNs geht
weiß ich nicht. Ich würde nicht die Hand dafür ins Feuer legen.
Für so eine Schaltungsvariante sind die NPNs nicht ausgelegt.
Also durch PNP ersetzen und dann mit nem WWiderstand in der
Basisleitung arbeiten. Aber ich laß mich mal überraschen ob es läuft
oder raucht ;)

Ich erklär mal warum ich das so sehe ...

Der Ausgangspin eines Atmel bei 5V Betriebsspannung schaltet von etwa
0,5V (Low / 0) bis 4,2V (High / 1). Der NPN in der Schaltung soll ja jetzt
(wie sich der Entwickler gedacht hat ) bei High am Ausgangspin anschalten.
Es entsteht folgendes Szenario ... Der Atmel schaltet auf 4,2V. Der NPN
benötigt etwa 0,6V Basis-Emitter-Spannung zum durchschalten. Er arbeitet
jetzt also wie ein Spannungsregler und hält seinen Emitteranschluß auf
etwa ... 4.2V - 0,6V = 3,6V . Damit liegt also an der gemeinsamen Anode
des Displays 3,6V an. Wenn man jetzt die Spanung einer roten LED mit etwa
1,7V rechnet (beispielsweise) dann ergibt sich über den Vorwiderstand eine
Spannung von ... 3,6V - 1,7V = 1,9V ... mit 220 Ohm fließt dann also ein
Strom von ... 1,9V / 220 Ohm = 8,6mA . Am NPN-Transistor fallen zwischen
Kollektor (Vcc/+5V) und Emitter also ... 5V - 3,6V = 1,4V ab . Das macht
mit dem Strom zusammen ... 1,4V x 8,6mA = 12mW ... ist jetzt nicht so
sonderlich viel. Aber normalerweise fallen da zwischen Kollektor und Emitter
eines Schalttransistors nur 0,25-0,35V ab. Das ist schon ein ziemlicher
Unterschied. Spätestens wenn es in höhere Ströme geht fliegt einem eine
solche Konstruktion um die Ohren. Rechenweg und Logik verstanden ?
Sonst mach ich nochmal nen Plan um es verständlicher zu machen.

Das Multiplexen über die Schieberegister sollte aber auch kein größeres
Problem sein. Segmentmuster reinschieben, das entsprechende Display
anschalten und fertig.

Gruß
Dino
 
Registriert seit: 20.02.2011 Beiträge: 1 Standard 10 x 7 Segment Temperatur / Druck

Hallo!

Nur mal so ganz vorsichtig formuliert:
Ich glaube auch nicht, dass das mit den NPN-Transistoren so funktionieren kann. Die Transistoren werden hier in einem Betriebszustand betrieben, für die diese nicht konzipiert sind. "Ältere" Forumnutzer denke ich, wissen was ich meine - Stichwörter wie "Transistor als Schalter", "Ptot-Bereich schnell durchschalten", usw. ...

So, jetzt nach dem ich mal schnell nach den lieben Kleinen schauen musste...
Habe mir den Schaltplan eben erneut noch mal kurz angesehen, entweder ich bin blind, oder ich verstehe (mal wieder) was nicht:
Wo sind im Schaltplan die Basisvorwiderstände der Transistoren?


MfG

FreeVEE
 
Hi,

So, jetzt nach dem ich mal schnell nach den lieben Kleinen schauen musste...
Habe mir den Schaltplan eben erneut noch mal kurz angesehen, entweder ich bin blind, oder ich verstehe (mal wieder) was nicht:
Wo sind im Schaltplan die Basisvorwiderstände der Transistoren?
Das hab ich da auch schon gesehen aber noch nicht angesprochen. Alleine
aus dem Grund wird es schon ziemlich "rauchen" :D :rolleyes:
Ne "Diode" (B-E-Strecke) mit 5V betreiben ist ohne Vorwiderstand nicht
wirklich gut (um es vorsichtig auszudrücken). Ergebnis ist dann ... Atmel hin
und Transistor hin. Oder nur ein Teil. Je nachdem was als erstes aufgibt :eek:
Bin ich vor lauter "Erklärungswut" glaube ich drüber weggekommen :D
Wenn man so am schreiben ist vergißt man schonmal das eine oder andere
(ich heiße aber nicht Gu....rg) :p

Gruß
Dino
 
Hallo zusammen!

Dass noch ein Widerstand am Base kommt stimme ich euch zu. Aber was ich nicht verstehe ist, weshalb er hier kein NPN verwenden kann. Ich hätte hier ebenfalls ein NPN verwendet, nur hätte ich das 7-Seg-LED nicht nach dem Emitter sondern zwischen +5V und dem Collector gesteckt. Oder hab ich hier was falsch verstanden??? :stupido2:

Freundliche Grüsse
Shurikn
 
nur hätte ich das 7-Seg-LED nicht nach dem Emitter sondern zwischen +5V und dem Collector gesteckt. Oder hab ich hier was falsch verstanden??? :stupido2:


Hallo Shurikn!

Nun ja, dann müssten die 7-Seg`s eine gemeinsame Kathode haben, dann könntest du bzw. müsstest du einen NPN nehmen.

Schließlich muss deine Ube (Basis-Emitter-Spannung) = 0,6V betragen, damit der Transistor durchschaltet.

Code:
         ____             // 
+5V--|____|----LED>|-----C\_/E------GND
                              ____   B|
AVR-Pin-------------|____|----


Grüße,
Cassio
 
.-.

Sorry das ich mich erst jetzt wieder melde, aber ich hatte zu viel stress auf der Arbeit und konnte mich nicht ums Projekjt kümmern.

Ihr habt vollkommen richtig festgestellt das die Transistoren auf der Platine falsch sind, es hätten NPN sein sollen anstatt PNP. Das haben wir dann auch herausgefunden.

Die Anzeige funktioniert unter C mit AVRSTUDIO und SPI ansteuerung auch.
(Testroutine die alle segmente hochzählt)


Mit Bascom bekomm ich es einfach aber nicht hin. Mein aktueller Testcode ist :


$programmer = 12 'MCS USB (Zeile weglassen wenn anderer Programmer)

Declare Function Tastenabfrage() As Byte

$regfile = "m32def.dat"

$crystal = 16000000 'Quarzfrequenz
$baud = 9600

$hwstack = 64
$swstack = 20
$framesize = 80

' SERiell nach PArallel (serpa) mit Hardware-Unterstuetzung
' Beispiel mit 2 Datenbytes
' SPI Bus (Hardware) als Master konfiguiren
Config Spi = Hard , Master = Yes

' SPI Bus initialisieren
' setzt das DDR Register entsprechend
Spiinit

' Bytes für die Daten
Dim Serpa(2) As Byte
Serpa(1) = &B00110001 ' 1
Serpa(2) = &B00110010 '2


' Die Bytes auf den SPI Bus schieben

Do
Spiout Serpa(1) , 2

Wait 1
Loop



----

Eigentlich gehe ich jetzt davon aus das ich eine 1 auf dem 2ten Segment anzeige, aber es stehen wirre zeichen auf segment 3,4,5 und 7, Klappt aber nicht

Die defines in C für den Mega sind
#define SPI_PORT PORTB
#define SPI_DDR DDRB
#define SPI_SS PB4
#define SPI_SCK PB7
#define SPI_MOSI PB5
#define SPI_MISO PB6
#define SPI_OC0 PB3




Offensichtlich verstehe ich den Code nicht richtig,oder ich versuche Hardware SPI anzusteuern und bräuchte eigentlich Software SPI, das ich aber nicht korrekt konfiguriert bekommme, kann mir da bitte mal jemand auf die Sprünge helfen ?
 
Hallo!

Puh... da muss man sich ja nach so langer Zeit erst mal wieder neu rein denken....


Also eines vorweg....
Mit den NPN und PNP bist du scheinbar schon wieder durcheinander gekommen. :rolleyes:


Ich habe dann eben noch mal einen Blick auf deinen Schaltplan geworfen.....
Ob du Hardware-SPI oder Software-SPI verwenden musst/kannst, geht aus dem Plan nicht hervor, weil die Anschlüsse nicht am Controller enden. :rolleyes:

Ich überlege nun gerade....
Du verwendest doch die 74HC595 Schieberegister. Diese benötigen doch ein Latch, um die Daten zu übernehmen.
Wie realisierst du das denn?

Ich sehe zwar, dass du die Daten via "SPIOUT" heraus schiebst, aber es gibt kein Latchsignal. :hmmmm:
Der SPI-Modus bietet doch /SS (SlaveSelect) dafür, bzw. kannst du auch jeden anderen PIN für ein Latch benutzen.


Da ich die 74HC595 noch nicht mit SPI befeuert habe, kann ich dir leider auch keine weiteren Tipps durch eigene Erfahrungen geben.

Versuch es doch mal mit "SHIFTOUT"......
Vielleicht reicht die Übertragungsrate ja und du musst nicht unbedingt SPI verweden.


Ach so...
An den Pin`s MOSI, MISO und SCK hängt aber in Betrieb nicht auch noch der Programmer?


Grüße,
Cassio
 

Ü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)