Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Da li pravilno tumacim semu? (Samogradnja MIDI klavijature)

[es] :: Elektronika :: Da li pravilno tumacim semu? (Samogradnja MIDI klavijature)

Strane: 1 2

[ Pregleda: 11467 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Leftist
Luka Stojanovic
Bg

Član broj: 21766
Poruke: 401
*.etf.bg.ac.yu.

Jabber: slartibartfast@jabber.cc
Sajt: www.reggae.rs


+5 Profil

icon Da li pravilno tumacim semu? (Samogradnja MIDI klavijature)15.10.2004. u 14:54 - pre 237 meseci
Koliko ja kapiram posto je ovaj dekoder sa invertujucim izlazima, stiskanje tastera se registruje tako sto je napon na RBx ulazima ~Vd?



[Ovu poruku je menjao Leftist dana 19.10.2004. u 17:23 GMT+1]
 
Odgovor na temu

obranko
severna amerika

Član broj: 36599
Poruke: 152
*.nhq.hrdc-drhc.gc.ca.



+1 Profil

icon Re: Da li pravilno tumacim semu?15.10.2004. u 20:34 - pre 237 meseci
Kada se pritisne taster na odgovarajucem RB ulazu ce biti logicka nula. RB port mora da se konfigurise da ima pull-up (ako to moze da se konfigurise kod ovog mikrokontrolera)
 
Odgovor na temu

Leftist
Luka Stojanovic
Bg

Član broj: 21766
Poruke: 401
*.drenik.net.

Jabber: slartibartfast@jabber.cc
Sajt: www.reggae.rs


+5 Profil

icon Re: Da li pravilno tumacim semu?15.10.2004. u 21:42 - pre 237 meseci
Hm, pa to dodje neto kao logicniji pogled na stvar, samo mi u tom slucaju nije jasno sta je na ostalim RB ulazima. Plus jedno glupo pitanje: a sta je pull-up?
 
Odgovor na temu

obranko
severna amerika

Član broj: 36599
Poruke: 152
*.cpe.net.cable.rogers.com.



+1 Profil

icon Re: Da li pravilno tumacim semu?16.10.2004. u 04:17 - pre 237 meseci
Pozdrav,

Pocnimo od pull-up. Ako predpostavimo da su pinovi RB cisti ulazni pinovi (bez pull-up) onda ja napon na bilo kome RB pinu uvek nedefinisan bez obzira na stanje prekidaca i stanje izlaza dekodera.
Ako na svaki RB pin dodamo jedan otpornik (reda 4-5K) povezan na +5V na drugoj strani (to se zove pull-up), onda ce napon na svakom pinu (ukoliko nijedan prekidac nije pritisnut) biti 5V.
Pedpostavimo da je korisnik pritisnuo prekidac broj 5. Mikrokontroler (koji ovde radi kao keyboard scanner) radi sledece:
na pinove RA0,RA1 i RA2 dovede 000 pa prekontrolise port RB. U ovom slucaju pin Y0 dekodera bice na niskom logickom nivou (0V) tako de ce dioda vezana na prekidac 5 biti pozitivno polarisana (anoda +5V preko otornika i prekidaca, a katoda 0V) pa ce napon na anodi (sto je i napon na pinu) biti oko 0.7V sto je logicka nula. Procesor detektuje logicku nulu na pinu RB4 sto je znak da je prekidac broj 5 pritisnut.
za sve ostale kombinacije signala na pinovima RA0, RA1 i RA2 (001, 010, 011, 100, 101, 110 i 111) nijedna od dioda nece biti direktno polarisana (kada je pritisnut prekidac 5). U svim tim slucajevima napon na katodi diode vezane na prekidac 5 bice 5V a na anodi ce biti takodje 5V. Iz ovoga se vidi da ce napon na svim RB pinovima biti +5V.
Posto otpornici nisu nacrtani na semi predpostavljam da mikrokontroler ima mogucnost da generise interni pull-up (vecina PIC mikrokontrolera ima tu mogucnost, pregledaj kontrolne registre).
 
Odgovor na temu

Leftist
Luka Stojanovic
Bg

Član broj: 21766
Poruke: 401
*.drenik.net.

Jabber: slartibartfast@jabber.cc
Sajt: www.reggae.rs


+5 Profil

icon Re: Da li pravilno tumacim semu?17.10.2004. u 20:03 - pre 237 meseci
Hvala, to me je zbunjivalo sve vreme.
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Da li pravilno tumacim semu?17.10.2004. u 21:59 - pre 237 meseci
I ja sam oduvek hteo da napravim MIDI klavijature, ali sa 88 dirki kao kod pravog klavira. Ima li neko ili zna li neko gde ima da se nadje takav projekat. Ako nema bas sa 88, onda moze i nesto manje. Ima li neko specifikaciju za MIDI signal, da bih imao ideju kakav signal mikrokontroler treba da šalje računaru? Ima li neka gotova komponenta koja generiše takav signal (na osnovu pritisnutih tastera) ili mora da se koristi mikrokontroler?
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: Da li pravilno tumacim semu?17.10.2004. u 23:22 - pre 237 meseci
Kad sam već tu, evo da probam malo "sporije" da objasnim kako se obavlja očitavanje ovih tastera i zašto pull-up otpornici, za one koji se prvi put susreću sa očitavanjem tastature na ovaj način.
Elem, u gornjoj šemi mikrokontroler očitava 64 tastera preko samo 8 ulaznih pinova RB0...RB7. Kod većine današnjih mikrokontrolera pinovi su bidirekcioni (ili kvazibidirekcioni), što znači da se mogu konfigurisati da budu ulazni ili izlazni, po potrebi, a to se obavlja određenom programskom instrukcijom u programu mikrokontrolera upisivanjem neke vrednosti u neki registar koji je konfiguracioni registar određenog porta, u ovom slučaju porta B. Kada je neki pin izlazni, to znači da je vrednost napona na tom pinu određena nekim kolima unutar mikrokontrolera (da ne detaljišemo sad previše), odnosno da mikrokontroler prego tog pina šalje informaciju u spoljni svet. Ta informacija je "0" ili "1" odnosno neki naponski nivoi (npr. +5V za logičku "1" i 0V za logičku "0"). Međutim, kada je neki pin konfigurisan kao ulazni, onda unutrašnja kola mikrokontrolera ne određuju koliki je napon na tom pinu, već to treba da definišu neke spoljne komponente. Taj izlazni pin je u tom slučaju unutar mikrokontrolera obično spojen na ulaz nekog trostatičkog bafera bla, bla, bla, odnosno da se spustimo još malo dublje u fiziku, na gejt MOSFET tranzistora koji ima veliku otpornost, koja je toliko velika da se može smatrati da to parče žice praktično "visi" u vazduhu, odnosno da nije spojeno ni na šta unutar mikrokontrolera (međutim kola unutar mikrokontrolera ipak mogu da "očitaju" napon sa te žice iako ona prividno "visi u vazduhu"). Sa druge strane, spolja, žica kojom je pin vezan za prekidač takođe "visi u vazduhu" ako prekidač nije pritisnut. Sad imamo situaciju da neko parče žice nije spojeno ni na šta ni sa jedne ni sa druge strane. Ključna stvar je da se sada takvo parče žice ponaša kao antena koja "hvata" elektromagnetne signale iz svoje okoline. Znači, komšinica uključi usisivač - naša antenica uhvati smetnju koja je nastala od uključivanja usisivača (kao kad imamo smetnju na TV-u kad radi usisivač ili mikser ili kad neko vergla kola u dvorištu) i mikrokontroler pomisli da je taster pritisnut i odsvira falš!
Da se to ne bi dešavalo, na takve linije se stavljaju pull-up ili pull-down otpornici, u zavisnosti od toga šta nam treba. Pull-up otpornici su otpornici relativno velike otpornosti (obično ~KiloOma) preko kojih se problematična linija vezuje na pozitivno napajanje (pull-up) ili na masu (pull-down). Time se eliminiše uticaj smetnji iz okoline na naponsko stanje te linije kada ona "visi u vazduhu" bilo sa jedne ili sa obe strane. Pošto su ti otpornici relativno velike vrednosti oni ne utiču na na stanje napona na tim linijama kada ostatak hardvera postavi na te linije neke napone.
U našem slučaju, na gornjoj šemi, predviđeno je da kada je pritisnut neki taster, njemu pripadajuća linija bude na logičkoj nuli, odnosno na niskom naponu (biće jasnije malo kasnije), odnosno kada taster nije pritisnut, ta linija bi trebala da bude na visokom logičkom nivou. Stoga je tu liniju potrebno spojiti na pozitivno napajanje preko pull-up otpornika (ako u samom mikrokontroleru ne postoje pull-up otpornici).
što se tiče očitavanja koji je taster pritisnut to ide ovako:
Mikrokontroler očitava tastaturu u grupama od po 8 tastera. Na izlaznim pinovima RA0, RA1 i RA2, mikrokontroler postavlja binarni kod grupe tastera koju želi da očita (ima 8 grupa: 000, 001, 0010, ..., 111). Na osnovu tog koda, dekoder(74LS138) postavlja logičku nulu (nizak napon) na samo jednu od svojih izlaznih linija Y0...Y7, a na svim ostalim izlazima je logička jedinica (visok napon). Ako je u grupi tastera, čija je linija tog trenutka na logičkoj nuli, pritisnut neki taster, pripadajuća dioda će da provodi i odgovarajući ulazni pin (RB0...RB7) će biti na logičkoj nuli, dok će ostale linije na kojima nije pritisnut taster sigurno biti na logičkoj jedinici zbog pull-up otpornika. Kada mikrokontroler očita podatke sa RB0...RB7 znaće da je pritisnut onaj taster na čijoj je liniji stanje "0", a na osnovu onoga što je postavio na RA0, RA1 i RA2 zna iz koje je grupe taj taster (zna koju grupu tastera u tom trenutku očitava).
Mikrokontroler redom u krug očitava tastere iz prve, druge, treće, ... , osme grupe, pa opet ispočetka, ali tolikom brzinom (više stotina puta u sekundi) da je praktično nemoguće toliko brzo pritisnuti neki taster, a da to njemu promakne.


 
Odgovor na temu

ADRENALIN

Član broj: 17952
Poruke: 278
*.mobtel.co.yu.



Profil

icon Re: Da li pravilno tumacim semu?18.10.2004. u 03:37 - pre 237 meseci
Leftis ajde ostavi ovde .hex fajl za Mikrokontroler.Jesi li ti ovo napravio, da li radi?
Kako bi isprobao ovo mislim u kom programu, može li Cubase i da li treba nešto specijalno da se konfiguriše u njemu?
 
Odgovor na temu

Leftist
Luka Stojanovic
Bg

Član broj: 21766
Poruke: 401
*.etf.bg.ac.yu.

Jabber: slartibartfast@jabber.cc
Sajt: www.reggae.rs


+5 Profil

icon Re: Da li pravilno tumacim semu?18.10.2004. u 09:53 - pre 237 meseci
.hex fajl za gornju semu se nalazi (izmedju ostalog) na sajtu www.geocities.com/JDPetkov nasao sam je na par mesta na internetu gde su ljudi rekli da su po toj semi napravili i da radi. Na tom sajtu se mogu naci i neke slozenije seme za midi klavijature (vise dirki, vise MIDI opcija). Posto ja hocu da preradim neki sintisajzer sa 5x12 matricom lozim se da sam napisem program za 16f57 (ovaj PIC sa slike nema dovoljno pinova za takvu matricu), pa kud puklo da puklo.

Sto se midi standarda tice imam taj fajl kuci, pa to mogu kasnije da nakacim, ali sve se moze naci preko gugla.
 
Odgovor na temu

ADRENALIN

Član broj: 17952
Poruke: 278
*.mobtel.co.yu.



Profil

icon Re: Da li pravilno tumacim semu?18.10.2004. u 22:29 - pre 237 meseci
Ajde nakači taj MIDI standard fajl ovde,što se tiče nedovoljno pinova možeš da koristiš samo dodatni SIPO šift registar i tako povećaš broj nožica.Taj SIPO staviš tamo kod skeniranja.Ja bih prvo bilokako isprobao ovo pa kad vidim da radi tek bi se tada upustio u neku komplikaciju.
 
Odgovor na temu

Leftist
Luka Stojanovic
Bg

Član broj: 21766
Poruke: 401
*.drenik.net.

Jabber: slartibartfast@jabber.cc
Sajt: www.reggae.rs


+5 Profil

icon Re: Da li pravilno tumacim semu?19.10.2004. u 00:01 - pre 237 meseci
Evo fajla.

OK imam ideju sta bih uradio sa shifterom, ali sta SIPO znaci? Osecam potrebu da malo pojasnim sta ja ustvari znam: prve dve godine ETF-a. Znaci sve ja kapiram u teoriji sta se dogadja i sta cemu sluzi, ali je praksa 0 (slovima: krompir).

Nasao sam negde i bolje i detaljnije opisamo sve u vezi standarda (hardverske karakteristike, detaljno opisane ove opcije...) ali sam to izgleda greskom izbrisao.
Prikačeni fajlovi
 
Odgovor na temu

ADRENALIN

Član broj: 17952
Poruke: 278
*.mobtel.com.



Profil

icon Re: Da li pravilno tumacim semu?19.10.2004. u 01:41 - pre 237 meseci
SIPO znači Serial In Paralel Out, početak treće VETŠ.
Skini Data Sheet za 74HC595 i 74HC597 prvi je SIPO, adrugi PISO (Paralel In Serial Out)
Ovo su šift registri što znači da ti ustvari njima šalješ podatke serijski (putem jedne linije), a dobijaš na izlazu 8 linija.Mora postojati takt koji će odrediti vreme trajanja svakog bita da bi ovo uopšte funkcionisalo.Još jedan pin je potreban da bi svi podaci izašli iz registra u isto vreme tj. da ne bi bilo grešaka i zbog definisanosti jednog bajta.Ovo je objašnjenje za SIPO.
Kod PISO stvar je obrnuta i ti ustvari sa jednim pinom učitavaš podatak u registar, a drugi sluši opet za takt dok treći nosi serijske podatke.

Na ovaj način, u oba slučaja, umesto da koristiš 8 linija ti koristiš samo 3,a dobijaš isti efekat.
Mane ovog rešenja su duši i sporiji kod mikrokontrolera.
 
Odgovor na temu

Leftist
Luka Stojanovic
Bg

Član broj: 21766
Poruke: 401
*.drenik.net.

Jabber: slartibartfast@jabber.cc
Sajt: www.reggae.rs


+5 Profil

icon Re: Da li pravilno tumacim semu?19.10.2004. u 16:20 - pre 237 meseci
Rekao bih da sam smislio kako da se postojeci mikrokontroler i program povezu na ovu moju klavijaturu. Dakle posao sam od ideje da je 12*2 = 3*8 : ). dakle podaci sa matrice bi se ucitavali u registre, a iz registara slali u na ulaze. Sto se prozivanja tice, to bi islo ovako:
RA = xx000 procita se prva oktava u jedan 8-bitni i jedan cetvorobitni registar, pri cemu bi se osmobitni odnah prosledio na RB (moze li to???).
RA = xx001 procita se druga oktava u drugi cetvorobitni i drugi osmobitni, dva cetvorobitna se posalju na RB.
RA = xx010 ne cita se nista sa klavijature, posalje se zadnjih 8 bita
.
.
.
moze li ovo da prodje?
 
Odgovor na temu

ADRENALIN

Član broj: 17952
Poruke: 278
*.mobtel.com.



Profil

icon Re: Da li pravilno tumacim semu? (Samogradnja MIDI klavijature)22.10.2004. u 02:24 - pre 237 meseci
Ja te ništa nisam skapirao ali nadam se da si ti mene u vezi tih registara.Probaj prvo ovako kako jeste jer nije redak slučaj da šeme sa net-a ne rade!!!

Kad praviš?
 
Odgovor na temu

stameni
Ivan Stamenković

Član broj: 6739
Poruke: 538



+9 Profil

icon Re: Da li pravilno tumacim semu? (Samogradnja MIDI klavijature)23.10.2004. u 21:29 - pre 237 meseci
S obzirom na šemu, mislim da je greh koristiti šift-registre, jer u ovom slučaju broj tastera može se udvostručiti, a da se ne izgubi mnogo na brzini i veličini budućeg koda.

Dodatni potrebni elementi:
- jedan invertor;
- jedan dekoder 74LS138;
- dovoljno tastera i dioda ;)

Elem, RA4 nije vezan ni na šta, pa se može iskoristiti za selektovanje dve »tastaturne banke«. Njega direktno vežeš na jedan od slobodnih čip-selekt ulaza prvog dekodera (npr. na G2A, umesto na masu), a preko invertora na odgovarajući čip-selekt ulaz drugog dekodera (G2A). Na izlaze drugog dekodera vežeš tastere i diode isto kao i na prvi. Drugu banku vežeš isto na RB0-RB7. Koliko mi se čini, ako već ima potrebe za osam pull-up otptornika za prvu banku, nema potrebe da ih ponovo stavljaš na drugu banku, jer su zajednički za obe banke. I to je to.

Tastaturu skeniraš tako što prvo postaviš RA4 na 0, čime selektuješ prvi dekoder, a deselektuješ drugi: logička nula ide na G2A prvog, a invertovana, logička jedinica, ide na G2A drugog dekodera, pa su svi njegovi izlazi na logičkoj jedinici, pa on »ne može da smeta« i ti lepo preskeniraš nultu banku.

Zatim setuješ RA4, čime deselektuješ prvi, a selektuješ drugi dekoder i preskeniraš prvu banku, isto kao i nultu u prethodnom koraku.

Citat:
U ovom slucaju pin Y0 dekodera bice na niskom logickom nivou (0V) tako de ce dioda vezana na prekidac 5 biti pozitivno polarisana (anoda +5V preko otornika i prekidaca, a katoda 0V) pa ce napon na anodi (sto je i napon na pinu) biti oko 0.7V sto je logicka nula.


Oprez! Ako je donji naponski nivo 74LS138 npr. 0.5V, a napon na diodi koja provodi oko 0.7V, onda će potencijal na RBx pinu biti 0.5V + 0.7V = 1.2V, pa treba proveriti šta PIC16C84 smatra logičkom nulom, jer je tih 1.2V umereno visoko.
 
Odgovor na temu

Leftist
Luka Stojanovic
Bg

Član broj: 21766
Poruke: 401
*.drenik.net.

Jabber: slartibartfast@jabber.cc
Sajt: www.reggae.rs


+5 Profil

icon Re: Da li pravilno tumacim semu? (Samogradnja MIDI klavijature)24.10.2004. u 23:51 - pre 237 meseci
Rekao bih da je osnovna dilema u ovome: ako se pravi novi program, onda se pravi novi program, pa ne znam zasto bi se ista menjalo u semi. ovo sa registrima je da se ne bi menjao softver. Posto je zadnji put kad sam nesto pravio vezano za elektroniku, to bio light show iz radio kluba jos u osnovnoj skoli, a do pre mesec dana nisam ni znao sta je to mikro kontroler (a i dalje nemam ideju gde da ga isprogramiram) mislim da necu zuriti sa pravljenjem. U principu cekam da uzivo nahvatam nekog elektronicara, dok ne budem siguran da znam sta radim.
 
Odgovor na temu

ADRENALIN

Član broj: 17952
Poruke: 278
*.mobtel.com.



Profil

icon Re: Da li pravilno tumacim semu? (Samogradnja MIDI klavijature)25.10.2004. u 01:16 - pre 237 meseci
Napravi ovako kako je sad.Imaš .hex fajl i sve je tu.Posle gledaj da proširiš ako ti treba veća tastatura.
P.S. Ako staviš registre opet moraš da promeniš program.

 
Odgovor na temu

Leftist
Luka Stojanovic
Bg

Član broj: 21766
Poruke: 401
*.drenik.net.

Jabber: slartibartfast@jabber.cc
Sajt: www.reggae.rs


+5 Profil

icon Re: Da li pravilno tumacim semu? (Samogradnja MIDI klavijature)29.10.2004. u 17:04 - pre 237 meseci
Evo te ideje

signali DC0..DC7 su sa istog dekodera kao sa prve seme
i da jos jednom ponovim:
DC0 salje signal na prvih 12 dirki, prvih 8 se odmah propusta, zadna cetri signala se pamte.
DC1 salje signal na drugih 12 dirki, ona zapamcena cetiri + prva cetiri se salju, 4..11 se pamte.
DC2 ne skenira klavijaturu, 4..11 se salju
slicno vazi za DC 3, 4, 5, DC6 skenira poslednju notu C, DC7 ne radi nista

ja bi rekao da ovo radi bez ikakve prepravke programa
Prikačeni fajlovi
 
Odgovor na temu

ADRENALIN

Član broj: 17952
Poruke: 278
*.mobtel.co.yu.



Profil

icon Re: Da li pravilno tumacim semu? (Samogradnja MIDI klavijature)30.10.2004. u 02:00 - pre 237 meseci
Meni ovo ne radi, jel' jos neko probao?
 
Odgovor na temu

stameni
Ivan Stamenković

Član broj: 6739
Poruke: 538



+9 Profil

icon Re: Da li pravilno tumacim semu? (Samogradnja MIDI klavijature)09.11.2004. u 15:05 - pre 236 meseci
Je li zainteresovan ko da nastavi ovaj projekat? Nešto sam razmišljao i napisao neko programče koje bi možda i moglo da radi. Sve u svemu...

1. PIC16C84 ima interne pull-up otpornike, koje je moguće uključiti ili isključiti po volji, preko RBPU bita OPTION registra.

2. Na šemi nije označeno koje se diode koriste. Koliko ja vidim, rad sa silicijumskim diodama dosta je nategnut. Naime, u svakom trenutku mora biti zadovoljen uslov:
V0decmax + Vd < V0picmax
V0decmax je maksimalna vrednost logičke nule dekodera (0.2V ili 0.3V, ali se mora videti odgovarajući datasheet).
V0picmax je maksimalna vrednost logičke nule portova mikrokontrolera, i prema datasheetu kreće se od 0.8V do 0.2Vdd.
Vd je napon diode u radnoj tački, i za Si kreće se od 0.7V do preko 1V.
S druge strane, prag provođenja germanijumskih dioda mnogo je manji.

3. Varijanta koju sam opisao, samo sa jednim invertorom i jednim dekoderom, najmanje košta, program nije mnogo komplikovan za pisanje, a obezbeđuje kontrolu 128 tastera, što je više nego dovoljno za 88 dirki na klavijaturi, a ostaje čak 40 funkcijskih tastera za samoupravljanje po volji :) (tempo, jačina, stil...). Treba samo videti da li MIDI protokol to dopušta, tj. videti da li se karti mogu slati neki custom podaci.

4. Nisam proučio MIDI protokol, ali koliko znam nije u redu slati informacije samo o tome koje dirke su pritisnute i gađati zvučnu kartu sve dok su dirke pritisnute. Naime, treba samo poslati informaciju kada se dirka pritisne, a kada otpusti. To znači da je potrebno pamtiti prethodno stanje svakog tastera, i samo ako ima promene (otvoren -> zatvoren ili zatvoren -> otvoren) poslati podatak. Ovo može da odradi PIC, ali može i drajver na računaru.

5. Udobnije je napisati drajver – što ja ne umem lako da izvedem – čime bi se pored ostalog omogućila i puna kontrola funkcijskih tastera, nezavisno od MIDI protokola.

6. Najzad, slažem se sa onim što je ADRENALIN napisao: prvo proveriti radi li uošte ona varijanta sa šeme iz prvog posta u ovom threadu.

7. Programče koje sledi podrazumeva da prilikom uključenja sistema nijedna dirka nije pritisnuta. Ako se nađe poznavalac protokola, može da dopiše kod na predviđena mesta.

Code:

; http://www.elitesecurity.org
; forum: Elektronika
; tema: Samogradnja MIDI klavijature
; softverski projekat zapoceo: stameni
; verzija: 0.1
; 9. novembar 2004.
; dodatne izmene izvrsio:


        list      p=16C84
        #include <p16C84.inc>


        __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
; Prema semi, koristi se XT oscilator


; ***** Promenljive:
;
tekuci_red        EQU 0x0C
; Ima vrednosti 0x00-0x07, 0x10-0x17
; 0x00-0x07 je za "nultu tastaturnu banku" (aktivan
; prvi dekoder), a 0x10-0x17 za prvu banku (aktivan
; drugi dekoder)

maska                EQU 0x0D

temp                EQU 0x0E
; temp je stanje PORTB tekuceg reda.

stanje                EQU 0x0F
; Lokacije 0x0F do 0x1E sadrze prethodna stanja dirki.



; ***** Kod:
;
        ORG     0x000                ; reset vektor
        goto    MainEntryPoint

        ORG     0x004                ; interapt vektor
; Za sada interapte ne koristimo, ali...
        goto ISR


MainEntryPoint:
; Inicijalizacija kontrolera
        bsf STATUS, RP0                ; mem. banka #1
        bcf OPTION_REG,NOT_RBPU        ; enable pull-ups
        movlw b'01000'
        movwf TRISA                ; PORTA:0, 1, 2, 4 -- output
        movlw b'11111111'
        movwf TRISB                ; PORTB -- input
        bcf STATUS, RP0                ; mem. banka #0

; Inicijalizacija niza "stanje"
; (pretpostavlja se da nakon ukljucenja
; nije pritisnuta nijedna dirka)
;
; Nizu "stanje" pristupamo preko FSR.
; 1 oznacava da dirka nije pritisnuta,
; 0 oznacava suprotno. Pretpostavljamo da
; posle restarta nije pritisnuta nijedna dirka.
        movlw stanje
        movwf FSR
petlja2:
        movlw 0xFF
        movwf INDF
        incf FSR, F
        movlw (0x1E + 1)
        subwf FSR, W
        btfss STATUS, Z
        goto petlja2

; Odavde pocinje prava stvar: inicijalizacija
; glavne programske petlje.
; Komentarisana naredba nije neophodna, jer je
; zbog prethodnog koda W = 0; ako to ne bude slucaj,
; obavezno otkomentarisati ;)
;        clrw
        movwf tekuci_red
        movlw stanje
        movwf FSR

petlja:
; Saljemo tekuci_red na PORTA cime aktiviramo
; jedan od dekodera i jedan od izlaza aktiviranog
; dekodera.
        movf tekuci_red, W
        movwf PORTA

        movlw 1
        movwf maska
; Za tekuci_red ocitavamo stanja svih osam dirki
; i stavljamo ih u temp
        movf PORTB, W
        movwf temp

; Unustrasnja petlja: hendlujemo tekuci_red
; koristeci promenljivu "maska" umesto brojaca.
petlja1:
                movf temp, W
                andwf maska, W
                btfss STATUS, Z
                goto jedan
nula:
; Detektovana nula.
                movf INDF, W
                andwf maska, W
                btfss STATUS, Z
; Ako je pre bila jedinica, onda menjamo stanje,
; i podatke posaljemo MIDI interfejsu; inace
; nema potrebe za bilo cime, jer je dirka i dalje
; pritisnuta.
                call pritisnut
                goto cont

jedan:
;Detektovana jedinica.
                movf INDF, W
                andwf maska, W
                btfsc STATUS, Z
; Ako je pre bila nula, onda menjamo stanje,
; i podatke saljemo MIDI interfejsu.
                call otpusten

cont:
; Ako je "maska" dosla do svoje maksimalne vrednosti,
; kraj unutrasnje petlje.
                bcf STATUS, C
                rlf maska, F
                btfss STATUS, C
                goto petlja1

; Kraj unutrasnje petlje.
; Inkrementiramo pointer na niz "stanje" i
; tekuci_red. Ako u promenjlivi "tekuci_red"
; nije doslo do tranzicije sa xxxxx111 na
; xxxx1000, vracamo se u glavnu petlju.
        incf FSR, F
        incf tekuci_red, F
        btfss tekuci_red, 3
        goto petlja
; Invertujemo cetvrti bit, da bismo selektovali
; drugi dekoder.
        movlw b'00011000'
        xorwf tekuci_red, F
; Ako je FSR prekoracio kraj niza "stanje",
; resetujemo ga na pocetak.
        movlw 0x1F
        subwf FSR, W
        btfss STATUS, Z
        goto petlja
        movlw stanje
        movwf FSR
        goto petlja


pritisnut:
; Ubelezimo da je taster na poziciji na
; koju pokazuje "tekuci_red", bit odreden
; "maskom" pritisnut, da ne bismo ponovo
; upadali ovde i bez potrebe opterecivali MIDI.
        comf maska, W
        andwf INDF, F
; ***** Vazno *****
; Ovde, zapravo, treba dodati kod za slanje
; podataka na RA3. Najpre treba RA3 progralsiti
; za output itd.
        return


otpusten:
; Taster je otpusten, sto belezimo u niz
; "stanje". Zatim saljemo tu informaciju
; MIDI-ju.
        movf maska, W
        iorwf INDF, F
; ***** Vazno *****
; Ovde, zapravo, treba dodati kod za slanje
; podataka na RA3. Najpre treba RA3 progralsiti
; za output itd.
        return


ISR
; Eventualni hendler.
        retfie

        END

 
Odgovor na temu

[es] :: Elektronika :: Da li pravilno tumacim semu? (Samogradnja MIDI klavijature)

Strane: 1 2

[ Pregleda: 11467 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.