Sziasztok!
A Microchip XC8-as C compiler ledvillogtatós példaprogram kéne. A panel a PICkit2-es programozó mellé gyárilag adott PIC16F887-et tartalmazó próbapanel, vagyis ez. Datasheetje.
A felprogramozás biztos hogy jól működik a "pk2cmd"-vel, mert a Blink.HEX fájl szépen villogtatja a RD0-ledet.
Nekem egy C kód kéne. Próbálkozásaim eddig nem jártak sikerrel, valószínűleg az órajel beállítás nem jó valamiért. A panel eredetileg nem tartalmaz kvarcot, így belső órajelforrást próbáltam beállítani. Most raktam a panelra egy 10MHz-es kvarcot, de azzal sem megy.
Saját kódot csatoltam. Van valakinek ötlete, hogy mi nem jó a kódban?
Ezzel a paranccsal fordítok:
xc8 --chip=16F887 --output=intel ledblink.c
kösz
- Vedd le a quartzot és használd a gyári konfig beállítást.
- Az a delay rutin valószínűleg csak bájtos értékkel hívható...
- Ha végképp nem boldogulsz esetleg töltsd fel a .hex-et amit ebből a kódból fordítottál.
Nem használok XC8-at, ránézésre a kód működhetne, valószínűleg a config ami nem jó.
ps.: keress egy help fájlt, a delay rutin nem fog pontosan működni ha nem definiálod a SYSTEM_CLOCK értékét valamilyen formában.
0
Szerintem is a konfiggal lesz probléma, de nem jövök rá, hogy micsoda.
A HEX-et csatoltam.
0
Szia!
A Watchdog timer-t miért engedélyezted ha nem is foglalkozol vele? A timert incializálni és rendszeresen törölni kell (clrwdt) különben mindig reseteli a vezérlőt!
A másik dolog a leírás szerint nincsen kvarc beépítve a demópanelre! Neked ugye rajta van ha bekapcsoltad?
Üdv,
Oszi
0
Vesd össze a két configot amit feltöltöttem. Közük sincsen egymáshoz.
Ez első a gyári, a második amit az XC-vel fordítottál.
Ez lenne a gyári config, nem tudom miért nem ezt használod...
#pragma config FOSC = INTRC_NOCLKOUT // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)
#pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF //
#pragma config CP = OFF //
#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR enabled)
#pragma config IESO = OFF //
#pragma config FCMEN = OFF //
#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)
#pragma config BOR4V = BOR21V //
#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
0
Kösz a segítséget! Ezzel a konfiggal már működik!
A belső oszcillátor frekvenciáját hogyan tudom állítani?
0
Szia!
Az OSCCON regiszterben az IRCF bitekkel tudod kiválasztani a frekvenciát!
Üdv,
Oszi
0
Köszi!
TRISD0 = 0; //RD0 as Output PIN
TRISD1 = 1; //RD1 as input PIN
while(1)
{
RD0 = RD1;
}
Ez a kis kód működik, ha az RD1-ről olvasok be. A panelon az RB0-án van egy nyomógomb. Ha az RB0-ról akarok beolvasni, az nem megy. Kimértem a pin-t, és a nyomógomb működik.
Már arra is gondoltam, hogy egyszerűen tönkrement a pin.
0
Szia!
Nem menet tökre csak alapértelmezetten analóg bemenet, inicializáláskor át kell kapcsolni digitálisra ANS12=0 az ANSELH registerben! El kell olvasni az adatlapot figyelmesen, mert tud meglepetést okozni!
Üdv,
Oszi
0
Oké, de azon a lábon nincs analóg funkció a datasheet szerint.
RB0/INT0 a láb neve.
Közben kipróbáltam, és tényleg ez volt a probléma.
Kösz!
0