www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

PIC18F4550 - 2x12 matrika problem

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
jerny
Član
Član



Pridružen-a: Čet 17 Apr 2008 11:27
Prispevkov: 414
Aktiv.: 1.98
Kraj: Dravograd

PrispevekObjavljeno: Ned Maj 15, 2011 6:45 pm    Naslov sporočila:  PIC18F4550 - 2x12 matrika problem Odgovori s citatom

Lep pozdrav!

Prijatelj ima problem s preglejevanjem tipk na matrični tipkovnici velikosti 2x12. Ta tipkovnica je iz starega sintisajzerja in ima 2 vhoda in 24 tipk.

Zaenkrat so vhodi na portu B, izhoda pa na D2 in D3. Preglejuje se s pomočjo for zanke:
Koda:
for (i = 0;i<=1;i++)
   {
      PORTD = 4 * (i+1); //izmenično preklaplja med D3 in D4
      if(sw_c==0) //ta primer preglejuje eno noto na dveh oktavah
       {
         SendMIDI(pitch + (i*12),127,&nO[i][0],On);
       }
       else if (sw_c==1)
       {
         SendMIDI(pitch + (i*12),0,&nO[i][0],Off);
       }
   }


Tipke na tipkovnici so povezane s pullup upori.. Torej se preglejuje stanje 0. Je takšna logika vredu? je 4,7k upor dovolj?

Pri pritiskih na tipke pa se pojavi problem.. Ob pritiskih na prvo tipko neprestano pošilja tudi ukaze za drugo tipko in obratno.

Imate kakšne rešitve/predloge?

Če bo kaj pomagalo lahko narišem tudi shemo matrike.

Hvala vnaprej!

_________________
Če smrdi je kemija, če kadi pa elektronika!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
red_mamba
Član
Član



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.26
Kraj: Yogyakarta

PrispevekObjavljeno: Ned Maj 15, 2011 7:50 pm    Naslov sporočila:   Odgovori s citatom

mogoče sema nebi bila slaba ideja Smile

drugače pa predvidevam da moraš tole muxat in je problem pri tem, samo kot rečeno shema bi pomagala. Pul-upov pa ne potrebuješ, ker jih imajo že porti, samo pravilno moraš nastavit. Porte sta nastavila kot vhode a ne? In D3 in D4 kot izhoda

lp

_________________
Bad things happen to good people all the time for no reason!
Blog
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
jerny
Član
Član



Pridružen-a: Čet 17 Apr 2008 11:27
Prispevkov: 414
Aktiv.: 1.98
Kraj: Dravograd

PrispevekObjavljeno: Pon Maj 16, 2011 8:19 am    Naslov sporočila:   Odgovori s citatom

Glede pullup-ov mi je INTCON2.RBPU = 0 delovalo v MikroCju, a zaradi demo limita ni uporaben, Microchip-ov kompajler C18 mi pa vrne: Error [1151] struct or union object designator expected Think

Port B je nastavljen kot vhod (TRISB=0xFF), D pa kot izhod (TRISD = 0x00). Pri preglejevanju ene same tipke mi stvar deluje normalno (pošilja MIDI ukaze preko usb vodila). Problem se pojavi pri matriki.. Je mogoče logika za preverjanje napačna? (for zanka iz prejšnjega posta)
Jaz namreč za stanje vklopa preverjam logično 0, izhodna porta D2 in D3 pa izmenično preklapljata med 1/0 in 0/1.

Se opravičujem za shemo v slikarju.. vendar je to edino kar imam pri roki. Vezava same tipkovnice pa je enaka kot ostale (primer: http://pcbheaven.com/wikipages/images/howkeymatricesworks_1277655355.png

Lep pozdrav, Matej



2x6.png
 Opis:

Download
 Ime datoteke:  2x6.png
 Velikost datoteke:  15.36 KB
 Downloadano:  11 krat


_________________
Če smrdi je kemija, če kadi pa elektronika!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
red_mamba
Član
Član



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.26
Kraj: Yogyakarta

PrispevekObjavljeno: Pon Maj 16, 2011 9:42 am    Naslov sporočila:   Odgovori s citatom

imaš shemo tudi kako je dejansko tipkovnica znotraj zvezana?

če je tako kot si predstavljam potem bi moral res malo prirediti svoj algoritem.

to da izmenično preklapljaš med 1/0 in 0/1 na D portu je ok. Samo ti moraš iti najprej
čez 1/0 in pogledati katere tipke so pritisnjene, potem preko 0/1 in ponovno katere so pritisnjene, potem pa moraš šele pogledati koliko jih je pritisnjenih in ustrezno ukrepati.
Drugače vedno obravnavaš samo 1/2 tipkovnice in seveda določene kombinacije izpustiš.

_________________
Bad things happen to good people all the time for no reason!
Blog
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
jerny
Član
Član



Pridružen-a: Čet 17 Apr 2008 11:27
Prispevkov: 414
Aktiv.: 1.98
Kraj: Dravograd

PrispevekObjavljeno: Tor Maj 17, 2011 10:45 pm    Naslov sporočila:   Odgovori s citatom

Hvala za odgovor!

Problem je bil res v algoritmu, saj nisem preverjal kakšna stanja so na vhodih pred preverjanjem tipk.

Popravek:
Koda:
   for (i = 0;i<=1;i++)
   {
      //Menjanje stanja med porti
      PORTDbits.RD2=i;
      PORTDbits.RD3=~i;

      //****************************TIPKA C
      if(sw_c==0)
       {
         if (PORTDbits.RD2==0)            
            SendMIDI(pitch,127,&nO[i][0],On);
         else if (PORTDbits.RD3==0)
            SendMIDI(pitch + 12,127,&nO[i][0],On);
       }
       else if (sw_c==1)
       {
         if (PORTDbits.RD2==0)            
            SendMIDI(pitch,0,&nO[i][0],Off);
         else if (PORTDbits.RD3==0)
            SendMIDI(pitch + 12,0,&nO[i][0],Off);
       }
   }


Pa morda veš, zakaj mi ne delajo interni pullup-i? V programu sem napisal tako: INTCON2bits.RBPU = 0;, a mi brez zunanjega 4,7kΩ upora sploh ne dela Think

lp, Matej

_________________
Če smrdi je kemija, če kadi pa elektronika!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
red_mamba
Član
Član



Pridružen-a: Ned 20 Feb 2005 17:56
Prispevkov: 1486
Aktiv.: 6.26
Kraj: Yogyakarta

PrispevekObjavljeno: Tor Maj 17, 2011 11:51 pm    Naslov sporočila:   Odgovori s citatom

pri PICu z TRIS registrom nastaviš vhode

TRIS = 255;

kadar so izhodi s port ukazom vklopiš interne pull-upe

PORT = 255;


ko boš sedaj bral port bodo tisti 0, ki si jih dejansko zunaj potegnil na maso Wink

_________________
Bad things happen to good people all the time for no reason!
Blog
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Elektronika Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
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
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 502 dni


Powered by phpBB © 2001, 2005 phpBB Group