Miért nem azt csinálja a PIC, amit "mondok" neki?
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????
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.
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).
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?
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!