ATMEL 89C2051 komunikacia z displayom cez I2C
Moderátor: Moderátoři
- kajsmentke
- Příspěvky: 187
- Registrován: 30 srp 2014, 00:00
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
- kajsmentke
- Příspěvky: 187
- Registrován: 30 srp 2014, 00:00
Tuto pouziva chlapik ATTINY85 (co nieje o nic vykonnejsi stroj) a uplne rovnaky display aky mam ja.
akurat to nema v Pascale
Naozaj skoda ze Mikroe MIcroPascal nema nejaku sirsiu podporu ani od samotneho vyrobcu aj ked platenu verziu predava za vyse 200USD
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.
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).
- pocitujlasku
- Příspěvky: 2764
- Registrován: 12 pro 2005, 00:00
- Bydliště: SR, Poprad
- kajsmentke
- Příspěvky: 187
- Registrován: 30 srp 2014, 00:00
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
Mozno by to chelo namiesto 8051ky pouzit radu PIC. Koniec koncov ked to programujem vo vyssiom jazyku tak RISC architektura ma velmi trapit nemusi.
- pocitujlasku
- Příspěvky: 2764
- Registrován: 12 pro 2005, 00:00
- Bydliště: SR, Poprad
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#
- ZdenekHQ
- Významný člen
- Příspěvky: 25519
- Registrován: 21 črc 2006, 00:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
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.
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[?]
- nostalcomp
- Příspěvky: 169
- Registrován: 09 lis 2022, 00:00
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.
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.
Proč mi nemůže všechno chodit hned ?!!
- kajsmentke
- Příspěvky: 187
- Registrován: 30 srp 2014, 00:00