Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

atmega8 bascom i 7seg led displej (10 komada) + ADC

  • 7 odgovora
  • 3.816 pregleda

Najnovija ↓

atmega8 bascom i 7seg led displej (10 komada) + ADC 16.08.2012. u 23:10 · pre 172 meseca
izmenjeno 1 put, poslednji put PedjaZ 16.08.2012. u 23:30
  1. PedjaZ16.08.2012. u 23:30zapis iz teksta poruke
#1
Najzad krenuo nesto sa uC i umesto da pocnem sa LED blink ja zadao sebi tezi zadatak :)

Trazio neke primere za multiplexovanje ali nesto nisam pronasao.
Smislio nesto pa mi sada treba vasa pomoc jer PROTEUS izbacuje cudne vrednosti.

Iz seme se vidi da imam 4 analogna ulaza i svaki od njih ide na 7seg LED D.
Da bi ustedeo na pinovima i pojednostavio, dodao sam 4017.
Sve OK radi bez ADC u PROTEUSU - nasumice prikazivanje brojeva,
ali ADC ne pokazuje kako ja hocu.
ADC ide od 0-1023 (ovo je vise pitanje)
Referentni napon je 2.56V (i ovo)
1023*10/40 =255 i to je najveca vrednost koju trebam da vidim na prvih 3 displeja
ali ja dobijam drugacije.
Mucim se vec neko vreme ali ne ide.
Moze pomoc?

Drugo pitanje.
Sta u programu da ubacim kako bi mogao neke vrednosti u proteusu da prikazujem - nesto kao debug prozor?

Hvala

Code:

' radjeno za:
'F:\Podaci sa C\Elektronika\Proteus\_Moje\ATMEGA8 i 10 LED 7 seg\02.DSN


$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 128                                              ' default use 32 for the hardware stack
$swstack = 25                                               'default use 10 for the SW stack
$framesize = 100                                            'default use 40 for the frame space


Dim Znam(5) As Byte , Ii As Byte , Pom As Byte , P3 As Byte
Dim Number(11) As Byte
Dim Br(10) As Byte
Dim I As Byte
Dim Oi As Byte
Dim O As Byte
Dim W As Word
Dim Cu As Integer
Dim Ww As String * 3
Dim S0 As String * 3
Dim S1 As String * 1
Dim S2 As String * 1
Dim S3 As String * 1
Dim V1 As Byte
Dim V2 As Byte
Dim V3 As Byte


W = 230

Config Adc = Single , Prescaler = Auto , Reference = Internal
Start Adc

Config Timer0 = Timer , Prescale = 8                        '64

Config Portb = Output                                       'set port B as output
Config Portd = Output

Portb = &B00000000
Portd = &B11111111

'kada brojevi idu od port0 ka port7
 Number(1) = &B11111001                                     '1
 Number(2) = &B10100100                                     '2
 Number(3) = &B10110000                                     '3
 Number(4) = &B10011001                                     '4
 Number(5) = &B10010010                                     '5
 Number(6) = &B10000010                                     '6
 Number(7) = &B11111000                                     '7
 Number(8) = &B10000000                                     '8
 Number(9) = &B10010000                                     '9
 Number(10) = &B01000000                                    'ovo je nula
 Number(11) = &B11111111                                    'prazno

On Timer0 Prikaz
Enable Interrupts
Enable Timer0
Counter0 = 60536

Start Timer0

'(
For I = 1 To 10
   Br(i) = Number(i)
Next


Br(10) = Number(4)
Br(2) = Number(2)
Br(3) = Number(6)
')

'prouci naredbu STR2DIGITS

Do

'   Oi = Br(10)
'   Br(10) = Br(1) : Br(1) = Br(2) : Br(2) = Br(3) : Br(3) = Br(4) : Br(4) = Br(5)
'   Br(5) = Br(6) : Br(6) = Br(7) : Br(7) = Br(8) : Br(8) = Br(9) : Br(9) = Oi



   Oi = 0
   For I = 0 To 3
      W = Getadc(i)
'      W = 105
      W = W * 10
      Cu = W / 40                                           '/40
      '1023= 25V =2.56V    1023/399=2,56  - prikazuje 2 broja + jednu decimalu
      Ww = Str(cu)

'      S0 = Format(ww , "000")
'      S1 = Mid(s0 , 1 , 1)
'      S2 = Mid(s0 , 2 , 1)
'      S3 = Mid(s0 , 3 , 1)
'      Print "ww=" ; Ww ; " s0=" ; S0 ; " s1=" ; S1 ; " s2=" ; S2 ; " s3=" ; S3




      If I = 0 Or I = 2 Then
         S0 = Format(ww , "000")
         S1 = Mid(s0 , 1 , 1)
         S2 = Mid(s0 , 2 , 1)
         S3 = Mid(s0 , 3 , 1)
         V1 = Val(s1)
         V2 = Val(s2)
         V3 = Val(s3)

         If V1 = 0 Then V1 = 11
         If V2 = 0 Then V2 = 10
         If V3 = 0 Then V3 = 10

         Oi = Oi + 1
         Br(oi) = Number(v1)
         Oi = Oi + 1
         Br(oi) = Number(v2)
         Oi = Oi + 1
         Br(oi) = Number(v3)

'         Print "ww=" ; Ww ; " s0=" ; S0 ; " s1=" ; S1 ; " s2=" ; S2 ; " s3=" ; S3
'         Print "ww=" ; Ww ; " s0=" ; S0 ; " v1=" ; V1 ; " v2=" ; V2 ; " v3=" ; V3

'         Print "i=" ; I ; " cu=" ; Cu ; " s0=" ; S0


'         Print Br(1)
'         Print Br(2)
'         Print Br(3)



       Else
         S0 = Format(ww , "00")
         S1 = Mid(s0 , 1 , 1)
         S2 = Mid(s0 , 2 , 1)
         V1 = Val(s1)
         V2 = Val(s2)

         If V1 = 0 Then V1 = 11
         If V2 = 0 Then V2 = 10

         Oi = Oi + 1
         Br(oi) = Number(v1)
         Oi = Oi + 1
         Br(oi) = Number(v2)


       End If

   Next I

Loop


'...



Prikaz:

   For Ii = 1 To 10

      Portd = Br(ii)
      Portb = &B00000000
      Waitms 2
      Portb = &B00000001

   Next Ii

   Portd = Br(1)

   Counter0 = 65536
   Start Timer0

   Return





Re: atmega8 bascom i 7seg led displej (10 komada) + ADC 18.08.2012. u 12:01 · pre 172 meseca #2
Proradilo je kada se VREF i AVCC spoje na spoljnih 2.56V

Ne znam zasto kada je Reference = Internal.
U predhodnim verzijama istog programa je radilo OK i bez spajanja tih pinova.

Drugo pitanje je i dalje aktuelno.
Sta u programu da ubacim kako bi mogao neke vrednosti u proteusu da prikazujem - nesto kao debug prozor?
Re: atmega8 bascom i 7seg led displej (10 komada) + ADC 20.08.2012. u 15:12 · pre 172 meseca #5
Citat:
PedjaZ:

Drugo pitanje je i dalje aktuelno.
Sta u programu da ubacim kako bi mogao neke vrednosti u proteusu da prikazujem - nesto kao debug prozor?



Ako MCU "nahranis" sa *.cof fajlom trebao bi da se otvori i prozor sa nazivima promenljivih iz koda. Taj prozor se vidi samo dok je simulacija u "pause" modu. Naravno ti mozes da prevuces jednu ili vise promenljivih u watch window...

Nadam se da si na to mislio?

Poz!!
Potpis
R Tape loading error, 0:1
Re: atmega8 bascom i 7seg led displej (10 komada) + ADC 20.08.2012. u 17:40 · pre 172 meseca #6
Hvala,
isprobacu to.
Programce sam priveo kraju, dodao i kalibraciju samo jos da vidim kako se snimaju promenljive u EPROM.
I onda vam javljam da li u praksi radi OK, da li cu morati reset da napravim za 4017 ili ce i ovako raditi.

evo video
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme