Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
Lapozás: OK   955 / 1320
(#) Hp41C válasza ciszfejleszto hozzászólására (») Ápr 20, 2011 / 1
 
Szia!

Leírások, mintapéldák a PICKit2 honlapján.
Bevezetés a PICologiába
(#) qvasz2 válasza ciszfejleszto hozzászólására (») Ápr 20, 2011 /
 
A microchip cuccokat a forgalmazójánál lehet megvásárolni: chipcad.hu.
De pl a PICKIT2-t elég jól lehet utánépíteni is, cikk is van róla, és topik is, többféle NYÁKkal, furatszerelt, vagy SMD, stb-stb.
Szerk: már a HESTORE is árulja a PICKIT2-t
(#) ciszfejleszto hozzászólása Ápr 20, 2011 /
 
Köszönöm a válaszokat, már csak egy kérdésem van. http://www2.chipcad.hu/www/arak.aspx?group=030113 Ezen az oldalon, melyik kell nekem ? Gondolok itt a CD-kre, a demólapra (vagy hogy hívják azt az alap áramkört, amin LED-ek, stb vannak), a programozóra, és ugye kábelekre. Csak mert laikusként, abból a 20 dologból nem tudom melyik micsoda (:
(#) zenetom válasza ciszfejleszto hozzászólására (») Ápr 20, 2011 /
 
Hali!
Szerintem csak egy égetőt vegyél, itt HE-n is árulnak, Bővebben: Link ennyi pénzért simán megéri!
Az általad linkelt doksit nem ismerem, ezeket tudom ajánlani: Bővebben: Link -->ennek van több része is.
itt katt a "Felhasználói Kézikönyv"-re!
ebből is rengeteget lehet tanulni
(#) icserny válasza ciszfejleszto hozzászólására (») Ápr 20, 2011 /
 
Idézet:
„Ezen az oldalon, melyik kell nekem?”
Nagyon ajánlom, hogy SEMMIT ne vegyél, amíg ezt nem tudod eldönteni (nehogy egy hét múlva derüljön ki, hogy pont a másik kellett volna....)!

A termékazonosító számok (pl. DV164121) alapján mindegyikre rátudsz keresni, s érdemes pár napot/hetet rászánni a leírásaik böngészésére. Bővebben: Link1, Link2
(#) mrfencer válasza icserny hozzászólására (») Ápr 20, 2011 /
 
Köszi a gyors segítséget srácok!
(#) mate_x válasza watt hozzászólására (») Ápr 20, 2011 /
 
Köszönöm a válaszokat!
(#) elektroby hozzászólása Ápr 20, 2011 /
 
Üdv Guruk!

Adott egy PIC18F4550-re íródott mintaprogram. (innen: Bővebben: Link).
A C-ben való programozást még csak ugatom (Asm-ban egész jól elboldogulok) de a main.c "elemzése után felbátorodtam, hogy módosításokat hajtsak végre. Egy 7szegmenses kijelzőt akartam meghajtani vele.
Áramkörileg OK de nem akarja azt csinálni amit kellene

1. probléma:
Eredeti kód:
  1. LED0 = 1;



Módosított kód:
  1. CA1SEG = 0;
  2.         PORTB = SEG5;
  3.  
  4. //      LED0 = 1;
  5.  
  6.         LED1 = 1;
  7.  
  8.         CA2SEG = 1;
  9.  
  10.         CA3SEG = 1;


Természetesen a hw definíciókat is kiegészítettem:
  1. // Common useful definitions
  2.  
  3.         #define ON      1
  4.  
  5.         #define OFF     0
  6.  
  7.         #define WRITE   0
  8.  
  9.         #define READ    1
  10.  
  11.         #define SEG0    0b01000000
  12.  
  13.         #define SEG1    0b01111001
  14.  
  15.         #define SEG2    0b00100100
  16.  
  17.         #define SEG3    0b00110000
  18.  
  19.         #define SEG4    0b00011001
  20.  
  21.         #define SEG5    0b00010010
  22.  
  23.         #define SEG6    0b00000010
  24.  
  25.         #define SEG7    0b01111000
  26.  
  27.         #define SEG8    0b00000000
  28.  
  29.         #define SEG9    0b00010000
  30.  
  31.  
  32.         // PIC to hardware pin mapping
  33.  
  34.         #define LED0    RA0
  35.  
  36.         #define SWITCH0 RA1
  37.  
  38.         #define LED1    RA2
  39.  
  40.         #define CA1SEG  RE0
  41.  
  42.         #define CA2SEG  RE1
  43.  
  44.         #define CA3SEG  RE0



Az eredeti kód az USB-re csatlakoztatáskor bekapcsolja az RA0-ra kötött ledet.
A módosított kódnak portB és E beállítását valamint RA2-n lévő led bekapcsolását is kel(ene) csinálni. De nem teszi!
A bemásolt kódrészletben azért van kikommentelve, mert már kínomban kísérleteztem. Így természetesen most nem kapcsol be a led (RA0-n).

2. probléma
Az erederi kód 3 parancsot hajt végre:
0x80 - LED állapotának váltása
0x81 - nyomógomb állapotának lekérdezése
0x82 - LED állapotának lekérdezése

  1. switch(ReceivedDataBuffer[0])
  2.  
  3.         {
  4.  
  5.             case 0x80:  // Toggle the LED
  6.  
  7.                 if (LED0 == 1) LED0 = 0; else LED0 = 1;
  8.  
  9.                 break;
  10.  
  11.  
  12.  
  13.             case 0x81:  // Read the push-switch status
  14.  
  15.                                 ToSendDataBuffer[0] = 0x81;
  16.  
  17.                                 ToSendDataBuffer[1] = SWITCH0;  // return the current switch state
  18.  
  19.  
  20.                                 // Transmit the response to the host
  21.  
  22.                                 if(!HIDTxHandleBusy(USBInHandle))
  23.  
  24.                                 {
  25.  
  26.                                         USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64);
  27.  
  28.                                 }
  29.  
  30.                 break;
  31.  
  32.  
  33.  
  34.             case 0x82:  // Read the LED status
  35.  
  36.                                 ToSendDataBuffer[0] = 0x82;
  37.  
  38.                                 ToSendDataBuffer[1] = LED0;     // return the current LED state
  39.  
  40.  
  41.                                 // Transmit the response to the host
  42.  
  43.                                 if(!HIDTxHandleBusy(USBInHandle))
  44.  
  45.                                 {
  46.  
  47.                                         USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64);
  48.  
  49.                                 }
  50.                 break;
  51.  
  52.         }



A módosított kódrész:
  1. switch(ReceivedDataBuffer[0])
  2.  
  3.                 {
  4.  
  5.             case 0x80:  // Toggle the LED
  6.  
  7.                                 if (LED0 == 1) LED0 = 0; else LED0 = 1;
  8.  
  9.                                 if (CA2SEG == 1) CA2SEG = 0; else CA2SEG = 1;
  10.  
  11.                                 if (PORTB == SEG9) PORTB = SEG8; else PORTB = SEG9;
  12.  
  13.  
  14.                                 ToSendDataBuffer[0] = 0x80;
  15.  
  16.                                 ToSendDataBuffer[1] = LED0;     // return the current LED state
  17.  
  18.  
  19.                                 // Transmit the response to the host
  20.  
  21.                 if(!HIDTxHandleBusy(USBInHandle))
  22.  
  23.                                 {
  24.  
  25.                                         USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64);
  26.  
  27.                                 }
  28.  
  29.                 break;
  30.  
  31.  
  32.            case 0x81:  // Read the push-switch status
  33.  
  34.                                 ToSendDataBuffer[0] = 0x81;
  35.  
  36.                                 ToSendDataBuffer[1] = SWITCH0;  // return the current switch state
  37.  
  38.  
  39.  
  40.                                 // Transmit the response to the host
  41.  
  42.                 if(!HIDTxHandleBusy(USBInHandle))
  43.  
  44.                                 {
  45.  
  46.                                         USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64);
  47.  
  48.                                 }
  49.  
  50.                 break;
  51.  
  52.  
  53.  
  54.             case 0x82:  // Read the LED status
  55.  
  56.                                 ToSendDataBuffer[0] = 0x82;
  57.  
  58.                                 ToSendDataBuffer[1] = LED0;     // return the current LED state
  59.  
  60.  
  61.  
  62.                                 // Transmit the response to the host
  63.  
  64.                 if(!HIDTxHandleBusy(USBInHandle))
  65.  
  66.                                 {
  67.  
  68.                                         USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64);
  69.  
  70.                                 }
  71.  
  72.                 break;
  73.                        
  74.             case 0x83:  // Új parancs
  75.                                 if (LED0 == 1) LED0 = 0; else LED0 = 1;
  76.  
  77.                                 PORTB = SEG0;
  78.  
  79.                                 CA1SEG = 0;
  80.  
  81.                                 CA2SEG = 1;
  82.  
  83.                                 CA3SEG = 1;
  84.  
  85.  
  86.                                 ToSendDataBuffer[0] = PORTB;    // return port B state
  87.                                 ToSendDataBuffer[1] = LED0;     // return the current LED state
  88.  
  89.  
  90.                                 // Transmit the response to the host
  91.  
  92.                 if(!HIDTxHandleBusy(USBInHandle))
  93.  
  94.                                 {
  95.  
  96.                                         USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64);
  97.  
  98.                                 }
  99.  
  100.                 break;
  101.  
  102.         }



Ha a http://www.lvr.com/hidpage.htm lapon található generic_hid_vb program segítségével küldök parancsokat,
akkor 0x80, 0x81 és 0x82-t végrehaja de 0x84-t nem!
A 0x80-ba végzett módosítások mennek.

Remélem erthetően fogalmaztam. Tud valaki valami megfejtést erre a már-már misztikus jelenségre? PLZ!
(#) El_Pinyo válasza elektroby hozzászólására (») Ápr 20, 2011 /
 
Az analóg funkciókat letiltottad a PORTB-n, tehát digitális kimenetre vannak állítva?
Más: Nem szokás 18F típusnál közvetlenül a portra írni, helyette a LAT regisztereket használjuk. Gondolom ez a Hi-Tech C-nél is így van.
(#) icserny válasza elektroby hozzászólására (») Ápr 21, 2011 /
 
Jó lenne látni a 7-szegmenses kijelző bekötését! A becsatolt kódrészletekből pedig nem látszik, hogy a portok beállítása megfelelő-e. Az olyan "régi vágású" mikrovezérlőknél, mint a PICF18F4550 is, az ADCON1 regiszterben lehet letiltani az ADC analóg bemeneteit (ADCON1 = 0b00001111; mindet letiltja), s a TRISx regiszterek (x = A, B, C, D, E) megfelelő bitjének 0-ba állításával kimenetre kell állítani a kijelző vezérlésre használt kivezetéseket.

Biztosan sok idő kell hozzá, de ha komolyan érdekel a PIC4550, szerintem érdemesebb volna a PICCOLO projekttel kezdeni.

RA0-ra nem érdemes digitális kimenetet (LED) tenni, mert az analóg csatornák PICF18F4550 esetén csak RA0-tól kezdve, sorban engedélyezhetők.
(#) Attila86 hozzászólása Ápr 21, 2011 /
 
Nem akar működni a debuggolás a PICkit3-al. Ezt mondja az MPLAB:
Idézet:
„PICkit 3 detected
Connecting to PICkit 3...
Firmware Suite Version...... 01.26.43
Firmware type......................PIC18F
PICkit 3 Connected.
Device ID Revision = 00000002

Running...
PK3Err0040: The target device is not ready for debugging.
Please check your configuration bit settings and program
the device before proceeding.”

A konfigurációs bitekben és a programban nem tudom hogy mi lenne rossz, mert működik a program.
(#) ciszfejleszto válasza (») Ápr 21, 2011 /
 
Elnézést ! Legközelebb odafigyelek.
(#) kissi válasza Attila86 hozzászólására (») Ápr 21, 2011 /
 
Szia!

DEBUG üzemmódban töltötted be a programot a PIC-be ?!

Steve
(#) Attila86 válasza kissi hozzászólására (») Ápr 21, 2011 /
 
Szia!

Most hogy rákérdeztél, nem.
Köszönöm a segítséget!
(#) elektroby válasza icserny hozzászólására (») Ápr 21, 2011 /
 
A kijelző anódjai (3 digit) tranyón keresztül RE0-2-n, a szegmensek RB0-6-n. "Mezei" asm proggal megy!
Az eredeti USB-s prog is megy. Kapcsolgarja a ledet, beolvassa a nyomógomb állapotát.
A portok baállítása:
  1. ADCON1 = 0x0F; // Default all pins to digital
  2.  
  3.         // Configure ports as inputs (1) or outputs(0)
  4.         TRISA = 0b00000010;
  5.         TRISB = 0b00000000;     //katódok
  6.         TRISC = 0b00000000;
  7.         TRISD = 0b00000000;
  8.         TRISE = 0b00000000;     //anódok
  9.  
  10.         // Clear all ports
  11.         PORTA = 0b00000000;
  12.         PORTB = 0b00000000;
  13.         PORTC = 0b00000000;
  14.         PORTD = 0b00000000;
  15.         PORTE = 0b00000110;

Az RA0-n lévő ledet vezérli az eredeti prog. Amit nem értek, hogy a módosítás után miért nem megy pl RA2-n?
PICCOLOval is kinlódtam de valami ott sem volt kerek.
Amúgy ismerem a 4550-t de csak asm-ban irtam rá idáig (pl GSM-SMS kommunikáció, i2c stb.). A C egynlőre egy kicsit idegen számomra.

main.c
    
(#) elektroby válasza El_Pinyo hozzászólására (») Ápr 21, 2011 /
 
Az eredetiben a portX-et használják, ezért használtam én is azt.
Amúgy ha megy RA0-n akkot ugyanígy RA2-n is mennie kéne!

Az előző hozzászólásomhoz becsatoltam az eredeti main.c-t.
(#) icserny válasza elektroby hozzászólására (») Ápr 21, 2011 /
 
Lehet, hogy a hardver profilban definiálva van a USE_SELF_POWER_SENSE_IO szimbólum? Akkor a főprogram bemenetre kapcsolja az RA2 lábat (mert ez a self_power nevű bemenet).
(#) elektroby válasza icserny hozzászólására (») Ápr 21, 2011 /
 
Na ezt most nem vágom! Mi kapcsol mit, hova? (Bocs az értetlenkedésért).
Csatoltam a HardwareProfile.h-t
(#) icserny válasza elektroby hozzászólására (») Ápr 21, 2011 /
 
Gyárilag ez így néz ki:
  1. //#define USE_SELF_POWER_SENSE_IO
  2.     #define tris_self_power     TRISAbits.TRISA2    // Input
  3.     #if defined(USE_SELF_POWER_SENSE_IO)
  4.     #define self_power          PORTAbits.RA2
  5.     #else
  6.     #define self_power          1
  7.     #endif
  8.  
  9.     //#define USE_USB_BUS_SENSE_IO
  10.     #define tris_usb_bus_sense  TRISAbits.TRISA1    // Input
  11.     #if defined(USE_USB_BUS_SENSE_IO)
  12.     #define USB_BUS_SENSE       PORTAbits.RA1
  13.     #else
  14.     #define USB_BUS_SENSE       1
  15.     #endif

A lényeg az, hogy a két komment sor maradjon kommentben. Ha az áramköröd az USB-ről kapja a feszültséget, akkor ezekre nincs szükség és nem foglalják le az RA1, RA2 lábakat.
(#) googa hozzászólása Ápr 21, 2011 /
 
Sziasztok! Egy PIC24-et LDO-n keresztül táplálok egy 3,7V-os akkuval. Sima feszültségosztóval szeretném megfelezni a tápfeszt és ADC-re bekötni, hogy tudjam figyelni a feszültséget.

A kérdésem annyi, hogy a feszültségosztó ellenállásai ohm-os, 10-100 ohmos, vagy éppen 10-100 kiloohm-os értékűek legyenek?

Köszönöm! googa
(#) elektroby válasza icserny hozzászólására (») Ápr 21, 2011 /
 
Na most te ezt hol találtad?!
Nálam ilyen nincs (legalábbis én nem találom).
Ettől függetlenül, ha jól gondolom:
#define LED0 RA0 --> LED0 = 1; --> Led világít
akkor pl:
#define CA1SEG RE0 --> CA1SEG = 0 --> kimenet L
Vagy nem?
(#) Hp41C válasza googa hozzászólására (») Ápr 21, 2011 /
 
Szia!

A 10-100 ohm hamar lemerítené az akkumulátort... A 10 - 100 k túl nagy forrásimpedancia az A/D -nek, de egy kondenzátorral szűrve jobb megoldás, mint az első.

Hogyan méred? Mi lesz a referencia?
(#) Attila86 válasza googa hozzászólására (») Ápr 21, 2011 /
 
Szia!

24F-es PIC-ekkel ugyan még nem foglalkoztam, de amikkel igen, azoknak mind 2,5kOhm volt a bemeneti impedanciájuk. Nem érdemes tehát ennél nagyobb nagyságrendű ellenállásokat használni az osztóban.
(#) googa válasza Attila86 hozzászólására (») Ápr 21, 2011 /
 
Sziasztok! Ennek is 2,5 k ohm a bemeneti impedanciája. Referenciának a PIC saját tápját venném alapul, ami LDO-ről szűrt 3,3V.
(#) icserny válasza elektroby hozzászólására (») Ápr 21, 2011 /
 
Idézet:
„Na most te ezt hol találtad?!”
A helyén. Az USB keretrendszer és a példaprogramok a Microchip Application Libraries-ben találhatók. Mivel HID eszközről beszéltél, az USB Device - HID -Custom Demos mappában néztem meg a Generic HID Firmware-t. Mivel PIC18F4550-ről volt szó, a Hardware Profile - PICDEM FSUSB.h állományt idéztem.

  1. #define LED0 RA0 --> LED0 = 1; --> Led világít
Ez nem tudom, hogy milyen nyelvjárásban van. C18 esetén inkább így kellene definiálni:
Idézet:
„#define LED0 LATAbits.LATA0”
A fentebb említett Hardware Profile - PICDEM FSUSB.h állományban is így definiálják a LED-eket.
(#) elektroby válasza icserny hozzászólására (») Ápr 21, 2011 /
 
Még sok mindent meg kell értenem...
Azért értetlenkedtem, mert nem találtam ilyen definíciót a project fájljaiban.
Nem akarom elkiabálni, de működik a dolog. Ami azért zavar egy kicsit, hogy nem értem, hogy eddig miért nem ment s most mitől megy.
Azért természetesen köszönöm, hogy foglalkoztál (folalkoztatok) a problémával.

Úgy ertettem hogy ha a HardwareProfile.h-ban
#define LED0 RA0
és a main.c-ben
LED0 = 1;
akkor a led világít
(#) icserny válasza elektroby hozzászólására (») Ápr 21, 2011 /
 
Idézet:
„Azért értetlenkedtem, mert nem találtam ilyen definíciót a project fájljaiban.”
Nyilvánvalóan azért, mert más helyról, s esetleg más fordítóhoz kerestél (pontosabban találtál) programot.
Idézet:
„Úgy ertettem hogy ha a HardwareProfile.h-ban #define LED0 RA0”
Értettem én, csak ahogy már többen jeleztük, ez nem jó. Bitbillegtetéshez a LATA regisztert kell használni.
(#) elektroby válasza icserny hozzászólására (») Ápr 21, 2011 /
 
Idézet:
„Értettem én, csak ahogy már többen jeleztük, ez nem jó. Bitbillegtetéshez a LATA regisztert kell használni.”

Értem én (asm-ban én is a LATAx-et használom), de az eredeti kódban így volt.
Mégegyszer köszi!
(#) dudzsi hozzászólása Ápr 22, 2011 /
 
Sziasztok!
Tudtok egy oldalt mondani ahol az A/D átalakitásrol van le irás és magyarul. Esetleg ki irása egy lcdre.
Köszi
(#) icserny válasza dudzsi hozzászólására (») Ápr 22, 2011 /
 
A honlapomon a lap utolsó példaprogramja pont azt csinálja. PIC18F4520 MCU, a 2x20 karakteres kijelzővel rendelkező DB-DP113 kártya felhasználásával.

Mivel a lábkiosztás nálam eltér a "gyári könyvtárban" megadottól, így újra kellett fordítanom a p18f4520.lib könyvtárat (azt is leírtam, hogyan). A másik lehetőség: az LCD programozásáról szóló fejezetben bemutatott saját függvények használata.
Következő: »»   955 / 1320
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