ASD, 23.7.2009 12:05:26
EsoRimmer, 23.7.2009 20:10:47
mám ještě otázku, k čemu je pin 18 ADDR???
ASD, 23.7.2009 21:17:54
ADDR je na to, že když tyto obvody připojíš dva na jednu sběrnici, tak aby se odlišily. Dělá se to tak, že na jednom to dáš na GND a na druhém na VCC a pak každý obvod má svoji adresu.
EsoRimmer, 23.7.2009 22:15:37
nevim jestli to chápu dobře, takže když mám jen jeden obvod ADDR tak stačí když ho tám na GND?
EsoRimmer, 23.7.2009 22:38:23
oprava: dám na GND?
ASD, 23.7.2009 22:55:17
Ano, můžeš ho dát na GND.
EsoRimmer, 24.7.2009 08:18:16
ok, lecos sem si přečetl a myslim že když to budu zkoumat na nepájivim poli tak na ten program přijdu, ale vyskytl se mi další problém: po vypnutí napájení se mi data nikam neuloží a nastavení u kterýho sem skončil tam nebude, tak sem přišel na to že to zároveň budu vysílat do nějaký paměti, napadla mě 24C16, ale když to do ní vyšlu stejně jako do audioprocesoru tak po zapnutí z ní musim číst a to nastavení co v ní je poslat do toho audioprocesoru ne..?? jestli je to tak tak to bude složitější než sem si myslel, takže jestli někdo máte nějakou radu uvítám jí
ASD, 24.7.2009 09:45:49
Je to tak, nastavení si musíš pamatovat ty v nějaké EEPROM. Když si koupíš 89S8253, tak se nebudeš muset učit nový procesor a máš EEPROM uvnitř.
EsoRimmer, 24.7.2009 21:17:33
dám tam tu eeprom páč doma mám jen 89S51 a pár eepromek a obědnávat jen uC a platit poštovný 100,- se mi moc nechce a cesta k nejbližšímu elektru se součástkama mě vyjde na stejno. jen bych potřeboval nakopnout jak má zhruba ten program vypadat.
Já mám obrázek takovej že po zapnutí to nejdřív musí číst z eepromky a pokud tam budou uložený data tak je uC načte do zásobníku, pošle do toho TDAčka protokol pro spuštění a pak ty data (ty co byly v eeprom) ze zásobníku a až pak se dá udělat smyčka regulace basů výšek atd... nebo to bude ještě složitější??
pak bych ještě potřeboval pomoct jak je to ohledně up/down (třeba hlasitosti) jen dvouma tlačítkama
ASD, 25.7.2009 00:53:31
V RAM udržuj stav toho, co je uvnitř TDAček. Po zapnutí načteš obsah EEPROM do RAM, pokud není platný kontrolní součet, tak z FLASH nahraješ výchozí hodnoty a celé pošleš do TDAček. Do paměti EEPROM zapisuj 1 minutu po poslední změně a poznač si k tomu kontrolní součet.
Up/Down můžeš udělat na dva piny, prostě přičteš nebo odečteš číslo 1 a odešleš tuto změnenou hodnotu do TDAček. Je to jako normální tlačítka, prostě 10x za sekundu čteš stav a když je změna, tak se podle toho zařídíš.
EsoRimmer, 25.7.2009 10:24:34
a ohledně těch tlačítek, nebyl by odkaz na nějakej příklad?? z něj to pochopim nejlíp
ASD, 25.7.2009 12:38:45
Příklad nemám, ale není to složité.
1) Zapamatuješ si stav tlačítka v paměti, počáteční stav je 1, tlačítka se spínají do země.
2) V přerušení 10x za sekundu zjišťuješ stav tlačítka. Pokud je stav stejný jako v paměti, neděláš nic. Pokud je různý, tak si zkopíruješ nový stav do paměti a zároveň provedeš kontrolu na změnu z 1 na 0. Pokud byla změna, tak uděláš nějakou akci.
3) To "udělat akci" ale nedělej v tom přerušení, prostě si to někam poznač a a řeš to až ve vhodné době.
EsoRimmer, 25.7.2009 16:53:44
mám další otázku: v protokolu ke spuštění toho TDA je BYTE: 100001A0 kde A znamená úrověň ADDR (v datashetu je logic level ON pin ADDR) a já když mám ADDR na GND tak místo A mám napsat 0?
ASD, 25.7.2009 16:57:10
Ano
EsoRimmer, 25.7.2009 17:22:12
tak sem zkusil přes I2C posílat data pomocí tlačítek up/down a nešlo to
zatim sem zkoušel jen něco základního, a přijmat to v programu na PC ale bez výsledně
ASD, 25.7.2009 18:13:00
Napřed rozchoď komunikaci na I2C, například ve smyčce po 10-ti sekundách měň výšky, pak teprve se pouštěj do dalších věcí.
EsoRimmer, 25.7.2009 18:24:07
a ještě mě něco trápí, po každých 8 bitech (1bytu) musim poslat potvrzení (acknowledge) nevim jestli to je úroveň LOW nebo HIGH a jak to napsat v programu..
ASD, 25.7.2009 19:41:06
ACK neposíláš ty, ale TDAčko a ty musíš nastavit 1 přes pull-up. Protože 89S51 má pull-upy defaultně, prostě stačí 9-tý bit posílat jako normální 1.
EsoRimmer, 25.7.2009 20:05:19
moment, takže když odešlu do registru a následně do TDA byte: MOV R0,#10000100B tak hned po něm musim poslat MOV R0,#1D ???
ASD, 25.7.2009 20:42:58
Posílá se po 9-ti bitech a v registru máš jenom 8 bitů, musíš se s tím nějak poprat.
EsoRimmer, 25.7.2009 21:14:03
popavdě mě nic nenapadá, pokud znáš odpověď tak bych jí uvítal a nebo aspoň napověz
ASD, 25.7.2009 23:06:31
Uděláš si rutinu na odeslání bitu X.
Uděláš si rutinu na odeslání bytu Y, která po jednotlivých bitech zavolá tu X 8x a na konci zavolá X ještě jednou, aby odeslala jedničku.
EsoRimmer, 26.7.2009 09:42:30
asi to dělám celou dobu blbě, mám to tam tak že odešlu 1byte jako celek:
mov R0,#10000100B
call vysilani
pak to skočí na "vysilani" a odešle obsah R0 po I2C
Takhle je to blbě co, protože fakt nevim kam ten devatej bit přiřadit, nebo ho mám prostě přiřadit za to binární číslo..? že by tam bylo 100001001B ?
ASD, 26.7.2009 09:57:56
Ano, prostě vyšleš 1, 0, 0, 0, 0, 1, 0, 0, 1