SAA 1064

Rasprava o PIC mikrokontrolerima, PIC projekti i drugo vezano za PIC-eve...

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

SAA 1064

Post by febo26 »

Kupio jucer novu razvojnu plocu od Mikrolektronike EASYPIC5 i brze bolje da nesto isprobam na njoj i odmah problem.Radi se o primjeru upotrebe SAA1064 cipa i 4 komada 7 segmentnih displaya preko I2C magistrale.Primjer koda je iz knjige od Voje Milanovica.Posto na ploci nema SAA cipa izradio sam dodatni modul i sve lijepo spojio ali nema ispisa na LED displayima.Duzina zice izmedju ploce i mog modula je 25 cm ali mislim da to nebi smio biti problem.
Da li netko ima kakav drugi primjer za ispis s SAA chipom da radi da znam sto me muci da li je programska greska i hardverska




Code: Select all

'Primer upotrebe 7-segmentnog drajvera sa
'1064 kolom 
  
   
       Symbol SCL = PORTC.3
       Symbol SDA = PORTC.4

       Cifra Var byte[11] 'Vrednosti heksa cifara 0 - 9
       Vred77 var word
       Dig1 Var byte    'Cifra1
       Dig2 Var byte    'Cifra2
       Dig3 Var byte    'Cifra3
       Dig4 Var byte    'Cifra4
       Cif1P var word   'Pomocna promenljiva
       Adr var byte     'Adresni bajt kola
       i   var byte     'Promenljiva za ciklus

       Konbajt Var byte 'Kontrolni bajt SAA1064 
       BajtIns Var byte 'Bajt instrukcije SAA1064

       Adr = $70        'Vrednost adresnog bajta
       Bajtins = 0      'Vrednost instrukcijskog bajta  
       Konbajt = $F7    'Vrednost kontrolnog bajta
       
       Cifra[0]= $3F    'Vrednosti cifara na 7-segmenata
       Cifra[1]= $06
       Cifra[2]= $5B
       Cifra[3]= $4F
       Cifra[4]= $66
       Cifra[5]= $6D
       Cifra[6]= $7D
       Cifra[7]= $07
       Cifra[8]= $7F
       Cifra[9]= $6F
       CIfra[10]=$00
 
Pocetak:

       Vred77 = 1
       For i = 0 To 1999

       Call OdrediCifre
       Call PosaljiCifre

       Vred77 = Vred77 + 1

       Next i
       Goto pocetak
'------------Odredi pojedinacne cifre-----------
OdrediCifre:
       Dig1 = Vred77 / 1000
       Cif1p = Vred77 // 1000
       Dig2 = Cif1p / 100
       Cif1p = Vred77 // 100
       dig3 = Cif1P / 10
       dig4 = vred77 // 10
   
       Return 
'------------Posalji cifre na displej-----------
PosaljiCifre:
  I2CWrite SDA, SCL, ADR, 0, Konbajt, [CIFRA[dig1], Cifra[dig2], Cifra[dig3],_
  Cifra[dig4]] 
       pause 300
       Return
  End 
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: SAA 1064

Post by febo26 »

Upotribljen je PIC 16F877A i 4mhz kristal
lab1722tec
Napredujem
Napredujem
Posts: 123
Joined: 26-12-2010, 12:12
Location: sad_tu_sad_tamo

Re: SAA 1064

Post by lab1722tec »

Imaš li pull-up otpore u liniji scl i sda? Pitanje je banalno al je ta greška najčešća.
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: SAA 1064

Post by febo26 »

Rijeseno,hardwerska greska :azdaja: .Plocica je crtana u programu MENTOR GRAPHICS PADS i u njemu se ne podudaraju footprintovi u shemi i nacrtu plocice,zamjenjeni su baza i emiter na SOT-23 kucistu :azdaja:
lab1722tec
Napredujem
Napredujem
Posts: 123
Joined: 26-12-2010, 12:12
Location: sad_tu_sad_tamo

Re: SAA 1064

Post by lab1722tec »

Glavno da fercera :D
Pozdrav!
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: SAA 1064

Post by febo26 »

bio nestasan na satu matematike pa sad problem,moram malo dosadjivat.

Muci me kako iz BCD oblika podatak pretvorit u dekadski.
Kada procitam iz DS1337 podatke oni su zapisani u BCD obliku (tako pisi u datasheetu )
i pomocu donjeg primjera ispisani na LCD u bez greske.
Sada bih htio sate i minute prikazati i na LED displayu ali neznam kako pretvoriti hr i MINs u dekadski oblik da mogu izdvojiti jedinice i desetice te ih preko I2C-a poslat na SAA1064.

Code: Select all

      
 I2CRead SDA, SCL, RTC, SecReg, [sec,MINs,hr,day,date,mon,yr] 

'-------Citanje Ds1337 -------------------------
       LCDOut $fe,1
       LCDOut $fe,2,"Vreme: ",HEX2 hr, ":", HEX2 MINs, ":", HEX2 sec 
       LCDOut $fe,$c0,"Datum: ",HEX2 date, "/", HEX2 mon, "/", HEX2 yr
       Pause 500
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: SAA 1064

Post by pedja089 »

hrDecimalno=((hr & %11110000)>>4)*10+(hr & %00001111)
hrDesetice=(hr & %11110000)>>4
hrJedinice=hr & %00001111
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: SAA 1064

Post by febo26 »

HVALA Pedja089 ,

rade i munute i sati prikaz ispravan :D :D :D

Moze kratko objasnjenje formule,ako ti se da objasnjavat
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: SAA 1064

Post by pedja089 »

BCD ili Binary-coded decimal...
Sto znaci svaka cifra je stavljena u po jedan nible, tj u jednu polovinu bajta, sto je 4 bita...
Jedinice su stavljene u niza 4 bajta, i idu 0-9, tj binarno 0000-1001, cifre A-F(hexadecimalni zapis), su nedozvoljene u bcd, i ako se pojave, imas gresku...
Ista prica je i za desetice, samo sto se one nalaze u visa 4 bajta...
hrJedinice=hr & %00001111 ova formula postavi visa 4 bita na 0, donja 4 bita ostavi kakva su. U pitanju je "i" funkcija, sto znaci 1&1=1, sve ostale kombinacije su nula. Time dobijamo da su u formuli prva 4 bita uvek nula, druga 4 bita su nepromenjena. Jer uzmimo da je broj 9 u niza 4 bita binarno 1001 & 1111=1001
Za desetice ista stvar, samo prvo spustimo niza 4 bita...
Sad gledam moze i jednostavnije jer pbp pri siftovanju u desno bite levo puni nulama.
hrDesetice=hr >>4 to bi bilo za dobijanje desetica. Npr opet broj 9 u visem niblu.
Binarno 10010000(decimalno 144), pomerimo 4 mesta udesno i dobijemo 00001001 sto je sada broj 9 u tom bajtu.
Prvu formulu necu objasnjavati, znas matematiku prvog osnovnde kako se dobije broj od jedinice i desetice :)
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: SAA 1064

Post by febo26 »

Javlja mi se problem s ovim kodom za sat.Naime sat mi se žuri ,ide naprijed.Za svaka dva sata pozuri se za jednu sekundu.Da li je problem do softwera u PICu ili je do kristala u RTC kolu DS1337.Napajanje vucem preko USBa na testnu plocu i s tim naponm se napajam i DS1337.ne bi smijelo biti smetnji u njemu.

Code: Select all

E = 0       
Ciklus:   'pocetak programa za citanje i DS1337 
E = E + 1           '  ovo je brojac koji svakih 20 sekundi ode na labelu za mjerenje 
IF E = 25 THEN mjeretemp        'temperature s DS1820
 TOGGLE PORTA.2                    ' treperenje dvotocke izmedju satova i minuta  
                                               'priblizni trpeptaj oko 1 sec
 
 '- - - Pritisnut B0 ulaz u glavni meni- - - - - - 
       B0 = 0
       button Taster0, 0, 100, 10, B0, 1, meni0
       button Taster1, 0, 100, 10, B0, 1, iskljalarm
       
       I2CRead SDA, SCL, RTC, SecReg, [sec,MINs,hr,day,date,mon,yr] 
  
'-------Citanje Ds1337 -------------------------
       LCDOut $fe,1
       LCDOut $fe,2,"Vreme: ",HEX2 hr, ":", HEX2 MINs, ":", HEX2 sec 
       LCDOut $fe,$c0,"Datum: ",HEX2 date, "/", HEX2 mon, "/", HEX2 yr
       
       
       If Alarm = 0 Then 'Ako je dostignut Alarm1 postavi RB0 na 1
       Dioda = 0
       EndIf

hrDecimalno=((hr & %11110000)>>4)*10+(hr & %00001111)
hrDesetice=(hr & %11110000)>>4
hrJedinice=hr & %00001111

MINDecimalno=((MINs & %11110000)>>4)*10+(hr & %00001111)
MINDesetice=(MINs& %11110000)>>4
MINJedinice=MINs & %00001111

 BROJ1 = hrDesetice   'izdvajanje znamenaka za display
 BROJ2 = hrJedinice
 BROJ3 = MINDesetice
 BROJ4 = MINJedinice
 
I2CWrite SDA, SCL, ADR, 0, Konbajt, [CIFRA[BROJ1], Cifra[BROJ2], Cifra[BROJ3],_
      Cifra[BROJ4]]         'posalji na SAA1064 preko I2C  za prikaz na displaju
      
 PAUSE 500    
      
 GoTo Ciklus
Da li DS1337 radi samostalno bez obzira na kod u PICu i da li PIC samo cita podatke iz DS1337 i prikazuje na displayu ili su ovisni jedan o drugom.Desava mi se jos to da mi ponekad zbroji sekunde odmah jednu za drugom bez razmaka kao da nesto preskoci nesto i do se desava u razmaku od oko 20 sekunda.
User avatar
pedja089
Administrator sajta
Administrator sajta
Posts: 7877
Joined: 20-02-2007, 14:50
Location: Beočin -Srbija

Re: SAA 1064

Post by pedja089 »

Sa kodom je sve u redu. To sa sekundama se desava posto imas pause 500, izbaci je ili smanji dosta, pa se nece desavati...
A sto se tice zurenja, verovatno ti kondezator nije uskladjen sa kristalom. U datasheetu kristala pise kolika kapacitivnost treba da bude, ali tu moras i uracunati kapacitivnost pinova na DS-u...
febo26
Pravo uznapredovao :)
Pravo uznapredovao :)
Posts: 207
Joined: 12-08-2008, 19:58

Re: SAA 1064

Post by febo26 »

To sam i mislio da je stvar do kristala,ali nisam bio siguran sada sam probao neki drugi budem, vidio kako ce se s tim ponasati.Nema druge nego naruciti iz Farnella kristal koji preporucuje Maxim u svom datasheetu.Sada kada sam maknuo onu pauzu od pola sekunde nema vise preskakivanja sekundi.
Post Reply