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   1082 / 1203
(#) Hp41C válasza Pali79 hozzászólására (») Ápr 17, 2019 / 1
 
A Watch ablakon a szimbólumra jobb klick, properties...
(#) apromax hozzászólása Ápr 23, 2019 /
 
C ben használom a memset() és a memcpy() függvényeket.
  1. void FloatInit( void )
  2. {  
  3. memset( insamp, 0, sizeof( insamp ));
  4. }

Ugyan hibátlanul lefordul, de egy figyelmeztetést kapok például a memset() re:

warning: implicit declaration of function 'memset'
warning: incompatible implicit declaration of built-in function 'memset'

Mi lehet a warning oka?
(#) Hp41C válasza apromax hozzászólására (») Ápr 23, 2019 /
 
Melyik C -ről van szó?
Idézet:
„warning: implicit declaration of function 'memset'”

Általában akkor kapjuk ezt a figyelmeztetést, ha a deklarációja nélkül vagy az előtt használjuk a függvényt. #incude <string.h>
(#) apromax hozzászólása Ápr 23, 2019 /
 
Jogos, valóban a <string.h> hiányzott.
Talán buta kérdés, de miért nem tehetjük meg hogy minden program elé automatikusan beírjuk az összes Standard Library headert? Ekkor ilyen hibát nem lehetne elkövetni.
Ettől még nem nőne meg szerintem a használt memória. Vagy mégis?
Nem csak a fordító számára lesz ez információ?
A hozzászólás módosítva: Ápr 23, 2019
(#) superuser válasza apromax hozzászólására (») Ápr 23, 2019 /
 
Hogy nő-e a kód és csökken-e a memória, az attól függ mi van a header-ben és hogyan optimalizál a fordító.
Hogy a kód lassabban fog lefordulni, az az egy biztos.
A hozzászólás módosítva: Ápr 23, 2019
(#) apromax hozzászólása Ápr 23, 2019 /
 
Részben értem, de valahogy mégsem áll össze a dolog teljesen.
Például adott headerben jellemzően jóval több fv. deklaráció van mint használunk belőle. Ez önmagában is hasonló helyzetet teremt mint az önkényesen beincludolt "felesleges" header.
Valójában mitől tudna nő ni a kódhossz, csökkenni a memória csupán a deklarációk növekvő száma miatt?
A lassabb fordulást érteni vélem, de a header tartalmától függő memóriafoglalás már nem egyértelmű nekem.
A hozzászólás módosítva: Ápr 23, 2019
(#) superuser válasza apromax hozzászólására (») Ápr 23, 2019 /
 
Azt is írtam: "attól függ mi van a header-ben". Emlékeim szerint kódot is lehet benne deklarálni, bár én ezt a megoldást a magam részéről lehetőleg kerülném...
(#) lastewer hozzászólása Ápr 24, 2019 /
 
Sziasztok!

Van egy PIC16f628a -s mikrovezérlőm. Interrupt-ot akarok csinálni, szeretnék villogtatni egy ledet, de nem működik a szimulációban.

Mit rontok el?

  1. #define _XTAL_FREQ 4000000
  2. unsigned int cnt;
  3. void setup_interrupts()
  4. {
  5.     // clear the TMR0 register
  6.     TMR0 = 0;
  7.  
  8.     // set up interrupt registers
  9.     OPTION_REG.T0CS = 0;  // clock source is internal instruction clock
  10.     OPTION_REG.PSA = 0;   // prescaler assigned to TMR0
  11.     OPTION_REG |= 0x07;   // set the prescaler to 1:64 scale using an or
  12.     INTCON.GIE = 1;       // enable global interrupts
  13.     INTCON.T0IE = 1;      // enable TMR0 interrupt
  14.     cnt++;
  15. }
  16. void main() {
  17.      // some standard PIC16F628A configuration
  18.      TRISA = 0x00;   // output
  19.      TRISB = 0x07;   // input
  20.      PORTA = 0x01;   // set PORTA to off
  21.      CMCON = 0x07;   // turn off comparators
  22.  
  23.      // setup interrupts
  24.      setup_interrupts();
  25.  
  26.      // loop forever and ever and ever and ...
  27.      while(1);
  28. }
  29. void interrupt_ISR(void)
  30. {
  31.          if (cnt >= 10000)    // 10000 * 0.1 ms = 1 mp
  32.           {
  33.                     PORTB.F0 = ~PORTB.F0;   // RB0 láb villogtatás
  34.                     cnt = 0;                // Számláló reset
  35.           }
  36. }
(#) Hp41C válasza lastewer hozzászólására (») Ápr 24, 2019 /
 
Idézet:
„TRISB = 0x07; // input
...
PORTB.F0 = ~PORTB.F0; // RB0 láb villogtatás”


TRISB = 0x07 bemenetre állítja a PORTB RB0 lábát.
(#) lastewer válasza Hp41C hozzászólására (») Ápr 24, 2019 /
 
Ha kimenetre állítom, akkor is elhasal.

  1. TRISB = 0x00;   // out
(#) Hp41C válasza lastewer hozzászólására (») Ápr 24, 2019 /
 
Mit jelent az, hogy "elhasal"?
A Watchdog ki van kapcsolva? A konfigurációs bitek jól vannak beállítva? (LVP)
(#) lastewer válasza Hp41C hozzászólására (») Ápr 24, 2019 /
 
Ennyi van beállítva, amit látsz csak. Azt jelenti hogy :

Idézet:
„Stack overflow pushing return address of interrupt”
(#) Hp41C válasza lastewer hozzászólására (») Ápr 24, 2019 /
 
Nem törlöd a TMR0IF bitet a void interrupt_ISR(void) függvényben.
MOst lenne jó tudni, hogy melyik fordítót használod. Ettől függ, mit kellene még csinálnia...
(#) lastewer válasza Hp41C hozzászólására (») Ápr 24, 2019 /
 
MikroC for pic fordítót használok.

  1. void interrupt_ISR(void)
  2. {
  3.          if (cnt >= 10000)    // 10000 * 0.1 ms = 1 mp
  4.           {
  5.                     PORTB.F0 = ~PORTB.F0;   // RB0 láb villogtatás
  6.                     cnt = 0;                // Számláló reset
  7.                     TMR0IF_bit = 0;
  8.           }
  9. }


Ha minden igaz, így törli, de a hiba ugyanaz.
A hozzászólás módosítva: Ápr 24, 2019
(#) Hp41C válasza lastewer hozzászólására (») Ápr 24, 2019 / 1
 
Nem jó helyen van a törlés. Vidd át a jelenlegi 8. és 9. sor közé.
Az MpLab8/XC8 szimulálja (néhány módosítás után), és periódusidőnek 4MHz órajellel 1330,72 másodpercet számol.
A hozzászólás módosítva: Ápr 24, 2019

pr.c
    
(#) lastewer válasza Hp41C hozzászólására (») Ápr 24, 2019 /
 
Köszönöm szépen
(#) lastewer hozzászólása Ápr 27, 2019 /
 
Sziasztok!

Van egy PIC16f628A mikrovezérlőm , hozzá 4mHz-s kvarcom.

Az miért van, hogy proteusban szimulálva működik a serial kommunikáció rendesen, de élesben összerakva olyan adatokat kapok a pictől, mintha rossz baudrate lenne beállítva?

9600 van beégetve a vezérlőbe és ugyanezzel a sebességgel olvasnám is.

Ötlet?
(#) eSDi válasza lastewer hozzászólására (») Ápr 27, 2019 /
 
4mHz-el ne csodálkozz! Na jó csak vicc volt. MHz-re gondoltál.

Bármi lehet, ha nem csatolsz kódot. Vagy legalább a regiszterekbe beírt értékeket írd le légy szíves.
(#) lastewer válasza eSDi hozzászólására (») Ápr 27, 2019 /
 
Igen , bocs Mellékeltem a forráskódot. MikroC-ben van.

Villogtatja az RB0 - ás lábat , ahogy beállítottam, szóval fut a program, de a serial adaton olyan mintha rossz lenne a baudrate.

5V ról hajtom a PIC-et , USB/serial-t kötöttem rá egy az egyben.
A hozzászólás módosítva: Ápr 27, 2019

MyProject.c
    
(#) pipi válasza lastewer hozzászólására (») Ápr 27, 2019 / 1
 
Terminalprogiban játszva a baud rate beállításokkal nem lehet kitalálni?
(#) eSDi válasza lastewer hozzászólására (») Ápr 27, 2019 / 1
 
MikroC, így sok minden nem derül ki. Esetleg beleszól a megszakítás, nem tudni, hogy lekezeli-e a Library.
(#) lastewer válasza pipi hozzászólására (») Ápr 27, 2019 /
 
De , 19200 - ra állítottam a terminált és jó lett. Érdekes, hogy programban viszont 9600 van.
A hozzászólás módosítva: Ápr 27, 2019
(#) lastewer válasza superuser hozzászólására (») Ápr 27, 2019 /
 
Ehhez a PIChez kellene szintillesztő? A vezeték egy sima próbapaneles 10 cm - es.
(#) superuser válasza lastewer hozzászólására (») Ápr 27, 2019 /
 
Közben töröltem a hozzászólást, mert látom, hogy 19.200-on megy.
Gondolom szoftveres ok, valahol rosszul van definiálva az órajel, vagy ilyesmi.
Hogy kell-e jelszint illesztő, az a jelszintek függvénye.
Ha pl. 3.3V-on megy a PIC és egy USB-TTL soros átalakítót használsz, akkor jellemzően nem kell.
(#) lastewer válasza superuser hozzászólására (») Ápr 27, 2019 /
 
5V-on megy a pic és USB-TTL átalakítót használok.
(#) eSDi válasza superuser hozzászólására (») Ápr 27, 2019 /
 
A súgó azt írja, hogy a hardveres UART-ot használja, csak sajnos nem látjuk mi megy félre.
(#) superuser válasza eSDi hozzászólására (») Ápr 27, 2019 /
 
Ellenőrizd a quartz-ot is, hogy valóban 4.000 000 van-e ráírva.
A 4MHz-hez HS oszcillátor beállítás tartozik a konfigurációs biteknél.
MikroC-t nem ismerem, de a kontroller kétszer akkora sebességen megy, mint amennyihez a soros port be van állítva.
Timert nézd meg, hogy az az elvárt sebességgel megy-e, vagy az is duplával.
(#) eSDi válasza lastewer hozzászólására (») Ápr 27, 2019 /
 
Ha esetleg be tudnád állítani az init után a következő regisztereket ebben a sorrendben, talán át lehetne verni:
RCSTA-ban az SPEN=0
TXSTA-ban a BRGH=1
SPBRG=25
RCSTA-ban az SPEN=1
(#) lastewer válasza superuser hozzászólására (») Ápr 27, 2019 /
 
Nincs ráírva csak ez: yic80000h9

De erre semmi találatot nem kapok a googleban.
(#) eSDi válasza lastewer hozzászólására (») Ápr 27, 2019 /
 
Ez így ránézésre 8MHz-nek jó lesz. Kell ott lennie egy pontnak is a 8-as után.
A hozzászólás módosítva: Ápr 27, 2019
Következő: »»   1082 / 1203
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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