Fórum témák
» Több friss téma |
Fórum » CCS PIC Compiler
A negyedik sorban hívom meg, csak az oldal valamiért nem írta oda.
Ha a programot szövegszerkesztővel másolod át, akkor előfordul, hogy a szövegszerkesztő "láthatatlan" vezérlőkaraktereit az MPLab-ban a fordító hibaként értelmezi, ill. meg sem jelenít egyes szavakat. Esetleg itt is?!
Kézzel töröld ki a sort és kézzel írd be újra (az előző végével és a következővel együtt)
Ezt írtad:
pedig ez a "hivatalos" kiosztás: // D0 enable // D1 rs // D2 rw // D4 D4 // D5 D5 // D6 D6 // D7 D7
De egyszer már működött ezzel a kiosztással, most nem tudom mi lehet a baj.
Na most működik az lcd.c kóddal.
Csak #include < lcd.c > helyett bemásoltam az egészet a main elé. Köszi mindenkinek a segítséget!
Igazából ahogy elnézem, mindegy neki. Van egy gyári midi-usb kábelem (amiből kölcsönöztem a VID-PID-et), abban a 2-es endpointon van az in, és az 1-esen az out (ráadásul még működik is). De visszajavítom, ha az okosak azt mondják.
Nálam így tökéletesen működik. Próbáld meg a definiálásokat az include elé rakni. szerk.: Ha jól emlékszem, a definíciók úgy vannak a gyári könyvtárban, hogy infdef blabla define blabla. Tehát ha utána írod a define dolgokat, akkor egy már létező definícióra definiálsz rá. Nem tudom, hogy ilyenkor felül írja-e, vagy figyelmen kívül hagyja, de egy lehetséges hibaforrást látok benne.
Na az alábbi változtatásokat eszközöltem:
Erre már érdekesebb dolgokat művel. Először elindítom a fruity loops-t, utána rádugom. Ekkor kigyullad a led, és úgymarad. Ezután scanneltetem vele a midi eszközöket, és amikor megtalálja, elkezd a led villogni. Ebből én arra következtetek, hogy az adatátvitel működik, de valami egyéb gubanc van, ami miatt nem játssza le a hangot. Megnézettem midi monitorral, és ekkor se mutatja, hogy érkezne (érvényes) adat. szerk.: az usb_put_packet() elvileg akkor ad vissza 1-et, ha sikeres volt az átvitel.
Sikerült meghegeszteni, működik. Az volt a probléma, hogy a midi üzenethez az usb class specification előírja, hogy egy plusz byte-ot elé kell rakni, ami a cable numberből, és a code index numberből áll. (CN<<4|CIN). A CIN általában a MIDI üzenet parancsbyte-jával egyezik meg, ott van a táblázat a múltkor csatolt pdf-ben. Namármost valamiért csak akkor dolgozza fel a midi event packetet, ha a 0-ás CN-en jön, én meg eddig az 1-esen próbáltam küldeni. Nem tudom, mi okozza ezt, talán a vindózban a class driver hülyesége, majd valamikor kipróbálom ubuntu alatt is.
Egyszóval aki usb-midi cuccot szeretne implementálni, a 0-ás CN-en keresztül tegye. ps: icserny: igazad volt, jó az 1-es endpointon az in. >>
hol tudnek olvasni a kovetkezo utasitasokrol :
init( ) for(;
Az első meghívja az init nevű függvényt paraméterek nélkül.
A második meg egy egyszerű végtelen ciklust csinál.
Google-ban rákeresve is olvashatsz ezekről bővebben (van szép számmal mindenféle jegyzet PDF vagy PPT formátumban a neten, magyar nyelven is), vagy akár a CCS súgójában is nézelődhetsz.
Egy kis segítséget kérnék.
Írok egy progit, aminek az lenne a feladata, hogy egy bejövő jelsort vizsgál meg és usb-n továbbítja az eredményt. Az usb része megy a dolognak, vagyis eddig az működik. A jelsor a következő: jelsor Minden sor egy byte. Az első magas szint hosszú és utána egy alacsony szint ez így a stratbit. Ezután minden felfutó élnél kezdődik egy bit, és attól függően 1 vagy 0 hogy a magas vagy az utána jövő alacsony szint tart-e tovább. Én eddig annyira jutottam, hogy kell egy külső magszakítás, ami nullázza a timer0-át, itt indul a mérés. És a lefutó élre megint nullázok. Ekkor a visszaadott értékből kiderül, hogy strat, 1 vagy 0. A külső megszakítás, amivel megnézem, hogy mikor jön a jel:
Megszakítások és timer beállítása:
A progi összevissza számokat irkál, mi lehet a gond? Mit rontottam el? Előre is kösz a választ.
Ezt kihagytam.
timer:
És 20Mhz-es kvarccal jár a pic, ami egy 18f4550-es.
Szerintem elszámoltad az időzítést, mert j ~21 us-onként lép, a j>=8 feltétel így a rövidebb impulzusokra is teljesül (ha jól látom, akkor ~200 us a sűrűbb osztás).
Nem azt kell nézni, hogy hány MHz-es a kvarc, hanem azt, hogy mekkora frekvenciát állít elő belőle az előosztó, a PLL és az utóosztó. Normál esetben az FSUSB miatt 48 MHz-en ketyeg az USB SIE és a CPU is, azaz Fosc = 48 MHz, Fcy pedig Fosc/4, azaz 12 MHz. Ez Timer0 bemenőjele. A printf hívását sürgősen vedd ki az interrupt kiszolgáló eljárásból! Másold át az adatokat, s állíts be egy szemafort. Amikor a szemafor bebillent, akkor a főprogramból írass ki!
Egy kis segítséget szeretnék kérni tőletek.
Egy 2x16-os LCD-t szeretnék életre kelteni egy pic 16f877A -val. ahogy elnéztem az lcd_init() -nél akad el és onnan nem megy tovább a program. * a #include a program: #include <16F877A.h> #FUSES NOWDT,XT,NOPUT,NOPROTECT,BROWNOUT,NOLVP,NOCPD,NOWRT, #use delay(clock=20M) #include //------------------------------ void main() { //------------------------------ delay_ms(50); lcd_init(); delay_ms(50); //----------------------------- while (1) { //----------------------------- delay_ms(50); lcd_gotoxy(1,1); printf(lcd_putc,"\fHello World!"); delay_ms(50); } //end while } //end main
3 dolgot nem tudunk:
- Milyen LCD meghajtó programot használsz? - Hogyan van konfigurálva? - Mit iratnál ki?
igen bocsi ahogy bemásoltam ide a programot kihagyott pár dolgot közben, de már módosítottam az előző hozzászólásban ezeket. Bár most nézem, hogy az lcd.c -t még mindig nem akarja kiírni a kacsacsőrök közé
Ha nem találod a Kód gombot, csatolt be mellékletként.
Jogos én voltam a figyelmetlen.
most csatolom az a biztos A kérdésem az, hogy mi lehet a program baja ami miatt nem megy.
Ez a sor vajon mit fog csinálni? Menj rajta szépen sorba végig...
Nekem is ezt csinálta. Az lcd_init(); -nél behalt.
Aztán nyitottam egy új projektet, de ott meg nem tudta megnyitni az lcd.c fájlt, ezért bemásoltam a tartalmát a main elé. Ezek után működik rendesen.
Már próbáltam az MPlab sim-el leszimulálni, de az lcd_ini()-nél elekad onnan nem megy tovább.
Addig a sorig el sem jut a szimuláció.
Az egész lcd.c tartalmát bemásoltad?
Igen, mert ha nem másoltam be, akkor nem akarta lefordítani.
megpróbáltam de még mindig az lcd_init()-nél akad el a szimuláció. Egészen pontosan az lcd_init() hatására belép az lcd.c-be és onnan nem akar kijönni, olyan mintha valami végtelen ciklus ként futna az lcd.c-ben
Nekem is az volt, hogy először lefordította, aztán az lcd_init() -nél behalt. Ott még nem jelzett fordítási hibát.
Aztán nyitottam egy teljesen új projektet (MPLAB-al használom a ccs-t) más néven. Itt nem akarta lefordítani, ezért bemásoltam az lcd.c tartalmát. Így már működött minden. Kicsit zavaró, hogy ott van a kód elején az a sok minden az lcd.c-ből, de működik.
Sziasztok !
Sokat küszködöm manapság az I2C kommunikációval, bár most ismerkedem a C-vel és a CCS-el is, tehát ha nagy marhaságot írok akkor az ezért van. A programom egyszerű mégsem működik, egy címre írok egy adatot amit egy kis várakozás után /6 ms/ visszaolvasok és összehasonlítom az eredetivel a Proteusban de nem jó ! Aki megteszi hogy szán a problémámra egy kis időt és rájön a hibámra annak köszönöm és ne kíméljen a válasszal! |
Bejelentkezés
Hirdetés |