• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

16 Segmentanzeige mit Atmega8

Birabeach

Geocacher
Hab mir mal krankheitsbedingt die Mühe gemacht eine 16 Segmentanzeige an einen ATmega8 zu klemmen.
Ziel war es eine Ausgabe ohne LCD zu haben die auch ordendlichen Text ausgeben kann.
Werde das ganze in einer Stage nützen,deshalb der Taster, für einen NC kann die übliche LDR Abfrage mit eingeklöppelt werden

Portbelegung folgt noch

Hier das Prog:


$hwstack = 20
$regfile = "m8def.DAT"
$crystal = 128000




Config Adc = Single , Prescaler = Auto
Config Portb = &B00000111
Config Portc = &B00111111
Config Portd = &B11111111
Portb = 0
Portc = 0
Portd = 0


Stop Ac

Wdtcr = &B11010011
Enable Interrupts



Dim A As Byte
Dim Z As Byte
Dim Zeichen As String * 1


Do

Taster1 Alias Pinb.6
Config Taster1 = Input
Portb.6 = 1





Debounce Taster1 , 0 , Morsen

Loop





Morsen:
Restore Daten

Do
Read Zeichen

If Zeichen = "0" Then Gosub P0
If Zeichen = "1" Then Gosub P1
If Zeichen = "2" Then Gosub P2
If Zeichen = "3" Then Gosub P3
If Zeichen = "4" Then Gosub P4
If Zeichen = "5" Then Gosub P5
If Zeichen = "6" Then Gosub P6
If Zeichen = "7" Then Gosub P7
If Zeichen = "8" Then Gosub P8
If Zeichen = "9" Then Gosub P9
If Zeichen = "A" Then Gosub Pa
If Zeichen = "B" Then Gosub Pb
If Zeichen = "C" Then Gosub Pc
If Zeichen = "D" Then Gosub Pd
If Zeichen = "E" Then Gosub Pee
If Zeichen = "F" Then Gosub Pf
If Zeichen = "G" Then Gosub Pg
If Zeichen = "H" Then Gosub Ph
If Zeichen = "I" Then Gosub Pi
If Zeichen = "J" Then Gosub Pj
If Zeichen = "K" Then Gosub Pk
If Zeichen = "L" Then Gosub Pl
If Zeichen = "M" Then Gosub Pm
If Zeichen = "N" Then Gosub Pn
If Zeichen = "O" Then Gosub Po
If Zeichen = "P" Then Gosub Pp
If Zeichen = "Q" Then Gosub Pq
If Zeichen = "R" Then Gosub Pr
If Zeichen = "S" Then Gosub Ps
If Zeichen = "T" Then Gosub Pt
If Zeichen = "U" Then Gosub Pu
If Zeichen = "V" Then Gosub Pv
If Zeichen = "W" Then Gosub Pw
If Zeichen = "X" Then Gosub Px
If Zeichen = "Y" Then Gosub Py
If Zeichen = "Z" Then Gosub Pz
If Zeichen = " " Then Gosub Pleer
If Zeichen = "+" Then Gosub Pplus
If Zeichen = "-" Then Gosub Pminus
If Zeichen = "*" Then Gosub Pstern
If Zeichen = "." Then Gosub Ppunkt

If Zeichen = "?" Then Return

Loop






End

P0:

Portb = &B00000000
Portc = &B00000000
Portd = &B11111111

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

P1:

Portb = &B00000010
Portc = &B00000000
Portd = &B00110000

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

P2:

Portb = &B00000000
Portc = &B00110000
Portd = &B11101110

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return


P3:

Portb = &B00000000
Portc = &B00110000
Portd = &B11111100

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

P4:

Portb = &B00000000
Portc = &B00110000
Portd = &B00110001

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

P5:

Portb = &B00000000
Portc = &B00110000
Portd = &B11011101

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

P6:

Portb = &B00000000
Portc = &B00110000
Portd = &B00011111

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

P7:

Portb = &B00000000
Portc = &B00000000
Portd = &B11110000

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

P8:

Portb = &B00000000
Portc = &B00110000
Portd = &B11111111

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

P9:

Portb = &B00000000
Portc = &B00110000
Portd = &B11111101

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pa:

Portb = &B00000000

Portc = &B00110000
Portd = &B11110011

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pb:

Portb = &B00000000

Portc = &B00011100
Portd = &B11111100

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pc:

Portb = &B00000000

Portc = &B00000000
Portd = &B11001111

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pd:

Portb = &B00000000

Portc = &B00001100
Portd = &B11111100

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pee:

Portb = &B00000000

Portc = &B00100000
Portd = &B11001111

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pf:

Portb = &B00000000

Portc = &B00100000
Portd = &B11000011

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pg:

Portb = &B00000000

Portc = &B00010000
Portd = &B11011111

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Ph:

Portb = &B00000000

Portc = &B00110000
Portd = &B00110011

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pi:

Portb = &B00000000

Portc = &B00001100
Portd = &B00000000

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pj:
Portb = &B00000000

Portc = &B00000000
Portd = &B00111110

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pk:

Portb = &B00000010

Portc = &B00100010
Portd = &B00000011

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pl:

Portb = &B00000000

Portc = &B00000000
Portd = &B00001111

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pm:
Portb = &B00000110

Portc = &B00000000
Portd = &B00110011

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pn:

Portb = &B00000100

Portc = &B00000010
Portd = &B00110011

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Po:

Portb = &B00000000

Portc = &B00000000
Portd = &B11111111

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pp:

Portb = &B00000000

Portc = &B00110000
Portd = &B11100011

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pq:

Portb = &B00000000

Portc = &B00000010
Portd = &B11111111

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pr:
Portb = &B00000000

Portc = &B00110010
Portd = &B11100011

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Ps:

Portb = &B00000000

Portc = &B00110000

Portd = &B11011101

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pt:

Portb = &B00000000

Portc = &B00001100
Portd = &B11000000

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pu:

Portb = &B00000000

Portc = &B00000000
Portd = &B00111111

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pv:

Portb = &B00000010

Portc = &B00000001
Portd = &B00000011

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pw:

Portb = &B00000000

Portc = &B00000011
Portd = &B00110011

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Px:

Portb = &B00000110

Portc = &B00000011
Portd = &B00000000

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Py:

Portb = &B00000110

Portc = &B00001100
Portd = &B00000000

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pz:

Portb = &B00000010

Portc = &B00000001
Portd = &B11001100

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pplus:

Portb = &B00000000

Portc = &B00111100
Portd = &B00000000

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return


Pminus:

Portb = &B00000000

Portc = &B00110000
Portd = &B00000000

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Pleer:

Portb = &B00000000

Portc = &B00000000
Portd = &B00000000
Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return


Pstern:

Portb = &B00000110

Portc = &B00111111
Portd = &B00000000

Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return

Ppunkt:

Portb = &B0000001

Portc = &B0000000
Portd = &B0000000
Waitms 6000
Portb = 0
Portc = 0
Portd = 0

Return









Daten:

Data "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "0" , "*"
Data "A" , "B" , "C" , "D" , "E" , "F" , "G"
Data "H" , "I" , "J" , "K" , "L" , "M"
Data "N" , "O" , "P" , "Q" , "R" , "S" , "T"
Data "U" , "V" , "W" , "X" , "Y" , "Z"
Data "*" , " " , "*" , "+" , " " , "+" , , "-" ,
Data "?"
 
OP
Birabeach

Birabeach

Geocacher
Portbelegung für eine Kingbright PSC08-11 SRWA

PD 7= A
PD 6 = B
PD 5= C
PD 4= D
PD 3= E
PD 2= F
PD 1= G
PD 0= H
PC6= Reset
PC 5= U
PC 4= P
PC 3 M
PC 2= R
PC 1= S
PC 0= T
PB7 = Leer
PB6 = Taster
PB5 = SCK
PB4 = MISO
PB3 = Mosi
PB 2 = K
PB 1= N
PB 0 = DB
VCC und Avcc zusammen auf VCC
 

upigors

Geowizard
hatte das gleiche vor, irgendwie hat aber bisher die Faulheit gesiegt.
Aber die Teile liegen hier schon seit 6 Monaten rum :eek:ps:
werde das mal testen die Tage, auf jeden Fall erstmal Danke.
 

Jaus

Geonewbie
Ich weis nicht wie gut der Bascom Compiler ist aber ich denke da bleibt nicht mehr viel Platz für Text trotz der 8K Flash vom ATMega8.
Wenn man die Dopplung im C Code von Evilmadscientist für die unterschiedlichen Displaytypen (gemeinsame Anode / Kathode) entfernt. wird es schon viel übersichtlicher. Durch das Multiplexen der Anzeige ist auch der Stromverbrauch sehr gering.

Wenn Ihr Intresse an der C Version habt, helfe ich gern weiter.
 

nExoDus

Geocacher
Jaus schrieb:
Hi,
ich glaub das geht auch einfacher schaut mal unter http://www.evilmadscientist.com/article.php/microreader2.
Ich hab das Teil nachgebaut und den Code dabei ein wenig verändert (auch Ziffern, Animation, Power Off nach 1. Durchlauf etc.).
Diese Version sieht ja echt cool aus und vor allem ist der Bauteileaufwand ja unheimlich gering. Wenn noch jemand da ein LDR dran hängen kann (natürlich für elektronische Halbmuggels wie mich mit Schaltplan und Listing(programm))wär das ein Kandidat für den nächsten n8 Cache ! Aber ne tolle Idee! Gruß Torsten
 
OP
Birabeach

Birabeach

Geocacher
also mit meinem prog brauchst du ca 30% flash speicher d.h. du kannst noch ca 5000 zeichen text reinhauen

wenn das nicht reicht der sollte einen ebookreader in die dose legen :D

das prog ist halt sehr wartungfreundlich aufgebaut nur die data zeile ändern und los gehts und es funz in bascom was für einsteiger optimal ist

bauteiltechnisch chip plus 16 segment macht bei mir 2 bauteile weniger geht halt nicht und als reaktives licht kommt noch ein ldr und 2 widerstände hinzu.
 

Jaus

Geonewbie
Birabeach schrieb:
also mit meinem prog brauchst du ca 30% flash speicher d.h. du kannst noch ca 5000 zeichen text reinhauen

Ich vermute mal die 30% sind auf den ATmega8 bezogen die andere Lösung arbeitet mit einem ATTiny 2313 der hat gerade mal 2k Flashspeicher.

Reaktivlicht mit dem ATTiny 2313 geht eigentlich nicht da fast kein Portpin mehr frei ist. Was sehr gut geht, den ATTiny mit einem Reedkontakt magnetisch aus dem Tiefschlaf, über den Reset Pin, zu wecken.
 

Windi

Geoguru
Jaus schrieb:
Reaktivlicht mit dem ATTiny 2313 geht eigentlich nicht da fast kein Portpin mehr frei ist.
Das Hauptproblem beim 2313 ist, dass dieser über keinen A/D-Wandler verfügt. Somit scheidet ein vernünftiges Rektivlicht (mit LDR) hier eh aus.
 

upigors

Geowizard
Birabeach schrieb:
Hab mir mal krankheitsbedingt die Mühe gemacht eine 16 Segmentanzeige an einen ATmega8 zu klemmen.....
läuft perfekt, nur das "Y" hat einen kleinen Fehler. Balken "m" (PC3) muss noch weg. Danke für die fleißarbeit....
 

Fuenf-Freunde

Geocacher
Danek für das Teilen von Wissen. Ich hab gerade mal das Teil nachgebaut und es scheint schon mal grob zu laufen. Angepasst habe ich Crystal auf "1000000" da ich nix an den Fuses geändert habe.


Ausgegeben wird: 1 - 2 - 1 - 2 - 1 , ...

Sehe ich das richtig dass eigentlich ausgegeben werden sollte: 1 - 2 -3 -4 -5 ,... ?

GRüße



Birabeach schrieb:
$crystal = 128000
...
Daten:

Data "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "0" , "*"
Data "A" , "B" , "C" , "D" , "E" , "F" , "G"
Data "H" , "I" , "J" , "K" , "L" , "M"
Data "N" , "O" , "P" , "Q" , "R" , "S" , "T"
Data "U" , "V" , "W" , "X" , "Y" , "Z"
Data "*" , " " , "*" , "+" , " " , "+" , , "-" ,
Data "?"


gelöscht habe ich das (Damit es sofort losgeht):

Code:
Do
Taster1 Alias Pinb.6
Config Taster1 = Input
Portb.6 = 1
Debounce Taster1 , 0 , Morsen
Loop
 

Fuenf-Freunde

Geocacher
So nun bin ich weiter: War wohl ein Wackler in der Stromversorgung.

Die Anzeige war mir mit 1MHz Takt viel zu langsam. Also hab ich den bequemsten Weg genommen und Crystal auf 100.000 gesetzt. Nun ist die Geschwindigkeit OK.

Nun muss ich noch zwei Problemchen lösen:

A) Buchstabe D passt scheinbar nicht. Da ich sonst keine Fehler festgestellt habe werd ich das mal fixen.

B) Hat mir jemand nen Tipp wie man zwischen jedem Zeichen ganz kurz die Anzeige abschalten kann ?
(z.B. Hello sieht sonst böd aus !)

Wenn ich fertig bin werd ich ne kurze Doku machen damits anderen auch klarer wird...

CU
 

upigors

Geowizard
Ich hab ein weiteres Leerzeichen angelegt für solche Fälle, etwa 1/3 so lang wie das bereits vorhandene
Code:
" "
Und bei mir war das D auch ok ;)
Gruß uwe
 

hihatzz

Geomaster
Welche ATMEL kann man denn für das 16 Segment LED (PSC 08-11 RT)
verwenden wenn man noch den A/D für das Reaktivlicht braucht (+IN-Pin).
Ohne DP hat das Teil 16 Pins.
In der Liste hier
sind das wohl alle Atmega ausser der 162 und 8515 da kein A/D.

Lieg ich da richtig? Es sind schon so viele da blickt man gar nicht mehr durch.
 

stonewood

Geowizard
@hihatzz:

s.o., das ist die Pinbelegung für einen Mega8:
Birabeach schrieb:
Portbelegung für eine Kingbright PSC08-11 SRWA

PD 7= A
PD 6 = B
PD 5= C
PD 4= D
PD 3= E
PD 2= F
PD 1= G
PD 0= H
PC6= Reset
PC 5= U
PC 4= P
PC 3 M
PC 2= R
PC 1= S
PC 0= T
PB7 = Leer
PB6 = Taster
PB5 = SCK
PB4 = MISO
PB3 = Mosi
PB 2 = K
PB 1= N
PB 0 = DB
VCC und Avcc zusammen auf VCC
Da ist also noch PB3-PB7 'frei', wird also erst mal nicht für die Ansteuerung der 16 Segment benötigt. Außerdem sieht mir PB0 nach 'DP' statt 'DB' aus? Die kann man natürlich auch entsprechend auf andere Pins umlegen bzw. gar nicht benutzen.

Bei einem (28-Pin) atmega8 ist ADC0-ADC5 auf PC0-PC5, Du mußt also den Code entsprechend umschreiben daß z.B. PC0 frei wird und z.B. PB7 dafür benutzt wird.

Bei den 40-Pin Typen wie z.B. Mega644 ist dann natürlich mehr frei, da muß man dann auch wieder die richtigen Pins nutzen.
 
Oben