Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

16 Segmentanzeige mit Atmega8

Basteleien analog und digital mit Strom und Spannung.

Moderator: radioscout

Benutzeravatar
Birabeach
Geocacher
Beiträge: 57
Registriert: Do 25. Dez 2008, 09:37

16 Segmentanzeige mit Atmega8

Beitrag von Birabeach » So 9. Okt 2011, 20:47

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 "?"

Werbung:
Benutzeravatar
Birabeach
Geocacher
Beiträge: 57
Registriert: Do 25. Dez 2008, 09:37

Re: 16 Segmentanzeige mit Atmega8

Beitrag von Birabeach » So 9. Okt 2011, 20:56

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
Wann kommt der Trend zum Qualitätscache ??

Benutzeravatar
upigors
Geowizard
Beiträge: 2350
Registriert: Mo 24. Sep 2007, 15:52
Wohnort: 39326 Hohenwarsleben
Kontaktdaten:

Re: 16 Segmentanzeige mit Atmega8

Beitrag von upigors » Mo 10. Okt 2011, 14:13

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

Benutzeravatar
Birabeach
Geocacher
Beiträge: 57
Registriert: Do 25. Dez 2008, 09:37

Re: 16 Segmentanzeige mit Atmega8

Beitrag von Birabeach » Di 11. Okt 2011, 18:29

ja bei mir auch aber der meniskus riss machts möglich :zensur:

Benutzeravatar
upigors
Geowizard
Beiträge: 2350
Registriert: Mo 24. Sep 2007, 15:52
Wohnort: 39326 Hohenwarsleben
Kontaktdaten:

Re: 16 Segmentanzeige mit Atmega8

Beitrag von upigors » Mi 12. Okt 2011, 14:58

Birabeach hat geschrieben:ja bei mir auch aber der meniskus riss machts möglich :zensur:
Gute Besserung :/
Bild..Bild

Jaus
Geonewbie
Beiträge: 3
Registriert: Mi 7. Dez 2011, 12:35

Re: 16 Segmentanzeige mit Atmega8

Beitrag von Jaus » Mi 7. Dez 2011, 12:46

Hi,
ich glaub das geht auch einfacher schaut mal unter http://www.evilmadscientist.com/article ... croreader2.
Ich hab das Teil nachgebaut und den Code dabei ein wenig verändert (auch Ziffern, Animation, Power Off nach 1. Durchlauf etc.).

Benutzeravatar
upigors
Geowizard
Beiträge: 2350
Registriert: Mo 24. Sep 2007, 15:52
Wohnort: 39326 Hohenwarsleben
Kontaktdaten:

Re: 16 Segmentanzeige mit Atmega8

Beitrag von upigors » Mo 12. Dez 2011, 08:26

einfacher - nun ja.... kleiner mit Sicherheit ;-)
Bild..Bild

Jaus
Geonewbie
Beiträge: 3
Registriert: Mi 7. Dez 2011, 12:35

Re: 16 Segmentanzeige mit Atmega8

Beitrag von Jaus » Mo 12. Dez 2011, 13:53

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.

Benutzeravatar
nExoDus
Geocacher
Beiträge: 91
Registriert: So 28. Jun 2009, 11:53

Re: 16 Segmentanzeige mit Atmega8

Beitrag von nExoDus » Mi 21. Dez 2011, 17:36

Jaus hat geschrieben:Hi,
ich glaub das geht auch einfacher schaut mal unter http://www.evilmadscientist.com/article ... croreader2.
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
Bild

Benutzeravatar
Birabeach
Geocacher
Beiträge: 57
Registriert: Do 25. Dez 2008, 09:37

Re: 16 Segmentanzeige mit Atmega8

Beitrag von Birabeach » Do 29. Dez 2011, 20:13

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.

Antworten