Sari la conținut
ELFORUM - Forumul electronistilor

Programare ATmega8 pentru 6 digi7-segment siplay!


Cilibiu

Postări Recomandate

Problema pe care am constatat-o si eu la Proteus esta ca in cazul folosirii afisoarelor cu 7 segmente in mod multiplexat acesta vrea sa faca simularea cat mai precisa si incetineste timpul simularii. Daca va uitati in partea de jos a feresterei unde scrie ANIMATING si timpul o sa vedeti ca acesta se scurge mai incet. La 4 afisoare pe care le-am simulat a "lungit" timpul ca sa zic asa de vreo 10 ori. Ce lmai bine in cazul asta este sa faci montajul practic si sa vezi ccum se comporta.

Link spre comentariu
  • Răspunsuri 63
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Cilibiu

    33

  • JQ

    13

  • nickrvl

    11

  • danzup

    2

Top autori în acest subiect

Problema pe care am constatat-o si eu la Proteus esta ca in cazul folosirii afisoarelor cu 7 segmente in mod multiplexat acesta vrea sa faca simularea cat mai precisa si incetineste timpul simularii. Daca va uitati in partea de jos a feresterei unde scrie ANIMATING si timpul o sa vedeti ca acesta se scurge mai incet. La 4 afisoare pe care le-am simulat a "lungit" timpul ca sa zic asa de vreo 10 ori. Ce lmai bine in cazul asta este sa faci montajul practic si sa vezi ccum se comporta.

Intradevar are o problema cu incetinirea, insa in exemplul dat mai sus o sa vedeti ca totul decurge cursiv, fara intreruperi, de unde concluzia ca ii place numai anumite softuri?
Link spre comentariu

Ajuta daca vrei, daca nu lasal pe altul si tineti reprosurile pentru tine :da

Ok !Nu se vede bine in poza cum e conectat , zi-mi la ce port ai cele 7 segmente , la ce port ai cei 6 digiti si la ce port ai butoanele te rog si-ti arat cum se face .Digitii sunt cu anod comun sau catod comun ?Ii comanzi cu tranzistoare sau direct ?Ca sa stiu cum scriu codul in Bascom .
PORTB sunt SEGMENTELEPORTD sunt DIGITIPORTC sunt BUTOANELEDisplayul este cu anod comun!Acum incerc sa dezvolt si eu ce mia dat NICKRVL!Mult respect pentru toti care ma ajuta!Multa stima si respect pentru NICKRVL (mersi mutl de e-mailuri!)
Link spre comentariu

Sa rezolvat toata treaba, pentru un inceptar ca mine este o mare realizare, ce mia dat NICKVRL in 3 posturi mai sus, lam luat , lam studiat, am vazut cum se face multiplixarea, si miam bagat nasul in el, timp de 2 ore lam butonat si am facut si pentru al 4 bit, am cuplat si mai multe butoane, numi vine sa cred ce simplu e si ce greu credeam eu ca e, miam rezolvat proiectul meu , merge , am invatat biti care trebuie sai modific pentru afisarea cifrelor sau a literelor, am invatat cum sa mai pun inca un digit 2-3-4 sau cati am nevoie, am invatat cum sa comand acele afisari cu butoane!ASta doar cu ajutorul vostru si in special al lui NICKVRL care este un om de nota 10 pentru mine!Va multumesc tuturor o sa revin cu montajul gata facut si cu fisierele pentru bascom si proteus! :101 :da :dans: :aplauze Mult respect pentru voi!

Link spre comentariu

am facut si pentru al 4 bit, am cuplat si mai multe butoane, numi vine sa cred ce simplu e si ce greu credeam eu ca e, miam rezolvat proiectul meu , merge , am invatat biti care trebuie sai modific pentru afisarea cifrelor sau a literelor, am invatat cum sa mai pun inca un digit 2-3-4 sau cati am nevoie, am invatat cum sa comand acele afisari cu butoane!

Nu sint sigur daca Mc-ul suporta direct cei 4 digiti, am facut o data un montaj cu Attiny si 4 digiti dar pinii comuni ai acestora erau comandati prin tranzistori, nu i-am comandat direct. Acum nu stiu ce sa zic, parca ti-asi recomanda sa faci la fel.
Link spre comentariu

Eventul o sa ii fac comanda digitilor prin tranzistoare, dar in proteus nu am pus tranzistoare! Mai ales ca trebuie tranzistoare "rapide"!Scuze in loc de digiti am spus biti! :jytuiyu La fel si cu numele tau am inversat 2 litere! :jytuiyu

Link spre comentariu

Niste (NPN) BC 547 sunt foarte bune, sau orice alt tranzistor accesibil. Evident daca e nevoie de PNP sunt bc557. Fara tranzistori o sa ai luminozitate scazuta pe anumite afisoare, adica e total neprofesional.

Link spre comentariu

Mersi de sfat, chiar ca am o droaie de bc547 si de 557! :da

Gata mi-am amintit, are dreptate JQ, de acea am pus comanda prin tranzistori, luminozitatea digitilor nu era uniforma.Merg folositi si BC 337
Link spre comentariu

Cand mai aveam putin am dat de un "perete".

Miam definit aceste caractere !

 

'****************** Aici sint definite caracterele ********

Dim L(10) As Byte

L(1) = &B0111000 'L

L(2) = &B1110111 'A

L(3) = &B1011110 'd

L(4) = &B1111100 'b

L(5) = &B1101101 'S

L(6) = &B1010000 'r

L(7) = &B1111001 'E

L(8) = &B1111000 't

L(9) = &B0000000 ' '

L(10) = &B0111111 'O

 

Iar eu vreau sa mai adaug cateva litere si cifre!

Dar nu stiu cum sa fac ca aici sunt numa de la L(1) pana la L(10) daca continui cu 11-12... etc nu merge , defapt nu stiu sa configurez pentru a citi mai departe!

 

Tot codul este mai jos!

 

Am configurat doar 2 butoane deoarece nu am toate litere necesare pentru cele 9 butoane, folosesc display cu 6 digiti!

Sunt toti configurati, iar butoanele stiu sa le configurez, dar mam blocat la aceste caractere!

Codul!

$regfile = "m8def.dat"

$crystal = 4000000

Config Portd = Output

Config Portb.0 = Output

Config Portb.1 = Output

Config Portb.2 = Output

Config Portb.3 = Output

Config Portb.4 = Output

Config Portb.5 = Output

Config Portb.7 = Input

Config Portb.6 = Input

Config Portc = Input

'****************** Aici sint definite caracterele ********

Dim L(10) As Byte

L(1) = &B0111000 'L

L(2) = &B1110111 'A

L(3) = &B1011110 'd

L(4) = &B1111100 'b

L(5) = &B1101101 'S

L(6) = &B1010000 'r

L(7) = &B1111001 'E

L(8) = &B1111000 't

L(9) = &B0000000 ' '

L(10) = &B0111111 'O

 

'*************************************************************

Dim Timecount As Word : Timecount = 0

Dim I As Byte

Dim Ad As Long

Dim S(6) As String * 1

Dim Sa As String * 5

Dim Sl(6) As Byte

 

Do

 

 

'****************** aici schimbi ce vrei sa afiseze ************

If Pinb.7 = 1 Then 'daca buton apasat

Ad = 425599 'atunci Ad = 102, adica va afisa LOA 'Ad = 000 deci va afisa 000

Else

Ad = 999999

End If

 

If Pinb.6 = 1 Then

Ad = 444499

End If

 

 

'****************************************************************

 

 

'******** aici va lua valoarea lui Ad si va imparti-o in trei corespunzator

' numarului de digiti

Sa = Str(ad)

Sa = Format(sa , "0000")

 

S(1) = Mid(sa , 4 , 1)

S(4) = Mid(sa , 1 , 1)

S(3) = Mid(sa , 2 , 1)

S(2) = Mid(sa , 3 , 1)

S(5) = Mid(sa , 6 , 1)

S(6) = Mid(sa , 5 , 1)

 

I = Val(s(1))

If I = 0 Then

Sl(1) = L(10)

Else

Sl(1) = L(i)

End If

 

I = Val(s(2))

If I = 0 Then

Sl(2) = L(10)

Else

Sl(2) = L(i)

End If

 

I = Val(s(3))

If I = 0 Then

Sl(3) = L(10)

Else

Sl(3) = L(i)

End If

 

I = Val(s(4))

If I = 0 Then

Sl(4) = L(10)

Else

Sl(4) = L(i)

End If

 

I = Val(s(5))

If I = 0 Then

Sl(5) = L(10)

Else

Sl(5) = L(i)

End If

 

I = Val(s(6))

If I = 0 Then

Sl(6) = L(10)

Else

Sl(6) = L(i)

End If

 

'************************************************

 

'***** aici se face afisarea propriuzis

Incr Timecount 'aici se face o temporizare si

If Timecount = 15 Then 'numai daca Timecount = 15 se va face afisarea

Timecount = 0

Portb.0 = 0

Portd = Sl(2)

Waitms 5

Portb.0 = 1

Portb.1 = 0

Portd = Sl(3)

Waitms 5

Portb.0 = 1

Portb.1 = 1

Portb.2 = 0

Portd = Sl(4)

Waitms 5

Portb.0 = 1

Portb.1 = 1

Portb.2 = 1

Portb.3 = 0

Portd = Sl(1)

Waitms 5

Portb.0 = 1

Portb.1 = 1

Portb.2 = 1

Portb.3 = 1

Portb.4 = 0

Portd = Sl(5)

Waitms 5

Portb.0 = 1

Portb.1 = 1

Portb.2 = 1

Portb.3 = 1

Portb.4 = 1

Portb.5 = 0

Portd = Sl(6)

Waitms 5

Portb.5 = 1

End If

 

'*********************************************

 

Loop

End

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

Un pic de ajutor va rog! :jytuiyu

Link spre comentariu

Da am observat ca si tu ai folosit in alt exemplu cu Le, dar nu stiu cum sa le fac jos la afisarea propriuzisa!Modifica doar un caracter in codul atasat de mine ca sa imi dau seama, adik dupa L(10) sa pui cum ai zis tu inca un caracter , nu conteaza ccum aranjezi biti ca aia ii fac eu, dar sa pui sub el cum ai zis tu cu La si ce modifici in afisarea propriuzisa ca sa imir ecunoasca mai departe!P.S am uitat sa te intreb ca ce fac acolo unde scriu numerele respective de recunoaste caracterele, adik cum am eu 235999 la AD=235999, aici cum fac ? ca nu pot pune 12 din cauza ca imi ia functiile de 1 si 2!

Link spre comentariu

Am modificat la repezeala dar tot softul meu:$regfile = "m8def.dat"$crystal = 4000000Config Portd = OutputConfig Portb.0 = OutputConfig Portb.1 = OutputConfig Portb.2 = OutputConfig Portb.3 = OutputConfig Portb.7 = Input'****************** Aici sint definite caracterele ********Dim L(20) As ByteL(1) = &B0111000 'LL(2) = &B1110111 'AL(3) = &B1001111 '3L(4) = &B1100110 '4L(5) = &B1101101 '5L(6) = &B1111101 '6L(7) = &B0000111 '7L(8) = &B1111111 '8L(9) = &B1101111 '9L(10) = &B0111111 'OL(11) = &B0111001 'C'*************************************************************Dim Timecount As Word : Timecount = 0Dim I As ByteDim Ad As LongDim S(4) As String * 1Dim Sa As String * 5Dim Sl(4) As ByteDim I1 As ByteDim I2 As ByteDim I3 As ByteDo'****************** aici schimbi ce vrei sa afiseze ************If Pinb.7 = 1 Then 'daca buton apasat I1 = 1 I2 = 2 I3 = 11 'atunci Ad = 102, adica va afisa LOA Else 'altfel, adica daca butonul nu e apasat I1 = 0 I2 = 0 I3 = 0 'Ad = 000 deci va afisa 000End If'****************************************************************'******** aici va lua valoarea lui Ad si va imparti-o in trei corespunzator' numarului de digitiIf I1 = 0 ThenSl(2) = L(10)ElseSl(2) = L(i1)End IfIf I2 = 0 ThenSl(3) = L(10)ElseSl(3) = L(i2)End IfIf I3 = 0 ThenSl(4) = L(10)ElseSl(4) = L(i3)End If'************************************************'***** aici se face afisarea propriuzisIncr Timecount 'aici se face o temporizare siIf Timecount = 15 Then 'numai daca Timecount = 15 se va face afisareaTimecount = 0Portb.0 = 0Portd = Sl(2)Waitms 5Portb.0 = 1Portb.1 = 0Portd = Sl(3)Waitms 5Portb.0 = 1Portb.1 = 1Portb.2 = 0Portd = Sl(4)Waitms 5Portb.2 = 1End If'*********************************************LoopEnd'-----------------------------------------

Link spre comentariu

Mersi mutl , ce simplu era dar nu stiam, acum pot face pe si 30 de digiti si o garmada de cifre si litere care se pot citi de pe acest 7-segment display!Mersi mult, acum pot continua, o sa revin cu finitul! :da

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări