ATMEL 89C2051 komunikacia z displayom cez I2C

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
Mahoney
Příspěvky: 759
Registrován: 26 říj 2019, 00:00

#16 Příspěvek od Mahoney »

Ne, to bude dobrý… Záleží jak moc chce on sám, nikdo jinej to za něj neudělá. Možností má víc, buď si koupí lepšího brouka, a nebo si koupí knížku a začne od začátku od Blink atd. Ony ty 89C2051 nejsou špatný brouci (a hlavně jak jsi psal, spolehlivost), mám je taky rád, ale všechno má své meze, je to jako kdyby chtěl po Felicii, aby předjela na dálnici Porsche, nebo odtáhla 10 tun nákladu - asi to nedokáže, ale na rozumnou jízdu po městě to stačí.
Uživatelský avatar
kajsmentke
Příspěvky: 187
Registrován: 30 srp 2014, 00:00

#17 Příspěvek od kajsmentke »

ZdenekHQ píše:V tom je právě ten problém, když to píšeš v JSA, tak šetříš každej byte paměti, takže si tu vlastní knihovnu pro každej externí čip nějak optimalizuješ. Protože napsat to univerzálně, tak to bude nafouknutý jak žaba. Něco jinýho je EEPROM, FRAM či CO2 čidlo. Bohužel.

Vytáhl jsem to z nějakýho starýho projektu, momentálně používám spíš SPI.

Tohle je jen část a musí si to upravit podle potřeby. To asi nebude jeho nejlepší cesta.

Kód: Vybrat vše

   ;======*************************==================
   ;======PODPROGRAMY - START + STOP + ACK ...=======
   ;======*************************==================

Start_bit:   
;*********
   setb   sda      ;toto se predpoklada
   call   Wait_I2C
   setb   scl
   call   Wait_I2C
   clr   sda
   call   Wait_I2C
   clr   scl
   call   Wait_I2C
   setb   sda
   call   Wait_I2C_zpracuj

   ;KONECNY STAV
   ;============
   ;clr = 0
   ;sda = 1

   ret

Sd_DWA:
;********
   mov   r0,#8      ;8 cyklu
Senx_1:   
   rlc   a
   mov   sda,c
   call   Wait_I2C
   setb   scl
   call   Wait_I2C
   clr   scl
   call   Wait_I2C
   djnz   r0,Senx_1   
   setb   sda
   call   Wait_I2C_zpracuj
   ret

Test_ack:
;*******

   setb   sda      ;ACK
   call   Wait_I2C
   setb   scl
   call   Wait_I2C
   mov   c,sda
   clr   scl
   mov   Stav,c
   call   Wait_I2C_zpracuj
   ret

Posli_ack:
;*********
   clr   sda      ;ACK
   call   Wait_I2C
   setb   scl
   call   Wait_I2C
   clr   scl
   call   Wait_I2C
   setb   sda
   call   Wait_I2C_zpracuj
   ret

Stop_bit:
;********
   clr   sda      ;STOP bit
   call   Wait_I2C
   setb   scl
   call   Wait_I2C
   setb   sda
   call   Wait_I2C
   clr   scl
   call   Wait_I2C
   setb   sda
   call   Wait_I2C_zpracuj
   ret

;*****************
;*** INIT I2C  ***
;*****************

Clear_i2c:

   ;vychozi nastaveni bitu
   ;----------------------
        clr   Stav
   clr   scl   
   setb   sda
   mov   r1,#32d      ;max pocet chyb init eeprom
   
   mov   r0,#9
Cl_1:

   call   Wait_I2C
   setb   scl
   call   Wait_I2C
   mov   c,sda
   jc   Cl_2
   mov   r0,#9      ;prisel nulovy bit,musim znovu

   ;KONTROLA CHYB
   ;=============
   dec   r1
   mov   a,r1
   jnz   Cl_2
   setb   Stav
   ret         ;chyba init eeprom
   
Cl_2:
   clr   scl
   call   Wait_I2C
   djnz   r0,Cl_1   


            ;sda = 1 = vstupni
            ;scl = 0 = ready
   call   Stop_bit
   ret
   
   ;==========================================
   ;        CASOVACI PAUZY
   ;==========================================

Wait_I2C:
;********
;pulka periody
;zakladni casovani I2C
;pomalejsi kvuli HW key

   
   call   Wait_5us
   call   Wait_5us
   ret
   
      
Wait_I2C_zpracuj:
;****************
;cas pro HW key na zpracovani

   ;klasicka EEPROM

   call   Wait_5us
   ret
   

   
Wait_I2C_WRITE_int_EE:
;*********************
;cas pro HW key na zapis do interni EEPROM
;melo by stacit 3.4ms, ale i READ potrebuje timeout 10ms
   
        call   Wait_10ms
   ret
   
Wait_I2C_READ_int_EE:
;*********************
;cas pro HW key na zapis do interni EEPROM
;READ potrebuje timeout 10ms
   
        call   Wait_10ms
   ret
   



no jo, len ako to pouzit... v Pascale viem sice vkladat aj ASM kod, ale ako tomu poslem nejaky znak na konkretnu poziciu, to mi v tom kode nieje jasne :oops:
Uživatelský avatar
kajsmentke
Příspěvky: 187
Registrován: 30 srp 2014, 00:00

#18 Příspěvek od kajsmentke »

https://www.youtube.com/watch?v=fnGzRqVI4YI&ab_channel=VolosProjects

Tuto pouziva chlapik ATTINY85 (co nieje o nic vykonnejsi stroj) a uplne rovnaky display aky mam ja.

akurat to nema v Pascale
:oops:

Naozaj skoda ze Mikroe MIcroPascal nema nejaku sirsiu podporu ani od samotneho vyrobcu aj ked platenu verziu predava za vyse 200USD :(
nixdorf
Příspěvky: 540
Registrován: 06 kvě 2017, 00:00

#19 Příspěvek od nixdorf »

progres, fajnšmeker už kuká po AVR... :D

V dobrom, začni najskôr jednodušším, menším sústom - napríklad hello world, a v céčku, s displejom, ktorý má radič dobre zdokumentovaný - napríklad monochrom HD44780, klasika znakový displej 16 x 2, ktorý už má font v sebe - žiadne grafické farebné kontrolery prozatím.
A na Pascal sa fakt vyser. Nemôžeš sa vrtať v predpotopných platformách, ak o programovaní (prepáč, mikropascal ja nenazývam programovanie) nemáš ani šajnu. Zdeněk ti totiž posielal príklad, ako softwarovo posielať údaje cez IIC ako takej, celá implementácia s tým grafickým displejom by ťa ešte len čakala, musíš tomu radiču displeja posielať príkazy. A nebolo by to v pascale ani zďaleka.
Rovnako, ak ti neni po chuti programovanie v jazyku symbolických adries, budeš musieť pouvažovať po inej platforme, ako je 8051.
Naposledy upravil(a) nixdorf dne 01 kvě 2023, 10:58, celkem upraveno 1 x.
Uživatelský avatar
Mahoney
Příspěvky: 759
Registrován: 26 říj 2019, 00:00

#20 Příspěvek od Mahoney »

To se dost mýlíš, ATtiny85 je o hodně výkonnější než 89C2051, a navíc má i 4x více pamětí.

Arduino IDE ho navíc dokáže podporovat přímo, takže bych ti klidně doporučil jít touto cestou… v tom IDE můžeš psát i v C (Pascal se C v jistých ohledech podobá, přechod nebude těžký, ale zdaleka není tak výkonný a praktický jako C), a navíc si to můžeš osahat i tak jak je, tedy programování ve Wiringu (což je trochu poupravené C++). Co je důležité - číst datasheety! (nejen od mikrořadičů, ale od všech součástek).
Uživatelský avatar
Celeron
Příspěvky: 20508
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#21 Příspěvek od Celeron »

Kdyť nemusí u 2051 zůstat. Silabs dělá s jádrem 51 podstatně lepší a výkonější "děla" třeba se 100MHz hodinama a jednocyklovým jádrem.
A taky jsem zvědavej na ty dnešní AVR potvory a spol, jestli tu budou v nezměněný podobě ještě za 43 let jako 51.
Jirka

Proč mi nemůže všechno chodit hned ?!!
Uživatelský avatar
pocitujlasku
Příspěvky: 2764
Registrován: 12 pro 2005, 00:00
Bydliště: SR, Poprad

#22 Příspěvek od pocitujlasku »

Ako niekto, kto zacal s pascalom v 1996 na skole a neskor programoval v Delphi (firemne aplikacie, dost rozsiahle) ti mozem povedat: zabudni na pascal. Svoje dni slavy ma za sebou a v dnesnej dobe v tom programovat je iba zbytocne trapenie. Ak vies dobre pascal, tak C-cko je otazka precitania zakladov, aby si pochopil princip a pozrel si syntax. Ale ako vravieval moj ucitel na strednej: vsetky jazyky su o tom istom, len sa inak zapisuju.
No vidis, a tak si sa bal
Uživatelský avatar
Mahoney
Příspěvky: 759
Registrován: 26 říj 2019, 00:00

#23 Příspěvek od Mahoney »

Celeron: A ještě Dallas a Cypress (dneska je to Analog Devices a Infineon), a ještě Microchip měl něco co patřilo kdysi SST, ale nevím jestli to už nezrušil… Ale ani od jedný z těch firem tu nikde nic neseženeš (myšleno u firem "pro bastlíře"), maximálně vyškrabeš v TME nějaký zbytky za nekřesťanský peníze - to už je lepší číňan (CH552, STC8.....) a chvíli si počkat (Ebay/Aliexpress), cena je přijatelná.
Uživatelský avatar
kajsmentke
Příspěvky: 187
Registrován: 30 srp 2014, 00:00

#24 Příspěvek od kajsmentke »

pocitujlasku píše:Ako niekto, kto zacal s pascalom v 1996 na skole a neskor programoval v Delphi (firemne aplikacie, dost rozsiahle) ti mozem povedat: zabudni na pascal. Svoje dni slavy ma za sebou a v dnesnej dobe v tom programovat je iba zbytocne trapenie. Ak vies dobre pascal, tak C-cko je otazka precitania zakladov, aby si pochopil princip a pozrel si syntax. Ale ako vravieval moj ucitel na strednej: vsetky jazyky su o tom istom, len sa inak zapisuju.


ja som tiez orbil cely zivot z Pascalom resp neskor Delphi. Pascal je pekne citatelny kod ma prehladnu strukturu. Mne sa uz nechce zvykat si na novu syntax. Pises ze vsetky jazyky su o tom istom, ale zaroven si ma clovek vybrat Cecko :)


Ono tie kniznice pre mikroPASCAL existuju ale pre PIC
https://download.mikroe.com/documents/compilers/mikropascal/pic/help/software_i2c_library.htm

toto prostredie spolocnost Mikroe zjavne udrziava stale pri zivote. Pascal pre 8051 sa zjavne prestal rozvijat v roku 2013 i ked ho stale oficialne predavaju za celkom mastne sumy :x

Mozno by to chelo namiesto 8051ky pouzit radu PIC. Koniec koncov ked to programujem vo vyssiom jazyku tak RISC architektura ma velmi trapit nemusi.
Uživatelský avatar
Mahoney
Příspěvky: 759
Registrován: 26 říj 2019, 00:00

#25 Příspěvek od Mahoney »

kajsmentke píše:ale zaroven si ma clovek vybrat Cecko

Protože je to i o komunitě, C je nejrozšířenější, tudíž k němu je největší podpora :wink: Ale nikdo tě nenutí, trap se, když chceš…

Taky jsem kdysi chvíli psal v Pascalu, pochopil jsem rychle. Dneska bych do toho nešel.
Uživatelský avatar
pocitujlasku
Příspěvky: 2764
Registrován: 12 pro 2005, 00:00
Bydliště: SR, Poprad

#26 Příspěvek od pocitujlasku »

Myslel som, ze principom su vsetky rovnake, ale kazdy je vhodny pre iny ucel.
Ja napr. mcu pisem v C, alebo arduino (co je vlastne tiez C), rozne rychle skripty - bud powershell na win, alebo bash/python v linuxe, programy pre pc - C#...
Ty vies napisat to iste v x jazykoch, ale cas pisania a rychlost a velkost programu je ina.

Ccko sa dost podoba pascalu, tiez je prehladne a citatelne.
Aj pc programy som dlhe roky pisal v delphi, az kym som nepresiel na C# a zistil som, ze ten isty kod viem zapisat prehladnejsie a hlavne pri vacsich projektoch som dost narazal na obmedzenia delphi, ktore v c# nie su.
Ved nakoniec, ten, kto vymyslel delphi, vymyslel aj c#
No vidis, a tak si sa bal
Uživatelský avatar
ZdenekHQ
Významný člen
Příspěvky: 25519
Registrován: 21 črc 2006, 00:00
Bydliště: skoro Brno
Kontaktovat uživatele:

#27 Příspěvek od ZdenekHQ »

Já třeba taky jedu v Pascalu dodnes, ale jen proto, že mám ty programy prostě napsaný a jen tam "dolepuju" případné další funkce či procedury a na komunikaci třeba přes Modbus to stačí.

Chlap se třeba zblázní, vymyslí si vlastní protokol, no tak si to jen upravím a nemusím shánět program, co umí atyp CRC.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?
]
Uživatelský avatar
nostalcomp
Příspěvky: 169
Registrován: 09 lis 2022, 00:00

#28 Příspěvek od nostalcomp »

Na stránkách Atmelu (dnes Microchip) se dala stáhnout aplikační poznámka a zdroják pro připojení a ovládání I2C EEPROM AT24xx k jednočipu x51. Zdroják (podobný tomu co postoval ZdeněkHQ) byl bohatě komentovaný a obsahoval univerzální sadu rutin pro I2C komunikaci. Postnul bych to sem rovnou, ale nemám to v PC, u kterého právě sedím.

Nemusí to být vázané jen na ty EEPROM a pokud se z toho vynechají rutiny pro blokové zápisy/čtení dat, tak to ani nebude dlouhé a bude to univerzálně použitelné pro I2C obvody. Osobně jsem to zkoušel s 8951/52 a také jsem to přepisoval pro 8080 (PMI-80). I s primitivním filesystémem jsem se vešel do 1KB (a to nemá 8080 tak výkonné instrukce, jako x51). Ale pokud se má dodržet ten 20-pin x51, volil bych raději 89C4051. Přeci jen má 2x tolik paměti.

Ale ladit něco na těchto 2051/4051 procesorech je fakt vopruz (ven z patice, programátor, zpátky do patice). Možná bych ještě někde vyštrachal DPS na ladící adaptér pro 89C2051/4051. Adaptér ze zasunul do 20-pinové patice 2051/4051, ale byl na něm velký 89S51/52, který je možné programovat pohodlněji přes ISP. Po odladění stačilo program nahrát do malého procesoru a bylo hotovo. Ale i to je dnes zastaralé. Pokud už někdo vyloženě trvá na x51, může použít řadu LP se sériovým bootloaderem.
Uživatelský avatar
Celeron
Příspěvky: 20508
Registrován: 02 dub 2011, 00:00
Bydliště: Nový Bydžov

#29 Příspěvek od Celeron »

nostalcomp píše: Možná bych ještě někde vyštrachal DPS na ladící adaptér pro 89C2051/4051. Adaptér ze zasunul do 20-pinové patice 2051/4051, ale byl na něm velký 89S51/52, který je možné programovat pohodlněji přes ISP. Po odladění stačilo program nahrát do malého procesoru a bylo hotovo. Ale i to je dnes zastaralé.


Když máš 85C154 s přístupovým "prcířem" na zádech a hardware emulátor k tomu, tak je ladění na tomhle zařízení jedna báseň. Všecko co se děje v procíku máš na displeji PC. Jen si musíš nadělat redukce z DIL40 na jiný pouzdra, co mají procíky řady 51. Akorát že to má řadič na ISA sběrnu, takže nutno udržovat nějakou živou PII nebo PIII, co ještě měli ISA štekr.
Jirka

Proč mi nemůže všechno chodit hned ?!!
Uživatelský avatar
kajsmentke
Příspěvky: 187
Registrován: 30 srp 2014, 00:00

#30 Příspěvek od kajsmentke »

viete mi poradit nejaky vhodny display ? ktory ma teda aj tie vstavane fonty, pokojne nejake LCD 2x20 znakov alebo 4x20 znakov, idealne aby piny pasovali do kotaktneho pola. Najlepsie z paralelnym odosielanim kodu znaku a jeho pozicie
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“