Kazalo po Svet elektronike forumu Svet elektronike
Revija za prave elektronike
 
AlbumAlbum   Pomoč pogostih vprašanjPomoč pogostih vprašanj   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil   PrijavaPrijava 

RC5 in AT89C2051
Pojdi na stran 1, 2  Naslednja
 
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Gost






PrispevekObjavljeno: Pon Feb 16, 2004 1:31 pm    Naslov sporočila: RC5 in AT89C2051 Odgovori s citatom

Zanima me kako generirati rc5 kodo z mokrokontrolerjem AT98c2051
Največji problem mi predstavlja generiranje 36kHz inpulze z 25% duty cycle
Nazaj na vrh
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 556
Kraj: Ljubljana

PrispevekObjavljeno: Pon Feb 16, 2004 7:21 pm    Naslov sporočila: RC5 tx Odgovori s citatom

LP!
V prilogi pošiljam en primer ki je sicer narejen za Bascom AVR.Upam da bo tole pomagalo pri implementaciji za 2051.
Pozdrav
Vlado
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Peter
Začetnik


Pridružen/-a: Pon Feb 2004 13:34
Prispevkov: 16

PrispevekObjavljeno: Tor Feb 17, 2004 4:22 pm    Naslov sporočila: Odgovori s citatom

Config Timer1 = Timer , Prescale = 1 , Compare A = Toggle , Clear Timer = 1
Timer1 = 0
Compare1a = T_oc1
To naj bi bila konfiguracija tajmerja1 za AVR kaj pa za 2051 to me muči
In sicer kaj dela z Compare1a = T_oc1 nalozi se vrednost ki je določena z t_oc1 samo s čim primerja a z vrednostjo nekega internega švevca tajmerja1
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 556
Kraj: Ljubljana

PrispevekObjavljeno: Tor Feb 17, 2004 9:54 pm    Naslov sporočila: RC5 Odgovori s citatom

Pozdravljen!
Kako deluje timer pri AVR-ih ,predolga tema za forum.Kar pa zadeva timerja za družino 8051 imaš lepo napisano v Helpu.
Gospod Vilko je v enem svojem programu lepo komentiral Timer:

' Če je frekvenca krislata f je timerenota 12/f

' vrednost load je vrednost med 1 in 255 s katero polnimo števec
' z load ukazom

' Do prekinitve pride po
' 1 timerenota krat vrednost load pri mode 2
' 32 timerenot krat vrednost load pri mode 0
' 256 timerenot krat vrednost load pri mode 1

Menim da bo tole v pomoč.
Ti Rabiš frekvenco 36KHz to se pravi ena perioda je 1/f in dobiš 27,7777usec.Najbližja vrednost ti je 28usec,vsakih 14uSec spremeniš stanje na pinu in imaš frekvencu 35714Hz.
Vlado
P.S.
AVR ima že ukaz "SENDRC5",in ce ni pomembno lahko ta oddajnik narediš z 90S2313 ki je pin kompatibilen z 2051 razen reseta.
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Peter
Začetnik


Pridružen/-a: Pon Feb 2004 13:34
Prispevkov: 16

PrispevekObjavljeno: Sre Feb 18, 2004 4:31 pm    Naslov sporočila: Odgovori s citatom

Ja je pomembno s katerin uC delam ker mam 2051 na zalogi z AVR-ji pa še nisem delov tko da o njih ne vem veliko oz skoraj nič Confused vsaka pomoč je dobrodošla če se ti kje kakšna stvar zatakne
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 556
Kraj: Ljubljana

PrispevekObjavljeno: Sre Feb 18, 2004 7:18 pm    Naslov sporočila: RC5 Odgovori s citatom

Upam da bo tisto o TIMER-ju za serio 8051 pomagalo pri realizaciji projekta.
Vlado
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Peter
Začetnik


Pridružen/-a: Pon Feb 2004 13:34
Prispevkov: 16

PrispevekObjavljeno: Čet Feb 19, 2004 11:17 am    Naslov sporočila: problem z timer0 Odgovori s citatom

sem napisal program ki sledi

Config Timer0 = Timer , Gate = Internal , Mode = 2
On Timer0 Prekinitev
Load Timer0 , 2
Enable Interrupts
Enable Timer0
Priority Set Timer0
Start Timer0

Prekinitev:
P1.0 = Not P1.0
Return

ki naj bi na izhodu spremenil stanje ko pide prekinitev in s tem generirira frekvenco 250kHz pa jo ne generira mi frekvenco 7.8kHz kaj je narobe pa sem spreminil Load Timer0 , od 1 pa do 255 frekvenc na izhodu se je samo manšala od 7.8kHz proti nekaj Hz
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Čet Feb 19, 2004 11:25 am    Naslov sporočila: Odgovori s citatom

Za ukazom start timer moraš kočati glavni program ali ga poslati v neko zanko. tako pa glavni program 'zaide' v prekinitveno rutino se z return zazanka

poleg tega moraš v prekinitveni rutino ponovno napolniti timer.

poizkusi tako:

Config Timer0 = Timer , Gate = Internal , Mode = 2
On Timer0 Prekinitev
Load Timer0 , 2
Enable Interrupts
Enable Timer0
Priority Set Timer0
Start Timer0
end

Prekinitev:
load timer0, 2
P1.0 = Not P1.0
Return

vilko
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Čet Feb 19, 2004 11:28 am    Naslov sporočila: Hm, še nekaj Odgovori s citatom

Pri Mode = 2, je load timer0 2 zeeloo malo, in bodo same instrukcije, ki jih ima timer rutina prekoračile željeno vrednost, porabile ves čas,

saj res, menda pri mode=2 ni potrebno relodati timer, bi moral preveriti, pri nekaterih načinih (modih) to naredi sam mikroprocesor.

Vilko
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
mtome
Profesionalec


Pridružen/-a: Pon Jan 2004 14:29
Prispevkov: 168
Kraj: ljubljana

PrispevekObjavljeno: Čet Feb 19, 2004 11:30 am    Naslov sporočila: Odgovori s citatom

Kaj je to rc5 koda?
_________________
l.p. Matjaz
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Čet Feb 19, 2004 11:31 am    Naslov sporočila: In še to Odgovori s citatom

Vsaka prekinitvena rutina ima cca 20 push instrukcij, ki vsaka vzame nekaj časa, in na koncu spet 20 pop instrukcij, da spet vrne registre v staro stanje.
Če tega nočeš in ne rabiš, kot v tem testu, uporabi pri derinicij rutine parameter NOSAVE
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Peter
Začetnik


Pridružen/-a: Pon Feb 2004 13:34
Prispevkov: 16

PrispevekObjavljeno: Čet Feb 19, 2004 7:22 pm    Naslov sporočila: Odgovori s citatom

Očitno bo treba iti kar na AVR procesor bom pa poskušal še naprej napisati pogram za 89C2051. Korajža velja bom pa poskusiu še to z NOSAVE. Program je mi že bere tipkovnico Adresso določim decimalno kodo tipke pa določim kar z prebrano tipko npr Keypres=13 deounce...
nato pa je treba vse to nekako spraviti na izhodni port in sicer če je logična 1 potem moram na portu izpisati 01 če pa je logična 0 potem pa je potrebno na port poslati 10
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Peter
Začetnik


Pridružen/-a: Pon Feb 2004 13:34
Prispevkov: 16

PrispevekObjavljeno: Pet Feb 20, 2004 8:43 pm    Naslov sporočila: Odgovori s citatom

V baskom-u sem napisal nasledno kodo ki jo naj bi boila pravilna sodeč po helpu za assembler v baskomu zakaj mi to ne dela tam piše da je treba pred asm label dati klicaj pa to ne dela zakaj!!!????



MOV R0 , #2
!Sk3: Mov R1 , #50
!sk2: Mov R2 , #50
!sk1: Djnz R2 , Sk1
DJNZ R1 , SK2
DJNZ R0 , SK3
RET
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Sob Feb 21, 2004 6:01 am    Naslov sporočila: Odgovori s citatom

Nisem strokovnjak za assembler 8051, tako da ne vem kaj delaš, a bom vseeno ugibal, kaj bi lahko bilo narobe. Kadar gre kaj narobe, je vedno možnih veliko razlogov, in če gra kaj prav, potem si nekaj spregledal, pravi gospod Murphy v svojih zakonih logike.

Torej najprej ugibam, da gre za podprogram prekinitve, pa četudi ne,
v podprogramu uporabljaš registre, ki jih je verjetno uporabljal tudi glavni program, predno je klical tvoj podprogram. Ko rečeš Return se vrneš v glavni program z ničlami v registrih, v katerih je glavni program morda imel drugo vsebino.

Poizkusi z

push r0
push r1
push r2
MOV R0 , #2
!Sk3: Mov R1 , #50
!sk2: Mov R2 , #50
!sk1: Djnz R2 , Sk1
DJNZ R1 , SK2
DJNZ R0 , SK3
pop r2
pop r1
pop r0
RET

Kot rečeno, ugibam, in morda sem napisal neumnost, naj še kak assembleraš reče svoje mnenje.
Vilko
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Peter
Začetnik


Pridružen/-a: Pon Feb 2004 13:34
Prispevkov: 16

PrispevekObjavljeno: Ned Feb 22, 2004 10:07 am    Naslov sporočila: Odgovori s citatom

Hvala vilko za pomoč, sem pa že sam ugotovil kako rešiti vso stvar. Ugotovil sem da so te asemblerske labele lahko velik problem. Pa vsem ki se bodo kdaj v baskomu poslužili asemblerja vam povem da naj uporabljajo raje namesto label nasledne

Zakas:
MOV R0 , #1
MOV R1 , #1
DJNZ R1,*-0
djnz r0,*-4

*-4,*-0 pomeni da skočimo 4(0) lokacije v PC-ju nazaj (program counter)
lahko pa skačemo tudi naprej in sicer *+2(*+10) kar pomeni 2 lokaciji v pc ju naprej Very Happy Very Happy Idea
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika Časovni pas GMT + 1 ura, srednjeevropski - zimski čas
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
You cannot attach files in this forum
You cannot download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group