Fórum témák

» Több friss téma
Fórum » CCS PIC Compiler
 
Témaindító: (Felhasználó 1542), idő: Ápr 3, 2006
Lapozás: OK   39 / 118
(#) Jossz válasza Dempsey hozzászólására (») Aug 15, 2010 /
 
És hol aktiválod a B port felhúzó ellenállásait?

  1. port_b_pullups(TRUE);


-ra gondolok, én mindig írom, ha biztosra akarok menni.
(#) icserny válasza Jossz hozzászólására (») Aug 16, 2010 /
 
Ha kimenetnek vannak kapcsolva a lábak, akkor nincs felhúzás. Az akkor használható, ha bemenetre vannak állítva.
(#) Dempsey válasza icserny hozzászólására (») Aug 16, 2010 /
 
Az oszcillátor lábakra semmi sincs kötve. Mert a belső oszcillátort szeretném használni. Ez a gond?
(#) vicsys válasza Dempsey hozzászólására (») Aug 16, 2010 /
 
PIC16F84...? Megnézted az adatlapját? Egyébként is akkor a "#FUSES INTRC_IO"-t kellene választani.
(#) icserny válasza Dempsey hozzászólására (») Aug 16, 2010 /
 
Ezzel csak az a baj, hogy nincsen neki....
(#) Dempsey válasza icserny hozzászólására (») Aug 16, 2010 /
 
Na ez szívás . Akkor fabrikálni kéne RC tagokból egyet. Vagy milyen megoldást javasolsz?
(#) vicsys válasza Dempsey hozzászólására (») Aug 16, 2010 /
 
4k7+100pF kb. 1MHz-et ad. Bár én betennék egy 4MHz-es rezonátort vagy kvarcot két 33pF-dal.
(#) Dempsey válasza vicsys hozzászólására (») Aug 16, 2010 /
 
Oké köszi szétnézek van-e itthon ilyen értékű.
(#) icserny válasza Dempsey hozzászólására (») Aug 16, 2010 /
 
Régi merevlemez vagy kiselejtezett PC kártyákon/alaplapon is találhatsz kvarcot. Ha jól csalódom, HS módban a szokásos 8-10-14 MHz-es kristályok is használhatók 15-33 pF-es kondenzátokokkal.
(#) Dempsey hozzászólása Aug 16, 2010 /
 
Kösz mesterek a segítséget nem tudom hogy lehettem ilyen figyelmetlen az a adatlap nézegetése közben, hogy azt gondoltam hogy van belső oscija . De mostmár működik.
(#) Dempsey válasza icserny hozzászólására (») Aug 16, 2010 /
 
Igen HS módban 4-20MHz-ig használhatók kvarcok 15-33pF-os kondival. Majd bontok valahonnan.
(#) alex077 hozzászólása Szept 5, 2010 /
 
Sziasztok!


PIC16F877A picet programozok CCS-ben. HD44780-as kijelzőt használok a B porton. A problémám az, hogy szükségem van a PIC (egyetlen!!) interrupt lábára, de az len van foglalva a kijelző számára. Eredetileg a B0 lábon volt a kijelző Enable lába, most a B3-on van.
A "main.c"ben van egy definíció:
#define LCD_ENABLE_PIN PIN_B3
Hiába írtam át B3-ra a definíciót nem kel életre a kijelző.
  1. // ez az lcd.c részlete a ccs driver mappájából
  2. // Un-comment the following define to use port B
  3.  #define use_portb_lcd TRUE
  4.  
  5.  
  6. struct lcd_pin_map {                 // This structure is overlayed
  7.            BOOLEAN enable;           // on to an I/O port to gain
  8.            BOOLEAN rs;               // access to the LCD pins.
  9.            BOOLEAN rw;               // The bits are allocated from
  10.            BOOLEAN unused;           // low order up.  ENABLE will
  11.            int     data : 4;         // be pin B0.
  12.         } lcd;
  13.  
  14.  
  15. #if defined use_portb_lcd
  16.    //#locate lcd = getenv("sfrORTB")    // This puts the entire structure over the port
  17.    #ifdef __pch__
  18.     #locate lcd = 0xf81
  19.    #else
  20.     #locate lcd = 6
  21.    #endif
  22.    #define set_tris_lcd(x) set_tris_b(x)
  23. #else
  24.    //#locate lcd = getenv("sfrORTD")    // This puts the entire structure over the port
  25.    #ifdef __pch__
  26.     #locate lcd = 0xf83
  27.    #else
  28.     #locate lcd = 8
  29.    #endif
  30.    #define set_tris_lcd(x) set_tris_d(x)
  31. #endif
  32.  
  33. #ifndef lcd_type
  34. #define lcd_type 2           // 0=5x7, 1=5x10, 2=2 lines
  35. #endif
  36.  
  37. #define lcd_line_two 0x40    // LCD RAM address for the second line
  38.  
  39.  
  40. BYTE const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
  41.                              // These bytes need to be sent to the LCD
  42.                              // to start it up.
  43.  
  44.  
  45.                              // The following are used for setting
  46.                              // the I/O port direction register.
  47.  
  48. struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // For write mode all pins are out
  49. struct lcd_pin_map const LCD_READ = {0,0,0,0,15}; // For read mode data pins are in

Érzésem szerint itt kell valamit trükközni. Felcseréltem ezt a két sort: BOOLEAN enable;
BOOLEAN unused;
de ettől sem lett jobb.
A hiba biztosan ebből ered, hogy nem hajlandó tudomásul venni a program, hogy a B3-t kéne használnia a B0 helyett.
Valaki tudna segíteni meggyőzni a CCS-t arról, hogy a B3 lábat használja?
Köszi
(#) vicsys válasza alex077 hozzászólására (») Szept 5, 2010 /
 
Csatolom azt a változatot, ahol azt az I/O-t használod, amelyiket akarod.

flex_lcd.c
    
(#) alex077 válasza vicsys hozzászólására (») Szept 7, 2010 /
 
Kipróbáltam ezt a változatot a B0-n. Működik. Kipróbáltam másik 3 lábon. Nem működik.
Mit csinálok rosszul? A definíciókat tuti jóra írtam át, amikor másik IO-ra forrasztottam az enable lábat.
Csak az én kijelzőm ennyire válogatós??
(#) kukac_24 válasza alex077 hozzászólására (») Szept 7, 2010 /
 
A "PIN_B3" pontosan igy van definiálva a 16F877 .h file-jában?
(#) alex077 hozzászólása Szept 7, 2010 /
 
Igen

Közben rájöttem mi a gáz. Amikor átvariáltam a Vicsys féle kódra, akkor nem az a fájl volt megnyitva a fordítóban, amit használt a fordító. Csak 2 napig szívtam vele.
:violent:
Köszi a segítséget, most már működik a kód.
(#) vicsys válasza alex077 hozzászólására (») Szept 7, 2010 /
 
Nem írt ki hibaüzit a CCS? Pl.:
Idézet:
„Please, change user!”

Az a lényeg, hogy jó lett!
(#) sysy válasza vicsys hozzászólására (») Szept 8, 2010 /
 
Ez a két felkiáltójeles kifejezés, hogy működik?
output_bit(LCD_DB4, !!(nibble & 1));

sysypet
(#) MPi-c válasza sysy hozzászólására (») Szept 9, 2010 /
 
Az "eredeti" forrásban volt fölötte egy kis megjegyzés: " !! converts an integer expression to a boolean (1 or 0). " (Kétszeres tagadás ... a nyolc biten megjelenő félbájtot így faragja az "output_bit" második, egy bites paraméterére )
(#) sysy válasza MPi-c hozzászólására (») Szept 10, 2010 /
 
Igen, a megjegyzést én is olvastam, csak nem értettem, mert a felkiáltójelek nélkül is működik, mert a kívánt funkciót a nibble parancs valósítja meg, minden hókusz-pókusz nélkül.
(#) MPi-c válasza sysy hozzászólására (») Szept 10, 2010 /
 
Igen, rendesen működik így is valószínűleg az output_bit fv. "rendbeteszi" azt a paramétert. A fordítás sem eredményez más kódot, ha nincs ott a két felkiáltójel. Bizonyára aki készítette, a fordítást nem nézte... én is csak most néztem meg...
(#) efiscp hozzászólása Szept 10, 2010 /
 
Üdv!

Egy MIDI audioeszköz fejlesztésével foglalkozom (18f14k50) mostanában, de az usb-nél megakadtam. A CCS gyári driverét használom némi módosítással (az usb_cdc.h-t include-oltam, és az usb_cdc_desc.h-t átírtam). Csatlakoztatásnál az enumeration elvileg lefut:
  1. usb_init();
  2.    usb_wait_for_enumeration();
  3.    output_high(PIN_B7);
  4.    while (1);

Erre kigyullad a B7-en a led. Az eszközkezelőben is megjelenik, illetve az usb.org MIDI dokumentuma alapján állítottam be a descriptorokat, ennek köszönhetően megjelenik a hangok és audioeszközöknél is. Eddig minden rendben.
A probléma ott van, hogy sehogy se tudom rávenni az adatküldésre. A standard MIDI üzeneteket kiegészítettem az usb által javasoltakkal ((CN<<4)|CIN, ez az első byte):
  1. int8 note_on[4]={25,148,36,127};
  2.    int8 note_off[4]={24,132,36,0};
  3.    ...
  4.    while (1)
  5.    {
  6.    delay_ms(4000);
  7.    usb_put_packet(1,&note_on[0],4,USB_DTS_TOGGLE);
  8.    delay_ms(500);
  9.    usb_put_packet(1,&note_off[0],4,USB_DTS_TOGGLE);
  10.    }

Erre elvileg a 36-os billentyűt kéne 4 másodpercenként megszólaltatnia fél másodpercre (fruity loops-t használok), de meg se nyikkan.
Beraktam a mellékletbe az usb-midi specifikációt.
Sajnos elég új vagyok az usb témakörben, ezért ha valami nagyon nyilvánvaló dolgot rontottam el, akkor előre is elnézést.

USB-MIDI.pdf
    
(#) icserny válasza efiscp hozzászólására (») Szept 10, 2010 /
 
Csak kérdezem, mert nincs CCS C-m: Ez az usb_put_packet() nem csak HID módhoz való? Milyen függvényeket deklarál az usb_cdc.h állomány?

A CDC kapcsolathoz inkább usb_cdc_getc(), usb_cdc_putc() típusú illene, ahol az egyes karaterek küldése logikailag egymástól független (az egy más kérdés, hogy végül csomagolva mennek ki az USB adatvonalon).
(#) efiscp válasza icserny hozzászólására (») Szept 11, 2010 /
 
Amennyire sikerült megértenem a driver könyvtárak felépítését, mennie kéne usb_put_packet()-tel. Ha jól vettem ki, annyit csinál, hogy ahova a pointer mutat, onnan a megfelelő számú byte-ot beírja a bufferbe (és megjelöli az endpointot, hogy kész a küldésre).
  1. int1 usb_put_packet(int8 endpoint, int8 * ptr, int16 len, USB_DTS_BIT tgl)
  2. {
  3.    int8 * buff_add;    
  4.  
  5.    if (usb_tbe(endpoint))
  6.    {
  7.       buff_add = EP_BDxADR_I(endpoint);
  8.       memcpy(buff_add, ptr, len);    
  9.      
  10.       return(usb_flush_in(endpoint, len, tgl));
  11.    }
  12.    else
  13.    {
  14.       //putc('-');
  15.       //printf("%X", EP_BDxST_I(endpoint));
  16.       debug_usb(debug_putc,"\r\nPUT ERR");
  17.    }
  18.  
  19.    return(0);
  20. }

A cdc függvények:
usb_cdc_kbhit()
usb_cdc_getc()
usb_cdc_putc(char c)
usb_cdc_putready()
usb_cdc_connected()
usb_cdc_putc_fast(char c)
(#) efiscp válasza efiscp hozzászólására (») Szept 11, 2010 /
 
Közben találtam egy hibát (?) a descriptorokban, egy endpoint-on volt a ki és bemenet (a pdf-ben is). Kijavítottam, de így se kezdett el zajongani.
(#) Petroimro hozzászólása Szept 14, 2010 /
 
Sziasztok!
Nekem egy olyan problémám lenne, hogy valamiért nem sikerül életre kelteni az lcd kijelzőmet. Az lcd 2*16-os és egy 16f877A pic hajtaná.
Egyszer már működött vele, de nincs meg a kód, ami benne volt.
A ccs-t MPLAB-al használom.

Itt van a mostani kód:
Idézet:
„#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#include


#define LCD_ENABLE_PIN PIN_D3
#define LCD_RS_PIN PIN_D2
#define LCD_RW_PIN PIN_D1
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7

void main()
{
set_tris_c(0b00000000);

output_c(0b00001001);

delay_ms(10);
lcd_init();
delay_ms(10);

printf(lcd_putc, "Hello!");

output_c(0b00000110);
while(1);
}


Úgy láttam, hogy itt akad el:lcd_init();
Ami ez után van azt nem hajtja végre a pic.

Köszi előre is a segítséget.
(#) icserny válasza efiscp hozzászólására (») Szept 14, 2010 /
 
Tartok tőle, hogy az nem hiba, javítsd vissza!
(#) Petroimro válasza Petroimro hozzászólására (») Szept 14, 2010 /
 
Az #include után valamiért nem rakja oda az lcd.c -t az oldal.
(#) Jossz válasza Petroimro hozzászólására (») Szept 14, 2010 /
 
Hol hívod meg az LCD driver-t?
Mert pl. az lcds_init() függvény is abban van.
Csatolom a "gyári" file-t.

LCD.C
    
(#) icserny válasza Petroimro hozzászólására (») Szept 14, 2010 /
 
Néhány hozzászólással lentebb megtalálod a működő változatot. Bővebben: Link
Következő: »»   39 / 118
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem