PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Brauche dringend Hilfe!! Multiplexer



teslanikola
02.03.2005, 17:03
Hallo,
ich hab ein dickes problem:
Ich möchte eine Multiplex-7-Segmentanzeige bauen, aber peile das mit dem Programieren ned so ganz. Hab zwar schon was ausprobiert geht aber ned. Hat jemand einen Quellcode für ne Anzeige? Oder ein Codeschnippsel?
Danke Für eure Hilfe

x-ryder
02.03.2005, 17:39
kannste nochmal genau erklären wie viele anzeigen du bauen willst und wie viele freie ports und so weiter?

teslanikola
02.03.2005, 18:43
Hier ist ein Schaltplan, ich hoffe du kanst alles erkennen

x-ryder
02.03.2005, 19:02
nicht wirklich haste das nochmal größer?

darwin.nuernberg
02.03.2005, 19:03
Du solltest zuerst die Segmente der ersten Anzeige setzten, wie gewünscht,
dann gebe eine Pulseout (Bascom) auf dieses Segnemt un die Anzeige kurz zu aktivieren.

Dann die Segmente für die zweite Anzeige,
Pulseout für 2. Anzeige
usw.


Ich schreibe mal ein kurzes Programm, melde mich dann wieder.

darwin.nuernberg
02.03.2005, 19:03
Du solltest zuerst die Segmente der ersten Anzeige setzten, wie gewünscht,
dann gebe eine Pulseout (Bascom) auf dieses Segnemt un die Anzeige kurz zu aktivieren.

Dann die Segmente für die zweite Anzeige,
Pulseout für 2. Anzeige
usw.


Ich schreibe mal ein kurzes Programm, melde mich dann wieder.

darwin.nuernberg
02.03.2005, 19:22
So hier mal der Code Quick und Dirty. (BASCOM)

Soll nur als Demo gelten,
Verbesserungen sind unabdingbar, soll nur die Funktion des multiplexens verdeutlichen.

Natürlich wäre es viel eleganter wenn zunächst eine Segment decodierung erfolgen würden, welcher man einen Zahlenwert in den erforderlichen Binärcode fertig umsetzt.

Dies wäre ein Paradebeispiel für eine Funktion (man übergibt was und bekommt dafür was abderes zurück.





' Multiplex Anzeige
'
' 4 Stellige 7-Segment Multiplexanzeige ansteuern
' Simple Version
'
' Segmente werden übder die Aliase gesetzt (bitte anpassen)
' Pulsdauer über die Konstante Pulsdauer veränderbar


Segment_a Alias Portb.0
Segment_b Alias Portb.1
Segment_c Alias Portb.2
Segment_d Alias Portb.3
Segment_e Alias Portb.4
Segment_f Alias Portb.5
Segment_g Alias Portb.6
Segment_dp Alias Portb.7

Const Pulsdauer = 100000

Dim X As Byte



Do
'Darstellung 0
Set Segment_a
Set Segment_b
Set Segment_c
Set Segment_d
Set Segment_e
Set Segment_f
Reset Segment_g

Pulseout Portb , 0 , Pulsdauer

'Darstellung 1
Reset Segment_a
Set Segment_b
Set Segment_c
Reset Segment_d
Reset Segment_e
Reset Segment_f
Reset Segment_g

Pulseout Portb , 0 , Pulsdauer


'Darstellung 2
Set Segment_a
Set Segment_b
Reset Segment_c
Set Segment_d
Set Segment_e
Reset Segment_f
Set Segment_g

Pulseout Portb , 0 , Pulsdauer



'Darstellung 3
Set Segment_a
Set Segment_b
Set Segment_c
Set Segment_d
Reset Segment_e
Reset Segment_f
Set Segment_g

Pulseout Portb , 0 , Pulsdauer

Loop
End



Du hast nur ein Problem nicht bedacht.
Verwende nicht die RXD und TXD Leitungen für die Dekaden,
oder wie willst du was darstellen?
Irgendwie müssen doch noch Werte übergeben werden (RS232).

Oder soll das ein Zähler werden?

teslanikola
02.03.2005, 19:30
hallo,
die funktion eine Multiplexers hab ich schon verstanden, das Proble:
Ich lese einen wert des Timers1 aus und möchte den dann anzeigen,
ich brauch warscheinlich noch mehr anzeigen.Aber das Software problem kann ich ned lösen.
wenn ihr einen code schickt braucht ihr für die Pinns nu Portx.y angeben, den die Pins zuweisen das bekomme ich auch noch hin.

teslanikola
02.03.2005, 19:31
wenn man auf dem Bild nix erkenne kan dan speichert es auf der Festplatte , öffnet es und Zoomt.

darwin.nuernberg
02.03.2005, 19:32
hallo,
die funktion eine Multiplexers hab ich schon verstanden, das Proble:
Ich lese einen wert des Timers1 aus und möchte den dann anzeigen,
ich brauch warscheinlich noch mehr anzeigen.Aber das Software problem kann ich ned lösen.
wenn ihr einen code schickt braucht ihr für die Pinns nu Portx.y angeben, den die Pins zuweisen das bekomme ich auch noch hin.

Wo liegt Dein Problem?

Sag doch genauer was für Hilfe du benötigst!

teslanikola
02.03.2005, 19:49
Also nochmal von Vorn:
Mein Projekt
Mit einem puls an einem pin soll der timer1 starten.
mit einem weiteren soll der timer stoppen.
Ich lese den timer aus und erhalte dadurch eine Zahl ( 6 stellen ).
diese zahl möchte ich mit einer Multiplex-7 Segmentanzeige anzeigen.
Noch fragen?
Gut.
also das Problem:
Das mit dem timer klappt einwandfrei aber wie zeige ich die Variable mit
einer Multiplex an, davon hab ich keine Peilung, helft mir bitte.
Danke

darwin.nuernberg
02.03.2005, 19:51
Ich schau mal was isch machen kann.
Habe etwas Geduld.

darwin.nuernberg
02.03.2005, 22:03
Ich hoffe das Dir das so passt.
Ein bisschen darfst Du auch noch machen




' BASCOM
' 7-Segment Multiplexer
' by darwin.nuernberg (roboternetz.de)
' Nicht vergessen entweder die Compiler Direktiven oder den Chip und Oszillatorfequenz einstellen.

Const Dekaden = 4 ' Anzahl der Anzeigen (dekaden)
Const Pulsdauer = 10000 ' Dauer eines Impulses


Declare Function Segmentdecoder(byval C As String) As Byte
Declare Sub Selector(byval Wert As Integer)


Dim Segment(dekaden) As Byte ' Array für die Fertig berecheten Segmente
Dim Demo As Byte

' Hauptprogramm
' -----------------------------------------------------------------------------

Call Selector(1234) ' Berechnet die Segmente der einzelnen Dekaden
' und legt diese im Array Segment() ab.


' Die folgenden Zeilen Zeigen Dir was rauskommt und können gelöscht werden.

For Demo = 1 To Dekaden
Print Bin(segment(demo))
Next Demo


' Ein bisschen darfst Du auch naoch was tun...
' Jetzt muß noch die Ausgabe erfolgen.
' Frage das Array ab, weise dem Port den Wert Zu
' z.B. Portb = segment(1)
' pulseout portd, 1 pulsdauer
' Portb = segment(2)
' pulseout portd, 2 pulsdauer
' usw.



End 'end program

' -----------------------------------------------------------------------------
' -----------------------------------------------------------------------------




Sub Selector(byval Wert As Integer)
Dim S As String * Dekaden ' Stringvariable Länge = Anzeige
Dim L As Byte ' Variable für Länge des Strings
Dim X As Byte ' Zählervariable
Dim Pos As Byte ' Variable für MID Funktion
Dim Z As String * 1
Dim Segcode As Byte



S = Str(wert) ' Wandle Wert in String
L = Len(s) ' ermittle Länge des Strings
If L > Dekaden Then L = Dekaden ' Verhindern dass mehr Anzeigen berechent werden
' als definiert und vorhanden sind.


For X = 1 To L
Pos = L - X
Pos = Pos + 1 ' Beginne mit den Einer Stellen (rechts)
Z = Mid(s , Pos , 1) ' Picke eine einzelnes Zeichen heraus

Segcode = Segmentdecoder(z) ' Ermittle den Portcode für die Segmente
Segment(x) = Segmentdecoder(z)
Next X

End Sub

' -----------------------------------------------------------------------------

Function Segmentdecoder(byval C As String) As Byte
Select Case C
Case "0" : Segmentdecoder = &B00111111 ' Bit 0 = Segment A
Case "1" : Segmentdecoder = &B00000110 ' Bit 1 = Segment B
Case "2" : Segmentdecoder = &B01011011 ' Bit 2 = Segment C
Case "3" : Segmentdecoder = &B01001111 ' Bit 3 = Segment D
Case "4" : Segmentdecoder = &B01100110 ' Bit 4 = Segment E
Case "5" : Segmentdecoder = &B01101101 ' Bit 5 = Segment F
Case "6" : Segmentdecoder = &B01111101 ' Bit 6 = Segment G
Case "7" : Segmentdecoder = &B00000111 ' Bit 7 = Segment dp
Case "8" : Segmentdecoder = &B01111111
Case "9" : Segmentdecoder = &B01101111
Case "." : Segmentdecoder = &B10000000
Case Else : Segmentdecoder = &B000000000 ' unerwartes Zeichen keine Ausgabe
End Select

'Bit Segmente

' || G | F | E | D | C | B | A |
' --||---+---+---+---+---+---+---|
' 0 || 0 | 1 | 1 | 1 | 1 | 1 | 1 |
' 1 || 0 | 0 | 0 | 0 | 1 | 1 | 0 |
' 2 || 1 | 0 | 1 | 1 | 0 | 1 | 1 |
' 3 || 1 | 0 | 0 | 1 | 1 | 1 | 1 |
' 4 || 1 | 1 | 0 | 0 | 1 | 1 | 0 |
' 5 || 1 | 1 | 0 | 1 | 1 | 0 | 1 |
' 6 || 1 | 1 | 1 | 1 | 1 | 0 | 1 |
' 7 || 0 | 0 | 0 | 0 | 1 | 1 | 1 |
' 8 || 0 | 1 | 1 | 1 | 1 | 1 | 1 |
' 9 || 1 | 1 | 0 | 1 | 1 | 1 | 1 |
End Function
' -----------------------------------------------------------------------------


End

teslanikola
03.03.2005, 13:18
Das war das Was mir gefehlt hatte:


S = Str(wert) ' Wandle Wert in String
L = Len(s) ' ermittle Länge des Strings
If L > Dekaden Then L = Dekaden ' Verhindern dass mehr Anzeigen berechent werden
' als definiert und vorhanden sind.


For X = 1 To L
Pos = L - X
Pos = Pos + 1 ' Beginne mit den Einer Stellen (rechts)
Z = Mid(s , Pos , 1)
Vielen Dank [-o<
Grüßle

darwin.nuernberg
03.03.2005, 18:38
Schön, dass ich Dir helfen konnte,

ABER


Mit Deiner Fragestellung hättest Du noch lange auf die richtige Antwort warten dürfen.

Das meine Lösung gerade getroffen hat dürfte wohl eher ein Glückstreffer sein.


Überleg mal anhand dieses Beispiels:

Kommt ein Mann zum Arzt.

Mann: "Mir tut was weh."
Arzt: "Was tut ihnen denn weh?"
Mann: "Sind Sie der Arzt oder ich?!"

ELO_noob
04.11.2005, 22:01
hi an alle,
ich hab da 'n problem, und zwar soll ich so'n elo-projekt fertig stellen, und hab NULL ahnung von elektronik!!! bitte kann mir jmd helfen...

ELO-noob
04.11.2005, 22:13
und darum geht es...

durch eine 2 oder 3stellige 7segm.Anzeige auf einer platine wird die vergangene Zeit angezeigt, welche seit dem start eines
programms (z.B: C++) vergangen ist. Das Startsignal erfolgt über die Druckerschnittstelle.
also eine arbeitszeiterfassung.

BITTE um hilfe, wie sieht der Schaltplan aus und welche bauteile brauche ich alle dafür ?? muss nämlich bald bestellen und löten...

thx thx thx

teslanikola
04.11.2005, 22:40
hmm die sache ist wojhl etwas schwieriger als Eltrik-Noop.
Also das ist der schaltplan meines Frequenz zählers, den müsste man etwas abändern:

http://teslanikola.te.funpic.de/BilderVideos/frequenzcount.png

Du musst nur deinen Druckerport mit PinD.5 Verbinden und das ganze was am PinD.5 sonst hängt weglassen.

Tut mir leid aber fürs Programmen von µC habe ich leider keine Zeit sonst hätte ich dir gerne geholfen.

05.11.2005, 16:55
danke für den schaltplan teslanikola,

hmm, dieser plan ist ja mit nem microcontroller realisiert worden..
so wirklich weiter bringt mir das nicht, sry.
der schaltplan sollte zähler,timer und optokoppler(3x) beinhalten, hatte ich vergessen zu sagen, mein fehler.
ich hab mal ne skizze in paint angefertigt, wie ich mir das vorgestellt hatte...würd sie dir (teslanikola) schicken wenn ich email hätte..

meine mail: Christopher.85@hotmail.de

wäre echt nett wenn du oder irgendjmd. mir so einen schaltplan schicken würde (kann auch ne skizze sein, hauptsache man erkennt die einzellnen leitungen+bauteile)
und/oder mir bitte sagen könnte welche hardware-teile ich alles bestellen muss (ich denke mal zumindest: 3x optokoppler,1x centronic,
3x 7segmentanzeige,21+3x widerstäne,3xkondensatoren...........???...

06.11.2005, 13:15
rufe hiermit noch mal um dringende hilfe auf!!!!

PLEASE HELP ELO_NOOB (or GAST)

lehrer will am FR schon erste ansätze sehen....

teslanikola
06.11.2005, 14:17
Hmm, also normalerweise kostet die entwicklung einer schaltung ja ne menge geld, aber ich will ja mal nicht so sein. Habe grade etwas luft, also schau ich mal was ich machen kann.

ach wofür 3 Optokoppler???? reicht für das sig vom PC nicht einer??

ELO_NOOB
06.11.2005, 18:36
klasse, ich setz alle hoffnung in dich ^^
3 optokoppler weil man ja 3 siebensegmentanzeigen und daher 3 leitungen hat, so dachte ich...