You are here

Microchip XC8-as C compiler ledvillogtatós példaprogram kéne

10 posts / 0 new
Last post
SzG
SzG picture

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

File attachment: 
Comments
ty
ty picture

- 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.

File csatolás: 

0

SzG
SzG picture

Szerintem is a konfiggal lesz probléma, de nem jövök rá, hogy micsoda.
A HEX-et csatoltam.

File csatolás: 

0

Oszi11
Oszi11 picture

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

ty
ty picture

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)

File csatolás: 

0

SzG
SzG picture

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

Oszi11
Oszi11 picture

Szia!

Az OSCCON regiszterben az IRCF bitekkel tudod kiválasztani a frekvenciát!


Üdv,
Oszi

File csatolás: 

0

SzG
SzG picture

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

Oszi11
Oszi11 picture

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

SzG
SzG picture

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!

File csatolás: 

0

Sponsored links