Kezdőoldal » Számítástechnika » Programozás » Miért nem azt csinálja a PIC,...

Miért nem azt csinálja a PIC, amit "mondok" neki?

Figyelt kérdés

Most kezdtem foglalkozni a PIC-el.


beszerzett cuccok:


-PICKIT3 klón. Annyira klón, hogy ugyanaz a tok, ugyanolyan festés, ugyanazok a kábelek, annyi az eltérés, hogy nincs rajta a micrchip logo.

-PIC16F877A-I/P (a biztonság kedvéért 3 darab)

-Próbapanel

-20MHz kvarc oszcillátorok


-MikroC PRO

-PICKIT3 szoftver


Megérkezett minden, amit rendeltem. Kicsomagoltam, majd gyorsteszt. PIC a próbapanelra. PICKIT3 tüskés kábele is a panelra. Összekötve a megfelelő lábakkal (datasheet alapján). Kristály a megfelelő lábakra, ahogy kell. A D portra 8 led, ellenálláson keresztül. MikroC-be egy nagyon rövid tesztprogram, hogy minden jó-e. Megfelelő pic kiválasztva, watchdog off, frekvencia beállítva.


TRISD=0;

PORTD=255;


lefordítom, a HEX-et importálom a PICKIT3 szoftverébe, majd ráíratom vele a PIC-re. Adok neki 5 voltot, minden oké, világít az összes led. Ezzel félre is raktam az egész cuccot. Másnap előszedtem, a megépített nyák-omba szerettem volna használni a felprogramozás után. Egy régebbi kész HEX került átalakításra, egy másik PIC-ből. Megtörtént a felprogramozás, PIC a nyák-ba. táp rá, de nem történik semmi. Hibakeresés. Először vizuális, a lábak megfelelő helyre vannak-e kötve. Program ellenőrzés. Elírásnál a fordító sír, hogy nem ért valamit, újbóli fordításnál sem tette. Amennyiben a programom hibás úgy akkor is csinálnia kellene valamit, de semmit nem csinál.

Vissza az alapokhoz. A fent leírt kétsoros program működik. Nézzünk egy végtelen ciklust.


TRISD=0;

while(1) {

PORTD=0b10000000;

Delay_ms(300);

PORTD=0b00000001;

Delay_ms(300);

}


Ez a program már nem megy. Azt kellene csinálnia, hogy felváltva villog az első és az utolsó led. De az utolsó előtti világít O.o. Átírtam a Delay_ms(330); sort __delay_ms(300); -ra, hátha az a baja, de ugyanaz a helyzet.

ugyanez a program delay nélkül (ilyenkor ugye mindkét led világít, mert nincs delay) az megy. WTF???


Oké, Hagyom a MikroC-t, nézzük az MPLAB-ot, XC8-al. Kb ugyanez.


Mi lehet ez????



2017. okt. 21. 14:26
 1/3 anonim ***** válasza:

Egyreszt a PORTD-be 7 bitet irsz, ezert az utolso elotti led vilagit.


Illetve laboron mi az optimalizacio kikapcsolasaval kezdtunk, mert a vegtelen ciklussal okozhat anomaliakat.

2017. okt. 21. 14:54
Hasznos számodra ez a válasz?
 2/3 A kérdező kommentje:

elnézést, elírtam azt a két sort, viszont a C programban 8 bit van.


#include <stdio.h>

#include <stdlib.h>

#include <xc.h>

#define _XTAL_FREQ 18432000


#pragma config FOSC = HS

#pragma config WDTE = OFF

#pragma config PWRTE = OFF

#pragma config BOREN = OFF

#pragma config LVP = ON

#pragma config CPD = OFF

#pragma config WRT = OFF

#pragma config CP = OFF


Ezt MPLAB-nál próbáltam, ezután jön a fenti program.

ugyanaz az eredmény (itt már cserélt kristály van, azért 18,4 Mhz a frekvencia).

2017. okt. 21. 15:04
 3/3 anonim válasza:

Az egész kódot egybe látva egyszerűbb lenne a hibakeresés.


Az AD konvertereket, komparátorokat tiltottad? Nekem az is okozott ilyen problémat a 877-nél. Hogy nem villog, ott valami oszcillátor baj lehet. Biztos jó helyre kötötted? 22 pF-os kondenzátor rajta van a kristályon?

2017. dec. 30. 07:53
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!