 |

|
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2025 12 14, 23:11. Visos datos yra GMT + 2 valandos.
|
|
|
 |
Forumas » Mikrovaldikliai » Signalo skaitymas su ATMega16
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
Puslapis 1 iš 2 Pereiti prie 1, 2 Toliau |
|
 |
 |
 |
Signalo skaitymas su ATMega16 |
Parašytas: 2008 10 04, 02:41 |
|
|
|
|
Sveiki gyvi!
Iškilo šiokių tokių problemėlių.
Yra du uC (ATMega16). Taktinis dažnis- 16MHz. Vienas uC išsiunčia signalą (su IR diodu)- "ant" 40KHz nešančiosios bangos. Signalas susideda, tarkim, iš 8 bitų kurie neša informaciją ir iš dviejų pusbaičių (prieš ir po tų aštuonių "esminių" bitų), kurie pasako, kad duomenų porcija prasideda ir baigiasi.
Šitokio signalo imtuve tupi TSOP4840, kuris yra IR imtuvas ir demoduliatorius (40KHz), ir uC.
1-a problema. Kol kas dar tik moku programuoti ATmega16 su C kalba (jei konkrečiau su kuo: IAR Embedded Workbench IDE; PonyProg2000). Ir būtų įdomu sužinoti kiek taktų trunka kiekviena operacija apibrėžta C kalba. Nes programų su asm nesinori rašyti kažkaip... Žinant kiek kokia operacija trunka, jau galima generuoti tikslius 40KHz ir pan...
2-a problema Signalas gali būti išsiūstas bet kuriuo laiku, todėl reikia sugalvoti, kaip nepavėluoti nuskaityti "esminius" 8 bitus. Kadangi 16MHz/40KHz=400, tai galima tikrinti INPUT su ciklais ir gavus <1> į kojelę, vykdytų programos skiltį, kuri sulaukus 0>1 pradėtų tiksliai skaičiuot ir tam tikrais laikais surinkinėt reikšmes iš "esminių" bitų. Aišku, negavus uždarymo pusbaičio, fiksuojama perdavimo klaida ir pan.
Nuo tada, kai uC ir taip turi ką veikt apart INPUT tikrinimo, norėtųsi naudoti pertraukimą. Aišku, nežinau kaip jį naudoti šituo atveju.
Gal kas turit idėjų arba šiaip ką nors galit patarti? Ir išvis ar ATMega16 pajėgus viršuje išvardintiems darbams+ LCD valdymas ir dar keletas smulkių funkcijų, o gal net užtektų ir paprastesnio uC? |
|
|
|
|
|
 |
 |
Signalo skaitymas su ATMega16 |
Parašytas: 2008 10 04, 13:58 |
|
|
|
|
Visu pirma tokiem dazniu generavimams yra taimeriai. o jei generuosi programiskai tai siuntimo metu negalesi nieko primineti.
analogiskasi atmega turi ir periodo matavimo sistema. kuria verta pasinaudoti priimant.
C kalboje nera tiksiu komandu ivykdymo laiku, nes sukompiliuotas asambleris priklauso nuo situacijos, ta pati C komanda gali susikompiliuoti i skirtingas asamblerio komandas.
jei tau reikia tikslaus laiko tai naudok taimerius.
arba reikia eksperimentiniu budu nustatyti
lengviausia funkcijos vykdymo laika ismatuoti su taimeriu
ar atmega pajegus ar ne daryti tai ka tu nori priklauso nuo to ka tu nori daryti. tu siek tiek papasakojei norimas funkcijas, bet nieko pasakyti neimanoma nezinant koks ju panaudojimas. |
|
|
|
|
|
 |
 |
Signalo skaitymas su ATMega16 |
Parašytas: 2008 10 04, 21:25 |
|
|
|
|
| Ir dar: nepamiršk, kad čia ne RS232, ir taip duomenų perdavinėti negalima. Veiks, bet labai nepatikimai. Paimk kokį nors distancinio valdymo pultą, ir pažiūrėk kokias komandas jis generuoja. Pasidarys aiškiau. Nors gal ir nepasidarys, priklauso nuo tavo žinių elektronikoje... |
|
|
|
|
|
 |
Signalo skaitymas su ATMega16 |
Parašytas: 2008 10 05, 08:54 |
|
|
|
|
pvz PORTA.1 generuoja 40khz signala, nereikia jokiu taimeriu
| Kodas: |
PORTA.1 = 1;
delay_us(12);
PORTA.1 = 0;
delay_us(13); |
geriausia naudot RC5 duomenym perduot |
|
|
|
|
|
 |
Signalo skaitymas su ATMega16 |
Parašytas: 2008 10 05, 12:41 |
|
|
|
|
| ReM rašo: |
| Generuot tai generuoja, bet kas iš to? Visas jo darbas, daugiu nieko nepadarys. |
rc5 loginis 1 ir 0
| Kodas: |
void log_1(){
PORTA.1 = 0
delay_us(880);
for(i=0; i<35; i++){
PORTA.1 = 1;
delay_us(12);
PORTA.1 = 0;
delay_us(12);
}
}
//----------------------------
void log_0(){
for(i=0; i<35; i++){
PORTA.1 = 1;
delay_us(12);
PORTA.1 = 0;
delay_us(12);
}
delay_us(880);
} |
|
|
|
|
|
|
 |
 |
Signalo skaitymas su ATMega16 |
Parašytas: 2008 10 05, 14:29 |
|
|
|
|
Jei konkrečiai, tai aš noriu naudoti ATMega16 kaip "Laser Tag" komplekto širdį. Duomenų perdavimas ten toks, kad uC yra užprogramuotas pasiųsti du užprogramuotus ir pastovius baitus. Aš nenoriu uC naudoti kaip moduliatoriaus realiame laike. Tai tokie reikalavimai siuntimui. O priėmimui jie daug didesni. Manau, kad reiktu daryt pertraukimą, kad gavus kažkokį signalą, įsijungtų paprogramė, kuri sugebėtų užsirašyt tuos 2 baitus.
O funkcija delay_us(); - ar čia reikia papildomų reikalavimų dėl generatorių nustatymo fuse bituose. Pagal ką ji orientuojasi, kad mikrosekundė yra reali mikrosekundė? |
|
|
|
|
|
 |
Signalo skaitymas su ATMega16 |
Parašytas: 2008 10 05, 14:54 |
|
|
|
|
pirma geriau ismok is distancinio pulto priimti signala, poto issiust, o jau tada ir lasertag pasidarysi  |
|
|
|
|
|
 |
 |
Signalo skaitymas su ATMega16 |
Parašytas: 2008 10 09, 00:27 |
|
|
|
|
Na, man atrodo, kad distancinio valdymo pulte ten truputį kitaip, nors, aišku, principas tas pats.
Beje, kaip ir kur yra aprašyta funkcija <<dalay_us()>>?
Ir visgi, jaučiu, reiks programuot asm'u, nes su aukšto lygio kalbom neišeis suskaičiuot tiksliai.
Bandysiu daryt taip: Norint išsiusti, bus paprogramė, į kurią įeinama nuspaudus mygtuką. Ji sugeneruoja 40KHz, atitinkamai moduliuotą (kaip, skaityti TSOP4840 datasheet) informacija (<16bit>=const) . Priėmimo metu, gavus pirmą bitą, bus galima vykdyti pertraukimą, kuris nukreips į paprogramę, kuri nuskaitinės išorinį signalą. Kadangi programuojant su asm galima tiksliai suskaičiuot kiek ten viskas užtruks (nes kiekviena komanda turi tikslų atlikimo taktų skaičių*), tai galima kiekvieno bito siuntimo ir priėmimo laikus susinchronizuot. Va.
Pataisykit, jei supratot mintį ir radot klaidų.
Dabar prasidės didieji bandymai ir didžiosios klaidos. Puiku. |
|
|
|
|
|
 |
 |
Signalo skaitymas su ATMega16 |
Parašytas: 2008 10 09, 00:46 |
|
|
|
|
viskas grazu kalbose, bet pamatysi kad asambleris tau nepades nes suomaisysi beskaiciuodamas. lengvisu tiesiog eksperimentiskai viska padaryti
dealy tai tiesiog kazkoks ciklas ir tiek, jei naudoji codevision tai gali pasiziureti lib kataloge kaip visos funkcijos atrodo.
pagrindine paroblema tau turbut bus tai kad procesriaus greicio ko gero neusteks tam kad galetum keleta darbu vienu metu daryti. |
|
|
|
|
|
 |
 |
Signalo skaitymas su ATMega16 |
Parašytas: 2008 10 12, 14:14 |
|
|
|
|
| Digix rašo: |
viskas grazu kalbose, bet pamatysi kad asambleris tau nepades nes su[si]maisysi beskaiciuodamas. lengvisu tiesiog eksperimentiskai viska padaryti
dealy tai tiesiog kazkoks ciklas ir tiek, jei naudoji codevision tai gali pasiziureti lib kataloge kaip visos funkcijos atrodo.
pagrindine paroblema tau turbut bus tai kad procesriaus greicio ko gero neusteks tam kad galetum keleta darbu vienu metu daryti. |
Na, manau, jei kruopščiai skaičiuosiu, tai nesusimaišysiu. Aišku, tikrai prireiks ir eksperimentų.
Deja, codevision nenaudoju.
Na, 16MHz. Kiek aš įsivaizduoju, tai užtekt, nes nelabai reiks daryti keletos darbų vienu metu (kai priiminės signalo duomenis, tai nesiuntinės). |
|
|
|
|
|
 |
 |
Signalo skaitymas su ATMega16 |
Parašytas: 2008 10 12, 14:54 |
|
|
|
|
o kodėl taip nenori naudoti timer`ių?
juk nereiks beveik nieko skaičiuot, yra procas, tai tegu jis ir skaičiuoja viską. |
|
_________________ nepamirškit, klysti žmogiška
privatas - privatiems klausimams
arch linux  |
|
|
|
 |
Signalo skaitymas su ATMega16 |
Parašytas: 2008 10 13, 00:38 |
|
|
|
|
matau mokytis jis nenori,
sako geriau sugaišiu 2 dienas derindamas ciklu skaičiu, nei 3 dienas mokysiuosi kaip tuos taimerius panaudoti. |
|
|
|
|
|
 |
 |
 |
Signalo skaitymas su ATMega16 |
Parašytas: 2008 10 16, 19:28 |
|
|
|
|
| JAULER rašo: |
o kodėl taip nenori naudoti timer`ių?
juk nereiks beveik nieko skaičiuot, yra procas, tai tegu jis ir skaičiuoja viską. |
Nelabai suprantu, ką turi omenyje?
Aš mikroprocesoriais labai neseniai pradejau domėtis, tai aš žalias kaip reikiant čia.
Nu, aš pasiskaitysiu, kontrolerio datasheet'e, kur rašo "taimeriai".
Ačiū, centronic, iššovimo kodas buvo tikrai naudingas:)
Bet dabar susidūriau su kita problema- interrupt'ai.
Bandžiau parašyti kodą, kad paspaudus 3ą mygtuką A porte (INT2) (žiūrėti bandymų plokštę schemų archyve), užsižiebtų B porto LED'ai:
| Kodas: |
#include <iom16.h>
ORG $0
RJMP Start
ORG $24
RJMP IService
Start:
LDI r16, HIGH (RAMEND)
OUT SPH, r16
LDI r16, LOW (RAMEND)
OUT SPL, r16
LDI r18, 0
OUT DDRA, r18
LDI r18, 255
OUT PORTA, r18
LDI r18, 00100000b
OUT GICR, r18
SEI
Start01:
LDI r17, 255
OUT DDRD, r17
OUT PORTD, r17
RJMP Start01
IService:
PUSH R16 ; save a register to stack
IN R16,SREG ; read status register
PUSH R16 ; and put on stack
LDI r16, 255
OUT DDRB, r16
OUT PORTB, r16
POP R16 ; get previous flag register from stack
OUT SREG,R16 ; restore old status
POP R16 ; get previous content of R16 from the stack
RETI ; and return from int
END
|
Bet, aišku, B portas nė krust (portas D žiba).
Kame reikalas? |
|
|
|
|
|
 |
|
 |
Google paieška forume |
|
|
 |
Naujos temos forume |
|
 |
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
 |
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
 |
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
 |
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
 |
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
 |
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
 |
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
 |
Must have farming mods
Farming simulator modhub,
Best farming simulator mods |
|

|
 |