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