peter51d
Geocacher
Ich habe da mal eine Frage an unsere Atmel Experten.
Gibt es auf dem Mega8 Port Kombinationen, die besonders "gut" zusammen arbeiten?
Hintergrund ist folgendes "Problem":
Ich möchte zwei 7 Seg Anzeigen mit einem Mega 8 ansteuern. Dazu multiplexe ich so wohl die Anoden und die gemeinsame Kathode der Anzeigen.
Die Anoden beider Anzeigen sind am PortB angeschlossen. Die Kathode der einen Anzeige hängt an PortD.6
die andere an PortD.7
Es gibt pro Anzeige einen Wiederstand der an der Kathode angeschlossen ist.
Programmablauf :
Kathode Anzeige eins auf GND schalte, nach einander die einzelnen Ports von B in der entsprechenden Reihenfolge auf eins und wieder auf null setzen.
Dann Kathode Anzeige eins auf eins und Kathode Anzeige zwei auf GND. Dann wieder die Anoden einzelnd ansteuern.
Und wieder von vorne.
Im Prinzip klappt das so weit.
Nur irgendwie habe ich bei der Anzeige, deren Kathode über PortD.6 geschaltet wird immer ein Segment, das deutlich heller Leuchtet.
Die Anzeigen kann ich ausschliessen.
Beim Tauschen der Anzeigen wander der Fehler nicht mit.
Der Mega selber dürfte es auch nicht sein.
Es sei denn, drei verschieden haben den gleichen Fehler.
Der Fehler wandert aber mit, wenn ich die Ports D.6 und D.7 Tausche.
Es scheind eine bestimmte Port Kombination zu sein.
Es betrifft bei Zahlen die eine oberen Querbalken haben die Kombination. D.6/B.1 und bei Zahlen ohne oberen Querbalken die Kombination D.6/B.2 .
Anbei noch der Code.
Bitte nicht lästern, ist das erste mal das ich mich mit Multiplexing beschäftige.
Ach so, die Anzeigen sind: Kingbright SC39-11SRWA, Kathodenwiederstand habe ich z.Z.470Ohm drin und das ganze wird von einem Labornetzteil mit 4V gespeist.
Würde mich freuen, wenn hier jemand eine Erklärung dafür hätte.
Gibt es auf dem Mega8 Port Kombinationen, die besonders "gut" zusammen arbeiten?
Hintergrund ist folgendes "Problem":
Ich möchte zwei 7 Seg Anzeigen mit einem Mega 8 ansteuern. Dazu multiplexe ich so wohl die Anoden und die gemeinsame Kathode der Anzeigen.
Die Anoden beider Anzeigen sind am PortB angeschlossen. Die Kathode der einen Anzeige hängt an PortD.6
die andere an PortD.7
Es gibt pro Anzeige einen Wiederstand der an der Kathode angeschlossen ist.
Programmablauf :
Kathode Anzeige eins auf GND schalte, nach einander die einzelnen Ports von B in der entsprechenden Reihenfolge auf eins und wieder auf null setzen.
Dann Kathode Anzeige eins auf eins und Kathode Anzeige zwei auf GND. Dann wieder die Anoden einzelnd ansteuern.
Und wieder von vorne.
Im Prinzip klappt das so weit.
Nur irgendwie habe ich bei der Anzeige, deren Kathode über PortD.6 geschaltet wird immer ein Segment, das deutlich heller Leuchtet.
Die Anzeigen kann ich ausschliessen.
Beim Tauschen der Anzeigen wander der Fehler nicht mit.
Der Mega selber dürfte es auch nicht sein.
Es sei denn, drei verschieden haben den gleichen Fehler.
Der Fehler wandert aber mit, wenn ich die Ports D.6 und D.7 Tausche.
Es scheind eine bestimmte Port Kombination zu sein.
Es betrifft bei Zahlen die eine oberen Querbalken haben die Kombination. D.6/B.1 und bei Zahlen ohne oberen Querbalken die Kombination D.6/B.2 .
Anbei noch der Code.
Bitte nicht lästern, ist das erste mal das ich mich mit Multiplexing beschäftige.
Code:
'--------------------------------------------------------------
' mega8.bas
' 7 Segment mit gemeinsamer Kathode Multiplex test
'--------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 1000000
'the internal oscillator of 1 Mhz was choosen in the fusebits
Config Portb = Output 'Anoden 7 Segmentanzeige
Config Portd = Output 'Kathode 7 Segmentanzeige
Dim A As Word
Do
For A = 1 To 20000 'dauer der Anzeige
Portb = &B00000000 'anzeige dunkel steuern
Portd = &B11111111
Portd = &B01111111 '7 Segmentmodul auswählen
Gosub Eins 'Sprunganweisung für Anodenansteuerung
Portb = &B00000000
Portd = &B11111111
Portd = &B10111111
Gosub Null
Next A
Portb = &B00000000
Waitms 500
For A = 1 To 20000 'zweite Zahl
Portb = &B00000000
Portd = &B11111111
Portd = &B01111111
Gosub Drei
Portb = &B00000000
Portd = &B11111111
Portd = &B10111111
Gosub Zwei
Next A
Portb = &B00000000
Waitms 500
For A = 1 To 20000
Portb = &B00000000 'dritte Zahl
Portd = &B11111111
Portd = &B01111111
Gosub Fuenf
Portb = &B00000000
Portd = &B11111111
Portd = &B10111111
Gosub Vier
Next A
Portb = &B00000000
Waitms 500
For A = 1 To 20000
Portb = &B00000000 'vierte Zahl
Portd = &B11111111
Portd = &B01111111
Gosub Sieben
Portb = &B00000000
Portd = &B11111111
Portd = &B10111111
Gosub Sechs
Next A
Portb = &B00000000
Waitms 500
For A = 1 To 20000 'fünfte Zahl
Portb = &B00000000
Portd = &B11111111
Portd = &B01111111
Gosub Neun
Portb = &B00000000
Portd = &B11111111
Portd = &B10111111
Gosub Acht
Next A
Portb = &B00000000
Waitms 500
'Portb = &B00000000 'sechste Zahl
'Portd = &B11111111
'Portd = &B01111111
'Gosub Drei
'Portb = &B00000000
'Portd = &B11111111
'Portd = &B10111111
'Gosub Vier
'Next A
'Portb = &B00000000
'Waitms 500
'For A = 1 To 20000 'siebte Zahl
'Portb = &B00000000
'Portd = &B11111111
'Portd = &B01111111
'Gosub Sechs
'Portb = &B00000000
'Portd = &B11111111
'Portd = &B10111111
'Gosub Sieben
'Next A
'Portb = &B00000000
'Waitms 500
'For A = 1 To 20000 'achte zahl
'Portb = &B00000000
'Portd = &B11111111
'Portd = &B01111111
'Gosub Eins
'Portb = &B00000000
'Portd = &B11111111
'Portd = &B10111111
'Gosub Fuenf
'Next A
'Portb = &B00000000
'Waitms 500
Loop
End
Null:
Portb = &B01000000
Portb = &B00100000
Portb = &B00010000
Portb = &B00001000
Portb = &B00000100
Portb = &B00000010
Return
Eins:
Portb = &B00001000
Portb = &B00000100
Return
Zwei:
Portb = &B10000000
Portb = &B00100000
Portb = &B00010000
Portb = &B00000100
Portb = &B00000010
Return
Drei:
Portb = &B10000000
Portb = &B00010000
Portb = &B00001000
Portb = &B00000100
Portb = &B00000010
Return
Vier:
Portb = &B10000000
Portb = &B01000000
Portb = &B00001000
Portb = &B00000100
Return
Fuenf:
Portb = &B10000000
Portb = &B01000000
Portb = &B00010000
Portb = &B00001000
Portb = &B00000010
Return
Sechs:
Portb = &B10000000
Portb = &B01000000
Portb = &B00100000
Portb = &B00010000
Portb = &B00001000
Portb = &B00000010
Return
Sieben:
Portb = &B00001000
Portb = &B00000100
Portb = &B00000010
Return
Acht:
Portb = &B00001000
Portb = &B01000000
Portb = &B00100000
Portb = &B00010000
Portb = &B10000000
Portb = &B00000100
Portb = &B00000010
Return
Neun:
Portb = &B10000000
Portb = &B01000000
Portb = &B00010000
Portb = &B00001000
Portb = &B00000100
Portb = &B00000010
Return
Ach so, die Anzeigen sind: Kingbright SC39-11SRWA, Kathodenwiederstand habe ich z.Z.470Ohm drin und das ganze wird von einem Labornetzteil mit 4V gespeist.
Würde mich freuen, wenn hier jemand eine Erklärung dafür hätte.