Fórum témák

» Több friss téma
Fórum » PIC kezdőknek
 
Témaindító: Placi84, idő: Okt 3, 2005
Témakörök:
- A PIC ÖSSZES Vdd és Vss (AVdd és AVss) (tápfeszültség) lábát be kell kötni!
- A táplábak mellé a lehető legközelebb 100nF-os KERÁMIA kondenzátorokat kell elhelyezni.
- Az MCLR lábat, 10kohm-mal fel kell húzni a Vdd tápfeszültségre.
- Külső kvarc használatakor 4MHz-ig XT, a fölött pedig HS konfigurációt kell beállítani.
- Stabilizált tápegységet kell használni, a kapcsoló üzemű "telefon töltő" adapterek okozhatnak hibákat.
- Programozáshoz, használj lehetőleg PICKIT2 vagy 3 programozót. Kerülendő a JDM (soros porti) programozó.
- A PIC adatlapja (PDF), tartalmazza a lábak kiosztását és a PIC minden paraméterét. Az adatlap ingyen letölthető!
- Egyes PIC típusoknál az RA4 nyitott nyelőelektródás (Csak lefelé húz L szintre, H szintet nem ad ki!)
- Ha a PGM lábat digitális ki-/bemenetnek használod, az alacsony feszültségű programozási lehetőséget le kell tiltani.
Lapozás: OK   385 / 1210
(#) pjg válasza janimester hozzászólására (») Márc 23, 2013 /
 
A 18F Timer0 választhatóan 8, vagy 16 bites. A 16F-é csak 8 bites.
A hozzászólás módosítva: Márc 23, 2013
(#) janimester válasza pjg hozzászólására (») Márc 23, 2013 /
 
Értelek és ez befolyásol valamit? Gondolom a kijelzett érték határa fog csökkenni de sajnos azt még mindíg nem tudom mit kéne átírnom hogy legalább valamilyen szinten működjön a program
(#) kissi válasza janimester hozzászólására (») Márc 23, 2013 /
 
Úgy láttam az átküldött anyagban, hogy 8 bites a használat, tehát ez nem lenne gond, viszont szerintem használja később is a TMR0 be-kikapcsolását ( nem néztem, csak gondolom ) és azt nem tudod "simán" megoldani a 16-oson!
Steve
(#) janimester válasza kissi hozzászólására (») Márc 23, 2013 /
 
Értem akkor nem is küzdök vele köszi.
(#) Hp41C válasza janimester hozzászólására (») Márc 23, 2013 /
 
Szia!
Ennyire könnyen nem kellene feladni, egy 16F886 is képes rá. Ha nem kell az USB, akkor minek a 18F2550 -t alkalmazni?
do
  1. {
  2. T0CON.TMR0ON = 1;
  3. TMR0L = 0;
  4. TMR0H = 0;
  5. IR_Tx = 1;
  6. Delay_ms(1000); // Wait for 1 sec
  7. IR_Tx = 0;
  8. T0CON.TMR0ON = 0; // Stop the timer
  9. RPM_Value = (256*TMR0H + TMR0L)*60;
  10. Display_RPM(RPM_Value);
  11. } while(1); // Infinite Loop

Ha a
  1. Delay_ms(1000); // Wait for 1 sec

sor helyett magad írsz egy programhurkot, aminek a futái ideje 1 másodperc és "elkapkodja" és egy változóban számolja a TMR0 átforhulásait, máris kész a 16 bites (sőt akárhány bites) timer.
A T0CON bitjeit a OPTION_REG -ben és az INTCON -ban találod (már aminek van megfelelője a 16F -en). A TMR0L helyett a TMR0 van, a TMR1H értelem szerűen nem létezik.
(#) janimester válasza Hp41C hozzászólására (») Márc 23, 2013 /
 
Értelek, csak sajnos még magamtól nem megy ez nem tartok ott itt a teljes program inkább bemásolom és ha megkérlek bele tudsz javítani ott ahol a hiba van?

  1. /*
  2.   Project: Contactless digital tachometer
  3.   Description:
  4.     MCU: PIC18F2550 onboard StartUSB for PIC board
  5.     48.0 MHz clock using HS+PLL
  6.     TIMER0 module is used as a 16-bit counter to count external
  7.     pulses arriving at T0CKI input
  8.    
  9.     Copyright @ Rajendra Bhatt
  10.     April 18, 2011
  11. */
  12.  
  13.  unsigned long RPM_Value;
  14.  
  15. // Define LCD module connections.
  16.  sbit LCD_RS at RC6_bit;
  17.  sbit LCD_EN at RC7_bit;
  18.  sbit LCD_D4 at RB4_bit;
  19.  sbit LCD_D5 at RB5_bit;
  20.  sbit LCD_D6 at RB6_bit;
  21.  sbit LCD_D7 at RB7_bit;
  22.  sbit LCD_RS_Direction at TRISC6_bit;
  23.  sbit LCD_EN_Direction at TRISC7_bit;
  24.  sbit LCD_D4_Direction at TRISB4_bit;
  25.  sbit LCD_D5_Direction at TRISB5_bit;
  26.  sbit LCD_D6_Direction at TRISB6_bit;
  27.  sbit LCD_D7_Direction at TRISB7_bit;
  28. // End LCD module connection definition
  29.  sbit IR_Tx at RA3_bit;
  30.  
  31. // Define Messages
  32.  char message1[] = "Tachometer";
  33.  char *RPM = "00000 RPM";
  34.  void Display_RPM(unsigned long num){
  35.   RPM[0] = num/10000 + 48;
  36.   RPM[1] = (num/1000)%10 + 48;
  37.   RPM[2] = (num/100)%10 + 48;
  38.   RPM[3] = (num/10)%10 + 48;
  39.   RPM[4] = num%10 + 48;
  40.   Lcd_Out(2,4,RPM);
  41.  }
  42.  
  43.  void main() {
  44.   CMCON = 0x07;   // Disable comparators
  45.   ADCON1 = 0x0F;  // Disable Analog functions
  46.   TRISC = 0x00;
  47.   TRISB = 0x00;
  48.   PORTA = 0x00;
  49.   TRISA = 0b00010000;
  50.   T0CON = 0b01101000; // TMR0 as 16-bit counter
  51.   Lcd_Init();        // Initialize LCD
  52.   Lcd_Cmd(_LCD_CLEAR);             // CLEAR display
  53.   Lcd_Cmd(_LCD_CURSOR_OFF);        // Cursor off
  54.   Lcd_Out(1,4,message1);            // Write message1 in 1st row
  55.   do {
  56.  
  57.    T0CON.TMR0ON = 1;
  58.    TMR0L = 0;
  59.    TMR0H = 0;
  60.    IR_Tx = 1;
  61.  
  62.    Delay_ms(1000); // Wait for 1 sec
  63.    IR_Tx = 0;
  64.    T0CON.TMR0ON = 0;    // Stop the timer
  65.    RPM_Value = (256*TMR0H + TMR0L)*60;
  66.    Display_RPM(RPM_Value);
  67.   } while(1);             // Infinite Loop
  68.  }
(#) nyemi válasza janimester hozzászólására (») Márc 23, 2013 /
 
A TMR1 kell helyette használni.
Szerintem az a legegyszerűbb.

De ahogy látom még a port lábakkal is kéne ügyködni.
A hozzászólás módosítva: Márc 23, 2013
(#) janimester válasza nyemi hozzászólására (») Márc 23, 2013 /
 
Átírtam minden dolgot ami a timerrel kapcsolatos az egyes timerre és le is fordította gond nélkül remélem a proteusban is működik és akkor minden oké
(#) nyemi válasza nyemi hozzászólására (») Márc 23, 2013 /
 
Visszakozok.
Nem egyszerűbb.

Kicsit elhamarkodott voltam.
(#) janimester válasza nyemi hozzászólására (») Márc 23, 2013 /
 
Értelek, már átírogattam ezt azt most jobbnak tűnik de alapból hogy a szimulátorban semmi nincs rácsatlakoztatva 60-at jelez ki.
(#) tom75 hozzászólása Márc 23, 2013 /
 
Szia Hp41c!

Amikor legutóbb változtattál a programon akkor csak CGRAM-ban változtattál?

Köszi
(#) janimester válasza janimester hozzászólására (») Márc 23, 2013 /
 
Akárhogy csűröm csavarom a timer1 ki és bemenetet állandóan 9000 ezreket ír ki nekem nem tudom mit variáljak vele még.
(#) pjg válasza janimester hozzászólására (») Márc 23, 2013 /
 
A 65. sorban 60-nal szorozni kell. Nem hozzáadni a 60-at.
(#) pjg válasza pjg hozzászólására (») Márc 23, 2013 /
 
Amúgy ez egy nagyon egyszerű program. FlowCode-ban egyből le lehet programozni.
Ráadásul alacsony fordulatszámon nagyon pontatlan és lassú a mérés. Másodpercenként írja ki az eredményt. 60.000 fordulatig inkább az 1 fordulat idejét mérném.
A Watt féle frekvencia, periódusidő mérő erre a célra is tökéletes
A hozzászólás módosítva: Márc 23, 2013
(#) dave77 hozzászólása Márc 23, 2013 /
 
Sziasztok!

PIC 18F4520-hoz, MPLAB-C18-ban mit kéne ide írni a HS helyére, hogy a saját belső oszcilátoráról menjen, és az OSC lábak megmaradjanak Be/Ki-menetnek?

#include <p18cxxx.h>
#pragma config OSC = HS /* Sets the oscillator mode to HS */
A hozzászólás módosítva: Márc 23, 2013
(#) matheattila hozzászólása Márc 23, 2013 /
 
Sziasztok, találkozott még valaki azzal a hibával PIC18F4550-es mikrovezérlőnél, hogy ha be van állítva a megszakítás prioritás (RCON.IPEN = 1) és a magas és alacsony prioritásu megszakítások is engedélyezve vannak (INTCON.GIEH = 1, INTCON.GIEL = 1) működik a program addig ameddig egy MCLR Reset be nem következik, ahogy megtörtént a reset, lefagy a program, nem kezdi elölről az egészet, hanem kiakad? Igaz eddig még csak Proteus-ban próbáltam, valóságban még nem volt rá lehetőségem, de ez nagyon idegesít, csak egy AD konvertert használok, a main-ben 200ms-onként engedélyezem a konverziót és majd megszakításban olvasom ki és a main-ben dolgozom fel az adatokat. MikroC-ben dolgozom, de nem akarom a saját beépített függvényeit használni.
  1. unsigned int ADCbuff = 0;
  2. double temperature = 0;
  3.  
  4.  
  5. void main() {
  6.  
  7.    TRISA  = 0x01;  // PORTA0 is input
  8.    TRISB  = 0x00;
  9.    TRISC  = 0x00;
  10.    TRISD  = 0x00;
  11.    
  12.    PORTA  = 0x00;
  13.    PORTB  = 0x00;
  14.    PORTC  = 0x00;
  15.    PORTD  = 0x00;
  16.    
  17.    CMCON |= 0x07;  // comparators disabled
  18.    ADCON1 = 0x1E;  // Vref- = Vss, Vref+ = AN3 (3V), RA0 Analog, others Digital
  19.    ADCON0 = 0x01;  // ADC ON
  20.    ADCON2 = 0x91;  // Right justified, AD Clock = Fosc/8, Tacq = 4TAD
  21.    
  22.    ADCON0.GO = 1 ;   // ADC Start
  23.    while(ADCON0.GO); // wait for a conversion
  24.    
  25.    RCON.IPEN = 1;
  26.    INTCON.GIEH = 1; // Global interrupt Enabled
  27.    INTCON.GIEL = 1;
  28.    
  29.    PIR1.ADIF = 0;   // ADC interrupt flag cleared
  30.    PIE1.ADIE = 1;   // ADC interrupt Enabled
  31.  
  32.    while(1)
  33.    {
  34.      ADCON0.GO = 1;
  35.      portb = 1;
  36.      delay_ms(100);
  37.      temperature = ((double)ADCbuff*3/1024 - 0.5)/0.01;
  38.      portb = 0;
  39.      delay_ms(100);
  40.    }
  41.    
  42.  
  43. }
  44.  
  45. void interrupt()
  46. {
  47.    if(PIR1.ADIF)
  48.    {
  49.       PIR1.ADIF = 0;
  50.       PIE1.ADIE = 0;
  51.       ADCbuff = ADRESL + (unsigned)ADRESH * 256;
  52.       PIE1.ADIE = 1;
  53.     }
  54. }

Érdekes módon PIC18F4620-al tökéletesen működik a szimuláció, míg a másikkal Reset után lefagy, el sem jut a végtelen ciklusig, mert a LED nem villog.
A hozzászólás módosítva: Márc 23, 2013
(#) potyo válasza dave77 hozzászólására (») Márc 23, 2013 /
 
Help->Topics->PIC18 Config Settings
(#) dave77 válasza potyo hozzászólására (») Márc 23, 2013 /
 
Köszi, beállítottam, működik is.
Hogy tudom a frekvenciáját 4 vagy 8MHz-re állítani? Erre vonatkozó lehetőséget nem találtam az adott oldalon.
(#) Poostmaster hozzászólása Márc 23, 2013 /
 
Sziasztok.
Olyan gondom volna, hogy szeretnék egy léptetőmotort vezérelni 887-essel.
Biztosan ismerős lehet sokaknak az ebay-en árult 28BYJ-48 motor ULN 2003 vezérlőpanellal.
Tudja valaki, hogyan kell olyan programot írni, amelyik meg is forgatja? Nézegettem a léptetőmotoros topicot, de ott semmi konkrétat nem találtam. Próbáltam sorban bekapcsolni, 250ms-os várakozással, aztán átfedéssel is, 0011-01100-1100-1001 bitmintával, de csak remeg, meg sem mozdul.
(#) potyo válasza dave77 hozzászólására (») Márc 23, 2013 /
 
OSCCON regisztert nézd meg az adatlapban
(#) dave77 válasza potyo hozzászólására (») Márc 23, 2013 /
 
Ez is sikerült, KÖSZI !!!!!
(#) Attila1975 hozzászólása Márc 23, 2013 /
 
Sziasztok,

sajnos csak elméletben vágom hogy hogyan is kellene PIC-hez programot írni. Ezért keresek olyan valakit aki meg tudná oldani a problémám sw-részét, a hardver rajza készen van sajnos a progit nem tudtam megírni hozzá. Akit érdekel a dolog, természetesen nem ingyen gondolom a progi elkészítést küldjön mailt priviben.

A lényeg: 12F508-ról van szó aminek egy bemenetét és egy kimenetét kellene használni.

Várom a jelentkezést!
(#) pjg válasza Attila1975 hozzászólására (») Márc 23, 2013 /
 
Mit csináljon a program?
(#) agressiv hozzászólása Márc 23, 2013 /
 
Gyors kérdés, visszafejthető egy PIC-be írt program? Semmi védelem, vagy hasonló nincs, saját program, de adatvesztés következtében elveszett a forráskód és nem sok kedvem van újra írni..
(#) pjg válasza agressiv hozzászólására (») Márc 23, 2013 /
 
Kiolvasható, decompilerrel visszafejthető, de szenvedni fogsz vele.
(#) agressiv válasza pjg hozzászólására (») Márc 23, 2013 /
 
Máshonnan is ezt a választ kaptam, szóval újaírom.. Azért köszi. Ami még hozzájön, hogy csak C-ben tudok programozni...
A hozzászólás módosítva: Márc 23, 2013
(#) bbalazs_ hozzászólása Márc 23, 2013 /
 
Azt szeretnem megtudni, hogy az MPASM-ban hogyan tudok programteruletre adatot definialni UGY, hogy a kovetkezo sort ne igazitsa word hatarra?
tehat mondjuk a
db 1,2,3
db 4,5
sajnos ugy teszi, hogy az utolso 3-ast kiegesziti word-e es utana foglalkozik a kozvetkezo sorral.

Ja, a gyalogos megoldas (hogy irjam oket egy sorba) sajnos nem jatszik, mert egy olyan, soksoros adattablarol van szo, ahol minden sor utan jon a magyarazo komment.
A hozzászólás módosítva: Márc 23, 2013
(#) potyo válasza bbalazs_ hozzászólására (») Márc 24, 2013 /
 
Próbálj dt vagy de-t a db helyett. Talán a de lesz a neked megfelelő.
A hozzászólás módosítva: Márc 24, 2013
(#) pjg válasza agressiv hozzászólására (») Márc 24, 2013 /
 
Én meg sehogy.
(#) agressiv hozzászólása Márc 24, 2013 /
 
Most két PIC közötti komenikációval kínlódok. A legnagyobb gond, hogy, ha nem a slave pic-hez van címezve az adat, akkor is veszi, de csak, ha olyan kedve van. Ha a régi programot visszaírom, akkor megintcsak működik rendesen, de, ha az újjal próbálom, pedig adatküldés szempontjából teljesen ugyanaz van beleírva, akkor nem veszi az adatot rendesen és ehhez jön hozzá az, hogy akkor is veszi, amikor nem neki van címezve. Ilyenkor mit hagyhatok ki? A hajam őszül már....
Következő: »»   385 / 1210
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