Zjednodušenie kódu PIC12F629 HEARTBEAT

Všetkým prajem dobrý deň. Potrebujem pomoc s PIC12F629 a zjednodušiť kód. Chcem urobiť efekt HEARTBEAT v MPLab-e a s jazykom C. Urobil som kód, no zaberá mi až 17% pamäte… Viete ho niekto napísať jednoduchšie, poprípade aj vysvetliť, ktorá inštrukcia čo robí? Prosím Iba jazyk C


#include <htc.h> 
#include <pic12f629.h> 
#include <stdio.h> 
#define _XTAL_FREQ 4000000 
#pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN) 
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) 
#pragma config PWRTE = OFF // Power-Up Timer Enable bit (PWRT disabled) 
#pragma config MCLRE = OFF // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD) 
#pragma config BOREN = ON // Brown-out Detect Enable bit (BOD enabled) 
#pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled) 
#pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) 

void delay ( int a) 
	{ 
		for(int x=0;x<a;x++) 
			{ 
				NOP(); 
			} 
	} 


int a,b; 

void main(void) 
{ 
	TRISIObits.TRISIO2=0; 				//GP2 výstup 
	GPIObits.GPIO2=0; 					//Reset GP2

while(1) 								//nekonečná slučka 
	{ 
		a=100; 						//pociatocna hodnota premennej
	
		for(b=0;b<100;b++) 				// 100x opakuj cyklus
			{ 
				GP2=0; 
				delay(a);
				GP2=1; 
				delay(b); 
				a--; 					//odrataj 1 od A
			}
		
		for(b=100;b>0;b--) 				//100x opakuj cyklus
			{ 
				GP2=0; 
				delay(a); 
				GP2=1; 
				delay(b); 
				a++; 				//prirataj 1 k A
			} 
	} 
}

Ďakujem za reakcie

místo intu pro A a B použít unsigned char. Pokud nebudeš používat větší konstanty jak 255.

Jinak, úplně nejlepší by bylo si to napsat v assembleru, kor pro tenhle mikro pic.

V první řadě bych se ptal jestli vůbec ví co dělá, tedy že se jedná o PWM atd…

Billy Bob Bean => Dal som tam char a trochu to upravil, dostal som sa na hranicu 9%, čo sa mi stále zdá na tak jednoduchý kód priveľa.

Mahoney=> presne o to sa mi jedná, urobiť PWM na chipe, ktorý nedisponuje PR2 registrom, ten podľa všetkého, čo som sa dočítal, treba na originál funkciu PWM… Dá sa PWM na tomto PICe urobiť aj inak ako som napísal ja?

Dá, ale přesně jak píše Billy - v assembleru. A nebo vzít nějaký PIC, který má HW PWM (např. 12F683, 12F1501, 12F1572… Ty poslední dva jmenované už jsou C optimized.

Jinak ještě prosímtě - kód patří do tagu CODE, takhle rozsypané to odmítám studovat (a asi nebudu sám).

A ještě jestli se dobře dívám, tak tam pracuješ pouze s proměnnou “b” a “a” nikde neměníš, zřejmě proto nemůžeš docílit toho plnění které by sis představoval. Při soft PWM musíš “cvičit” s oběma čekačkama najednou (v nepřímé úměře samozřejmě. V assembleru se na to používá COMF instrukce).

Ospravedlňujem sa za začiatočnícku chybu. Už som to opravil, dúfam, že je to čitateľné. Mne to PWM funguje, aspoň podľa LEDky. Prikladám video z YT youtu.be/tc_tYP23oN8

Premenné by mali pracovať obe, inak by mi LEDka plynulo nemenila intenzitu alebo sa mýlim?

Moja počiatočná otázka bola, či je v Cčku možné pri tomto PICe napísať môj kód jednoduchšie. Nechcem robiť v assemblery, tomu vôbec nerozumiem.

PIC12F1572 mi prišiel dnes, na tom chcem urobiť MOSFET regulátor na ovládanie otáčok ventilátora, ktorý bude chladiť extruder na tlačiarni. Tam sa potrápim, popravde s tým budem potrebovať naozaj obrovskú pomoc

A ked vyhodis stdio.h tak kolko to zabera?

Aky prekladac mas do Cka? Pokial nieje plna verzia, free ma tu vlastnost ze dokonca kod zvecsuje.

Ak nezabudnem zajtra ti to prelozim a poviem kol o to zabera.

Robím to v MPLab-e, ale ako si spomínal, vo free verzií, nerobím s rým každý deň, tak platená za 800€ by ma asi zabila. Neviem, či treba spomenúť, že v ňom používam XC8 a všetko je to cez Pickit3 nahrávané, ale to sú asi zbytočné informácie…

Skúsim vyhodiť stdio.h, ale to asi až v piatok, padol mi systém a mam teraz toho dosť veľa na krku, tak to skôr nestihnem

s int to ma 10,5% data{108} a 17,2 RAM{11}

A s char 6.9% data{71 slov}, 14,1% ram{9 bytes}

res 6.2% 63 slov a 8 bajtov ram ak je vsetko char

Pokud to nemá dělat ještě něco navíc, tak nevidím důvod tam mít navíc načtenou knihovnu htc.h.
Stačí jen nalinkovat xc.h

Hele Billy a to je ten kompilátor takovej shit, že nepozná, že z knihovny nevoláš žádnou funkci a jen tak přilinkuje celou knihovnu? :slight_smile:

Neni, linkuje len to co sa pouzije, ale ked uzivatel omylom nieco pouzije je lepsie to tam nemat uvedene.

Mě by jen zajímalo, jestli celé tohle vlákno lze považovat za zahájení sezóny elektroniků a programátorů a jestli se teď tedy bude víc makat a bude tu živěji :smiley:

Všetkým pekne ďakujem za ochotu a reakcie, myslím, že menšie to už urobiť nemôžem :slight_smile: