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   1060 / 1210
(#) eSDi válasza usane hozzászólására (») Dec 19, 2018 /
 
Esetleg 16F1614/15, vagy 16F1618/19? Math Accelerator van bennük.
(#) usane válasza eSDi hozzászólására (») Dec 19, 2018 /
 
Ebben HEF van. Azt ugyanúgy kell írni mint a sima FLASH-t nemde? Nem szimpatikus. Elmenteni a lapot, törölni aztán visszaírni a változott adatokkal.
(#) mhatalyak válasza Hp41C hozzászólására (») Dec 19, 2018 /
 
Köszönöm, jó lett!

Kellemes ünnepeket Mindenkinek!

Üdv: Máté
(#) eSDi válasza usane hozzászólására (») Dec 19, 2018 /
 
Igen, úgy néz ki. Sajna ezt nem is figyeltem.
(#) glaci hozzászólása Dec 19, 2018 /
 
Az előző oldalon kezdtem el kérdezősködni pic eeprom írása és olvasása problémája miatt, ami végre megoldódott.
Az a helyzet, hogy eléggé el nem ítélhető módon figyelmetlen és felületes vagyok.
Működik a mikroc beépített eeprom írója és olvasója. Ott követtem el a hibát, hogy a
// for PIC18
void EEPROM_Write(unsigned int address, unsigned short data);

// for PIC18
unsigned short EEPROM_Read(unsigned int address);

változók deklarálásánál nem vettem figyelembe a típusmódosítók használatának szükségességét.
Kijavítva a hibát szuperűl működik.
Még egyszer köszönöm mindenkinek a törődést és a segítséget.
(#) pipi válasza usane hozzászólására (») Dec 19, 2018 /
 
Hali!
Biztos 8 bites kell? esetleg nézd meg a PIC24FV32KA sorozatot 17-Bit x 17-Bit Single-Cycle Hardware Fractional/Integer Multiplier , és van eepromja
(#) usane válasza pipi hozzászólására (») Dec 20, 2018 /
 
Meggyőztél
(#) cross51 válasza usane hozzászólására (») Dec 20, 2018 /
 
Az PIC32MK-ban van eeprom de min 64 labas es hosszu az erata.
Ha megis a 32 bit fele huznal.
(#) usane válasza cross51 hozzászólására (») Dec 20, 2018 /
 
Igen köszönöm, azt én is néztem, de verébre lövök, felesleges az atom
Meg nem akarok szívni a mi működik mi nem az új MCU-ban című problémákkal
(#) aroxol hozzászólása Dec 20, 2018 /
 
Sziasztok!
Már a szemem kiesik nem látom a hibát.
Ha a TIMER sort kiveszem kapcsol a relé kimenet. Ha benne hagyom nem kapcsol. Mi a hiba?
Segítsetek kérlek.
  1. #include <p12F683.inc>
  2.      __config (_INTRC_OSC_NOCLKOUT & _WDT_ON & _PWRTE_OFF & _MCLRE_OFF & _CP_ON & _IESO_OFF & _FCMEN_OFF)
  3.  
  4.      cblock 0x20
  5. Delay1                    ;
  6. Delay2                    
  7.      endc
  8.  
  9.      org 0                
  10.  
  11.      bsf    STATUS,RP0
  12.      movlw  0x70
  13.      movwf  OSCCON
  14.    movlw  0x07
  15.      movwf  CMCON0
  16.      clrf   ANSEL
  17.      MOVLW B'11111010
  18.     movwf  TRISIO
  19.     bcf    STATUS,RP0      
  20. START
  21.         CLRWDT
  22.         btfsC  GPIO,GP4
  23.         GOTO KIKAPCSOLVA
  24.         bSf    GPIO,2       ; relékimenet
  25.         call TIMER
  26.         GOTO START
  27.  
  28. TIMER
  29.         bsf    GPIO,0
  30.    call   Delay
  31.    bcf    GPIO,0
  32.    call   Delayx
  33.    RETURN
  34.  
  35. KIKAPCSOLVA
  36.         bCf    GPIO,2       ; relékimenet     
  37.         GOTO START
  38.  
  39. Delay:
  40.    movlw  0X1D  ;kissebb °%
  41.    movwf  Delay2
  42. DelayLoop1:
  43.     movlw  0x10    
  44.     movwf  Delay1
  45. DelayLoop2:
  46.     decfsz Delay1,f
  47.     goto   DelayLoop2
  48.     decfsz Delay2,f
  49.     goto   DelayLoop1
  50.     return  
  51.  
  52. Delayx:
  53.     movlw  0X44
  54.     movwf  Delay2
  55. DelayLoop1x:
  56.     movlw  0x10
  57.     movwf  Delay1
  58. DelayLoop2x:
  59.     decfsz Delay1,f
  60.     goto   DelayLoop2x
  61.     decfsz Delay2,f
  62.     goto   DelayLoop1x
  63.     return
(#) kissi válasza aroxol hozzászólására (») Dec 20, 2018 /
 
Szia!

Mit jelent a Timer sor kivétele? Csak a BSF GPIO,0-t ?
(#) Zed válasza aroxol hozzászólására (») Dec 20, 2018 /
 
Csak ötletek: nem fut ki a Watchdog?

Másik ötlet: a program elég egyszerűnek tűnik. Szimulátorban lepróbáltad? Ott működik?
(#) Zed válasza usane hozzászólására (») Dec 20, 2018 /
 
Miért kell a hardver osztó/szorzó? Sebességkritikus az alkalmazás? (Szoftverből végezve lassú lenne a számolás?)
(#) aroxol válasza kissi hozzászólására (») Dec 20, 2018 /
 
Szia!
Ha a TIMER rutinból bár mindkát GPIO,0 kiveszem kapcsol a relé.
Ha mindkét Delay-t kiveszem működik a relé.
Ha bármelyikből csak egy is benne van nem megy.
Viszont addig eljutottam hogy a Delay-ok 0x04 -el töltve még kapcsol a relé. 0X05-el már nem.
Szimulátorban szépen fut.
(#) aroxol válasza Zed hozzászólására (») Dec 20, 2018 /
 
Próbáltam clrwdt-t nem jött be.
(#) aroxol válasza Zed hozzászólására (») Dec 20, 2018 /
 
Örülök ha így meg tudom csinálni. Egyébként elég pontosnak kell lennie.
(#) Hp41C válasza aroxol hozzászólására (») Dec 20, 2018 /
 
Próbáld ki úgy, hogy a __config sorban a WDT_ON -t kicseréled WDT_OFF -ra.
(#) aroxol válasza Hp41C hozzászólására (») Dec 21, 2018 /
 
Szia!
Átírtam. Semmi nem változott.
(#) kissi válasza aroxol hozzászólására (») Dec 21, 2018 /
 
Szia!

A CMCON0 a 0-s bankban van, tedd így :
  1. bsf    STATUS,RP0
  2.      movlw  0x70
  3.      movwf  OSCCON
  4. ;        movlw  0x07
  5. ;    movwf  CMCON0
  6.      clrf   ANSEL
  7.      MOVLW B'11111010
  8.     movwf  TRISIO
  9.     bcf    STATUS,RP0    
  10.    movlw        0x07
  11.   movwf CMCON0
(#) usane válasza Zed hozzászólására (») Dec 21, 2018 /
 
Igazából lehet, hogy elég lenne szoftverből is, de nem volt időm az időzítéseket számolgatni, így egyszerűbb volt, a költségvetésbe meg belefért.
(#) aroxol hozzászólása Dec 22, 2018 /
 
Sziasztok!
Kicseréltem a kontrollert és működik. Köszönöm szépen a segítséget.
Azért még megkínzom a rossz pic-et...
(#) tirisztortetróda hozzászólása Dec 23, 2018 /
 
Sziasztok!

Egy 4*20 karakteres LCD-re szeretnek késziteni egy kodot. Megy az inicializalas,es sikerult megcsinalni, hogy ellenorzi a karakterek szamat es sort novel, ha szukseges. Az a problemam, hogy eleg sok menupontom lenne, es nem akarok mindegyikre egy kulon kiiro rutint kesziteni, mert borzalmasan hosszu a kod. (assembly) A PIC 16F877A, a kijelzo 8 bites modban hd44780 kompatibilis.

Most a szovegeim igy vannak letarolva:
  1. LCD_T1
  2.                 ADDWF PCL,1
  3.             DT"EGY45678910123"


A meghívása LCALL-al történik, mert szeretnem ha nem lenne gond ha lapok kozt lehetne hivni-

Most a LCALL LCD_T1 -et kellene nekem, ugy atalakitani, hogy a LCD_T1 memóriacimet egy változóba betehessem, es arra hivatkozzak valahogy. Mert igy ha x számu szovegem van, akkor a valtozoba csak beteszem eppen melyiket szeretnem kiiratni igy eleg lenne egy kiirato resz.

Nagyon szepen koszonom a segitsegeteket, üdv István
(#) Hp41C válasza tirisztortetróda hozzászólására (») Dec 24, 2018 /
 
  1. movlw high(LCD_T1) ; Melyik szövegről van szó
  2. movwf pointer+1
  3. movlw low(LCD_T1)
  4. movwf pointer
  5. ....
  6. movlw 0x00    ; Melyik karaktert kell kiírni a szövegből
  7. movwf index
  8. call Kiir
  9. ....
  10. Kiir:
  11. movf pointer+1,w; A szövegre mutató pointer
  12. movwf PCLATH
  13. movf pointer,w
  14. addlw index,w
  15. btfsc STATUS,C ; laphatár figyelése
  16. incf PCLATH,f
  17. movwf PCL   ; ugrás a megfelelő retlw sorra.
(#) tirisztortetróda válasza Hp41C hozzászólására (») Dec 24, 2018 /
 
Szia!

Koszonom a valaszodat, ki fogom probalni!

Boldog karacsonyt mindenkinek, udvozlettel

István
(#) Lamprologus válasza tirisztortetróda hozzászólására (») Dec 25, 2018 /
 
Esetleg egy Nextion kijelző? Rengeteg menüpont, információ jeleníthető meg rajta, és még adatbevitelre is használható. Két lábat használ fel a PIC-ből (Rx - Tx ). És tán nem is sokkal drágább (kb. 12Euro 2,4"-os) mint egy 4*20-as LCD.
(#) frekivalto hozzászólása Dec 25, 2018 /
 
Sziasztok!

Abban szeretném kérni a segítségeteket, hogy az alábbi programrészletben miért "téveszt" a PIC? Típus: 18F26K22.
Mert biztos vagyok abban, hogy nem téveszt, de én sajnos nem találom a hibát...

Röviden...
Van egy enkoder, ami POZICIO változót növeli vagy csökkenti 1-el, 0-100 között.
POZICIO értékének megfelelően kiolvassa a 2 db táblázatból az ott megadott értékeket.
1. táblázat: ezresek és százasok
2. táblázat: tízesek és egyesek
Ennek megfelelően beállítja az alapjelet.

FCV_OW_CRC1=CRCTABLE1[FCV_POZICIO]; //ezres és százas
FCV_OW_CRC2=CRCTABLE2[FCV_POZICIO]; //tízes és egyes
OW_CRC = (OW_CRC1 * 100) + OW_CRC2
Alapjel = OW_CRC

Példa:
POZICIO=50, akkor OW_CRC1=8 és OW_CRC2=0
OW_CRC=(8*100)+0
Alapjel=800

Ami a hiba, hogy a kiolvasásnál téved. Nem sűrűn, de téved. Ilyenkor az adott pozíció értékéhez nem jó alapjelet társít (számol). Amit észrevettem, hogyha téveszt, akkor mindig ugyanazt az alapjelet téveszti! És nem összevissza...

Példa:
Pozíció értéke - rossz alapjel - jó alapjel
52 - 930 - 820
54 - 940 - 840
55 - 945 - 850
49 - 915 - 790
47 - 905 - 770
Pl. ha többször úgy téveszt, hogy pozíció értéke 55, akkor MINDIG a rossz alapjel 945!

TÁBLÁZAT:
//ezresek és százasok
rom char* CRCTABLE1 = {
0,0,0,0,0,1,1,1,1,1,
2,2,2,2,2,3,3,3,3,3,
4,4,4,4,4,5,5,5,5,5,
6,6,6,6,6,6,6,6,6,6,
7,7,7,7,7,7,7,7,7,7,
8,8,8,8,8,8,8,8,8,8,
9,9,9,9,9,9,9,9,9,9,
9,9,9,9,9,9,9,9,9,9,
9,9,9,9,9,9,9,9,9,10,
10,10,10,10,10,10,10,10,10,10,
10
};
//tizesek és egyesek
rom char* CRCTABLE2 = {
0,20,40,60,80,0,20,40,60,80,
0,20,40,60,80,0,20,40,60,80,
0,20,40,60,80,0,20,40,60,80,
0,10,20,30,40,50,60,70,80,90,
0,10,20,30,40,50,60,70,80,90,
0,10,20,30,40,50,60,70,80,90,
0,5,10,15,20,25,30,35,40,45,
50,55,60,65,70,72,74,76,78,80,
82,84,86,88,90,92,94,96,98,0,
2,4,6,8,10,12,14,16,18,20,
22
};
A hozzászólás módosítva: Dec 25, 2018
(#) BenőAladár hozzászólása Dec 25, 2018 /
 
Sziasztok!

Segítségeteket szeretném kérni. Adott ez az egyszerű és program részlet ami működik is meg nem is, viszont nem jövök rá miért. Ha a kijelző RS vagy E lába közül az egyiket nem a PORTA lábára definiálom felül hanem pl. PORTB vagy C és természetesen kötöm is fizikailag, akkor működik a program és kiírja az adott szöveget. Ha viszont az E és RS is egy egy PORTA lábon van akkor semmi sem történik.
Tesztelve élőben és szimulátorban is.
Mi ennek az oka én nem jövök rá?
  1. #define _XTAL_FREQ 8000000
  2. #define RS RA2
  3. #define EN RA5
  4. #define D4 RB4
  5. #define D5 RB5
  6. #define D6 RB6
  7. #define D7 RB7
  8.  
  9. #include<pic16f876a.h>
  10. #include <xc.h>
  11. #include <stdio.h>  //LCD-hez kell
  12. #include "lcd.h";
  13.  
  14.  
  15.  
  16. // CONFIG
  17. #pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
  18. #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
  19. #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
  20. #pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
  21. #pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
  22. #pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
  23. #pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
  24. #pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
  25.  
  26.  
  27.  
  28.  
  29. void main(void)
  30.  
  31. {
  32.     PCFG3CFG0 = 011; // Az összes PORTA láb digitális
  33.     TRISA = 0x00;
  34.     TRISB = 0x00;
  35.     Lcd_Init();
  36.    
  37.     Lcd_Set_Cursor(1,4);
  38.     Lcd_Write_String("Kisvakond");
  39.     __delay_ms(1000);
  40.    }


Köszönöm a segítségetek!
(#) glaci hozzászólása Dec 25, 2018 / 1
 
Szia!
Az ADCON1 register rosszul van megadva.
Add meg úgy, hogy ADCON1=14;
Vagy biteként: ADCON1.RB1=1;ADCON1.RB2=1;ADCON1.RB3=0;
Akkor az minden RA láb digitális lesz.
(#) frekivalto válasza frekivalto hozzászólására (») Dec 25, 2018 /
 
Átnézve a programot megtaláltam a hibát.

A táblázat olvasással nem volt probléma. Elsősorban az volt gyanús, hogy a pozíció értéke ha hibás volt, akkor mindig 14-el volt több, mint a valós. Ebből kiindulva beugrott, hogy a pozíció számának kiküldése előtt (Nextion kijelzőre) hozzá adok +14-et, hogy a megfelelő kép száma kerüljön kiküldésre,majd kiküldés után rögtön -14-et ki is vonok belőle. Viszont, ha a művelet közben (+14-et hozzáadva) jön az újabb megszakítás, akkor a pozíció értéke már 14-el több, mint kellene...

Szóval szívattam magam, de tanultam belőle.

További Kellemes Ünnepeket Kívánok!
Péter
(#) BenőAladár válasza glaci hozzászólására (») Dec 25, 2018 /
 
Szia!
Köszönöm a segítséget ADCON1=14; el működik egyből.
Viszont most szeretném megérteni a 14-es decimális szám miből jött ki (1110)?
Csatoltam az ADCON1 regiszter képét.
És egy újabb kérdés "ADCON1.RB1" hol található milyen dokumentációban, ez így megadható?
Nagyon régen tanultam PIC-et programozni és akkor is assemblyben. C nyelven csak amit össze tudok szedni tudást innen onnan ezért is a kérdések.

adcon.png
    
Következő: »»   1060 / 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