Sari la conținut
ELFORUM - Forumul electronistilor

Scriere / citire EEPROM in MicroCode Studio


Bird

Postări Recomandate

Va salut ,

 

Ajutati-ma cu ceva sfaturi , daca puteti si vreti !

Am un display cu leduri pe care deplasez un text scris intr-o memorie I2C . Doresc sa sa scriu la o adresa oarecare temperatura citita cu un senzor DS 1820 , pe care apoi sa o citesc si sa o afisez pe display ...dar nu reusesc .

Textul scris initial il citeste caracter cu caracter in cod ASCI , pe care-l "tranform " apoi in leduri aprinse corespunzatoare caracterului respectiv . Nu stiu cum sa inserez in textul respectiv rezultatul masuratorii senzorului pentru a fi citit tot in cod ASCI cifra cu cifra .

 

Va multumec !

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

Top autori în acest subiect

  • Bird

    4

  • Abram Burel

    2

In general, asta inseamna "conversie binary-BCD" apoi tabela de look-up pentru conversia BCD-afisaj.Daca programul "stie" ASCII, atunci de la BCD la ASCII e un drum simplu: ASCII=30H+BCD

Link spre comentariu

In general, asta inseamna "conversie binary-BCD" apoi tabela de look-up pentru conversia BCD-afisaj.

Daca programul "stie" ASCII, atunci de la BCD la ASCII e un drum simplu: ASCII=30H+BCD

Sa traiesti Burel ,

 

Eu scriu la inceput asa :

 

 

for adr = 0 to 40

lookup adr,[" TEMPERATURA ESTE DE 00,00 " ],C

 

I2cwrite I2CDAT , I2CCLK , $A0,ADR,[C]

 

pause 5

next adr

Mai tarziu in program vin si suprascriu ( mai corect spus incerc sa supra scriu ) in loc de 00,00 temperatura citita de senzor .

 

adr = 22

I2cwrite I2CDAT , I2CCLK , $A0,ADR,[????????????] .Te rog , spune-mi concret ce trebuie sa scriu aici pentru a functiona .

 

Iti multumesc !

Link spre comentariu

Hmmm, ma pui pe studiat... Una la mana, nu stiu MicroCode (MC) :) asa ca nu o sa ma bag prea mult in... detaliiDS1820Deci da temperatura pe 2 bytes- cel mai semnificativ (byte1) e semnul 0x00 + / 0xFF - deci (nu e in MC, ci intr-un fel de pseudo):if byte1=0x00 then semn=0x20 else semn=0x2C ; blank (0x20) pentru + si minus (0x2C) pentru -- cel mai putin semnificativ este temperatura in pasi de jumatati de grad; in plus pentru temperaturi negative valoarea este complementata binar; ca sa scoti modulul faci:byte0 = (byte0 XOR byte1) + 1- deoarece rezolutia e de juma de grad, primul bit al lui byte0 iti va arata daca e vorba de o temperatura XX,00 sau XX,50if byte0(0) = 0 then digit1 = 0x30 else digit(1) = 0x35 ; cifra 0 in ASCII e 0x30, iar 5 e 0x35- evident cadigit0 = 0x30 ; te poti gandi sa muti "punctul zecimal" XXX,X, macar pentru ca DS masoara pana la 125 grade :)- acum trebuie sa scapam de zecimala:byte0 = byte0 / 2 ; avem un numar in binar, reprezentat pe un octet (de fapt 7 biti), pe care trebuie sa-l scriem ca 3 cifre zecimale; deci daca e vorba de 00100011 (35), va trebui sa scoatem digit2 = 0x35 si digit3 = 0x33; daca MC nu are functii de tip bin2bcd, atunci va trebui sa faci tu conversia; algoritmii ii gasesti pe net; dupa conversie vei avea, de exempludigit2 = 5digit3 = 3ultimul pas va fi:digit2 = digit2 + 0x30digit3 = digit3 + 0x30Sper sa te ajute.

Link spre comentariu

Hmmm, ma pui pe studiat... Una la mana, nu stiu MicroCode (MC) :) asa ca nu o sa ma bag prea mult in... detaliiDS1820Deci da temperatura pe 2 bytes...................................................Sper sa te ajute.

Iti multumesc mult pentru incercarea de a ma ajuta . Uite mai jos un tabel cu ce da senzorul :TEMPERATURE/DATA RELATIONSHIP TEMPERATURE DIGITAL OUTPUT DIGITAL OUTPUT_______________(Binary) ____________(Hex)+85.0°C* 0000 0000 1010 1010 00AAh+25.0°C 0000 0000 0011 0010 0032h+0.5°C 0000 0000 0000 0001 0001h0°C 0000 0000 0000 0000 0000h-0.5°C 1111 1111 1111 1111 FFFFh-25.0°C 1111 1111 1100 1110 FFCEh-55.0°C 1111 1111 1001 0010 FF92h deci numai byte -ul din dreapta e de folos , pe cel din stanga il pun intr-o formula ca atunci cand e "ffh sa-mi scrie semnul minus . Nu stiu cum sa convertesc din binar / hexa in zecimal . Daca reusesc asta , scriu zecimal , care zecimal fiind intre ghilimele il citeste ca ASCI ...si gata ( sper ) . Daca nu gasesc o regula de transformare in zecimal , o sa incerc sa-mi fac o subrutina pentru asta . In ce priveste ce este dupa virgula , exista un registru " COUNT REMAIN " tot de un byte pe care o sa-l convertesc si o sa-l pun dupa virgula . Am facut asa ceva pentru afisarea pe un LCD , si merge OK ! Cu stima ,
Link spre comentariu
  • 4 săptămâni mai târziu...

Raspunsul e urmatorul...

 

Am definit variabilele :

 

temperature Var word ' Temperature storage

count_remain Var Byte ' Count remaining

count_per_c Var Byte ' Count per degree C

tem var word ' partea zecimala a masuratorii

 

zecimi VAR BYTE

sutimi var byte

mii VAR BYTE

sute VAR BYTE

zeci VAR BYTE

unitati VAR BYTE

 

Stabilesc relatiile :

 

TEMPERATURE = (temperature.LOWBYTE)/2

tem = 100- (100/16)*(count_remain)

 

sute = 48 +(temperature // 1000/100)

zeci = 48+(temperature //100/10)

unitati = 48+(temperature // 10)

zecimi = 48+(tem/10 )

sutimi = 48+(tem//10)

 

 

Apoi scriu in memorie :

 

adr= adresa unde vreau eu sa scriu datele

i2cwrite I2CDAT, I2CCLK, $A0, adr,[zeci,unitati,".",zecimi,sutimi,"gr.C"]

 

SI ....GATA !

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